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