從第一臺計(jì)算機(jī)出現(xiàn)至今,計(jì)算機(jī)的發(fā)展速度令人瞠目。在應(yīng)用方面,計(jì)算機(jī)從由少數(shù)科學(xué)家從事數(shù)學(xué)計(jì)算到今天遍及社會生活的各個(gè)領(lǐng)域,人們可以通過它對弈,也可以通過它預(yù)測天氣。在技術(shù)方面,計(jì)算機(jī)硬件的發(fā)展是日新月異,例如中央處理器(CPU)的速度是每隔6個(gè)月翻一倍,而成本則是每隔6個(gè)月減少一倍。但在計(jì)算機(jī)軟件方面,其發(fā)展卻是差強(qiáng)人意,雖然也有很多新的軟件開發(fā)方法和技術(shù)不斷提出,但軟件無論在生產(chǎn)率還是在質(zhì)量方面總是達(dá)不到預(yù)期效果。
計(jì)算機(jī)軟件開發(fā)的問題一直是困擾軟件企業(yè)的關(guān)鍵問題。隨著時(shí)代的發(fā)展人們開始意識到這些企業(yè)的基本問題不在于新技術(shù)是否使用,而在于軟件過程的管理問題。軟件過程包括兩個(gè)方面,其一是軟件開發(fā)的管理過程(Software Management Process),其二則是軟件開發(fā)的工程過程(Software Engineering Process)。軟件企業(yè)的開發(fā)機(jī)構(gòu)在形成一套完整而成熟的軟件過程后,軟件的開發(fā)才能夠步入正軌,才能保證在約定的期限內(nèi)以固定的成本生產(chǎn)出客戶滿意的產(chǎn)品。
軟件機(jī)構(gòu)形成一套完整而成熟的軟件過程不是一蹴而就的,它需要一個(gè)從無序到有序,從特殊到一般,從定性到定量,最后再從靜態(tài)到動態(tài)的歷程,或者說軟件機(jī)構(gòu)在形成成熟的軟件過程之前必須經(jīng)歷一系列的成熟階段(Maturity Level)。軟件機(jī)構(gòu)首先要判斷自己屬于哪一個(gè)成熟階段,然后再根據(jù)自身的實(shí)際情況決定應(yīng)該重點(diǎn)采取哪一些活動(Activity)來更有效地改進(jìn)自己的軟件過程。其他企業(yè)在同軟件企業(yè)訂立軟件開發(fā)合同時(shí)也可以根據(jù)該企業(yè)機(jī)構(gòu)所處的成熟階段判斷其軟件開發(fā)能力,進(jìn)而判斷相關(guān)的軟件風(fēng)險(xiǎn)。所有這些都需要一個(gè)理論指導(dǎo)來作出相關(guān)判斷,能力成熟度模型(CMM)就是這樣一個(gè)理論模型,它規(guī)定了機(jī)構(gòu)成熟階段的框架,以及如何據(jù)之判斷軟件機(jī)構(gòu)所處的成熟階段和機(jī)構(gòu)為改進(jìn)自己的軟件過程應(yīng)該采取的辦法。
CMM產(chǎn)生背景
主要問題
在過去的二十年里,新的軟件開發(fā)方法和技術(shù)的使用并未使軟件生產(chǎn)率和生產(chǎn)質(zhì)量得到有效的提高。軟件生產(chǎn)商開始意識到他們的基本問題在于對軟件的生產(chǎn)過程管理不力,主要體現(xiàn)在:軟件產(chǎn)品不能按時(shí)完成、超出預(yù)算的成本、以及采用新的技術(shù)和工具后其好處難以體現(xiàn)。
主要作用
CMM可以指導(dǎo)軟件機(jī)構(gòu)如何控制軟件產(chǎn)品的開發(fā)和維護(hù)過程,以及如何向成熟的軟件工程體系演化,并形成一套良性循環(huán)的管理文化。具體說來,一個(gè)企業(yè)要想改進(jìn)其生產(chǎn)過程,應(yīng)該采取如下策略和步驟:
- 確定軟件企業(yè)當(dāng)前所處的過程成熟級別;
- 了解對改進(jìn)軟件生產(chǎn)質(zhì)量和加強(qiáng)生產(chǎn)過程控制起關(guān)鍵作用的因素;
- 將工作重點(diǎn)集中在有限幾個(gè)關(guān)鍵目標(biāo)上,有效達(dá)到改進(jìn)機(jī)構(gòu)軟件生產(chǎn)過程的效果,進(jìn)而可持續(xù)地改進(jìn)其軟件生產(chǎn)能力。
CMM的基本概念
人們在開發(fā)和維護(hù)軟件及其相關(guān)產(chǎn)品時(shí)所涉及的各種活動、方法、實(shí)踐和改革等。其中軟件相關(guān)產(chǎn)品包括軟件項(xiàng)目計(jì)劃、設(shè)計(jì)文檔、程序代碼、測試用例和用戶手冊等。
當(dāng)遵循某個(gè)軟件過程時(shí)所能達(dá)到的期望效果,它可以有效預(yù)測企業(yè)接收新的軟件項(xiàng)目時(shí)可能得到的結(jié)果。
當(dāng)遵循某個(gè)軟件過程時(shí)所達(dá)到的實(shí)際效果。它可以用于驗(yàn)證軟件過程能力。
指一個(gè)特定的軟件過程被顯式定義、管理、度量、控制和能行的程度。成熟度可以用于指示企業(yè)加強(qiáng)其軟件過程能力的潛力。 當(dāng)一個(gè)企業(yè)達(dá)到了一定的軟件過程成熟級別后,它將通過制定策略、建立標(biāo)準(zhǔn)和確立機(jī)構(gòu)結(jié)構(gòu)使它的軟件過程制度化。而制度化又促使企業(yè)通過建立基礎(chǔ)設(shè)施和公司文化來支持相關(guān)的方法、實(shí)踐和過程。從而使之可以持續(xù)并維持一個(gè)良性循環(huán)。
企業(yè)要通過選擇最關(guān)鍵的目標(biāo)來進(jìn)行過程改進(jìn),應(yīng)該搞清成熟的軟件過程和不成熟的過程之間的差異。
不成熟的企業(yè)有如下標(biāo)志:
- 缺乏確定的軟件過程和相應(yīng)的管理和控制;
- 即使給出了軟件過程,也不嚴(yán)格的遵循和強(qiáng)制執(zhí)行;
- 管理是完全被動的,管理者采用的策略是救火式的,即出了事才去解決,解決的時(shí)候也難以縱觀全局,往往只顧眼前;
- 由于缺乏有依據(jù)的估算,制訂軟件預(yù)算和生產(chǎn)計(jì)劃時(shí)往往跟著感覺走,實(shí)際生產(chǎn)時(shí)則常常超標(biāo);
- 如果強(qiáng)制在預(yù)定期限內(nèi)完成,那么軟件的功能和質(zhì)量肯定是得不到保證;
- 缺乏評價(jià)軟件產(chǎn)品質(zhì)量和解決產(chǎn)品缺陷和過程問題的客觀基礎(chǔ)。
成熟的企業(yè)則有如下標(biāo)志:
- 具有在企業(yè)范圍內(nèi)管理、控制軟件開發(fā)和維護(hù)過程的能力;
- 現(xiàn)有人員和新進(jìn)人員均了解所遵循的軟件過程,且工作活動均按照事先的計(jì)劃完成;
- 在定義好的軟件過程中,所有項(xiàng)目和機(jī)構(gòu)中的角色和責(zé)任分明;
- 制定的計(jì)劃是有效的且與實(shí)際的工作進(jìn)展一致;
- 軟件過程在必要時(shí)可按照一定規(guī)則和程序加以修改;
- 軟件產(chǎn)品和過程的具有一定的可控性。這主要體現(xiàn)在:
- 管理者能夠監(jiān)督軟件產(chǎn)品的質(zhì)量和生產(chǎn)過程;
- 具有客觀的和定量化的措施來判斷產(chǎn)品質(zhì)量并分析產(chǎn)品與生產(chǎn)過程中的問題;
- 計(jì)劃和預(yù)算有章可循,它是基于歷史數(shù)據(jù)的,從而是實(shí)際可行的;
- 預(yù)算的結(jié)果,包括成本、時(shí)間表、產(chǎn)品功能和質(zhì)量等,通常能夠達(dá)到;
- 有關(guān)的參與者完全理解遵循軟件過程的價(jià)值并認(rèn)真地遵循之;
- 具有支撐軟件過程的基礎(chǔ)設(shè)施,如標(biāo)準(zhǔn)過程庫、歷史數(shù)據(jù)庫等。
CMM的五級成熟度
基本前提
- 軟件質(zhì)量在很大程度上取決于產(chǎn)生軟件的軟件過程的質(zhì)量和能力;
- 軟件過程是一個(gè)可管理、可度量并不斷改進(jìn)的過程;
- 軟件過程的質(zhì)量受到用以支撐它的技術(shù)和設(shè)施的影響;
- 企業(yè)在軟件過程中所采用的技術(shù)層次應(yīng)適應(yīng)于軟件過程的成熟度。
基本原理
- CMM強(qiáng)調(diào)連續(xù)的軟件過程改進(jìn)。該連續(xù)的改進(jìn)基于多個(gè)演化步驟。CMM將這些演化步驟劃分成五個(gè)級別。這種分級結(jié)構(gòu)的理論依據(jù)是軟件質(zhì)量原理。
- 每一級別都包括若干目標(biāo)。當(dāng)滿足某一目標(biāo)后,軟件過程的相應(yīng)部分便確定下來。
- 五級成熟度定義了一個(gè)標(biāo)準(zhǔn),用以度量機(jī)構(gòu)的軟件過程成熟度和評價(jià)其軟件過程能力。
基本內(nèi)容
CMM的成熟度理論目前主要涉及如下內(nèi)容:
- 機(jī)構(gòu)和資源的管理: 涉及機(jī)構(gòu)本身的責(zé)任,人員和其它資源設(shè)施。
- 軟件工程過程及其管理: 涉及軟件工程過程,即軟件過程的深度、范圍和完整性以及如何度量、管理和改進(jìn)這樣的過程。
- 工具和技術(shù): 軟件工程過程中使用的開發(fā)工具和技術(shù)。
五個(gè)成熟度級別
- 初始級
- 可重復(fù)級:有規(guī)章的過程
- 定義級:標(biāo)準(zhǔn)化、一致的過程
- 管理級:可預(yù)測過程
- 優(yōu)化級:可持續(xù)改進(jìn)的過程
成熟度的行為刻劃
第一級:初始級
- 成功來源于個(gè)人英雄主義而非機(jī)構(gòu)行為,因此它不可重復(fù),更換人員后成功便難以維持。
第二級:可重復(fù)級
- 針對特定軟件項(xiàng)目建立管理該項(xiàng)目的策略和實(shí)現(xiàn)這些策略的過程。
- 新項(xiàng)目的計(jì)劃和管理基于類似項(xiàng)目的經(jīng)驗(yàn)。
- 軟件過程能力主要通過管理單個(gè)項(xiàng)目的軟件生產(chǎn)過程來得到提高和增強(qiáng)。
- 不同的項(xiàng)目可有不同的軟件過程,機(jī)構(gòu)應(yīng)當(dāng)建立一定的方針和策略以針對具體的項(xiàng)目選擇合適的軟件生產(chǎn)過程并進(jìn)行管理。
可重復(fù)級的主要特點(diǎn)在于確定了基本的軟件生產(chǎn)管理和控制,具體來講,有:
- 結(jié)合已有項(xiàng)目的經(jīng)驗(yàn)和新項(xiàng)目的特點(diǎn)來確定本項(xiàng)目的責(zé)任和承諾;
- 軟件生產(chǎn)成本、時(shí)間表和實(shí)現(xiàn)的功能被有效跟蹤;
- 識別實(shí)現(xiàn)承諾所需解決的關(guān)鍵問題;
- 定義軟件項(xiàng)目過程標(biāo)準(zhǔn),機(jī)構(gòu)要確保其被遵守。
概括來說,第二級的主要特點(diǎn)是項(xiàng)目計(jì)劃和跟蹤是確定且有效的,項(xiàng)目的軟件過程是可控的,以及已有的成功經(jīng)驗(yàn)是可重復(fù)的。
第三級:定義級
- 有一個(gè)機(jī)構(gòu)范圍內(nèi)標(biāo)準(zhǔn)的軟件過程,軟件工程活動和管理活動被集成為一個(gè)有機(jī)的整體。標(biāo)準(zhǔn)化的目的是使高層管理者和軟件技術(shù)人員能夠有效合作。
- 有一個(gè)組例如軟件工程組(SEPG)專門負(fù)責(zé)訂立機(jī)構(gòu)的標(biāo)準(zhǔn)軟件過程,并且在機(jī)構(gòu)中制定培訓(xùn)計(jì)劃來確保相關(guān)人員和管理者有足夠的知識和技能完成標(biāo)準(zhǔn)過程所賦予的角色。
- 標(biāo)準(zhǔn)的軟件過程結(jié)合具體項(xiàng)目的特點(diǎn)經(jīng)過裁剪即形成項(xiàng)目定義軟件過程,它是一組集成的完善定義的軟件工程和管理過程。
- 一個(gè)完善定義的軟件過程應(yīng)包括就緒準(zhǔn)則、輸入、工作過程、驗(yàn)證機(jī)制、輸出和完成準(zhǔn)則。
- 對于已建立的產(chǎn)品生產(chǎn)線,其成本、時(shí)間表和實(shí)現(xiàn)功能均可跟蹤和控制,軟件產(chǎn)品的質(zhì)量可以得到保證。
- 軟件過程能力的實(shí)現(xiàn)主要基于在機(jī)構(gòu)范圍內(nèi)對一個(gè)定義軟件過程的活動、角色和責(zé)任的共同理解。
概括來說,第三級的主要特征在于軟件過程已被提升成標(biāo)準(zhǔn)化過程,從而更加具有穩(wěn)定性、重復(fù)性和可控性。
第四級:管理級
- 軟件的過程和產(chǎn)品有定量的質(zhì)量指標(biāo)。
- 重要的軟件過程活動均配有生產(chǎn)率和質(zhì)量方面的度量指標(biāo);
- 應(yīng)用數(shù)據(jù)庫來收集和分析定義軟件過程中涉及的各種數(shù)據(jù);
- 對項(xiàng)目軟件過程和軟件質(zhì)量的評價(jià)有定量的基準(zhǔn)。
- 軟件項(xiàng)目的產(chǎn)品和生產(chǎn)過程的控制具有可預(yù)測性。
- 將軟件過程性能可能出現(xiàn)的偏差控制在可接受的量化界限內(nèi);
- 具體區(qū)分影響過程性能發(fā)生偏差的有效因素和偶然因素;
- 向新領(lǐng)域拓展的風(fēng)險(xiǎn)是可預(yù)知的并被仔細(xì)管理和權(quán)衡。
概括來說,第四級的主要特征是定量化、可預(yù)測、異常控制和高質(zhì)量。
第五級:優(yōu)化級
- 機(jī)構(gòu)集中于持續(xù)的過程改進(jìn)
- 具有標(biāo)識過程缺陷和增強(qiáng)過程能力的有效手段。
- 利用試驗(yàn)數(shù)據(jù)分析使用新技術(shù)所需的代價(jià)和帶來的效益,然后再有選擇地采用。
- 當(dāng)出現(xiàn)偏差時(shí),軟件項(xiàng)目人員能夠分析出錯(cuò)原因并采取有效手段防止其再次出現(xiàn)。
- 防止不必要的浪費(fèi)是第五級的重點(diǎn)。
- 改進(jìn)的途徑有兩個(gè),一個(gè)是對已有過程的漸進(jìn)式改進(jìn);另一個(gè)則是有選擇地使用新技術(shù)和新方法所帶來的革新。
概括來說,第五級的主要特征是新技術(shù)的采用和軟件過程的改進(jìn)被作為日常的業(yè)務(wù)活動來加以計(jì)劃和管理。