并不久以前,敏捷開發方法,例如極限編程(eXtreme Programming,XP)、動態系統開發方法(Dynamic Systems Development Method,DSDM),或 Scrum 作為新的且稍微有爭議的軟件開發項目的交付方法被引入。如今,敏捷開發實踐,例如迭代開發、測試驅動的開發,和持續的集成成為了普遍現象,并且人們已經接受并采用它們作為另一種軟件開發的方法。不論您的看法或經驗是什么,您不能否認的是,敏捷開發項目可以并且已經證明能夠成功,準時,并按照預算交付功能。 1
本文討論了敏捷開發的具體方面 —— 敏捷軟件配置管理,或簡稱“敏捷 SCM”的概念,一個精心設計的輕型 SCM,可以由軟件開發項目使用和實踐敏捷開發方法。作為此討論的一部分,我還將關注企業級 SCM 工具集,例如 IBM Rational SCM 工具集,能夠如何實現,以支持敏捷項目。
敏捷開發
大多數敏捷開發方法所共用的方法是讓用戶或客戶直接參與并與之交流,并且在頻繁的,短期的迭代(典型的為二到十二個星期)中進行功能開發。典型的是,在每個迭代的開始,敏捷團隊會與客戶商談來確定新的特性或變更請求。這些由開發人員進行估計,并且隨后,由客戶為下一次迭代設置優先級,如圖 1 中所示。任何還沒有在迭代中實現的特性或變更請求將與所有新的請求一起保留下來,并且由客戶為下一次迭代重新設定優先級。允許開發人員致力于當前迭代的請求,或者在必要時重構并簡化現存的代碼。這樣做的意圖是,保持設計的簡單,并且防止不必要的特性膨脹。代碼還是不斷地集成的,并頻繁地以很小的單位進行實現、測試及提交,這可以利用在提交時刻調用的自動化構建過程來檢查集成錯誤。
圖 1:在每個迭代的開始,敏捷團隊會與客戶商談來確定新的特性或變更請求。這些由開發人員進行估計,并且隨后,由客戶為下一次迭代設置優先級。
如同所有軟件開發過程,敏捷開發方法需要一個基于核心及支持團隊的環境,一些在傳統上稱為軟件配置管理,或 SCM 的東西。不幸的是,一些實踐者將 SCM 看作是一個陳舊的且不必要的控制規程。但這是一個誤解。雖然事實上過多的喝錯誤類型的 SCM 可以扼殺敏捷開發項目,但是敏捷實踐,例如迭代開發和持續集成,如果沒有 SCM 將不會成功這也是事實。
因此,對于這些類型的項目,您需要多少,以及什么類型的 SCM?要回答這些問題,讓我們引入一個相對新的概念:敏捷 SCM(Agile SCM)。
敏捷 SCM
敏捷 SCM 概念本身可能是由 Brad Appleton 和 Stephen Berczuk 在他們的書 Software Configuration Management Patterns 中 和 SCM portal CM Crossroads 中被首次進行了詳細地討論。 2 其中一個觀察是:
...配置管理在利用平衡且有效的 SCM 過程集方面成為關鍵的“支柱”并且也是敏捷開發方法的標準。“敏捷倡導者”著重強調在敏捷項目上應用瘦的及輕型的 配置管理(CM),這將需要更少的打擾/入侵(Grady Booch 所謂的低摩擦),以使敏捷項目能夠成功,而與此同時配置管理有不能太?。ㄓ捎谶^度反應)以至于導致項目失敗。
與我剛才的觀點一致的是,雖然敏捷項目上的 SCM 趨向于更加輕型且更少的可見性,但是 SCM 本身是此類項目的關鍵需求。也許不一致的是,大多數敏捷項目采用入門級或輕型的 SCM 工具,例如 CVS、Subversion,或 BitKeeper —— 這些工具有局限性但基本上擁有滿足敏捷項目的功能。它們也是趨向于較小的影響并且重視開發經驗的工具,而不是對一個嚴格控制過程的遵循。
然而,理論上,您沒有理由不能使用 SCM 工具來支持敏捷開發實踐。您當然不必要使用工具的所有特性,并且大多數工具允許某種程度上的過程定制化,從重量級到輕量級的,以及兩者之間的任意程度。有了企業級工具,例如 IBM Rational ClearCase,一些組織總想使用所有的“突出特性”來定義重量級的 SCM 過程,只因為該工具提供支持。然而,這樣的過程對滿足您項目的需求是不必要的。要找到正確的過程和定制級別,您應該首先確定并定義您的需求,這意味著確切地了解您的開發過程是什么,或者應該是什么,然后確定 SCM 如何提供支持。
一般來說,SCM 是關于開發過程“管理”的,換句話說,SCM 允許項目保留控制措施,而與此同時又能夠允許開發人員在過程中擁有創建的自由度。利用敏捷開發方法,開發人員擁有高度的自由和權利來實現變更。然而,持續集成和測試驅動的開發實踐的一個結果是,它們實際上形成了一個規劃良好的并且幾乎自治的 SCM 方法。例如,在每個代碼變更時,敏捷開發人員必須首先撰寫一個單元測試,然后撰寫足夠的代碼使測試能夠工作,隨后按照需要的重構以完成該變更。提交(或檢入)代碼變更,并且代碼變更的單元測試成為集成套件中的一個部分。通過集成構建機制編譯和執行完整的單元測試套件,可以直接可視化地看到變更的所有副作用 —— 所有找到的問題都能夠立即修改。
在敏捷 SCM 中,該管理模型是日常開發活動的正常部分,并且因此對開發人員是相當透明的。要更詳細地了解此管理模型,讓我們看看 SCM 的一些不同的特征,以及如何典型地實現它們來支持敏捷開發方法:
雖然這些 SCM 特性典型地處在敏捷過程中,但是它們很可能根據特定項目所需的敏捷程度而“調整”。例如,一些項目也許不能構建在每個提交上,取而代之的是計劃一個單個的每日或每夜的集成構建。還有,項目不是獨立存在的,它們通常是組織中許多項目中的一個。企業組織中常?;旌嫌忻艚莺蛡鹘y的計劃驅動的項目,并且因此一個已知的項目可能存在于特定的市場區段中。該企業環境常常是決定選擇哪個 SCM 工具集并且所選工具集需要支持哪些額外的管理方面的最大的因素。
敏捷 SCM 和企業
如果您孤立地看一個單個的敏捷項目,那么它的 SCM 需求幾乎肯定地可以由相當簡單的工具集來滿足。項目本身就可以使用并管理這樣的工具集。然而,與其支持具體項目的工具集相比,大多數大型組織更喜歡將單個的 SCM 工具集標準化,并且圍繞它開發組織過程。這樣做有兩個主要原因:
所有權的總成本常常是主觀問題,因為其包含許多可以計量的方面,例如許可、管理,和支持成本,以及其他主觀方法,例如功能或可伸縮性。企業級工具集,例如 IBM Rational 工具集經常有更高的許可、管理,和支持成本(最初時是當然的),但如果正確地實現了,這些企業工具集可以總體地提高組織能力。它們還擁有已證實的可伸縮性,一個單個的、統一的基礎結構能夠支持大型的,地理上分散的開發組織。如上面所提到的,這類工具的主要危險是試圖使用超過所需的更多功能,這樣會扼殺敏捷項目。需要建立一個組織的 SCM 框架,并且應該以某種可配置的方式來實現,以便滿足不同項目的需求。
最近的行業法規,例如 Sarbanes Oxley、Basel II,和 CFR 21 Part 11 會向 SCM 過程施加繁重的管理成本,特別是關于變更控制的方面。雖然實踐,例如“職責的分離”—— 不允許開發人員部署到實際的環境中 —— 應該實現,但是對敏捷項目嚴格強制實施變更控制會扼殺它們。然而,不滿足這些法規的商業成本是巨大的,因此雖然敏捷項目可能希望避免不必要的管理實踐,但是它們不得不在大多數情況下接受一些額外的開銷。好的消息是,如果實現的正確,那么自動化的 SCM 工具集可以實現大多數的管理方面,使商家維持組織的控制,而又允許單個項目和它們的開發人員致力于有創造性地開發新的軟件功能來解決商業問題。
用 IBM Rational 工具集實現敏捷 SCM
讓我們來考慮,對于使用 IBM Rational 工具集的敏捷項目來說,管理的嚴格性和靈活性之間的平衡如何能夠被達到呢?
一個普遍的誤解是企業級 SCM 工具集 —— 例如 IBM Rational 工具集 —— 不能用于支持實現敏捷開發方法。這些工具集中所提供的重要功能是來支持許多不同的類型和大小的開發環境的,因此,確定該功能的哪個要素應該使用是不容易的,并且存在的一個風險是,對 SCM 過程將進行過渡的設計。目前,在 IBM Rational SCM 工具集中還不存在現成的敏捷 SCM 配置。取而代之,留給工具集實施者的是找到滿足其需求的適當的配置。
好消息是,在 IBM Rational 工具集的支撐下,許多組織已經設法找到了這種配置,并且將成功地實現敏捷開發方法。從觀察來看,有許多這些項目所共用的最佳實踐。雖然這些最佳實踐不是絕對的,但是它們應該足以給您一個框架及實現您自己的敏捷 SCM 過程的起始點。它們可以如下概括為:
圖 3:工作于 Eclipse 環境中的 ClearCase Remote Client
適合于敏捷方法的過程
在本文中,我已經討論了敏捷 SCM 的概念以及如何利用 IBM Rational ClearCase 和 IBM Rational ClearQuest 來實現的最佳實踐。希望該討論可以使您確信,可以找到并實現合適的過程來支持敏捷項目。值得注意的是敏捷 SCM 的實現不是只限于敏捷項目的。有許多項目不認為自己是敏捷的,但已經有類似的 SCM 需求。這些趨向于較小的 IS/IT 項目,類似環境的配置會非常實際。但值得注意的是甚至是較大的項目也可以通過實現更輕量級的且精心設計的 SCM 過程,例如這里所介紹的,來得到一些東西。特別是,構建自動化(包括編譯和測試)、預構建好的二進制碼的執行,和復合發布的實踐可被所有項目采用。
沒有理由說企業級 SCM 工具集,例如 IBM Rational 工具集,不能用于支持敏捷開發方法的實現。關鍵是,定義并實現一個著重于支持,而不是限制,敏捷團隊的敏捷 SCM 過程。對于這樣的團隊,找到正確的管理模型會是一個棘手的訓練,但是一般建議從更開放的過程開始,只在必要時實現限制。反饋也是敏捷開發方法的必要部分。SCM 可以有助于此反饋機制的一種方式是通過自動化的構建和測試(及部署)過程。因此推薦您投入大量時間關注您整個過程中的這個方面。
注釋
1 要了解敏捷和傳統的開發方法相對比的優缺點和成功方面的討論,請參見 Barry Boehm 和 Richard Turner 的優秀書籍,Balancing Agility and Discipline: A Guide for the Perplexed: Addison Wesley 2004 年。另外,要了解關于敏捷開發方法的最新討論和案例研究,您可以訪問并訂閱The Agile Journal(http://www.agilejournal.com)。
2 Stephen P. Berczuk 和 Brad Appleton,Software Configuration Management Patterns. Effective Teamwork, Practical Integration。 Addison Wesley 2003 年。另參見 Brad Appleton et al.,Streamed Lines: Branching Patterns for Parallel Software Development。PLoP Conference:1998 年。http://www.cmcrossroads.com/bradapp/acme/branching/
3 參見 Appleton,1998 年,Op. cit。
4 要了解更多關于如何為敏捷項目設立自動化的構建環境的信息,請參見 Kevin A. Lee,IBM Rational ClearCase, Ant and CruiseControl。The Java Developers Guide to Aclearcase/" target="_blank" >ccelerating and Automating the build process。 Addison Wesley 2006 年。