01 前言
本篇文章是麥哲思科技 任老師的見解,關(guān)注任老師很久了,總覺得一些浮于紙面的理論到了任老師口中就變成了活脫脫的實(shí)踐,這里給麥哲思和任老師打個(gè)廣告...
原文鏈接:https://measures.blog.csdn.net/article/details/98940870
02 CMMI和敏捷的目標(biāo)定位
? ? CMMI是用來評(píng)價(jià)組織級(jí)能力的模型,是指導(dǎo)組織持續(xù)進(jìn)行過程改進(jìn)的模型,它給出了過程改進(jìn)的路線圖。
? ? 敏捷方法是用來指導(dǎo)解決快速高質(zhì)量交付高價(jià)值產(chǎn)品的思想與框架。
? ? 所以:
? ? 1) CMMI給出了what to do, 敏捷給出了how to do。
? ? CMMI給出了很多實(shí)踐,敏捷也給出了一些儀式,但二者的詳細(xì)程度、抽象層次不同。例如:
? ? 二者都要做計(jì)劃,CMMI要求做任務(wù)拆分,要做規(guī)模估算、工作量估算,要有進(jìn)度表,要做計(jì)劃評(píng)審等。敏捷給出了迭代策劃會(huì)議的解決方法,實(shí)現(xiàn)了CMMI中EST,PLAN實(shí)踐域的實(shí)踐。
? ? 二者都要做計(jì)劃跟蹤,敏捷給出了每日站立會(huì)、迭代評(píng)審、迭代回顧會(huì)議實(shí)現(xiàn)了CMMI中MC實(shí)踐域的實(shí)踐。
? ? CMMI要做驗(yàn)證與確認(rèn),敏捷要做檢視,CMMI中有VV與PR兩個(gè)實(shí)踐域,敏捷有結(jié)對(duì)編程、測(cè)試驅(qū)動(dòng)的開發(fā)、迭代評(píng)審等儀式。
? ? ? what to do 與how to do 是對(duì)具體做法的不同抽象層次,how to do 可以有很多種不同的做法,敏捷實(shí)踐是其中一種。CMMI并不排斥敏捷,它只是定義了what to do。
? ? 敏捷中有價(jià)值觀、原則,在符合敏捷的價(jià)值觀與原則之下,有各種各樣的敏捷方法、敏捷儀式,敏捷價(jià)值觀與原則抽象了儀式背后的目的,是對(duì)how to do的思想的提煉,但是仍然是處在how to do的層次上。
? ? 以吃飯來舉例:

CMMI模型的鼻祖Watts Humphrey老先生是偉大的,他負(fù)責(zé)開發(fā)了CMM,還繼續(xù)開發(fā)了小組軟件過程(TSP)與個(gè)體軟件過程(PSP),試圖解決團(tuán)隊(duì)級(jí)與個(gè)人級(jí)的how to do的問題,解決CMMI落地的問題。PSP給出開發(fā)人員能力提升的路線圖,包括了個(gè)人的技術(shù)能力與管理能力,TSP給出了不超過10人的團(tuán)隊(duì)如何采用迭代的生命周期模型進(jìn)行開發(fā),PSP與TSP試圖解決CMMI在項(xiàng)目級(jí)、在個(gè)人級(jí)如何做的問題,但是它們并沒有吸收更多的敏捷元素,沒有在業(yè)內(nèi)流行開來,很是可惜。
? ? 企業(yè)可以采用CMMI+TSP+PSP搭建自己的管理體系,當(dāng)然也可以采用CMMI+看板+XP+Scrum+LeSS搭建自己的管理體系。what to do 與how to do 本身并不矛盾。
? ? how to do 不能否定what to do, 比如你篤信過午不食是最正確的,但是你不能據(jù)此來否定人要吃飯。
2) CMMI側(cè)重于建立組織級(jí)的能力,大多數(shù)敏捷方法側(cè)重于團(tuán)隊(duì)級(jí)的能力。
? ? CMMI最初是美國(guó)國(guó)防部為評(píng)價(jià)一個(gè)組織的開發(fā)能力而定義的模型,它是站在組織級(jí)的角度看待過程能力。它定義了高層管理者的治理職責(zé),要求組織級(jí)要定義管理的方針、流程、裁剪指南、模版等,組織級(jí)要進(jìn)行流程執(zhí)行情況的檢查,要給團(tuán)隊(duì)提供資源、工具、培訓(xùn)等支持,組織級(jí)要采集經(jīng)驗(yàn)教訓(xùn)、典型案例、改進(jìn)建議、度量數(shù)據(jù)等進(jìn)行持續(xù)改進(jìn),要將組織的規(guī)范固化為大家的工作習(xí)慣。
? ?? TSP是側(cè)重于建立團(tuán)隊(duì)級(jí)的能力,PSP是側(cè)重于建立個(gè)人級(jí)的能力。
? ?? SCRUM,XP等敏捷方法大都是側(cè)重于構(gòu)建團(tuán)隊(duì)級(jí)的能力,給出了一個(gè)小團(tuán)隊(duì)的角色劃分、管理實(shí)踐與技術(shù)實(shí)踐,如果需要進(jìn)行大產(chǎn)品的開發(fā),可以采用規(guī)?;艚莸姆椒?,如LeSS, SAFe等。當(dāng)團(tuán)隊(duì)規(guī)模越大時(shí),需要的管理活動(dòng)就越多,SAFe之類的大規(guī)模敏捷框架受到的質(zhì)疑就比較多。組織級(jí)敏捷文化的形成需要借助變革管理的理論、方法來輔助Scrum, XP, LeSS, SAFe等敏捷方法構(gòu)建組織級(jí)的能力,在組織內(nèi)如果不能形成敏捷文化,敏捷不能持久。

? ? 上述這個(gè)分類圖,可以厘清各種模型、框架、標(biāo)準(zhǔn)的定位。
? ?? 沒有必要絕對(duì)的評(píng)價(jià)各種方法的誰好誰壞,只能講在某種場(chǎng)景下,誰最適合。
二 思想焦點(diǎn)
? ?? 1) 流程的重要程度。
? ?? CMMI強(qiáng)調(diào)通過規(guī)范的流程,將人、技術(shù)、工具集成在一起,從而產(chǎn)生好的結(jié)果。
? ? 敏捷依賴人的經(jīng)驗(yàn)+做事的原則快速交付高質(zhì)量的產(chǎn)品,敏捷并不否定流程的重要,只是和個(gè)體與協(xié)同相比,不如后者重要。
? ? CMMI重視流程的重要性,但是沒有強(qiáng)調(diào)簡(jiǎn)潔的流程、增值的流程、無浪費(fèi)的流程更有價(jià)值!QA要對(duì)項(xiàng)目的合規(guī)性進(jìn)行檢查,而敏捷認(rèn)為非增值的合規(guī)活動(dòng)是一種浪費(fèi)。
? ? 在實(shí)踐中,很多項(xiàng)目追求合規(guī)時(shí),往往迷失了目標(biāo),為規(guī)范而規(guī)范。而敏捷認(rèn)為為了產(chǎn)生好的結(jié)果,應(yīng)該靈活地配置流程,靈活的配置流程比預(yù)定義的流程更重要。
? ? 從本質(zhì)上來講,二者都是為了解決更好、更快交付的問題,但是解決問題的方式不同。這是在對(duì)待流程的認(rèn)識(shí)上與實(shí)踐中,敏捷與CMMI的本質(zhì)差別。
? ? 2)文檔的重要性與多少。
? ? 敏捷宣言中明確提到:能夠工作的軟件勝過完備的文檔。不是沒有文檔,而是可以工作的軟件比文檔更重要。
? ? 敏捷中的文檔數(shù)量少,文檔內(nèi)容簡(jiǎn)化、文檔形式靈活,編寫剛剛好的文檔即可。
? ? CMMI的每條實(shí)踐在評(píng)估時(shí),要從制品和訪談兩個(gè)維度進(jìn)行考察。
? ? CMMI并沒有要求文檔一定要有多少個(gè),一定要包含什么內(nèi)容,一定要什么格式,一定有多么正式。
? ? 但是:
? ? ? ?? ?a) 由于CMMI內(nèi)容的完備性,需要證明某些PA是否滿足了,需要有證據(jù)。
? ? ? ?? ?b)由于實(shí)踐中大家對(duì)CMMI的誤解,很多組織過度準(zhǔn)備了證據(jù)。
? ? 所以第1種原因造成的文檔增加與第2種原因造成的文檔增加其必要性是不同的。
? ? 敏捷認(rèn)為面對(duì)面的溝通傳遞信息比文檔傳遞信息更高效。而CMMI并沒有在how to do的層級(jí)強(qiáng)調(diào)這一點(diǎn)。
? ? 需求、設(shè)計(jì)、測(cè)試用例這些工程制品無論敏捷還是CMMI都是有的,只不過在敏捷里給出了明確的建議而已,采用product backlog、 用戶故事、CRC卡片、設(shè)計(jì)草圖、測(cè)試代碼等。拿需求文檔來舉例:CMMI要求有客戶需求、產(chǎn)品需求,可以映射為敏捷中的用戶故事、用戶故事的驗(yàn)收標(biāo)準(zhǔn)。CMMI要求要區(qū)分必須的需求與期望,可以映射為敏捷中的需求劃分優(yōu)先級(jí)。CMMI要求要包含接口需求與約束,要有系統(tǒng)的操作概念。接口需求與約束在敏捷中可以表現(xiàn)為技術(shù)故事或約束故事,操作概念可以映射為在制作故事地圖時(shí)梳理出來的客戶的作業(yè)流程。
? ? 計(jì)劃書、計(jì)劃跟蹤記錄這些管理制品無論是敏捷還是CMMI也是有的,只不過在敏捷里給出了明確的建議而已,采用產(chǎn)品路線圖、發(fā)布計(jì)劃、迭代計(jì)劃、任務(wù)白板、燃盡圖等。但是CMMI對(duì)計(jì)劃的內(nèi)容做了比較完備的要求,比如要有人員能力的獲取計(jì)劃(培訓(xùn)計(jì)劃或人員配備招聘計(jì)劃)、資料的管理計(jì)劃、風(fēng)險(xiǎn)的管理計(jì)劃等等。而在敏捷策劃時(shí),這些計(jì)劃是根據(jù)需要來定義的,團(tuán)隊(duì)根據(jù)經(jīng)驗(yàn)想到了就做,沒想到就等出了問題再去解決。
? ? 從主要的工程制品與管理制品的要求上,其實(shí)二者并沒有本質(zhì)的差別。那CMMI的文檔多在什么地方呢?
? ? ? ? ? a)文檔內(nèi)容的完備性。如上面我們所舉的項(xiàng)目計(jì)劃的例子。
? ? ? ?? ?b)CMMI中有支持類的PA,包含了質(zhì)量保證、配置管理、決策與解決方案、度量與分析、根因分析與解決方案,這些PA的活動(dòng)都要有計(jì)劃,這些活動(dòng)計(jì)劃可以是單獨(dú)的文檔,也可以是scedule中的活動(dòng),這些活動(dòng)的實(shí)際執(zhí)行也要有記錄。
? ? ? ? ?c) CMMI中有組織級(jí)的過程管理類的PA,包含了組織過程焦點(diǎn)、組織過程定義、組織過程性能、組織級(jí)培訓(xùn)、組織性能管理。這些PA的制品是敏捷方法中沒有涉及到的。
? ? 對(duì)于文檔的多少,我們需要冷靜分析:
? ? ? ??????? ?該不該有?
? ? ? ? ?????? 如果需要,完備到什么程度?
? ? CMMI說了要有某些證據(jù),說了,讓大家聽起來覺得需要好多文檔。
? ? 敏捷沒說,沒說不代表實(shí)踐中不需要有!不能回避,不能視而不見,否則就是皇帝的新裝了。
? ? 在實(shí)踐中,可以根據(jù)文檔的價(jià)值來決定文檔的多少、表現(xiàn)形式與內(nèi)容多少:
? ??? ? a) 用戶需要的文檔必須有。
? ??? ? b) 工程類的文檔,直接輔助我們來開發(fā)產(chǎn)品的文檔,如需求,設(shè)計(jì),測(cè)試用例等,盡量有。
? ? ??? c) 管理類的文檔,幫助團(tuán)隊(duì)來開發(fā)產(chǎn)品,交付產(chǎn)品的文檔,如計(jì)劃,計(jì)劃跟蹤結(jié)果等,盡量少。
? ?? ?? d) 記錄類的文檔,只是記錄我們的工程活動(dòng)與管理活動(dòng)的結(jié)果的文檔,盡量無。
? ? 敏捷就是平衡靈活性與穩(wěn)定性,平衡的能力,至關(guān)重要。
? ? 3)如何應(yīng)對(duì)變化?
? ? 敏捷的流程是隨需而變,是經(jīng)驗(yàn)型過程控制,是在團(tuán)隊(duì)級(jí)靈活變化的,是以變化應(yīng)對(duì)變化,擁抱變化,不是以不變應(yīng)萬變。不變的是原則,變化的是具體做法。
? ? CMMI的三級(jí)強(qiáng)調(diào)已定義的流程,組織級(jí)統(tǒng)一定義了流程,項(xiàng)目組可以裁剪,但是如果組織級(jí)的約束太多,項(xiàng)目組就懶得去裁剪,而是表面上合規(guī),實(shí)際自己按自己的套路去做。當(dāng)外部環(huán)境發(fā)生了改進(jìn),需要對(duì)流程修改時(shí),需要在組織級(jí)統(tǒng)一修改流程,經(jīng)過多個(gè)作業(yè)環(huán)節(jié)的認(rèn)可后才可以變更,這影響了應(yīng)對(duì)變化的速度。
? ? 如果CMMI的組織級(jí)流程是一套原則+簡(jiǎn)化的流程而不是一套完備的流程,賦予團(tuán)隊(duì)更多的流程決策權(quán)力、提供更大的靈活性,是否就敏捷化了呢?這個(gè)問題值得思考。
? ? CMMI在what to do給出了實(shí)踐,但是對(duì)how to do并沒有給出融合敏捷思想的建議,這是導(dǎo)致大家對(duì)CMMI有誤解的原因之一。雖然在CMMI 1.3中和CMMI2.0中給出了一些在特定敏捷環(huán)境下,CMMI從what to do 到how to do的解釋說明,但是并沒有觸及根本。
三 核心理念
? ? 敏捷宣言,敏捷的12個(gè)原則以及各種敏捷方法自己的原則,構(gòu)成了敏捷的價(jià)值觀,這些是敏捷的思想理念,是敏捷的根本。
? ? CMMI推崇的價(jià)值觀,理想以及自己的原則是什么?CMMI沒有明確的喊出來!CMMI的共性實(shí)踐可以認(rèn)為代表了它的一些核心理念,不是全部,它是通過實(shí)踐來描述的,沒有提煉、抽象出來。CMMI2.0推出以后,我試圖概括了CMMI的核心價(jià)值觀如下,這僅是我的理解,并非CMMI的官宣:
? ? ? ? ? ?a)商業(yè)目標(biāo)驅(qū)動(dòng)改進(jìn)
? ? ? ? ? ?b)轉(zhuǎn)型過程實(shí)現(xiàn)目標(biāo)
? ? ? ? ? ?c)定量數(shù)據(jù)量化性能
? ? ? ? ? ?d)固化習(xí)慣成為文化
? ? ? ? ? ?e)高層支持全員參與
? ? ? ? ? ?f)循序漸進(jìn)持續(xù)優(yōu)化
? ? 敏捷的價(jià)值觀描述的比較簡(jiǎn)單、清晰,辨識(shí)度很高,更接底氣,更容易打動(dòng)人!這對(duì)于敏捷的宣傳推廣起到了很好的助力!不容易讓人誤解。
? ? 當(dāng)人們一提到敏捷時(shí),首先想到的是快速交付產(chǎn)品,而提起CMMI時(shí)首先想到的是文檔和過程。這種第一印象未必準(zhǔn)確、未必正確,但是卻是有很大的輿論效應(yīng)。
四 內(nèi)容范圍
? ? 1)CMMI完備,敏捷簡(jiǎn)單。
? ? CMMI試圖規(guī)避在開發(fā)與管理中遇到的各種風(fēng)險(xiǎn),所以總結(jié)了很多實(shí)踐,是相對(duì)完備的集合,在完備性上鮮有類似的模型。CMMI的實(shí)踐覆蓋了管理、技術(shù)、支持、過程改進(jìn)的活動(dòng),一個(gè)組織內(nèi)的采購(gòu)、開發(fā)、服務(wù)、人力資源管理的業(yè)務(wù)都可以參照進(jìn)行改進(jìn)。CMMI中包含了組織級(jí)支持團(tuán)隊(duì)交付產(chǎn)品或服務(wù)的基礎(chǔ)設(shè)施的建立、企業(yè)文化的形成。單一的敏捷方法中則缺少這些基礎(chǔ)設(shè)施與文化建立的儀式,需要融合多種敏捷方法或輔助以其他方法才可以建立敏捷的基礎(chǔ)設(shè)施與文化。
? ? 敏捷試圖規(guī)避在開發(fā)與管理中遇到的最主要的風(fēng)險(xiǎn),所以總結(jié)了很少的儀式。當(dāng)在實(shí)踐中遇到具體的問題,再來及時(shí)應(yīng)對(duì),它是探索式的管理,不是預(yù)測(cè)式的管理。不同的敏捷方法有不同敏捷儀式,百花齊放,因?yàn)椴煌拿艚莘椒ǖ膫?cè)重點(diǎn)不同。Scrum側(cè)重于單團(tuán)隊(duì)的管理活動(dòng),XP側(cè)重于單團(tuán)隊(duì)的技術(shù)活動(dòng),LeSS、SAFe側(cè)重于多團(tuán)隊(duì)的協(xié)同活動(dòng)。
? ? 如果要做一個(gè)敏捷方法與CMMI的映射,需要將多種敏捷方法的儀式與CMMI的實(shí)踐域進(jìn)行映射才可以覆蓋到。單一的敏捷方法在完備性是無法實(shí)現(xiàn)CMMI模型的實(shí)踐要求的。
? ? 而一個(gè)組織的實(shí)際做法往往是介于CMMI與敏捷之間,畫一個(gè)示意圖大概如下:

2)二者的很多思想都是共通的。
? ? CMMI的大部分實(shí)踐與敏捷的儀式其實(shí)思想是相同的,在很多地方都是有共識(shí)的,都是來自于歷史的成功組織的最佳實(shí)踐。
? ? 他們都要做計(jì)劃,都要做計(jì)劃跟蹤,都需要配置管理,都要度量數(shù)據(jù),都要根因分析,都要做反思回顧,都要做驗(yàn)證與確認(rèn)等等。只不過是whao to do 與how to do的區(qū)別,活動(dòng)的抽象層次不同。
? ? 高成熟度的實(shí)踐是CMMI特有的,它們也可以嘗試應(yīng)用于敏捷環(huán)境,但并非必須,當(dāng)敏捷的實(shí)踐在組織內(nèi)成熟到一定程度后也可以做統(tǒng)計(jì)管理。
五 推廣難度
? ? CMMI模型區(qū)分了連續(xù)式(自定義視圖)與階段式表示方法(預(yù)定義視圖),連續(xù)式表示方法允許企業(yè)自選過程域進(jìn)行改進(jìn),而階段式表示方法則預(yù)定義了路線圖,規(guī)定了要包含的PA,階段式表示方法的評(píng)估等級(jí)稱為組織的成熟度等級(jí),連續(xù)式表示方法的評(píng)估等級(jí)稱為PA的能力等級(jí)。前者在行業(yè)內(nèi)進(jìn)行標(biāo)桿對(duì)比時(shí),概念簡(jiǎn)單,后者則逐個(gè)PA進(jìn)行比較,在實(shí)踐中絕大多數(shù)的組織都選擇的是階段式比表示方法,使連續(xù)式表示方法形同虛設(shè)。這種結(jié)局也是違背了CMMI模型的初衷,它是期望組織能夠針對(duì)自己的實(shí)際問題,有選擇性的進(jìn)行自定義改進(jìn)路線圖進(jìn)行提升的,而不是以通過評(píng)估為目的的“改進(jìn)”。
? ?? CMMI模型1.3版本的構(gòu)件中目標(biāo)是評(píng)估時(shí)必須考察的,必須滿足的。實(shí)踐是期望的,但是企業(yè)在理解CMMI模型、實(shí)際執(zhí)行時(shí),咨詢顧問在咨詢時(shí),評(píng)估師在評(píng)估時(shí)往往是把實(shí)踐也作為了必須滿足的。這也導(dǎo)致了CMMI模型的初衷與現(xiàn)實(shí)的巨大差距!
? ?? 從人的本性來講,人們更喜歡簡(jiǎn)單的事物,不喜歡被約束,所以原則+少量的儀式+團(tuán)隊(duì)的自信這種模式更容易被開發(fā)人員認(rèn)可,從而流行起來。
? ? 但,這并不認(rèn)為敏捷就比CMMI容易推廣。
? ? CMMI在推廣中面臨形似而神非的現(xiàn)象,敏捷在推廣中也面臨類似的問題。
? ? 一個(gè)組織在導(dǎo)入敏捷時(shí),要選擇自己認(rèn)可的價(jià)值觀、原則、儀式、工具等等,也要定義規(guī)范,推廣規(guī)范,需要有教練指導(dǎo)這些原則、儀式、工具的落地。
? ? 很多組織做了迭代策劃、每日站立會(huì)議、迭代評(píng)審、迭代回顧,但是實(shí)際旁觀他們的行為,卻發(fā)現(xiàn)并沒有貫徹敏捷的原則、敏捷的價(jià)值觀。因?yàn)楹芏鄨F(tuán)隊(duì)并沒有理解敏捷儀式背后的原理,導(dǎo)致敏捷儀式走樣,不能達(dá)到預(yù)期的效果。
? ? 也有很多組織只是實(shí)施了敏捷的管理實(shí)踐,而沒有實(shí)施敏捷的技術(shù)實(shí)踐,產(chǎn)品的質(zhì)量并沒有得到真正的提高。
? ? 也有的企業(yè)沒有建立組織級(jí)敏捷的文化,公司中高層的思想沒有同步更新,團(tuán)隊(duì)的敏捷則無法持久。
? ? 經(jīng)驗(yàn)型過程控制,追求技術(shù)卓越,這些都要求團(tuán)隊(duì)的核心成員具有豐富的開發(fā)經(jīng)驗(yàn)、較高的技術(shù)水平,而軟件組織的很多人員并不具備這個(gè)基礎(chǔ)。
? ? 譴責(zé)CMMI模型不好或者譴責(zé)敏捷方法不好,都是片面的,更大程度上是我們落地方法有問題,是我們?nèi)ヂ涞氐娜说膯栴}。
? ? 在一個(gè)組織內(nèi),誰最先發(fā)起要導(dǎo)入CMMI與敏捷的呼吁呢?
? ? 如果是市場(chǎng)的呼吁,那可能側(cè)重的是證書,是投標(biāo)的需要。
? ? 如果是開發(fā)的呼吁,那可能側(cè)重的是減負(fù),是提高效率的需求。
? ? 如果是老板的呼吁,那可能側(cè)重的是交付高質(zhì)量的產(chǎn)品,快速響應(yīng)市場(chǎng)的需求。
? ? 不同的sponsor,推動(dòng)的力度,推動(dòng)的結(jié)局是不同的。
? ? 對(duì)企業(yè)而言,對(duì)老板而言,要平衡短期利益與長(zhǎng)期利益,活下去,活得好,活得久,需要平衡。
? ? CMMI與敏捷都不是萬能的,都有其適用場(chǎng)景,不能盲目迷信,盲目崇拜,要秉持開放的心態(tài),持續(xù)發(fā)展的心態(tài),兼收并蓄,取長(zhǎng)補(bǔ)短。
? ? 從理想到實(shí)現(xiàn),都有很遠(yuǎn)的路要走,都應(yīng)該聚焦于給客戶帶來實(shí)際效果,立足當(dāng)下,扎扎實(shí)實(shí)的去解決問題。
? ? 喧囂之中,需要冷靜思考,務(wù)實(shí)平衡!