隨著CMM理念的引入,國內軟體公司激起了實施CMM的熱潮。雖然CMM的主要思想很清楚,標準的條例也很明確,但如何達到這種標準的可操作性比較差。在缺乏基礎和經驗的情況下,許多企業在實施CMM的過程中,往往感到迷茫,不知從何處下手。而CMM實施的痛點在項目的具體實施。本文將結合我公司CMM3實施經驗,簡單論述如何在項目中實施CMM。
首先看看CMM標準中相關的定義:
★ 機構
公司或其他實體中的一個單位,它從整體上管理許多項目。機構內的所有項目由一個共同的頂層負責人管理,並採用共同的策略。
★ 機構標準軟體過程
可在機構內使用的基本流程定義,用它來引導建立項目的一般軟體過程。它描述每個軟體項目打算併入自己的項目定義的軟體過程中的基本軟體過程要素,還描述這些軟體過程要素之間的關係(如排序和介面)。
★ 項目定義的軟體過程
由某項目使用的軟體過程的操作定義。利用軟體標準、規程、工具和方法對項目定義的軟體過程進行恰當的表徵和描述,使其易於理解。項目定義的軟體過程是根據項目特點通過剪裁機構標準軟體過程而獲得的。
★ 剪裁
修改一個過程、標準或規程,以更好地匹配過程或產品需求。
★ SEPG(Software Engineering Process Group)
協組對機構使用的軟體過程進行定義、維護和改進的一個專家組。在關鍵實踐中,這個小組通常稱為“負責機構的軟體過程活動的小組”。
項目實施CMM一般包括三個部分:定義項目軟體過程、制定軟體開發計劃、軟體開發及管理。
1. 定義項目軟體過程
專案經理在SQA人員(軟體品質保證人員)、SEPG成員的協助下,針對項目的實際情況,選擇或剪裁機構標準軟體過程,形成項目定義的軟體過程。
CMM實施初期,機構標準軟體過程不完善的情況下,需要對機構標準軟體過程進行剪裁,以適應項目的實際需要。機構標準軟體過程較完善時,一般只需要從機構標準軟體過程中選擇模板、方法等形成項目軟體過程,建議不再採用剪裁的方式。
項目軟體過程的內容為:項目採用的軟體生命週期模型(如:瀑布模型、V模型等);項目軟體開發及管理(如:軟體開發計劃、需求分析、概要設計、詳細設計、編碼、測試、發布、項目跟蹤等)應遵循的方法與模板。
項目軟體過程由一到多個文檔構成。至少應有一個文檔詳細描述項目的軟體生命週期模型、軟體開發及管理應遵循的標準、項目軟體過程與機構標準軟體過程的偏差(即進行了剪裁的內容)。如果進行了剪裁,還將存在項目定義的方法和模板文檔。
項目軟體流程定義完成後,需要經過SQA人員、SEPG成員的評審,並得到上級主管領導的批准認可。主要是評審項目軟體過程與機構標準軟體過程的偏差,看看發生的偏差是否符合機構的標準,並滿足CMM標準的要求。
2. 制定軟體開發計劃
專案經理參照項目軟體過程中的生命週期模型、方法與模板,結合客戶需求制定軟體開發計劃。軟體開發計劃是軟體開發活動的依據,也是軟體開發管理的基礎。
軟體開發計劃的內容有:軟體規模估計、工作量估計、成本估計、制定工作進度、識別風險、風險管理計劃、跟蹤管理、組態管理等。其中軟體估計、風險識別與管理、制定工作進度是軟體開發計劃的重點與痛點。
軟體估計主要為規模估計、工作量估計、成本估計。軟體規模估計是工作量估計的基礎,而工作量估計的結果是成本估計的基礎。軟體規模估計的方法有很多,最常用的功能點估計、程式碼估計、介面數估計。各種估計方法有其優缺點,需要根據公司或項目的實際情況來選擇估計方法。軟體規模估計選定估計方法後,還必須結合以往項目的開發經驗或收集的曆史資料。開發經驗或曆史資料的豐富程度,決定了規模估計結果與實際情況的接近程度。軟體工作量除了依賴軟體規模的估計,同時與公司的軟體開發生產率密切相關(什麼是軟體開發生產率?以介面數估計方法為例。3個介面,需要花費的工作量為1人月。那麼軟體開發生產率為3介面/人月)。因此規模相同的軟體,不同公司開發軟體所花費的工作量不同。估計了工作量以後,軟體成本的估計就相對比較容易。我們一般將軟體成本簡單分為:軟體開發成本、其他成本。軟體開發成本等於工作量與人員平均花費之積。其他成本包括管理成本、差旅費等各種費用。這些需要根據公司的實際情況來確定。
軟體風險是指軟體開發過程中及軟體產品本身可能造成的傷害或損失。我們需要關注以下的問題:什麼樣的風險會導致軟體項目的徹底失敗?使用者需求、開發技術、目標電腦、以及所有其它與項目有關的因素的改變將會對按時交付和總體成功產生什麼影響?對於採用什麼方法和工具,需要多少人員參與工作的問題,我們如何選擇和決策?對軟體品質要達到什麼程度才是“足夠的”?
風險識別與管理的目的,就是識別出軟體開發過程中可能產生的問題,制定預防問題的措施,及問題發生時的解決方案。公司內不同項目的風險不同,不同公司開發相同軟體的風險不同。識別風險需要採用科學的風險識別方法,同時也需要經驗與曆史資料的積累。根據風險發生的可能性與發生時產生的影響,可以對風險進行分級。在風險識別的基礎上,制定詳細的預防措施和解決方案。用以避免風險的發生,當風險發生時將損失減小到最低程度。隨著軟體開發活動的進行,風險在不斷的變化。計劃時預測的部分風險可能消失,同時可能產生一些新的風險。因此在制定預防和解決的方法同時,還需要制定風險監控計劃。在風險監控點上,監控風險的變化情況,並制定新的措施和方法。
工作進度的制定主要基於工作量估計的結果、採用的軟體生命週期模型。制定工作進度主要需要詳細描述,“什麼人?什麼時候?做什麼事情?產生什麼軟體工作產品?”。制定工作進度使用的工具可以根據個人習慣來選擇,比較好的有MS Project。制定工作進度的過程中需要綜合考慮軟體開發過程中可能遇到的困難,必須將時間安排得比較合理。時間太緊,將造成計劃不能按時完成,不能起到指導軟體開發的作用。而太松,又將降低工作效率。工作進度的時間把握存在很大的難度,和軟體規模估計一樣,需要經驗和曆史資料的積累。
軟體開發計劃制定完成後,需要得到項目群組成員的認可,並獲得承諾。最後需要項目上級主管領導的簽字批准。
3. 軟體開發及管理
軟體開發將按軟體開發計划進行,所有開發活動必須遵從項目定義的軟體過程。軟體開發過程中,SQA人員將按照SQA計劃(軟體品質保證計劃)對軟體開發活動和產生的軟體工作產品進行審核。以保證軟體開發活動和產生的軟體工作產品符合項目軟體流程定義的標準。
軟體開發是一個複雜的過程,其間存在著各種不確定因素。軟體計劃無法做到與實際情況完全吻合,好的計劃也只能盡量接近實際情況。因此,軟體開發過程需要進行管理,以保證軟體開發能按客戶的要求按時按質完成。軟體開發的管理主要包括:跟蹤軟體開發活動、測量花費的工作量、即時調整計劃。
跟蹤軟體開發活動,主要是跟蹤軟體規模、工作量、成本、進度、風險等。跟蹤的方式很多,主要分為定期與非定期。定期方式常見的有:周例會、裡程碑會議。項目組每周或裡程碑處召開會議,以便專案經理、項目上級主管領導能夠即時地掌握項目的進展與存在的問題。非定期一般為,項目出現問題時,專案經理、項目上級主管領導對產生的問題進行瞭解分析,並協助解決問題。
測量花費的工作量,是測量前一階段軟體開發活動實際所花費的工作量。並將實際的工作量與計劃估計的工作量進行對比分析,為後一階段計劃的改進提供依據。
在跟蹤、測量的基礎上,看看是否有必要調整計劃。對計劃的調整表現為:重新估計規模、工作量、成本,重新識別風險並管理風險,調整工作進度的時間人員安排等。 CMM在項目中的實施還有很多工作要做,以上只是描述了其中的一部分。從印度軟體成功的經驗,讓我們認識到實施CMM將提高我們的軟體產品品質,協助我們開啟國際市場,振興我國的軟體產業。但CMM的實施也存在很大的難度,特別在CMM實施初期,我們將遇到很多困難。例如:增加了軟體開發的工作量,降低了軟體開發效率等。克服這些困難,通過實施CMM持續地改進軟體開發過程,我們一定能從中受益。