作為最著名的軟件過(guò)程管理參考模型之一杭抠,能力成熟度模型CMM以及后續(xù)的集成模型CMMI讨勤,該模型在實(shí)踐當(dāng)中經(jīng)常被誤用植酥。Brooks在《沒(méi)有銀彈》一章中提到的——“軟件開(kāi)發(fā)的四個(gè)內(nèi)在特性是: 復(fù)雜性 不一致性 不可見(jiàn)性 可變性”诬滩,由于軟件開(kāi)發(fā)的這些內(nèi)在特性鸯匹,使得描述軟件開(kāi)發(fā)過(guò)程的軟件開(kāi)發(fā)與組織方法也天然帶著一定的抽象性雾消,由此帶來(lái)了很多概念上的誤導(dǎo)和實(shí)踐中的爭(zhēng)論灾搏。
因此在我們探討CMM/CMMI不適合應(yīng)用在當(dāng)前軟件開(kāi)發(fā)中之前,需要先探討什么是軟件過(guò)程立润,什么是軟件過(guò)程管理狂窑,然后討論CMM/CMMI的概念,最后再探討為什么CMM/CMMI不適用于軟件開(kāi)發(fā)桑腮。
軟件過(guò)程的由來(lái)
軟件自誕生開(kāi)始泉哈,其規(guī)模以及在一個(gè)完整計(jì)算機(jī)系統(tǒng)中所占的比重一直呈上升趨勢(shì),類(lèi)似硬件產(chǎn)品的“摩爾定律”破讨,軟件產(chǎn)業(yè)也有一個(gè)類(lèi)似的“摩爾定律”丛晦,即: 類(lèi)似功能的軟件產(chǎn)品的規(guī)模每隔18個(gè)月,其規(guī)模(比如代碼行)會(huì)翻倍提陶,而用戶(hù)獲取該軟件或者服務(wù)的代價(jià)將下降烫沙。“摩爾定律”對(duì)于軟件系統(tǒng)的開(kāi)發(fā)和維護(hù)帶來(lái)很多負(fù)面影響隙笆,為了解決這些問(wèn)題锌蓄,對(duì)軟件開(kāi)發(fā)進(jìn)行有效地組織和管理非常重要升筏,由此誕生并且演化了一系列的所謂軟件過(guò)程與方法。
伴隨著不斷演化的軟件過(guò)程與方法瘸爽,軟件開(kāi)發(fā)的組織與管理當(dāng)中出現(xiàn)了大量方法上的爭(zhēng)議和由此帶來(lái)的各種誤解以及混亂仰冠,其根源在于對(duì)軟件項(xiàng)目管理和軟件過(guò)程管理概念區(qū)分不清晰。所以接下來(lái)我們需要先對(duì)這兩個(gè)概念進(jìn)行解析蝶糯。
軟件項(xiàng)目管理
軟件項(xiàng)目管理被稱(chēng)為規(guī)劃和帶領(lǐng)項(xiàng)目團(tuán)隊(duì)的藝術(shù)和科學(xué)。其管理的對(duì)象是各類(lèi)軟件項(xiàng)目辆沦,具體而言是應(yīng)用方法昼捍、工具、技術(shù)以及人員能力來(lái)完成軟件項(xiàng)目肢扯,實(shí)現(xiàn)項(xiàng)目目標(biāo)的過(guò)程妒茬。可以再細(xì)分為兩種管理視角——軟件過(guò)程與生命周期模型
- 軟件過(guò)程是為了實(shí)現(xiàn)一個(gè)或者多個(gè)事先定義的目標(biāo)而建立起來(lái)的一組實(shí)踐的集合蔚晨。這組實(shí)踐之間往往有一定的先后順序乍钻,作為一個(gè)整體來(lái)實(shí)現(xiàn)事先目標(biāo)。
- 生命周期模型是對(duì)一個(gè)軟件開(kāi)發(fā)過(guò)程的人為劃分铭腕,是軟件開(kāi)發(fā)過(guò)程的主框架银择,是對(duì)軟件開(kāi)發(fā)過(guò)程的一種粗粒度劃分,往往不包括技術(shù)實(shí)踐累舷。
軟件過(guò)程管理
軟件過(guò)程管理的管理對(duì)象是軟件過(guò)程浩考,這種管理的直接目的是為了讓軟件過(guò)程在開(kāi)發(fā)效率、質(zhì)量等方面有著更好性能績(jī)效被盈。如果將軟件項(xiàng)目管理視為傳統(tǒng)行業(yè)的產(chǎn)品生產(chǎn)管理的話(huà)析孽,軟件過(guò)程管理則應(yīng)該是對(duì)生產(chǎn)該產(chǎn)品的流水線(xiàn)的設(shè)計(jì)、建設(shè)只怎、維護(hù)袜瞬、優(yōu)化以及升級(jí)改造。軟件過(guò)程管理一般包括了軟件過(guò)程的建立身堡、執(zhí)行邓尤、監(jiān)控、評(píng)估以及改進(jìn)等活動(dòng)盾沫。
CMM/CMMI是什么
CMMI概念
CMMI(Capability Maturity Model Integration)即能力成熟度模型集成裁赠,是一套包括多個(gè)學(xué)科、可擴(kuò)充的模型系列赴精,其前身包括4個(gè)成熟度模型(即CMMI的源模型)佩捞,他們分別為面向開(kāi)發(fā)的SW-CMM、面向系統(tǒng)工程的SE-CMM蕾哟、面向產(chǎn)品集成的IPPD-CMM一忱、以及設(shè)計(jì)外購(gòu)協(xié)作的SS-CMM莲蜘。所謂CMMI模型,是指CMMI刻畫(huà)了軟件團(tuán)隊(duì)/組織從不成熟到成熟的每個(gè)階段的特征——即所謂的路線(xiàn)圖roadmap帘营。與實(shí)際的開(kāi)發(fā)模型沒(méi)關(guān)系票渠。這個(gè)路線(xiàn)圖其實(shí)也是CMMI模型最為精華的部分,甚至都可以在很多其他的領(lǐng)域借鑒芬迄。CMMI好處
- 改進(jìn)進(jìn)度和預(yù)算的可預(yù)測(cè)性
- 改進(jìn)開(kāi)發(fā)周期
- 提高生產(chǎn)率
- 改進(jìn)質(zhì)量(質(zhì)量缺陷)
- 增加客戶(hù)的滿(mǎn)意度
- 提高員工的士氣
- 增加投資回報(bào)和低質(zhì)量成本
有兩種通用的評(píng)估方法用以評(píng)估組織軟件過(guò)程的成熟度: 軟件過(guò)程評(píng)估和軟件能力評(píng)價(jià)问顷。
- 軟件過(guò)程評(píng)估: 用于確定一個(gè)組織當(dāng)前的軟件工程過(guò)程狀態(tài)及組織所面臨的軟件過(guò)程的優(yōu)先改善問(wèn)題,為組織領(lǐng)導(dǎo)層提供報(bào)告以獲得組織對(duì)軟件過(guò)程改善的支持禀梳。軟件過(guò)程評(píng)估集中關(guān)注組織自身的軟件過(guò)程杜窄,在一種合作的、開(kāi)放的環(huán)境中進(jìn)行算途。評(píng)估的成功取決于管理者和專(zhuān)業(yè)人員對(duì)組織軟件過(guò)程改善的支持塞耕。
- 軟件能力評(píng)價(jià): 用于識(shí)別合格的軟件承包商或者監(jiān)控軟件承包商開(kāi)發(fā)軟件的過(guò)程狀態(tài)。軟件能力評(píng)價(jià)集中關(guān)注識(shí)別在預(yù)算和進(jìn)度要求范圍內(nèi)完成制造出高質(zhì)量的軟件產(chǎn)品的軟件合同及相關(guān)風(fēng)險(xiǎn)嘴瓤。評(píng)價(jià)在一種審核的環(huán)境中進(jìn)行扫外,重點(diǎn)在于揭示組織實(shí)際執(zhí)行軟件過(guò)程的文檔化的審核記錄。
CMM/CMMI不適用于軟件開(kāi)發(fā)的原因
CMM/CMMI并不是一種具體的軟件過(guò)程或者軟件開(kāi)發(fā)方法
軟件過(guò)程改進(jìn)是一個(gè)持續(xù)的廓脆、全員參與的過(guò)程筛谚。CMM/CMMI建立了一組有效地描述成熟軟件組織特征的準(zhǔn)則,該準(zhǔn)則清晰地描述了軟件過(guò)程的關(guān)鍵元素停忿,并包括軟件工程和管理方面的優(yōu)秀實(shí)踐刻获。企業(yè)可以有選擇地引用這些關(guān)鍵實(shí)踐指導(dǎo)軟件過(guò)程的開(kāi)發(fā)和維護(hù),以不斷地改善組織軟件過(guò)程瞎嬉,實(shí)現(xiàn)成本蝎毡、進(jìn)度、功能和產(chǎn)品質(zhì)量等目標(biāo)氧枣。CMMI應(yīng)該是過(guò)程改進(jìn)模型而非軟件過(guò)程或者軟件過(guò)程模型沐兵。
然而在不少文獻(xiàn)中,CMM/CMMI都被視作一種官僚化和教條主義的重型軟件過(guò)程便监,并且與當(dāng)前軟件開(kāi)發(fā)大環(huán)境格格不入扎谎。事實(shí)上,按照CMM/CMMI模型的要求烧董,一個(gè)軟件組織應(yīng)當(dāng)定義使用本軟件組織特點(diǎn)的軟件過(guò)程毁靶,并且不斷優(yōu)化該過(guò)程,來(lái)更好地實(shí)現(xiàn)軟件組織的商業(yè)目標(biāo)逊移。再實(shí)踐中预吆,軟件組織為了迎合基于CMM/CMMI模型的“Verification”評(píng)估方法,刻意準(zhǔn)備大量文檔化證據(jù)胳泉,導(dǎo)致CMM/CMMI被視作在軟件項(xiàng)目管理中必須滿(mǎn)足的某種標(biāo)準(zhǔn)拐叉,這顯然是對(duì)CMM/CMMI模型意圖和使用方法的曲解岩遗。CMM/CMMI并不能作為檢驗(yàn)軟件過(guò)程優(yōu)劣的標(biāo)準(zhǔn)
實(shí)踐中,很多人會(huì)將達(dá)到一定成熟度水平視作某個(gè)軟件組織的研發(fā)能力凤瘦,并且試圖進(jìn)行橫向比較宿礁,認(rèn)為成熟度較高的企業(yè),其研發(fā)能力應(yīng)該強(qiáng)于成熟度較低的企業(yè)蔬芥。而事實(shí)上梆靖,由于企業(yè)所處的環(huán)境以及要實(shí)現(xiàn)的目標(biāo)等方面的差異,過(guò)程改進(jìn)對(duì)于不同企業(yè)的含義是不一樣的笔诵。因此涤姊,成熟度等級(jí)不適宜脫離企業(yè)環(huán)境直接橫向比較;同處于相同的成熟度等級(jí)嗤放,也并不能說(shuō)明這些企業(yè)的研發(fā)能力也是相同的。CMMI不是過(guò)程優(yōu)劣的標(biāo)準(zhǔn)壁酬,也不適用作公司之間的能力比較次酌。CMM/CMMI與其他軟件過(guò)程或者軟件開(kāi)發(fā)方法的比較是沒(méi)有任何意義的
很多人習(xí)慣于將CMM/CMMI作為敏捷方法的對(duì)立面,試圖來(lái)解釋和說(shuō)明敏捷方法的優(yōu)勢(shì)舆乔。事實(shí)上岳服,這種語(yǔ)境之下所謂的CMM/CMMI方法其實(shí)已經(jīng)不是一個(gè)過(guò)程管理的參考模型了,而是某個(gè)特定軟件組織為了迎合或者滿(mǎn)足CMM/CMMI評(píng)估的需要所定義出來(lái)的某個(gè)具體軟件過(guò)程希俩。顯然吊宋,將這個(gè)為了特定目的而定義出來(lái)的軟件過(guò)程的缺點(diǎn)視作CMM/CMMI模型的缺點(diǎn)是不合適的。所以諸如“CMMI vs Agile”的比較都是不恰當(dāng)?shù)难瘴洌罢弑举|(zhì)不是一種軟件過(guò)程模型璃搜,而是一種過(guò)程改進(jìn)。
根據(jù)Humphrey再《Managing the Software Process》一書(shū)中對(duì)軟件過(guò)程管理這一術(shù)語(yǔ)的解釋來(lái)看鳞上,所謂軟件過(guò)程管理應(yīng)該同時(shí)包含按照既定過(guò)程的執(zhí)行和不斷提升過(guò)程能力兩個(gè)方面的內(nèi)容这吻,所以,軟件過(guò)程改進(jìn)應(yīng)被視為軟件過(guò)程管理的一部分篙议。其常用的參考模型就是PDCA和IDEAL唾糯,這兩個(gè)過(guò)程改進(jìn)的元模型。軟件過(guò)程管理和軟件過(guò)程改進(jìn)兩者不能割裂鬼贱,既不能脫離改進(jìn)談管理移怯,也不能脫離管理談改進(jìn)。因此CMM/CMMI模型可以被稱(chēng)為軟件過(guò)程管理參考模型这难,也可以被稱(chēng)為軟件過(guò)程改進(jìn)參考模型舟误,但并不是軟件過(guò)程模型或軟件過(guò)程管理模型。
對(duì)CMM/CMMI模型的誤解
-
CMMI模型需要適當(dāng)裁剪以適應(yīng)公司的實(shí)際情況
CMMI模型不需要裁剪姻乓,模型本身僅僅刻畫(huà)成熟度路線(xiàn)圖上不同階段的特征脐帝。大部分公司都不具備能力來(lái)裁剪這個(gè)模型同云,真要裁剪,也是應(yīng)該由CMMI的模型的提出方和維護(hù)方SEI干堵腹。真正需要裁剪的是公司內(nèi)部定義的組織級(jí)開(kāi)發(fā)流程和開(kāi)發(fā)規(guī)范炸站,這個(gè)需要裁剪以適應(yīng)具體的項(xiàng)目場(chǎng)景,與CMMI模型的裁剪是完全不同的概念疚顷。 -
CMMI模型太重了旱易,不適合互聯(lián)網(wǎng)時(shí)代的輕量級(jí)開(kāi)發(fā)
這個(gè)說(shuō)法的錯(cuò)誤之處在于,不一定是CMMI重或者輕腿堤,而是阀坏,CMMI根本就不是開(kāi)發(fā)模型。 -
CMMI模型只適合大公司笆檀、大項(xiàng)目忌堂,不適合小項(xiàng)目
首先沒(méi)人檢驗(yàn)過(guò);其次酗洒,項(xiàng)目的大小衡量本身也缺乏值得信賴(lài)的參考依據(jù)士修;最后,接受這種說(shuō)法的人還是把CMMI當(dāng)成是一種特殊的開(kāi)發(fā)模型樱衷。 -
CMMI模型只適合需求不變或者很少變化的場(chǎng)合棋嘲,不適合需求不確定,變化很多的場(chǎng)合
CMMI不是開(kāi)發(fā)模型矩桂,與需求變化與否無(wú)關(guān)沸移,談不上適應(yīng)或者不適應(yīng)。 -
CMMI與敏捷開(kāi)發(fā)的對(duì)比
這種說(shuō)法是錯(cuò)的侄榴。最根本的原因是CMMI不是開(kāi)發(fā)過(guò)程雹锣,而大部分敏捷則是具體的開(kāi)發(fā)過(guò)程。兩者根本就是風(fēng)馬牛不相及的事物癞蚕,不具備沖突的基礎(chǔ)笆制。所以不存在兩者之間的權(quán)衡和借鑒。此外涣达,也不存在CMMI的抽象是其不足在辆。所有的模型都是抽象的,抽象恰恰是模型的本質(zhì)特征之一度苔。模型通過(guò)抽象來(lái)強(qiáng)化特征與目標(biāo)之間的關(guān)系匆篓,這才能幫助我們理解其內(nèi)在機(jī)理,指導(dǎo)具體實(shí)踐寇窑。
引用
- 本文大部分觀點(diǎn)是基于《軟件過(guò)程與管理方法綜述》 榮國(guó)平鸦概,張賀,邵棟,王青
- 只言片語(yǔ)說(shuō)軟件的新浪博客系列
- 說(shuō)說(shuō)CMMI
- 繼續(xù)說(shuō)CMMI
- 說(shuō)說(shuō)CMMI和敏捷
- CMMI的高等級(jí)
- 究竟說(shuō)明是五級(jí)
- 再談CMMI的五個(gè)等級(jí)
- 南京大學(xué)軟件學(xué)院《軟件工程與管理》課程ppt
最后窗市,再次感謝榮國(guó)平老師以簡(jiǎn)明扼要的文字先慷,闡明了軟件開(kāi)發(fā)領(lǐng)域容易混淆的部分,發(fā)人深思咨察,值得我繼續(xù)潛心鉆研论熙。