敏捷應用生命週期管理

發表於2012-06-19

英文原文:Agile Application Lifecycle Management (ALM),翻譯:Elaine.Ye

敏捷應用生命週期管理(Agile Application Lifecycle Management,Agile ALM)正得到越來越大的推動,記得我在撰寫《Agile ALM》一書的書稿時,幾乎沒有人會想到使用敏捷來豐富ALM的做法,或是找出一種有實效的ALM做法,越來越多的工具廠商發現,他們的工具在貼上敏捷工具甚至是敏捷ALM工具的標籤之後好賣多了。但,敏捷ALM(Agile ALM)指的是什麼呢?我的看法是,ALM把一些技術性的和功能性的元素綜合在一起,為常見的專案活動和階段提供了一種全面的做法,解決了構建、配置、部署、釋出、測試、質量、整合和需求管理等方面的問題,參見圖1。憑藉其跨學科的做法,Agile ALM整合了專案的角色、專案的階段和各種工件。Agile ALM使用敏捷的價值觀和策略來充實了ALM,ALM的敏捷做法提升了產品的質量,縮短了上市時間,且有利於開發者以一種更加愉悅的心情來工作。我對Agile ALM的定義可歸結為,一些靈活的、對改變持開發態度的、高質量的過程和工具鏈。這是其中的一種ALM可藉助來提供敏捷結構的方式。

敏捷應用生命週期管理

圖1. ALM處理不同學科和不同開發階段的問題

 Agile ALM的一些基礎方面並非是全新的,您應該要尊重過去幾十年來的所有不同努力,認真研究所有結果,從中找出一個目前最適用的解決方案。在我看來,ALM是從軟體配置管理(software configuration management,SCM)演變過來的,其相應地也要紮根於基本版本控制。在選擇最適於給定任務的工具之前,您應該先定義自己的過程和需求。

個體和互動勝過過程和工具

最重要的是,敏捷ALM是一門學科和一種精神態度。使用敏捷ALM首先應從價值觀和人,以及其背後的概念入手,敏捷ALM工具就是催生出敏捷過程的ALM工具。

Agile ALM工具必須能夠增加系統的價值,促進相關利益者的合作。在我看來,Agile ALM工具鏈必須要實現 Agile ALM的一些構建塊,比如說持續整合(包括了持續檢查和持續部署)、功能/技術釋出、利益相關者的關注(和協作開發)以及基於任務的開發等。許多專案非常適用於某些個單方面有著最佳優勢的工具的一個編排,把輕量級的、可配置的工具整合成靈活的工具鏈,這種做法最終會得到恰好提供瞭解決給定任務所需功能的一個工具混搭。

Agile ALM工具應該具備一種開放式的架構,其支援進一步加入一些工具或是功能。對輕量級工具鏈的依託可大大提高靈活性,因為您可以輕易地替換掉整體基礎設施的一些小單元,但又不會給基礎設施的其他方面帶來問題。現在我們來討論敏捷ALM的一些重要的構建塊,我們從基於任務的開發開始。

基於任務的開發

在使用基於任務的做法時,任務是互動的單元和工作的基礎。基於任務的開發是這樣的一種技術,其以一種可跟蹤的方式來把工作專案連結到一組特定的以完成工作專案為目標的變更上,一個例子用例可能會是這樣:您正在努力完成一項任務,該項任務列在您的籤派系統(ticket system)中,其有著唯一的標示符AGILEALM-9。您的IDE(例如安裝了Mylyn外掛的Eclipse)與籤派系統(比如說JIRA)整合在一起,CI(Continuous Integration)伺服器Jenkins與JIRA整合在一起,使用版本控制系統(VCS)和元件儲存庫(比如說Artifactory)來透明化工作的進展,以及工件和工作專案之間的依賴,您可以驅動階段構建來把釋出版本部署到一些更高階段的環境中,而又無需重構建釋出版本(“一次構建,隨處執行”)。圖2展示了Jenkins與其他工具的整合方式,Jenkins的一個構建結果頁面的放大顯示,該頁面很容易導航至VCS(檢視底層的變更),導航至籤派系統(處理任務方面的事務),以及導航至元件儲存庫(處理二進位制檔案方面的事務)。

敏捷應用生命週期管理

圖2. 整合了VCS、籤派系統和元件儲存庫的CI伺服器Jenkins

協作開發

軟體開發就是實現需求,需求是軟體釋出的核心單元和驅動器。單元測試(驗證正確的事物是以正確方式開發出來的)和驗收測試(驗證正確的事物已被開發出來)一類的方法是早就存在了的。但在以前,這些方法往往是以一種孤立或是單純的方式加以管理。而實際上,一種全面、務實的解決方案才是更加應該考慮的,這種解決方案把重點投放在需求本身之上,時刻為所有利益相關者打算。您可以使用一些專用的、輕量級的工具來編寫驗收程式碼,比如說Fit這個工具;或者使用一些特定的語言。Scala和Groovy這兩種語言都提供了一些很有意思的功能,這些功能設定了一個多語言生態系統,通過提供涉及特殊用途語言的解決方案來利用現有的平臺。您可以使用Scala和Groovy編寫測試,這有助於跨越一些壁壘:

1. 專案階段和專案活動之間的壁壘(因為編碼和測試之間的合作更為密切)

2. 各種型別的工件之間的壁壘(因為程式碼和執行規範都是在同一個統一的基礎設施上編寫的)

3. 專案角色之間的壁壘(因為測試是以協作方式來編寫的,其機制使用的術語與問題域的相近)

4. 工具之間的壁壘(因為使用了相同的工具來進行程式設計和測試)

下面這個簡單的例子展示瞭如何使用Scala和specs2庫來編寫驗收測試,以便你對這一做法有一個初步印象。

程式碼定義的是方法列表的一些規格段(specification fragment),內容是簡單的文字、例子或是格式段(p的作用是增加一個空行並開始一個新程式碼塊),段由^字元來隔開和連結,欲瞭解更多關於specs2的內容,請參閱specs2.org

釋出管理

釋出管理包括了根據定義的過程來生成軟體工件併發布這些工件,釋出管理可細分成一個功能性的部分和一個技術性的部分。若要成功交付軟體,這兩個組成部分都要受到重視,而且應該彼此整合在一起。自動化和持續整合是軟體釋出和交付過程的至關重要的兩個方面。

功能釋出管理

功能釋出管理包括了高質量地分揀客戶的需求、指定釋出的需求和向客戶交付功能。敏捷實踐往往會被用來支援這一過程,許多專案通過使用管理模板Scrum達成了很好的效果。雖然只是定了一小組規則,但Scrum促進了原則的遵守並視覺化了(軟體和過程中的)缺陷。可惜Scrum過於抽象,只限於“紙上談兵”。您必須要實現Scrum,再把它用到軟體工程中。例如,在某個微觀層面上,在某個Scrum版本內部,一些實現做法可能會包括了一些特殊開發階段之間的區別:在釋出階段,您可能會考慮使用一個凍結區來關閉開發階段,凍結區只允許開發者進行錯誤修正方面的工作,不考慮新功能的實現。另一種有效做法是使用程式碼凍結時間間隔來完成和發行最終的版本。

技術釋出管理

技術釋出包括了構建軟體和向使用者提供最終的產品,構建管理(包括了編譯指令碼、打包和分發元件)是Agile ALM必不可少的組成部分。技術釋出管理描述了這樣的一些活動:識別配置項、記錄和審計需求和配置項的變更,以及整合和交付實現。在軟體工程中,變更會經常發生而非偶然出現。因為需求會發生變化,故保持需求及其實現之間的同步是非常重要的。功能和技術釋出之間可能會存在的差距應該被彌合,VCS鉤子一類的策略有助於嫁接起釋出管理的這兩個組成部分。

持續整合(包括持續檢查和持續部署)

自動化手工步驟意指以一種客觀的並且是可再現的方式來交付結果。

自動化最容易出錯、最經常重複的和最耗時的活動是絕對必要的,持續整合(CI,Continuous Integration)就是構建、測試和釋出過程的自動化,其目標是整合同事的活動和其他人產出的工作專案。這可催生出一個構建的生態環境,在這一環境中,新程式碼的提交會直接觸發一個包括了編譯、技術測試、審計、打包、功能測試和部署在內的持續構建。所有不同的工件型別、平臺和語言,比如說Java(Groovy、Scala……)、.NET、PHP和Cobol等,都應該使用一個統一的基礎設施來進行整合,參見圖3。若各種語言/平臺沒有各自相應的本地化構建系統存在,則可使用CI場中非本地化的構建技術來這些工件包含進來。

敏捷應用生命週期管理

圖3. 一個在統一基礎設施上整合了不同工件型別的完善的CI生態系統

在一個持續整合過程中,構建報告和通知方法是要有的,資訊要被共享和彙總。彙總資訊意味著整合工具鏈橫跨了整個異構的生態系統,這使得利益相關者可以聚焦“放大”需要了解的地方,獲得更多的資訊,從這些資訊中得出一些結論。

這方面的一些例子是:給定一次具體的構建,您可以追溯出VCS中的底層變化,或者:收集元件儲存庫中所有語義上屬於同一類的二進位制產出,目的是把它們作為一個集合來在上面執行某些操作。

結束語

Agile ALM跨越了軟體工程中的多個學科,Agile ALM關乎人和策略,以及使用輕量級的工具鏈來實現這些策略。Agile ALM有助有提供敏捷結構,有助於以一種堅定、務實的方式來逐步實現ALM。使用一種敏捷的ALM做法,您將贏來更快的勝利和更好的結果。可以談及的內容還有很多,但我希望本文能夠給您建立起這樣一個初始印象,即什麼是Agile ALM,以及哪些是我所著的“Agile ALM”一書會更加深入探討的內容。

參考資料

1. Agile ALM

2. huettermann.net——作者的網站

Michael Huettermann是一位自由開發者、架構師、教練、作家,以及是一位Java/JEE、ALM/SCM和敏捷軟體開發方面的導師。

附件        大小

agilealm-phases.gif       14.68 KB

agilealm-jenkins.png     75.11 KB種ALM可藉助來提供敏捷結構的方式。

 

 

 

相關文章