shop1a.cn騰思網絡MetInfo米拓模板

什么是CMMI

關于CMMI的發展歷史,說起來確實非常復雜。早在1984年,美國國防部希望將國防部的軟件委派給其他軟件公司進行承做。由于沒有辦法評估軟件公司的承接和執行能力,因此委托卡內基梅隆大學軟件工程學院(Software Engineering Institute,簡稱SEI)進行一項研究,希望能夠在軟件產業建立一套工程制度,用來評估和改善軟件開發公司的過程和能力,并協助軟件開發人員持續改善流程的成熟度以及

關于CMMI的發展歷史,說起來確實非常復雜。早在1984年,美國國防部希望將國防部的軟件委派給其他軟件公司進行承做。由于沒有辦法評估軟件公司的承接和執行能力,因此委托卡內基梅隆大學軟件工程學院(Software Engineering Institute,簡稱SEI)進行一項研究,希望能夠在軟件產業建立一套工程制度,用來評估和改善軟件開發公司的過程和能力,并協助軟件開發人員持續改善流程的成熟度以及軟件質量,從而提升軟件開發項目及公司的管理能力,最終達到軟件開發功能正確、縮短開發進度、降低開發成本、確保軟件質量的目標。 

  基于此目的,SEI在1986年開始研究能力成熟度模型(Capability Maturity Model,簡稱CMM),于1991年正式推出了軟件能力成熟度模型(Capability Maturity Model For Software,簡稱SW-CMM),并發布了最早的SW-CMM 1.0版。經過兩年試用之后,1993年SEI正式推出SW-CMM1.1版。 

  那么CMM又怎么發展成為現在的CMMI了呢?原來,在CMM1.0推出之后,很多單位都先后在不同的應用領域發展了自己的CMMs,其中包括系統工程能力成熟度模型(Systems Engineering Capability Maturity Model, SE-CMM)、整合產品發展能力成熟度模型(Integrated Product Development Capability Maturity Model, IPD-CMM)、人力資源管理能力成熟度模式 (People Capability Maturity Model, P-CMM)等應用模型。 

  這些不同的模型在自己的應用領域內確實發揮了很多的作用,但是由于架構和內容的限制,他們之間并不能通用。于是SEI于2000年12月公布了能力成熟度整合模型(Capability Maturity Model - Integrated, CMMI),主要整合了軟件能力成熟度模型(SW-CMM)2.0版,系統工程能力模型(SECM)和整合產品發展能力成熟度模型(IPD-CMM)0.98版。在隨后的發展過程中,本著不斷改進的原則,CMMI產品團隊不斷評估變更請求并進行相應的變更,逐漸發展到目前的CMMI 1.2 版本。在CMMI中文版資料中,用這樣的圖來描述CMMI的發展歷史: 

  CMMI的集成達到了兩個目的:一是將多學科領域之間的公共過程域進行了提煉;二是減少了過程域的總數量。但是,看到這里,我們會想到另外一個問題:CMMI集成了那么多領域的標準和規范,在實施過程中難道需要全部滿足嗎?不是的,企業在利用CMMI進行過程改進的時候,首先必須根據自身的主要業務類型和改進目標等,選擇適合于自身的規范。例如:從事某個領域軟件開發的企業,沒有外包和采購業務,那么可以考慮使用在軟件開發和系統工程方面進行了集成的CMMI SW/SE。對于需要集成多個產品,或者產品開發受到其他工程影響的企業,可以采用CMMI-SE/SW/IPPD。另外對于涉及到產品的獲取和轉包方面的企業,可以考慮使用CMMI-SE/SW/IPPD/SS。

CMMI 1初始級



  了解了CMMI的身世,我們再來看一下CMMI的不同級別。嚴格來講,CMMI級別有連續式和階段式兩種描述方式。雖然方式不同,但所表達的意思是一樣的。我們以最常用的階段式進行描述。先來看下邊這個故事: 

  A公司剛剛拿到一筆訂單,公司讓小張主要負責開發這個項目。小張是名牌大學畢業高材生,一個人可以幾天幾夜不休息寫出幾千行代碼,在公司屬于大俠級人物。 

  接到上司的任務,小張不敢怠慢,仔細閱讀了項目合同,并和用戶方通了電話,仔細詢問了用戶希望實現的需求。經過一番深思熟慮,他的腦海里已經有了大概的構思。于是,小張打開電腦,開始了他非常熟悉的編碼工作。 

  一周過去了,老板過來詢問項目的進展,小張說如果不出意外的話,一個月應該差不多能完成。老板很高興,夸獎小張很能干。 

  可接下來的事情并不像小張想象的那么順利,他突然發現:由于一時疏忽,竟然忘掉了一個很重要的功能;如果將其加進去,需要推翻以前編寫的大部分代碼。想到已經跟老板夸下海口,沒有辦法的小張只好連續加班好幾個晚上,最后終于把代碼修改完成了。雖然經過了這樣一次挫折,但是小張感覺還是比較慶幸:幸虧自己發現得早,要不然就死定了。 

  接下來的開發一切順利,小張還是重復著夜以繼日的編碼工作。眼看就要大功告成,小張很高興得把喜訊告訴了老板,于是老板也很高興得通知了客戶,說下周你們就可以過來看產品了。 

  用戶高高興興來到公司之后,當小張跟他們介紹產品時,用戶卻挑出了很多毛病。原來小張當初沒有完全理解用戶的意圖,此后也沒有與用戶進行太多溝通,他以為自己已經完全理解了用戶需求,因此就按照心目中的想像把產品開發完成了。 

  看到用戶提的那么多問題,小張別無選擇。于是,他又開始沒日沒夜地修改起了代碼。這次小張吸取上次的教訓,跟用戶進行了多次溝通,最后終于完成了產品。但是整個開發進度卻延遲了一個月。雖然老板沒有批評他,但是小張心里的滋味也不好受,可又能怪誰呢?只能怪自己運氣不好,在項目中碰到了這么多倒霉的事情。 

  真的是小張那么倒霉嗎?當然不是,而且他運氣還算不錯了。按照他這樣的開發過程,只發生這兩件事情已經是非常幸運了。在開發之前沒有完全弄清楚用戶的需求,也沒有備忘錄以免發生遺漏,更沒有預先估計風險并采取預防措施,而只是碰運氣,走一步算一步,你說能不出問題嗎?所以,小張的開發過程還停留在CMMI第一級,也就是初始級的水平。

CMMI 2管理級



  如果用CMMI 2管理級水平進行改進,小張的這個項目應該怎么做呢? 

  在真正動手做之前,先別忙著編程序,應該先考慮一下怎么做才能把事情辦好,并且盡可能想得周全一些。我們不妨從下邊幾個方面幫助小張分析一下: 
   1、用戶的需求是什么?怎樣確保真正理解了用戶的需求呢?那就先做個系統的需求調研吧。 
   2、為了避免遺忘某個需求,我還應該把這些需求都記錄下來才行。(REQM需求管理) 
   3、對了,這個功能技術難度太大,要不跟老板申請外包吧。(SAM供應協議管理) 
   4、剩下的任務老板讓我一個月完成這個任務,我得先計劃一下,要是完不成,我得提前跟老板說啊。(PP項目計劃) 
   5、計劃出來了,還不錯,可以完成。不行,還不能高興的太早,我每周還得跟計劃對照一下,看計劃完成得怎么樣。(PMC項目跟蹤) 
   6、要是我的代碼下次也能用就好了,而且以后維護也得用啊,我得找個工具把代碼管理起來。(CM配置管理) 
   7、老板不太放心,安排了一個人來監督我,呵呵,我做的很好,盡管匯報吧。(PPQA質量保證) 
   8、任務完成了,真累啊,不行,我得算算我在這個項目上花了多長時間,加了幾次班,遇到了哪些問題,這些問題是怎么產生的,下次的項目我得提前做好打算。(MA度量) 

  經過了這樣的考慮和計劃,小張順利開發完了第二個項目,產品拿到用戶那里正式使用了,小張也因為出色的表現受到了領導的表揚。 

  可是產品上線不久,就因為負荷壓力過大引起死機,給用戶造成了很大的影響。這個問題迅速反饋到了公司老板那里。老板找到了小張。呵呵,看來小張真夠倒霉的,什么事情都讓他碰上了,小張百思不得其解,為什么我這么努力,還是出問題了呢? 

  原來,小張開發完之后,由于測試人員出差,他就自己測了一下,覺得沒問題就交給了用戶。用戶對產品也很放心,認為應該沒什么問題,產品就上線了。但由于用戶實際使用環境遠比小張的開發環境復雜得多,而這些小張之前并沒有意識到,也根本沒有進行這方面的考慮和設計。所以才發生了這樣的一幕。

CMMI 3可定義級



  那么小張應該吸取什么教訓呢?我們用CMMI 3 可定義級來幫著分析一下。 
   1、在了解用戶需求之后,編碼之前其實還要做很多工作。首先,應該把需求分析一下,看看哪些是功能需求,哪些是非功能需求,如何進行模塊劃分,不同模塊之間會有哪些接口需求等等。由于小張缺少這樣的分析過程,也沒有形成最終的需求規格說明書,所以他最終還是遺漏了非功能需求,以至于產生上邊的問題。(RD需求開發) 
   2、需求分析完成之后,小張還應該進行設計,把用戶所有的功能需求和非功能需求進行統一考慮,形成設計說明書,然后再進行編碼。這樣才會保證代碼結構合理,并且會全面滿足用戶的需求。(TS技術解決方案) 
   3、在開始編碼之前,小張還應該考慮一下不同模塊和組件之間集成的順序,必要的話,還應該跟用戶商量一下,根據用戶需求的優先級來決定模塊組件開發和集成的順序。(PI產品整合) 
   4、為了保證設計和編碼質量,部門還應該組織一些經驗比較豐富的人員來幫助小張發現一些問題,因此,在開發過程中,還應進行設計評審和編碼走查方面的工作。小張自己也應該進行一些單元測試,以便及時發現問題,減少影響和損失。開發完成之后,小張必須交給測試人員進行系統測試,因為自己檢查自己的代碼往往是檢查不出什么問題來的。(VER驗證) 
   5、測試人員測試完成之后,在產品真正上線之前還應該進行驗收和試運行。試運行一段時間,一切都沒有問題之后,再將產品正式切換上線。這樣即使在這個階段發現Bug,也不會造成太大影響。為了確保驗收效率,小張可以事先準備一份驗收大綱。(VAL確認) 

  在CMMI 3 可定義級中,把以上5項作為工程流程領域,無論做怎樣的裁減,這5項都是不能裁減的。它們之間的關系在CMMI 1.2中文版中用下圖來表示: 

  經過這樣一番分析之后,小張終于明白:看來自己是少做了很多工作。于是他決定下一個項目一定按照該流程好好做。 

  小張的項目引起了公司極大重視,為了避免類似問題產生,公司專門進行了以下工作的改進: 
   1、公司過程改進部門分析了問題產生原因,找出了不足,并針對不足制定了相應的改進計劃。(OPF組織過程焦點) 
   2、結合成功項目經驗,經過認真分析和考慮,公司內部制定了軟件開發生命周期規程指南,同時還制定了相應的文檔模板。(OPD組織過程定義) 
   3、為了保證各部門相關人員密切配合,團結協作,各負其責,公司公司專門定義了軟件開發不同角色以及角色職責,確保各種角色充分發揮其作用,保證整個團隊的協作開發。(IPM集成項目管理) 
   4、為了減少項目風險,組織了有經驗的項目經理和開發經理,總結歸納項目風險,建立部門風險知識庫,并要求在項目過程中進行風險管理。(RSKM風險管理) 
   5、為避免重大決策失誤,成立了專家團,制定決策分析依據,在一些項目的重要決策上,幫助項目進行決策分析,以減少風險。(DAR決策分析與解決方案) 
   6、為了便于大家理解和吸收,公司專門組織了相應培訓,同時還進行了需求開發、設計、單元測試方面的培訓,這些培訓使大家受益匪淺。(OT組織訓練) 

  經過這樣的改進之后,公司整體的開發和管理水平都上了一個很高的臺階。項目成功的幾率也大大提高了,公司還專門請來了CMMI評估師,并且順利通過了3級的正式評估,客戶的訂單也就紛至沓來。從這點來說,公司真的應該感謝小張才對啊!

CMMI 4量化級



  過了CMMI 3級,公司各方面工作井然有序,一切都很正常。看上去似乎沒有什么需要改進的了。就這樣過了一年的時間,年底將至,公司正在加緊統計一年來的利潤和成本,統計的結果卻讓人吃了一驚:雖然公司的合同額非常大,利潤卻不是很多,這是什么原因呢?原來公司雖然在軟件開發上做了很多工作,保證了項目順利的開發完成并上線,但是每個項目的真正數據并沒有進行記錄和統計分析。一個項目實際花費了多少工作量,產生了多少費用,到底什么項目利潤比較大,可復用性比較強,什么項目個性化需求太多,成本比較大,可復用性較弱。這些都沒有相應的數據進行支持。 

  發現了這個問題之后,公司又召開了一次經理會議,做出了如下改進措施: 
   1、建立公司內部統一的過程管理平臺,所有項目和產品的開發都要通過過程管理平臺進行管理; 
   2、根據平臺的數據積累,公司制定了統一的量化目標以及相應度量活動。(OPP組織過程績效) 
   3、根據公司的量化目標,每個項目定義自己的量化目標,并且定期進行偏差分析,分析偏差產生的原因,制定相應改進措施.(QPM量化項目管理) 

  經過一段時間,平臺中積累了大量數據。每個項目實際成本、項目進度、風險以及曾經發生過的問題在平臺上都能夠一目了然。在這些歷史數據的幫助下,銷售人員對項目的報價充滿了信心;開發經理做項目計劃的偏差率也越來越小,對項目問題的預測和掌控能力也更加強大。這不,公司正準備進軍CMMI 4呢!

CMMI 5持續改進級



  雖然小張所在的公司剛準備向CMMI 4級發起進攻,不妨先了解下5級也沒有關系,它并沒有我們想象的那么可怕。5級只有兩個域,分別叫組織創新與發展(OID)、原因分析與解決方案(CAR)。這兩個域的主要意思,就是在度量的基礎之上,選擇循序漸進的創新與改善活動,逐步改善,從而達到企業制定的各項指標;同時對發生的問題以及產生的缺陷進行分析,并采取積極預防措施,避免類似問題再次發生。 

  怎么樣,看完這個故事,你是否覺得CMMI離我們并不是那么遙遠呢?是不是也已經被我“迷惑”,對CMMI有些癡迷了呢?呵呵,盡管CMMI有如此多好處,企業也有一萬個理由應該去實施,但是切不可操之過急。要先考察企業的真正需求和現狀,看到底需不需要這些改進,有沒有能力進行改進,改進的過程需要哪些方面的配合等等;否則,改進不但不能產生相應的效果,很可能還會起到相反的作用。要知道:企業的過程改進也是一個項目,需要做好充分的準備,并且做堅持不懈的努力。

3d福彩开奖日期