蔡 泉
( 沈陽東軟智睿放療技術(shù)有限公司,遼寧 沈陽110167)
近二十年來,對于軟件開發(fā)項目的從業(yè)人員來說,CMMI 和敏捷可以說是必須要了解的概念。 CMMI 全稱是Capability Maturity Model Integration,即軟件能力成熟度模型集成,是由美國國防部與卡內(nèi)基- 梅隆大學(xué)和美國國防工業(yè)協(xié)會共同開發(fā)和研制的,其目的是幫助軟件企業(yè)對軟件工程過程進行管理和改進,增強開發(fā)與改進能力,從而能按時地、不超預(yù)算地開發(fā)出高質(zhì)量的軟件。 早期國內(nèi)軟件企業(yè)剛接觸CMMI 時多用來指導(dǎo)瀑布型軟件開發(fā)項目,而隨著互聯(lián)網(wǎng)行業(yè)的崛起,敏捷開發(fā)這種側(cè)重于構(gòu)建團隊級能力,以人為核心、迭代、循序漸進的開發(fā)方法越來越受到軟件項目從業(yè)人員的歡迎。
毫無疑問,CMMI 和敏捷開發(fā)是存在很多差異的。 CMMI 把軟件開發(fā)組織的能力成熟度分為了5 個等級, 22 個過程域,通過開發(fā)過程覆蓋的過程域來描述織的成熟度級別達到了什么等級,CMMI 注重的是過程改進和組織成熟度。 而對于近年來的軟件開發(fā)項目而言,市場風(fēng)向轉(zhuǎn)變很快,需要及時快速的、階段性的交付產(chǎn)品,這正是敏捷開發(fā)的特性,也是敏捷越來越流行的原因所在。 另一方面,CMMI 中證明滿足過程域的最佳實踐,是從制品和訪談兩個維度進行考察, 有證據(jù)即可,并沒有對證據(jù)的數(shù)量和格式有何具體的要求。 而敏捷則通過價值觀、開發(fā)原則、具體實踐等明確說明了怎樣更快、更好的交付高質(zhì)量的產(chǎn)品。 綜上所述,CMMI 模告訴我們的是要做什么,而敏捷告訴我們的是要怎么做。
雖然差異明顯,但是敏捷和CMMI 并不是對立的。從本質(zhì)上來講,CMMI 和敏捷的最終目標是一致的,都是人們?yōu)榱私鉀Q在軟件生產(chǎn)過程中出現(xiàn)的質(zhì)量低下、進度延遲、預(yù)算超支等問題,而產(chǎn)生的標準或過程改進的模型或方法實踐。 做什么和怎么做并不矛盾,比如你知道運動減肥的道理,可以選擇慢跑也可以選擇瑜伽,但是不影響運動減肥的理論正確。
在筆者多年的軟件開發(fā)經(jīng)驗中,經(jīng)常遇到有人問“ 如何解決敏捷與CMMI 的沖突”,筆者的回答是,請思考一下,存在沖突是不是有哪里做的不對?CMMI 是否被過度解釋了,敏捷是否被過度簡化了?CMMI 過程域的滿足需要有證據(jù),由于實踐中大家對CMMI 的誤解,很多組織過度準備了證據(jù)。 同時,也不是使用了Scrum、Jira 等敏捷工具, 每天組織一下站會就可以稱之為敏捷了。 我們應(yīng)該以保證項目進度、符合預(yù)算,高質(zhì)量交付項目產(chǎn)品,提高組織的開發(fā)能力為最終目標去使用CMMI 和敏捷思想,它們只是渡河達到彼岸的舟船。
隨著軟件行業(yè)的發(fā)展,需要快速迭代的產(chǎn)品,越來越受到市場的青睞, 很多前沿的互聯(lián)網(wǎng)企業(yè)將敏捷應(yīng)用于開發(fā)過程,同時很多從業(yè)人員也都在思考如何提高敏捷性能。 筆者在多年的軟件開發(fā)經(jīng)驗中經(jīng)常接觸敏捷和CMMI 的概念, 那么在敏捷中應(yīng)用CMMI 的思想來提高敏捷性能是否是一種可行的手段呢?筆者認為,這是完全可行的。其實敏捷與CMMI 存在著很多共性的東西,例如對于配置管理的高要求,提倡頭腦風(fēng)暴等。
下面我們著重從幾方面論述一下敏捷中融合CMMI 思想并提高敏捷性能的思路:
CMMI 強調(diào)通過規(guī)范的流程,將人、技術(shù)、工具集成在一起,從而產(chǎn)生好的結(jié)果,而敏捷開發(fā)宣言中明確提到,能夠工作的軟件勝過完備的文檔。 因此,人們普遍認為CMMI 重視流程,重視文檔,而敏捷開發(fā)輕流程,輕文檔。 其實很多項目的CMMI 實踐中, 往往迷失了目標, 為了規(guī)范而規(guī)范, 恰恰忘了CMMI 的OPD 組織級過程定義過程域中的一個重要活動就是裁剪過程。而敏捷開發(fā)的輕流程、輕文檔并不是沒有流程、沒有文檔,軟件開發(fā)組織完全可以通過大量的敏捷開發(fā)項目實踐,總結(jié)出合理的流程, 針對具體的敏捷開發(fā)項目, 融合CMMI 的裁剪過程思想,靈活的配置具體項目的具體流程,編寫剛剛好的文檔即可。這樣通過組織級的經(jīng)驗總結(jié),為以后新的敏捷開發(fā)項目進行指導(dǎo),達到提高敏捷開發(fā)性能的目的。
CMMI 在項目初期即要引入風(fēng)險控制, 有專門的RSKM 風(fēng)險管理過程域?qū)︼L(fēng)險控制進行描述。 敏捷開發(fā)同樣會在項目初期使用頭腦風(fēng)暴的方法預(yù)估風(fēng)險。 那么我們在敏捷項目中,融合CMMI 思想, 使用風(fēng)險矩陣跟蹤等方式進行風(fēng)險控制不正是提高敏捷性能的好方案么。 當然敏捷并不需要完全照搬CMMI,CMMI 強調(diào)項目初期即要盡量識別出全部風(fēng)險并進行跟蹤,而敏捷開發(fā)的一大特色就是擁抱變化,強調(diào)即使項目末期仍可引入變化,所以敏捷不必追求窮盡風(fēng)險,我們要借鑒的是先進思想,而不是思想僵化的固定流程。
CMMI 有REQM 需求管理、RD 需求開發(fā)兩個過程域, 強調(diào)在整個項目周期中的需求跟蹤。 而敏捷開發(fā)宣言中,雖然沒有明確提到需求跟蹤,但其實常見的敏捷開發(fā)工具都引入了需求跟蹤的思想。 例如對于迭代前通過對Backlog、Story 的定義,通過整個項目周期對Backlog、Story 的跟蹤來完成整體項目需求跟蹤的目標;例如每個迭代的目標制定、任務(wù)拆解,迭代中對任務(wù)進度和燃盡圖的看板展示,這也可以認為是每次迭代的“ 需求”理解和跟蹤的實際體現(xiàn)。
CMMI 中存在VAL 確認過程域和VER 驗證過程域,確認是為了證明所提供的產(chǎn)品符合預(yù)期的使用需求,而驗證關(guān)注的則是工作產(chǎn)品是否恰當?shù)胤从沉四切┍恢付说男枨蟆?簡單的說,驗證確保“ 你把事做對了”,而確認確?!?你做了對的事”。 在敏捷中,每次迭代結(jié)束的成員成果展示和驗收,正是集體進行的驗證環(huán)節(jié),對開發(fā)人員的工作成果進行驗收。 如果我們進一步引入CMMI 思想,在迭代前的目標制定、任務(wù)拆解時,進行確認過程,則能更加提高工作效率,減少返工率,保證項目進度和提高產(chǎn)品質(zhì)量。
敏捷開發(fā)中,每次迭代結(jié)束的總結(jié)會,既要展示和驗收每個成員的工作成果,也要總結(jié)該次迭代存在的問題,為之后的迭代總結(jié)經(jīng)驗,提供改進建議。這與CMMI 中4、5 級成熟度的持續(xù)改進要求不謀而合, 同時CMMI 中也有MA 測量與分析過程域用于經(jīng)驗數(shù)據(jù)的分析與總結(jié)。如果我們能夠融合CMMI 思想,在敏捷中,記錄和總結(jié)經(jīng)驗數(shù)據(jù),并上升為組織級經(jīng)驗,在更好的服務(wù)于該敏捷項目外,還可以用于組織級經(jīng)驗積累并指導(dǎo)組織內(nèi)其他敏捷項目的開發(fā)。
綜上所述, 本文首先明確了CMMI 和敏捷并不是軟件開發(fā)項目中兩種對立的模型,只是概念抽象層次的不同,而在改善軟件生產(chǎn)過程的最終目標上,它們是殊途同歸的。 之后提出了在敏捷中融合CMMI 思想用以提高敏捷性能的幾點思路, 希望能對讀者有所啟發(fā),今后在軟件開發(fā)項目中更好的開展工作。