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