孫春艷 劉穎 趙殿奎
(天津神舟通用數(shù)據(jù)技術(shù)有限公司北京100094)
從2006年開始采用CMMI模型進(jìn)行企業(yè)的質(zhì)量管理活動(dòng),從依據(jù)模型建立組織的標(biāo)準(zhǔn)過程開始,經(jīng)歷了最初少數(shù)項(xiàng)目的試用、逐步普及至不同類型的項(xiàng)目和體系的持續(xù)適用性維護(hù),這其中得到了提升規(guī)范化管理水平的贊許,也遭遇了由于管理方式不適合項(xiàng)目特點(diǎn)而引發(fā)的抱怨,如何才能在規(guī)范的同時(shí),兼顧項(xiàng)目不同規(guī)模和不同用戶等特征,讓項(xiàng)目在企業(yè)標(biāo)準(zhǔn)體系的大框架下,有更多以及更有針對(duì)性的選擇,是質(zhì)量體系建立和維護(hù)者必須面對(duì)的課題。
最近幾年,在軟件開發(fā)領(lǐng)域越來越多企業(yè)在使用敏捷方法,2011年初為外部用戶開發(fā)軟件產(chǎn)品的應(yīng)用開發(fā)團(tuán)隊(duì)提出希望使用敏捷方法進(jìn)行開發(fā)的要求。那么原有的以CMMI模型為依據(jù)建立起來的質(zhì)量管理體系,引入敏捷的方法后,會(huì)不會(huì)與現(xiàn)有的質(zhì)量體系的管理策略沖突?如果策略不沖突,如何將使用的敏捷方法融合到現(xiàn)有框架中,與現(xiàn)有的實(shí)踐活動(dòng)相得益彰。
CMMI是軟件能力成熟度模型集成,不同的企業(yè),采用模型進(jìn)行質(zhì)量管理時(shí),由于企業(yè)背景,生產(chǎn)的產(chǎn)品,面對(duì)的用戶等諸多不同的特征,雖然都是依據(jù)同樣的CMMI模型,但是每個(gè)企業(yè)產(chǎn)生的標(biāo)準(zhǔn)過程一定也必須是各不相同的。不同可能體現(xiàn)在流程設(shè)計(jì)、流程中的活動(dòng)個(gè)數(shù)、活動(dòng)順利、活動(dòng)的執(zhí)行人以及活動(dòng)輸出的工作產(chǎn)品等方面。
同樣,企業(yè)在編制標(biāo)準(zhǔn)過程中,要面對(duì)不同類型的項(xiàng)目,這些項(xiàng)目在規(guī)模、目標(biāo)和最終用戶類型等等方面存在差異,要達(dá)到規(guī)范管理的目的,如果使用相同的標(biāo)準(zhǔn)和相同的流程,不一定能起到同樣的效果。必須針對(duì)項(xiàng)目具體特征,具體問題具體分析,才能在統(tǒng)一的標(biāo)準(zhǔn)指導(dǎo)下,建立適宜多數(shù)項(xiàng)目的管理流程。
CMMI是質(zhì)量管理框架,是指導(dǎo)思想,它的作用是指導(dǎo)企業(yè)實(shí)施質(zhì)量管理時(shí)如何思考,要進(jìn)行哪些過程管理,每個(gè)過程要達(dá)到哪些目標(biāo),并沒有要求各過程必須用什么方法,也沒有給出具體的方法。2010年10月出版的CMMIV1.3模型中增加對(duì)敏捷方法的說明,有10個(gè)過程域的解釋說明中提到了敏捷方法在這些過程域中的特征3,這說明CMMI模型本身就具備能夠融入多種不同方法的開放性。
2.1.1目標(biāo)是CMMI模型必需的部件
CMMI產(chǎn)生于幾十年的研究和實(shí)踐應(yīng)用的總結(jié),是組織過程改進(jìn)時(shí),期望的動(dòng)作集合。這些過程集合分布在22個(gè)過程域中,每個(gè)過程域由不同個(gè)數(shù)的特定目標(biāo)和相同個(gè)數(shù)的共性目標(biāo)構(gòu)成,每個(gè)目標(biāo)被推薦了不同個(gè)數(shù)的實(shí)踐,這些實(shí)踐活動(dòng)是被期望的,每個(gè)實(shí)踐下面給出了子實(shí)踐作為資料性的部件。
以配置管理為例說明,配置管理過程域有3個(gè)特定目標(biāo):①SG1:建立已確定的工作產(chǎn)品的基線;②SG2:跟蹤并控制已納入配置管理下的工作產(chǎn)品的變更;③SG3:建立并維護(hù)基線的完整性。其中SG1有3個(gè)期望的特定實(shí)踐活動(dòng):①確定配置項(xiàng):確定將納入配置管理下的配置項(xiàng)、構(gòu)件及相關(guān)的工作產(chǎn)品;②建立配置管理系統(tǒng):建立并維護(hù)配置管理和變更管理系統(tǒng),來控制工作產(chǎn)品;③建立或發(fā)布基線:建立或發(fā)布供內(nèi)部使用和交付給客戶的基線。
目標(biāo)是必需的部件,目標(biāo)下的實(shí)踐都是期望的部件,這意味著目標(biāo)是要滿足的。當(dāng)某種特定項(xiàng)目背景下,可能某些形式的活動(dòng)必須被替代。缺少或者替換某些實(shí)踐活動(dòng)并不重要,重要的是要滿足目標(biāo)。此外,為了滿足組織的不斷改進(jìn),替代實(shí)踐也是被推薦的。
2.1.2使用CMMI模型常見的問題
盡管CMMI允許替代實(shí)踐滿足目標(biāo),但是沒有明確這些實(shí)踐,這樣導(dǎo)致了很多使用者有這樣的擔(dān)憂:如果使用替代實(shí)踐在評(píng)估中將被如何看待。
當(dāng)CMMI的使用者為組織和項(xiàng)目建立標(biāo)準(zhǔn)過程時(shí),往往不能確保:①過程對(duì)所有部署的項(xiàng)目都是適應(yīng)的;②根據(jù)使用情況,周期性的修訂標(biāo)準(zhǔn)過程;③兼容個(gè)體和團(tuán)隊(duì)的實(shí)踐并且有足夠的靈活性支持團(tuán)隊(duì)根據(jù)他們的需要和經(jīng)驗(yàn)采用過程集。
組織、項(xiàng)目和員工之間在項(xiàng)目目標(biāo)、商務(wù)目標(biāo)和企業(yè)文化等方面存在利益沖突,要做到有效管理,爭(zhēng)取一定條件下各方利益最大化,必須找到平衡點(diǎn)。平衡傾向于組織的利益,項(xiàng)目可能缺乏靈活性;另一方面,太多的項(xiàng)目靈活性將給組織帶來諸多風(fēng)險(xiǎn),使組織失去成長(zhǎng)機(jī)會(huì),長(zhǎng)期下去將導(dǎo)致質(zhì)量和生產(chǎn)率降低等后果。到達(dá)合適的平衡是很困難的,也是每個(gè)企業(yè)要克服的難題。
2.2.1敏捷特征
敏捷方法的基石是75年前就已經(jīng)被工程實(shí)踐使用的迭代和增量的設(shè)計(jì)和開發(fā)(IIDD)。早在五十年代中期,IIDD就被應(yīng)用于軟件開發(fā)活動(dòng),到了九十年代,IIDD在軟件行業(yè)通過各種快速應(yīng)用開發(fā)(RAD)、統(tǒng)一過程(RUP)形式得到廣泛的應(yīng)用。極限編程(XP)是由KentBeck在1996年提出的,包括13個(gè)核心實(shí)踐如:功能驅(qū)動(dòng)開發(fā)(FDD)、結(jié)對(duì)編程、測(cè)試驅(qū)動(dòng)開發(fā)(TDD)和持續(xù)集成等。
2.2.2使用敏捷方法常見的問題
敏捷開發(fā)是一種以人為核心、迭代和循序漸進(jìn)的開發(fā)方法,它以靈活、適用多變的需求以及頻繁交付等優(yōu)點(diǎn)受到越來越多軟件開發(fā)人員的推崇,但是,不可否認(rèn),敏捷方法在使用中也存在諸多問題:
①敏捷開發(fā)可以對(duì)不斷變化的需求進(jìn)行快速響應(yīng),它的策劃是短期對(duì)項(xiàng)目的策劃,但是對(duì)于項(xiàng)目的整體目標(biāo)并沒有完整的計(jì)劃;
②敏捷開發(fā)對(duì)人員的要求極高。對(duì)于開發(fā)需要全能型開發(fā)者,需同時(shí)具備設(shè)計(jì)、編碼和測(cè)試的能力,并對(duì)頻繁變更的需求做出快速的響應(yīng);對(duì)于測(cè)試人員不但要熟悉開發(fā)語言和自動(dòng)化測(cè)試工具,能夠編寫自動(dòng)化測(cè)試腳本或者用工具錄制,而且要參與項(xiàng)目的需求分析和架構(gòu)設(shè)計(jì)。但是大多數(shù)項(xiàng)目存在開發(fā)人員和測(cè)試人員均達(dá)不到上述要求的現(xiàn)象;
③敏捷開發(fā)是在不斷的溝通中進(jìn)行的,所以團(tuán)隊(duì)的成員需要非常好的溝通技能。但往往一個(gè)優(yōu)秀的程序員是不善于社交與溝通的,這必然造成團(tuán)隊(duì)成員無法有效的傳遞他們的想法給團(tuán)隊(duì)的其他成員;
④敏捷開發(fā)更注重代碼,而非文檔,更多的依賴于人,而非流程;對(duì)于人員流動(dòng)性大的公司,勢(shì)必會(huì)造成人員離職后,繼任者不能很快了解項(xiàng)目情況,造成項(xiàng)目拖延;
⑤對(duì)于大型而復(fù)雜的項(xiàng)目,如何把項(xiàng)目分割成能相對(duì)獨(dú)立的模塊、團(tuán)隊(duì)與團(tuán)隊(duì)之間如何溝通和代碼之間如何共享也是敏捷需要面對(duì)的問題。
CMMI和敏捷是可以并存和互補(bǔ)的。在項(xiàng)目級(jí),CMMI關(guān)注高等級(jí)的抽象過程即項(xiàng)目做什么,而不是使用的開發(fā)方法,敏捷方法剛好是關(guān)注如何開發(fā)產(chǎn)品,開發(fā)方法的具體內(nèi)容。因此,CMMI和敏捷方法能夠并存和互補(bǔ)。
CMMI和敏捷可以通過協(xié)調(diào)彼此互補(bǔ)讓使用他們的組織受益。敏捷方法提供了軟件開發(fā)"how-to",這正是CMMI最佳實(shí)踐所缺少的。CMMI提供的系統(tǒng)工程實(shí)踐能夠在大型項(xiàng)目上幫助敏捷方法,CMMI也提供過程管理和支持實(shí)踐以幫助部署、支撐和持續(xù)提高敏捷方法的執(zhí)行[1]。
敏捷方法對(duì)人員能力的要求極高,但是又沒有給出如何提高人員能力的方法,CMMI的每個(gè)過程域都有一個(gè)對(duì)培訓(xùn)人員能力共性實(shí)踐 (GP2.5)的要求,同時(shí),組織培訓(xùn)過程域(OT)要求識(shí)別每個(gè)崗位的人員能力要求并根據(jù)現(xiàn)有人員的能力和能力要求之間的差距,分析、制定和實(shí)施培訓(xùn)活動(dòng)[2]。
CMMI每個(gè)過程域的共性實(shí)踐GP2.7要求項(xiàng)目按照計(jì)劃確定并管理與項(xiàng)目有關(guān)的利益相關(guān)人員,同時(shí)在項(xiàng)目策劃(PP)、項(xiàng)目監(jiān)控(PMC)集成項(xiàng)目管理(IPM)過程域都有特定實(shí)踐活動(dòng)要求在過程中策劃和實(shí)施利益相關(guān)方的協(xié)調(diào)管理[3],這有利于敏捷方法實(shí)現(xiàn)團(tuán)隊(duì)成員及團(tuán)隊(duì)之間的溝通。
CMMI注重流程的遵守和文檔的保留,敏捷更注重人員的自我管理和隱性知識(shí)的傳播,通過二者的結(jié)合,通過CMMI把團(tuán)隊(duì)的隱性知識(shí)逐步轉(zhuǎn)換為組織的顯性知識(shí),吸收敏捷方式,使CMMI的流程更加靈活。
敏捷和CMMI同時(shí)使用,能獲得更多的價(jià)值。當(dāng)今,很多使用CMMI的組織擁有敏捷開發(fā)團(tuán)隊(duì),通過迭代等方法的引入,敏捷方法可以完美的融合于基于CMMI建立的質(zhì)量管理體系[4]。
CMMI模型有一個(gè)過程域-集成項(xiàng)目管理,這個(gè)過程域的目的是裁剪組織的一系列管理過程、產(chǎn)品過程及其過程產(chǎn)生的工作產(chǎn)品后形成項(xiàng)目定義的過程集[5],來管理項(xiàng)目和項(xiàng)目的相關(guān)干系人。裁剪活動(dòng)的工作產(chǎn)品就是項(xiàng)目已定義過程(PDP)。PDP在項(xiàng)目的整個(gè)生命周期被使用以管理各類活動(dòng)、工作產(chǎn)品和相關(guān)干人員,項(xiàng)目通過這種形式定義了管理和執(zhí)行方式。項(xiàng)目的裁剪活動(dòng)如圖1所示。
圖1 裁剪組織的標(biāo)準(zhǔn)過程形成項(xiàng)目已定義過程
初次使用敏捷方式時(shí),組織級(jí)的項(xiàng)目已定義過程中是沒有對(duì)應(yīng)的過程和工作產(chǎn)品描述的,所以使用敏捷方法的項(xiàng)目在產(chǎn)生項(xiàng)目的已定義過程時(shí),需要在對(duì)應(yīng)的過程活動(dòng)中進(jìn)行替代和刪除等裁剪說明。隨著使用敏捷方法的項(xiàng)目增多,組織的標(biāo)準(zhǔn)過程中會(huì)增加相關(guān)的過程描述,這時(shí),敏捷項(xiàng)目進(jìn)行裁剪時(shí),可以直接選擇不需要進(jìn)行裁剪說明。下面介紹在組織的標(biāo)準(zhǔn)過程中沒有對(duì)應(yīng)敏捷活動(dòng)的情況下,項(xiàng)目如何在項(xiàng)目已定義過程中體現(xiàn)相關(guān)活動(dòng)的實(shí)例。該項(xiàng)目采用了敏捷方法中的Scrum,測(cè)試驅(qū)動(dòng)開發(fā)(TDD)和持續(xù)集成3種活動(dòng),下面展示Scrum和持續(xù)集成方法在項(xiàng)目已定義過程中的描述。
3.2.1 Scrum在項(xiàng)目已定義過程中的描述
Scrum是一種迭代式增量軟件開發(fā)過程,包括了一系列實(shí)踐和預(yù)定義角色的過程框架,把產(chǎn)品需求的實(shí)現(xiàn)分為若干個(gè)Sprint來完成,每個(gè)Sprint完成后進(jìn)行產(chǎn)品演示,以便更好的收集和細(xì)化用戶需求。
Scrum引入計(jì)劃會(huì)議來代替需求的估計(jì)、設(shè)計(jì)以及任務(wù)的劃分;引入每日站立會(huì)來代替任務(wù)的分配和跟蹤;引入演示會(huì),快速交付產(chǎn)品給用戶;引入總結(jié)會(huì),對(duì)團(tuán)隊(duì)出現(xiàn)的問題進(jìn)行解決。Scrum引入了3個(gè)文檔,Product Backlog(產(chǎn)品列表)來體現(xiàn)整個(gè)產(chǎn)品需求,Sprint Backlog(迭代需求列表)來體現(xiàn)每個(gè)迭代的需求,burn down chart(向下燃盡圖)來體現(xiàn)任務(wù)的完成情況,特征在項(xiàng)目已定義過程中部分項(xiàng)目管理過程的描述如表1所示。
表1.包含Scr um方法的部分項(xiàng)目已定義過程
3.2.2持續(xù)集成在項(xiàng)目已定義過程中的描述
持續(xù)集成的方法是對(duì)項(xiàng)目成員開發(fā)的代碼每天至少集成一次,每次集成都通過自動(dòng)化的構(gòu)建(包括編譯、發(fā)布和自動(dòng)化測(cè)試)來驗(yàn)證,盡快地發(fā)現(xiàn)集成錯(cuò)誤。傳統(tǒng)的軟件開發(fā)模式,通常把集成放在代碼全部編寫完才進(jìn)行。采用持續(xù)集成的方法,可以每天對(duì)代碼進(jìn)行集成,并針對(duì)測(cè)出的問題進(jìn)行修改,修改后再與其他代碼集成,保證問題及時(shí)解決。持續(xù)集成的最大好處是任何時(shí)間都可以發(fā)布部署的軟件,達(dá)到快速交付的目的。持續(xù)集成和普通的集成,產(chǎn)生的工作產(chǎn)品是一樣的,特征在項(xiàng)目已定義過程中的描述如表2所示。
表2包含持續(xù)集成的部分項(xiàng)目已定義過程
通過引入敏捷中Scrum、測(cè)試驅(qū)動(dòng)開發(fā)及持續(xù)集成等具體方法,豐富了組織的管理方法的同時(shí),對(duì)于其他項(xiàng)目也有啟迪作用,比如有的項(xiàng)目組沒有采用完整的Scrum規(guī)程,但采用了每日站立會(huì)的管理形式,把原來每周進(jìn)行的監(jiān)控粒度縮短到每日,增強(qiáng)項(xiàng)目經(jīng)理對(duì)項(xiàng)目進(jìn)展的可控性。
質(zhì)量管理體系是依據(jù)CMMI模型要求建立的,但是對(duì)于能提高產(chǎn)品質(zhì)量、提高生產(chǎn)率的任何方法和模型,都可以通過對(duì)組織標(biāo)準(zhǔn)過程適當(dāng)裁剪和審批的途徑進(jìn)行試用[6],驗(yàn)證其有效性后,成為組織的標(biāo)準(zhǔn)過程之一,以此方式持續(xù)豐富管理方法,提升組織能力。
[1]GLAZER H,DALTON J,ANDERSON D,et al.CMMIor Agile:Why Not Embrace Both[R].USA:SEI,2008.
[2]GJB5000A-2008,軍用軟件研制能力成熟度模型[S].
[3]CMMIProduct Team.CMMIfor Development,Version1.3.[R].USA:SEI,2010.
[4]MCMAHON PE.Integrating CMMIand Agile Development:Case Studiesand Proven Techniquesfor Faster Performance Improvement[M].USA:Addison Wesley,2010.
[5]ANSI/PMI99-001-2008,A Guide to the Project Management Body of Knowledge:Fourth Edition[S].
[6]GARCIA S,TURNER R.CMMI生存指南:最佳過程改進(jìn)方法[M].北京:電子工業(yè)出版社,2010.