摘要:
用資料說話,這是當前很流行的話題,本文將資料管理過程劃分成4個層次,並闡述企業如何達到這四個層次。
1.初級量化管理:以資料“感知”專案的狀況(相當於CMMI2級)
2.中級量化管理:通過經驗值來管理專案(相當於CMMI3級)
3.高階量化管理:用PCB進行專案管理(相當於CMMI4級)
4.超級量化管理:持續優化的量化管理(相當於CMMI5級)
1. 前言
量化方面相關資料、理論非常多,如:六西格瑪、統計過程控制(SPC)、過程能力基線(PCB)、軟體度量、功能點法、軟體估算等等。關於量化方面文章,大家可能難以把各文章的內容在腦袋中組織成一面知識網,主要因為各文章按照各自的角度闡述問題。我們需要一個統一的角度來描述這些事情,這裡我們就以CMMI的為參考標準,對所有的量化理論進行“格式化”。
為了闡述方便,這裡我們把與量化有關的內容,全部統稱為“量化管理”,量化管理大致可以分為以下四個級別:
1) 初級量化管理-感知級,相當於CMMI2級。
2) 中級量化管理-經驗級,相當於CMMI3級。
3) 高階量化管理-可預測級,相當於CMMI4級。
4) 超級量化管理-持續優化級,相當於CMMI5級。
高階別的量化管理,必滿足所有低階別量化管理特點,例如高階量化管理,它具備初級量化管理、中級量化管理的特點,又具備本身的特點。
2. 量化管理的第一基本法則
我們為什麼要用“功能點法”來估計專案的規模?
我們為什麼要度量專案的工時、費用?
我們為什麼要做量化管理?
如果我們不用量化管理的方式,也能達到量化管理的效果,而且成本更低,那還要不要進行量化管理?
當我們面對鋪天蓋地的量化理論的時候,當我們要考慮要做量化管理的時候,首先要問自己的問題就是:為什麼要做量化管理?
我們回答一下這個問題:為什麼要用“功能點法”來估計專案的規模?
如果老闆想這樣做,估計他感覺到專案的估算不是很準,他希望通過一些量化的辦法,讓專案的估算做得更準。所以,他的要進行量化管理的目的是:提高估算的準確率。
這就是老闆的完整目標嗎?如果員工們不計成本地把功能點法做好了,估算偏差提高到不超過5%,但估算工作需要的時間由原來的5天增加到50天,這樣老闆會接受嗎?其實老闆還有隱含的約束條件,就是不能太花成本。
如果把老闆的目標再完整表達一下,應該是:在一定的時間成本要求內,提高估算的準確率。
無論我們做什麼量化的工作,都必須先明確:
量化管理第一基本法則:明確量化管理的目的及約束條件。
“功能點”法是比較複雜而且難掌握的軟體規模度量辦法,有可能在研究使用的過程中,才發現不值得用“功能點”法,大家再反過來看看目標:在一定的時間成本要求內,提供估算的準確率,而不是:在一定的時間成本要求內,用功能點法提高估算的準確率。這時,大家可以選用別的辦法,或者對“功能點”法進行改造。在制定目標的時候,不要把具體的方法寫進去,目標是很高層次的,把辦法寫進去,也就是相當於限制了思路。
有人可能會說,“在一定的時間成本要求內,提高估算的準確率”,這個目標太虛了吧,寫了等於沒寫。其實正是因為沒有明確這個“虛”的目標,很多量化管理的工作變成就是為了量化管理而量化管理。其實六西格瑪、統計過程控制(SPC)、過程能力基線(PCB)等量化管理辦法,都要有很明確的目的。
如果企業對量化管理的目標都不明確的話,那就非常不好意思了,連初級水平都不是,是屬於“無級別”的水平。
3. 初級量化管理-感知級
有很多軟體企業,在專案過程中,須提交一些進度報告、總結報告,報告中可能會有進度情況、成本情況的一些資料。收集這些資料的目標也十分明確,就是想了解專案的進度、成本情況,並與計劃的情況進行比較,採取必要的措施。
例:進度報告(節選)
在軟體測試中,會記錄各類缺陷的情況,並且在測試報告中報告缺陷的一些資料。專案組會根據缺陷方面的資料,分析軟體的質量,並考慮後續的改進措施。
例:測試報告(節選):
總缺陷數量:50
建議:需要在後續版本中修復沒有解決的缺陷。
“感知級”的企業,有這樣的一些特點:
1) 有明確的度量目的。
2) 有度量值的比較基準,如例子中的計劃完成時間與實際完成時間的對比。
3) 被度量物件的屬性定義得比較清楚,如上例中缺陷的屬性。
4) 對度量的結果進行分析,並且要考慮改進措施。
“感知級”的企業,應該滿足CMMI2級中MA(度量)這個PA的要求的(請參考CMMI相關標準)。
但下面這種情況,算不算“感知級”呢?
在專案總結報告中,統計專案進度、成本等情況,分析與計劃比較的差異,提出對以後有用的改進意見。
如果只在專案總結報告的時候,才進行度量的話,是不能算“感知級”的,度量的結果要能用於專案管理,而不是專案結束後了統計出到一些數字,儘管這些數字可以用來改善以後的工作,但對該專案本身工作的改善已經沒有任何作用了。
達到初級量化管理的企業,能明確量化管理的目標,通過合適的度量辦法,“感知”專案的各類引數,並根據各度量指標的實際數值,採取改善專案行為的措施。
4. 中級量化管理-經驗級
進行量化管理過程中,我們能得到各類引數值,但該引數值應該怎樣才算合理呢?例如進度偏差多少才算合理?遺留缺陷數量多少個才算合理?
前面提到用“功能點”法來估算專案的規模,然後我們可以由規模匯出工作量,但規模與工作量是怎樣的一個關係呢?怎樣根據規模匯出工作量呢?相同規模的軟體,不同的軟體企業來做,匯出的工作量是不一樣的。
進行初級量化管理的時候,企業通過實際的引數值,來“感覺”專案的狀況,當積累足夠多資料的時候,管理者可能會找出專案間的一些共同的資料特點,如可以統計出“平均值”、“最大值”、“最小值”,這些資料,可以描述組織整體的效能。
當資料積累比較多的時候,組織級的經驗資料,可以用來管理以後的專案,例如可以用組織的平均值做為量化管理的要求。這個時候,就達到了中級量化管理水平了。
中級量化管理有以下特點:
1) 對歷史資料進行一定的分析,得出一些數值,從這些資料能大概掌握企業的能力狀況。
2) 根據大概的企業能力狀況,定出專案量化的管理目標,並用於管理專案。
3) 利用歷史的經驗資料,由專案規模匯出工作量。
例:專案規模與工作量的關係
根據歷史的經驗資料,可以繪出規模與工作量的關係,由這個關係可用來估計新專案的工作量。如果沒有大量的經驗資料,這是不能做到的。
CMMI3級中,並沒有專門的PA是與度量直接對應的,為什麼說中級量化管理與CMMI3級的要求是對應的呢?CMMI3級的重要特點之一就是,有組織級的度量庫,並且專案依據組織級度量庫的資料,定義和管理專案的過程。中級量化管理與初級量化管理的最大區別就是,度量資料已經上升到組織級別,每個專案都可以利用組織的“經驗”(即歷史資料)來管理專案。
5. 高階量化管理-可預測級
麥當勞的薯條不少人都吃過,味道很好,而且每家麥當勞的薯條味道很一致。麥當勞是如何做到的呢?我們分析一下生產過程,我們發現薯條從原材料開始,到後續加工,油炸的時間,薯條炸出來後多少分鐘沒有售出,就銷燬,整個過程都有嚴格的控制,而且很多地方是量化控制,時間甚至精確到秒。嚴格的過程控制,保證了薯條能高質量地穩定地產出。全球的麥當勞,都用同一的嚴格過程來管理,所以保證了全球的麥當勞的食品都是高質量的而且是高度一致的。從另外一個角度說,只要麥當勞按照既定的過程來生產食物,就可以“預測”出最終食物的情況,麥當勞將對最終產品的質量非常有信心。
那麼我們軟體開發,是不是也希望能達到這樣的效果呢?大家可以回答一下這個問題:如果專案的規模、採用的技術、人員的水平等因素都確定了,那麼您是否可以很有信心去預測這個專案的最終結果呢?
如果按照中級量化管理的辦法,還是比較難達到這個效果的,“可預測級”的量化管理應該是怎樣的呢?
在回答這個問題之前,我們需要先搞清楚什麼是“穩定”的過程,什麼是“不穩定”的過程。我們以“煮飯”為例,說明什麼是穩定的過程什麼是不穩定的過程。
大家小的時候可能都野炊過,野炊煮出來的飯可能普遍都是不太好吃的,不是太硬就是太軟。為什麼煮出來的效果會差異這麼大呢?仔細分析一下,我們發現很多因素會影響煮飯的最終質量,如:飯鍋、火候、煮的時間、水量等。當我們用野炊的方式煮飯時,這些因素都不太好控制,所以出來飯的質量變化就會比較大了。
我們換一種方式來煮飯,用電飯煲煮飯,失手的機率是不是極大地降低了?為什麼會這樣呢?當我們用電飯煲的時候,飯鍋、火候、時間等因素都被“固定”在理想範圍了,所以最終出來的結果是比較穩定而且質量比較好。
再看看我們的軟體開發過程,1級的企業做出來的軟體,結果是很不穩定的,而4級的企業,能穩定地輸出比較好的結果。4級的軟體企業,只需要確定了專案的規模、性質、技術、人員技能等因素後,只要按照既定的過程來生產軟體,那麼就可以很有信心地“預測”這個專案的最終結果,這個“預測”是有很高的可信度的。而CMMI2、3級的企業,雖然也能預測專案的最終結果,但只能“大概”預測,4級企業的預測能準確估計出最終結果的範圍,而且這個範圍是量化的。
CMMI2、3級的企業,過程還不能說是穩定的,而4級的企業,過程一定是穩定的。同樣,初級、中級量化管理,用資料管理的過程,也不能說是穩定的,而高階量化管理,用資料管理的過程,一定是穩定的。
用資料管理過程,要進入“高階”階段,就必須瞭解統計過程控制(SPC)的學問,要了解什麼是基線(Baseline),所謂的六西格瑪管理,其實就是統計過程控制。
例:某公司每週對專案的CPI(成本指數,這是專案掙值管理中的一個重要概念,請參考相關資料)進行度量,分析專案的實際效能。
通過分析,發現CPI波動範圍比較寬,從最低的10%到最高的210%,這樣意味著最終專案的成本很可能會與預算相差1倍以上。作為管理者來說,這是不可以接受的,管理者希望最終的成本與預算相差在比較小的範圍內。
為什麼CPI會波動這麼大呢?影響CPI波動的因素非常多,有估算、計劃、過程、人的能力等等,如果要收窄波動,就需要在這些影響因素上下功夫,想辦法減少這些影響因素的影響。經過改進後,專案的CPI情況如下:
以上的做法是不是已經達到統計過程控制的層次呢?還不是,我們看看下圖。
這個控制圖,把整個專案過程分為四個階段:需求階段、設計階段、編碼階段、測試階段。每個階段執行的過程不一樣,工作的性質不一樣,故繪製控制圖的時候需要予以區分。對不同階段的CPI資料點繪製XmR圖,得出不同階段的中值與上下限。用不同階段的CPI的中值及上下限來監控專案的行為,專案管理的重點就是監控各資料點有沒有超出上下限,對超出上下限的資料點,分析其原因並採取措施,使之迴歸到範圍內。
所謂的統計過程控制是這樣的一個過程:
1) 進行統計過程控制的過程是穩定的,影響該過程的各類因素,都被很好地控制在一定的範圍內,故最終的結果也是在可控的範圍內的並且是可預測的。
l 什麼叫穩定?簡單地說,就是在給定的條件下,產出的結果是在一定可接受的範圍內的。如:只要專案性質和以前的專案差不多,專案的人員水平和以前的大體一致,執行的過程也和以前一致,那麼該專案的結果應該是在可預測的可接受的範圍內的。如果從統計學的角度,可以對資料點進行穩定性測試,判斷其是否穩定(詳細資訊請參考SPC方面的書籍)。
2) 要對過程進行足夠地細分,才能清晰地區分出各影響因素,使度量出來的資料點很容易識別是訊號還是噪音。在進行資料分組的時候,保證資料之間的可比性是非常重要的,蘋果只能跟蘋果比,不能蘋果跟香蕉比。很多做CMMI4級的企業,很容易犯這樣的錯誤,沒有很好地進行資料分組,進行資料分組的時候,要充分考慮專案的性質、人員的水平、所執行的過程等因素。資料分組是否合理的重要標準就是,是否能清晰區分出訊號還是噪音。
l 什麼是訊號?訊號可以說是“過程之音”,就是過程本身內在的特點所引起的正常波動,如專案的性質、技術、執行的過程、人員的水平等。訊號反映了過程的正常的能力。
l 什麼是噪音?噪音表明實際工作中出現了一些過程之外的特殊情況,如由沒有具備專案管理技能的人來擔當專案經理工作,而當前過程要求的是需要具備專案管理能力的人來負責的,這樣過程執行效果肯定會與預計的效果發生比較大的偏差,從而超出上下限範圍。訊號體現了過程正在被正常執行,而噪音則反映出過程正在被偏離執行。
3) 資料點的偏差,是由公共原因(Common Cause)和可歸屬原因(Special Cause)共同作用下導致的。在控制限內的資料點的偏差,主要是由公共原因導致的,而超出上下限的偏差,則是由公共原因和可歸屬原因共同引起的。
l 什麼是公共原因?公共原因是指過程本身特有的引起偏差的因素,如果人員的水平波動、專案性質的差異、執行過程的力度差異等,這些引起偏差的因素在本過程內已經被削弱,但不可能完全被消除,這些因素共同作用下,會引起資料點的正常波動。訊號是由公共原因引起的。
l 什麼是可歸屬原因?可歸屬原因是指出現了過程沒有考慮或者違背了過程的情況,引入了新的引起波動的因素,如:沒有安排好相應培訓、沒有按過程執行等。出現了可歸屬原因,將會加大資料點的波動,從而超出上下限範圍。噪音是由公共原因和可歸屬原因共同作用引起的。
4) 通過統計學的辦法計算出效能基線,如用XR圖、XmR圖。
5) 用效能基線進行專案管理,專案管理的重點是監控超出範圍內的資料點,分析其原因,想辦法排除可歸屬原因。消除可歸屬原因後,就可以消除由於可歸屬原因引起的波動,這樣資料點就會重新回到上下限範圍內。組織級應該有詳細的進行可歸屬原因分析及問題解決的指導,專案經理根據該指導來排除可歸屬原因。
SPC的原理比較深奧,要深刻理解是不容易的。SPC在製造業等其它行業已經被廣泛應用,其基本原理就是通過改造生產流水線,消除或者限制影響產品規格的因素,使產出的產品規格在一定的範圍內並符合要求。
這個原理要用到軟體生產,就沒有那麼簡單了,影響軟體質量的因素非常多,需要“功力深厚”的人分析各影響因素,並通過改造過程來消除或者削弱這些因素的影響。在這個層面上,用資料管理過程的“檔次”已經提高了一大截,這時候資料管理的過程是穩定的過程,該過程的中值和上下限反映出該過程的能力。
這裡我們引出一個新的問題,什麼是有能力的過程?什麼是沒有能力的過程?什麼是能力高的過程?什麼是能力低的過程?
不穩定的過程,談不上能力之說,穩定的過程才能談能力。穩定的過程,可以通過不斷地提高效能來提高能力,如收窄效能基線的上下限範圍,使中值更接近理想的目標值等,這些都體現了能力的提高。
6. 超級量化管理-持續優化級
高階量化管理主要講述的是如何把不穩定的過程變成穩定的過程,而超級量化管理主要講述的是把有能力的過程變成更加有能力的過程。
前面提到的CPI中值和上下限,有可能不滿足商業目標的需要,如CPI平均值達不是所期望的值,上下限的範圍太寬,這樣就有必要想辦法做一些改進,提高能力,並且能力提高後的過程同樣也是穩定的過程。
那麼有什麼辦法可以提高能力呢?
1) 改進過程。過程的效能基線的中值及上下限,是由公共原因所引至的,要提高其效能,必須從這些公共原因入手,對訊號進行分析,想辦法進一步削弱公共原因引起的偏差,想辦法改造過程,使中值符合要求。
2) 採用新技術。考慮引入新的技術,並調整相應的過程,來提高過程的效能。
3) 對噪音進行原因分析。噪音是由公共原因和可歸屬原因共同作用引起的,對每個噪音的可歸屬原因進行詳細的分析,將很可能找到改進的機會。
分析過程的可改進地方是比較複雜的,有可能需要對過程進行更深一步的細分,可能會發現原來的資料分組達不到要求,需要增強粒度,以便區分出更多的公共原因,找出可改進點。另外,原來不需要進行基線級別管理的過程,可能也會因為商業目標的需要,需要建立基線並進行基線級別的管理。
在這個級別上用資料管理過程意義在於,通過資料來監控過程的改進效果,比較能力的變化,為決策提供依據。當形成新的更有能力的能力基線時,企業將用新的能力基線來管理專案。
SPC的建立及優化過程的成本是很高的,但進行SPC管理的過程的成功概率是非常高的,企業根據自己的商業目標需要,選擇需要進行SPC管理的過程,並不斷優化,使企業具備越來越強的競爭力,而這種競爭力是別的企業難以模仿並難以超越的。
7. 總結
由“感知級”到“經驗級”,再到“可預測級”、“持續優化級”這個過程是不可跨越的,不同級別的“用資料管理過程”,都是由商業目標驅動的,只是不同級別所達到的量化管理程度不一樣。
“感知級”通過軟體度量,大概瞭解專案的狀況,並作為工作調整的依據。
“經驗級”通過軟體度量,對比專案的歷史經驗資料,把握專案的狀況,並進行相應的工作調整。同時,專案的歷史經驗資料,可供估算等工作進行參考。
“可預測級”,把“經驗級”推向一個更高的高度,對影響問題的因素進行詳細的分析,排除和削弱影響專案效能的各種因素,對歷史經驗資料進行合理分組,統計出效能基線,並用於專案管理。用基線來管理的過程都是穩定的過程,這些過程從統計角度來說都可以準確地預測出將來的結果。
“持續優化級”是“資料管理過程”的最高階別,達到這個級別意味著企業能根據商業目標持續的優化SPC管理,使企業形成別的企業難以模仿並難以超越的核心競爭力。
那是不是越高階越好呢?企業是不是都應該追求更高階的量化管理呢?
答案是否定的。
要實施“可預測級”的量化管理,是有條件限制的,就是過程要穩定,穩定就意味著專案間要有可比性,採用的技術、過程要大體一致。如果一個企業是創新型的企業,經常用新技術做新專案,這樣專案的可比性就比較弱,就很難具備穩定的基礎條件,很難形成基線。
所以,不能說CMMI級別越高的企業,就一定比級別低的企業管理要更好一點,有時候企業的特點就決定了企業不可能做到4、5級。各企業的最高領導,關鍵是清楚理解自己的商業目標,理解高階別的量化管理能帶來什麼幫助。
那為什麼要“用資料管理過程”呢?
如果有一個非量化管理的辦法,成本更低,並且能更有效地達到目的,那我們當然就採用那個辦法,而不會片面地追求“用資料管理過程”了。所有想“用資料管理過程”的人士,都應該認真思考這個問題,並考慮哪種層次的量化管理級別適合您的商業目標。