摘要:對(duì)CMM/CMMI和主流軟件生命周期模型的關(guān)系進(jìn)行了分析,認(rèn)為:
a)CMM/CMMI與軟件生命周期模型都是軟件活動(dòng)過(guò)程化的產(chǎn)物。在軟件過(guò)程化進(jìn)程中,CMM/CMMI是軟件過(guò)程化成熟期的成果;軟件生命周期模型則是軟件過(guò)程化前期的成果。
b)由于發(fā)展背景不同,需要處理的問(wèn)題各異,使得軟件生命周期模型關(guān)注于工程活動(dòng);CMM/CMMI關(guān)注于軟件開(kāi)發(fā)活動(dòng)的整體。
c)盡管CMM/CMMI編寫(xiě)者的初衷是保持CMM/CMMI與特定軟件生命周期模型的無(wú)關(guān)性,但是其產(chǎn)生的時(shí)代背景卻使CMM/CMMI受到了軟件生命周期模型的影響。
關(guān)鍵詞:軟件生命周期模型; 軟件能力成熟度模型; 能力成熟度模型集成
中圖分類(lèi)號(hào):TP311.5文獻(xiàn)標(biāo)志碼:A
文章編號(hào):1001-3695(2007)11-0065-05
目前,能力成熟度模型(SW-CMM/CMMI)和各種軟件生命周期模型在軟件產(chǎn)業(yè)都得到了廣泛使用,而且經(jīng)常被同時(shí)使用。當(dāng)一個(gè)組織在運(yùn)用CMM/CMMI進(jìn)行軟件過(guò)程改進(jìn)的過(guò)程中,往往會(huì)被其中涉及到的各種軟件生命周期模型及其與CMM/CMMI的關(guān)系所困惑,從而影響了過(guò)程改進(jìn)的效果。
對(duì)CMM/CMMI與軟件生命周期模型之間整體關(guān)系的認(rèn)識(shí),是軟件組織對(duì)軟件開(kāi)發(fā)活動(dòng)進(jìn)行宏觀決策的依據(jù),將決定軟件開(kāi)發(fā)活動(dòng)的方向。例如,對(duì)于整個(gè)組織的軟件開(kāi)發(fā)活動(dòng),軟件生命周期模型用于解決哪些問(wèn)題,CMM/CMMI用于解決哪些問(wèn)題,在應(yīng)用中可能產(chǎn)生什么結(jié)果?對(duì)于不同類(lèi)型的項(xiàng)目,這兩者的應(yīng)用是否存在不同?這些宏觀的決策在組織中起著非常重要的作用。
為此,本文主要討論了CMM/CMMI與軟件生命周期模型之間的關(guān)系:
a)在發(fā)展歷史上,兩者之間的關(guān)系;
b)在軟件工程領(lǐng)域,兩者關(guān)注范圍的比較;
c)兩者內(nèi)容的相互影響。
通過(guò)以上三方面的整體關(guān)系討論,將有助于進(jìn)一步分析兩者具體內(nèi)容之間的內(nèi)在關(guān)聯(lián),加深對(duì)兩者的理解和認(rèn)識(shí)。
1發(fā)展歷史上的關(guān)系
1.1在軟件行業(yè)發(fā)展歷史上的地位
軟件行業(yè)迄今已有近五十年的發(fā)展歷程,R. Lai認(rèn)為其中有三次較明顯的發(fā)展浪潮[1]:第一次浪潮以瀑布式生命周期和結(jié)構(gòu)化方法為特征;第二次浪潮是過(guò)程成熟度運(yùn)動(dòng);第三次浪潮將是預(yù)期中的軟件工業(yè)化。
第一次浪潮是對(duì)之前沒(méi)有結(jié)構(gòu)的軟件活動(dòng)的改進(jìn)。通過(guò)瀑布模型和結(jié)構(gòu)化分析設(shè)計(jì)方法,人們進(jìn)一步理解了軟件開(kāi)發(fā)活動(dòng)。第二次浪潮改進(jìn)的范圍更廣,覆蓋了軟件開(kāi)發(fā)過(guò)程及其支持活動(dòng)的各個(gè)方面。作為第二次浪潮的CMM模型,很可能會(huì)促使軟件工業(yè)在工程化的道路上更進(jìn)一步,使軟件工業(yè)成為以過(guò)程為中心的工業(yè),類(lèi)似于制造業(yè)。
R. Lai對(duì)第一次浪潮和第二次浪潮的劃分,恰如其分地表明了軟件生命周期模型與CMM在軟件行業(yè)發(fā)展過(guò)程中的地位。
軟件生命周期模型的發(fā)展始自W. Royce在1970年發(fā)表的瀑布模型。瀑布模型將軟件開(kāi)發(fā)活動(dòng)分為需求分析、設(shè)計(jì)、編碼、測(cè)試等幾個(gè)過(guò)程。這樣的劃分具有里程碑意義,將人們從之前的沒(méi)有結(jié)構(gòu)的軟件活動(dòng)中解脫出來(lái),開(kāi)始從更高的角度審視軟件開(kāi)發(fā)活動(dòng)。
在瀑布模型的基礎(chǔ)上,各種軟件生命周期模型不斷被提出。后續(xù)的各種軟件生命周期模型是在與瀑布模型相同的層次上對(duì)各種軟件開(kāi)發(fā)活動(dòng)進(jìn)行描述和總結(jié)。在這一時(shí)期,軟件生命周期模型是軟件工程領(lǐng)域的重要研究方向,各種軟件生命周期模型總結(jié)了產(chǎn)業(yè)界的各種軟件開(kāi)發(fā)活動(dòng)的特點(diǎn),加深了對(duì)于軟件開(kāi)發(fā)活動(dòng)的認(rèn)識(shí)。
過(guò)程成熟度運(yùn)動(dòng)始于W. Humphrey在1986年的工作,他在軟件過(guò)程中采用統(tǒng)計(jì)質(zhì)量控制原理,并將Crosby的成熟度量化的思想引入,形成成熟度等級(jí)的概念。在W. Humphrey的工作基礎(chǔ)上,軟件工程研究所先后發(fā)表了能力成熟度框架[2]、成熟度問(wèn)卷[3]、CMM1.0、CMM1.1、CMMI1.0和CMMI1.1。
這些工作對(duì)軟件行業(yè)產(chǎn)生了巨大影響,在世界范圍內(nèi)引起了軟件從業(yè)者的關(guān)注。各種其他學(xué)科的成熟度模型不斷被提出,其他標(biāo)準(zhǔn)組織也不斷接受過(guò)程思想,在其標(biāo)準(zhǔn)中加入過(guò)程元素。例如國(guó)際標(biāo)準(zhǔn)化組織廣泛應(yīng)用的標(biāo)準(zhǔn)ISO9000,在其最新版本2000版中,也加入了過(guò)程思想[4],在其引言中指出“本標(biāo)準(zhǔn)鼓勵(lì)在建立、實(shí)施質(zhì)量管理體系以及改進(jìn)其有效性時(shí)采用過(guò)程方法,通過(guò)滿足顧客要求,增強(qiáng)顧客滿意”“過(guò)程方法的優(yōu)點(diǎn)是對(duì)諸過(guò)程的系統(tǒng)中單個(gè)過(guò)程之間的聯(lián)系以及過(guò)程的組合和相互作用進(jìn)行連續(xù)的控制”。很多國(guó)家和組織也都開(kāi)始了對(duì)軟件過(guò)程的研究并形成了自己的模型和標(biāo)準(zhǔn)[5]。
綜上所述,軟件生命周期模型和CMM/CMMI在軟件行業(yè)發(fā)展史上分別代表了第一次浪潮和第二次浪潮,影響都是深遠(yuǎn)和巨大的。
1.2在軟件過(guò)程化進(jìn)程中的位置
W. Humphrey第一次在軟件產(chǎn)業(yè)中提出過(guò)程的思想。但筆者認(rèn)為,軟件產(chǎn)業(yè)的過(guò)程化并不是在W. Humphrey明確提出過(guò)程概念后才開(kāi)始的。實(shí)際上,軟件產(chǎn)業(yè)的過(guò)程化可以追溯到瀑布模型和各種軟件生命周期模型[6]。
在瀑布模型產(chǎn)生之前,軟件開(kāi)發(fā)以編碼活動(dòng)為主,沒(méi)有過(guò)程和結(jié)構(gòu),不確定和混亂是軟件開(kāi)發(fā)的重要特點(diǎn)。軟件已開(kāi)始大量用于商業(yè)應(yīng)用中,軟件的規(guī)模也越來(lái)越大,軟件開(kāi)發(fā)的理論成為業(yè)界的研究對(duì)象。
結(jié)構(gòu)化分析設(shè)計(jì)方法的提出使得軟件開(kāi)發(fā)活動(dòng)逐漸有了劃分,不再局限于編碼活動(dòng)。該方法的分步驟進(jìn)行及各步驟間相對(duì)獨(dú)立的特點(diǎn)為瀑布模型的產(chǎn)生提供了技術(shù)可行性。
瀑布模型正是在這樣的背景下產(chǎn)生的。瀑布模型與結(jié)構(gòu)化分析設(shè)計(jì)方法一起對(duì)軟件開(kāi)發(fā)活動(dòng)進(jìn)行了最初步的過(guò)程化:將沒(méi)有結(jié)構(gòu)的軟件開(kāi)發(fā)活動(dòng)劃分為需求分析、設(shè)計(jì)、編碼、測(cè)試等幾個(gè)過(guò)程。與瀑布模型類(lèi)似,其他的軟件生命周期模型也是對(duì)軟件開(kāi)發(fā)活動(dòng)進(jìn)行著各種過(guò)程化,從不同的角度識(shí)別過(guò)程,確定過(guò)程之間的相互作用,從而更好地對(duì)軟件開(kāi)發(fā)活動(dòng)進(jìn)行描述和總結(jié)。
可見(jiàn),軟件生命周期模型是軟件過(guò)程化進(jìn)程中的早期成果。
在技術(shù)相關(guān)的活動(dòng)被過(guò)程化之后,其他方面的問(wèn)題逐漸表現(xiàn)出來(lái),如項(xiàng)目管理、風(fēng)險(xiǎn)問(wèn)題。
在一些使用瀑布模型比較成熟的軟件組織,技術(shù)活動(dòng)相對(duì)比較成熟,管理活動(dòng)和其他活動(dòng)成為進(jìn)一步的改進(jìn)方向,這些非技術(shù)活動(dòng)包括項(xiàng)目管理活動(dòng)、軟件開(kāi)發(fā)相關(guān)的支持活動(dòng)(如需求管理和配置管理)、提高軟件組織生產(chǎn)能力的活動(dòng)(如統(tǒng)計(jì)質(zhì)量控制原理的應(yīng)用)等。在這些軟件組織,非技術(shù)活動(dòng)的過(guò)程化得到了相當(dāng)大的發(fā)展,相關(guān)理論和實(shí)踐經(jīng)驗(yàn)由W. Humphrey帶到了SEI,并據(jù)此形成了CMM/CMMI的早期版本。從此CMM/CMMI被不斷使用,過(guò)程思想逐漸形成了巨大的影響。
可見(jiàn),CMM/CMMI模型是軟件過(guò)程化進(jìn)程中的后期產(chǎn)物。
2兩者關(guān)注點(diǎn)的異同
在軟件工程領(lǐng)域,軟件生命周期模型更關(guān)注于軟件開(kāi)發(fā)工程的過(guò)程,在這個(gè)過(guò)程中如何對(duì)各項(xiàng)活動(dòng)進(jìn)行工程化; CMM/CMMI則比較關(guān)注軟件開(kāi)發(fā)活動(dòng)的整體,如何對(duì)軟件開(kāi)發(fā)活動(dòng)的各個(gè)方面進(jìn)行過(guò)程化,其中包括工程活動(dòng)的過(guò)程化。
2.1軟件開(kāi)發(fā)活動(dòng)的分類(lèi)
軟件開(kāi)發(fā)活動(dòng)是一個(gè)組織中與軟件開(kāi)發(fā)相關(guān)活動(dòng)的統(tǒng)稱。軟件開(kāi)發(fā)中包含的活動(dòng)很多,為方便討論,這里使用工程活動(dòng)指代工程類(lèi)的活動(dòng),用非工程活動(dòng)指代除工程類(lèi)活動(dòng)以外的其他活動(dòng)。
工程活動(dòng)是與軟件建造本身密切相關(guān)的活動(dòng),包括確定軟件要解決的現(xiàn)實(shí)問(wèn)題、構(gòu)造軟件以解決該問(wèn)題、對(duì)構(gòu)造的軟件進(jìn)行維護(hù)等。例如需求分析、設(shè)計(jì)、編碼、測(cè)試等活動(dòng)。正是這些活動(dòng)建造出最終軟件,因此是軟件開(kāi)發(fā)活動(dòng)中的核心活動(dòng)。
非工程活動(dòng)是為了使工程活動(dòng)能進(jìn)行得更加順利、更有效率而對(duì)工程活動(dòng)進(jìn)行的支持和保障,如項(xiàng)目管理活動(dòng)、配置管理活動(dòng)等。這些活動(dòng)針對(duì)的對(duì)象是工程活動(dòng),不能脫離工程活動(dòng)而單獨(dú)存在。這些非工程活動(dòng)對(duì)軟件構(gòu)造所起的作用是通過(guò)工程活動(dòng)產(chǎn)生的,因此是工程活動(dòng)的支持和保障。
區(qū)分工程活動(dòng)與其他活動(dòng)的原因在于,在軟件開(kāi)發(fā)相關(guān)活動(dòng)中,工程活動(dòng)與其他活動(dòng)的位置不同。工程活動(dòng)在軟件開(kāi)發(fā)相關(guān)活動(dòng)中處于核心位置,非工程活動(dòng)處于支持和保障位置。
2.2軟件生命周期模型關(guān)注于工程活動(dòng)
在軟件生命周期模型的領(lǐng)域內(nèi)有若干種模型,這些模型的主要關(guān)注點(diǎn)在工程活動(dòng),部分模型也關(guān)注一些非工程活動(dòng)。
瀑布模型將軟件開(kāi)發(fā)活動(dòng)分為需求分析、設(shè)計(jì)、編碼、測(cè)試等幾個(gè)階段。這幾個(gè)階段是對(duì)工程活動(dòng)的劃分。瀑布模型沒(méi)有再涉及其他方面的活動(dòng)。因此瀑布模型關(guān)注于工程活動(dòng)。
原型模型則主要是為了解決需求獲取的難題而創(chuàng)建原型用于需求的獲取和確認(rèn),再將需求轉(zhuǎn)換為軟件系統(tǒng),其主要內(nèi)容集中在軟件開(kāi)發(fā)本身。因此原型模型也關(guān)注于工程活動(dòng)。
螺旋模型的主要貢獻(xiàn)在于明確提出迭代概念和風(fēng)險(xiǎn)的問(wèn)題,并指出在項(xiàng)目定義、需求、設(shè)計(jì)等階段均存在風(fēng)險(xiǎn),需要重點(diǎn)考慮,并通過(guò)多次迭代的原型主動(dòng)誘發(fā)風(fēng)險(xiǎn)。風(fēng)險(xiǎn)管理不屬于工程活動(dòng)的范圍,但筆者仍然認(rèn)為螺旋模型的主要內(nèi)容是工程方面的。因?yàn)閷?duì)于非工程活動(dòng),螺旋模型僅考慮了風(fēng)險(xiǎn)問(wèn)題,而風(fēng)險(xiǎn)管理僅是非工程活動(dòng)的一個(gè)小部分,不足以依此推斷螺旋模型主要關(guān)注于非工程活動(dòng)。
增量模型將瀑布模型的順序化與多次迭代相結(jié)合。每個(gè)增量開(kāi)發(fā)都是一次瀑布模型的過(guò)程,強(qiáng)調(diào)每一個(gè)增量均發(fā)布一個(gè)可運(yùn)行版本,以滿足客戶和市場(chǎng)需要。增量模型主要考慮當(dāng)需要快速推出可運(yùn)行版本,而該版本不需要完整的功能時(shí),在工程活動(dòng)上的解決方案,因此增量模型也關(guān)注于工程活動(dòng)。
圖1描述了幾種軟件生命周期模型的關(guān)注點(diǎn)。可以看出,軟件生命周期模型關(guān)注于工程活動(dòng)。
2.3CMM/CMMI關(guān)注于軟件開(kāi)發(fā)活動(dòng)的整體
CMM/CMMI的關(guān)注點(diǎn)是軟件開(kāi)發(fā)活動(dòng)的整體。將整個(gè)軟件開(kāi)發(fā)活動(dòng)劃分成了不同的過(guò)程域,再針對(duì)各個(gè)過(guò)程域分別進(jìn)一步描述,從而將軟件開(kāi)發(fā)活動(dòng)整體進(jìn)行了過(guò)程化。在此基礎(chǔ)上,CMM/CMMI給出了對(duì)軟件開(kāi)發(fā)活動(dòng)進(jìn)行不斷改進(jìn)的方法——統(tǒng)計(jì)過(guò)程控制方法。
對(duì)于管理類(lèi)的關(guān)鍵過(guò)程域,CMM有比較完整而清晰的活動(dòng)劃分和改進(jìn)目標(biāo)。從第二級(jí)項(xiàng)目級(jí)的項(xiàng)目策劃和項(xiàng)目跟蹤等活動(dòng),進(jìn)一步到第三級(jí)組織級(jí)的按照已定義的軟件過(guò)程進(jìn)行項(xiàng)目管理,再到第四級(jí)的定量管理。
對(duì)于組織類(lèi)的關(guān)鍵過(guò)程域,CMM也提供了比較清晰的改進(jìn)方向和方案。從第三級(jí)開(kāi)始,在項(xiàng)目級(jí)別的基礎(chǔ)上,組織開(kāi)始對(duì)軟件過(guò)程進(jìn)行管理和定義,形成組織標(biāo)準(zhǔn)過(guò)程;在第四級(jí),對(duì)過(guò)程進(jìn)行量化預(yù)測(cè)和控制;到第五級(jí)對(duì)過(guò)程不斷進(jìn)行改進(jìn)。
CMM中工程類(lèi)的關(guān)鍵過(guò)程域,從第三級(jí)開(kāi)始包含軟件產(chǎn)品工程,并要求進(jìn)行同行評(píng)審;到第四級(jí)對(duì)質(zhì)量活動(dòng)的明確要求;再到第五級(jí)的缺陷預(yù)防和技術(shù)變更管理。
可以看出,CMM模型的內(nèi)容比較全面,覆蓋了軟件開(kāi)發(fā)活動(dòng)的各個(gè)方面。工程類(lèi)過(guò)程域是其中的一個(gè)方面,并不是其關(guān)注的焦點(diǎn),地位與其他方面的過(guò)程域相同。
CMMI模型的情況與CMM類(lèi)似,并且進(jìn)一步加強(qiáng)了工程類(lèi)過(guò)程域。這里不再贅述。
2.4兩者關(guān)注點(diǎn)不同的原因分析
軟件生命周期模型關(guān)注于工程活動(dòng);CMM/CMMI關(guān)注于軟件開(kāi)發(fā)活動(dòng)的整體。這與工程活動(dòng)和非工程活動(dòng)在軟件開(kāi)發(fā)活動(dòng)中的位置不同有關(guān)系,也與軟件生命周期模型和CMM/CMMI發(fā)展的背景有關(guān)。
如前所述,在軟件開(kāi)發(fā)活動(dòng)中,工程活動(dòng)承擔(dān)著從需求到軟件的轉(zhuǎn)換過(guò)程。這一過(guò)程是軟件開(kāi)發(fā)活動(dòng)的核心活動(dòng)。有了這些活動(dòng),軟件的產(chǎn)出才成為可能,而其他非工程活動(dòng)是為了讓工程活動(dòng)進(jìn)行得更順利、更高效而采取的輔助和保障活動(dòng)。
因此,在軟件過(guò)程化進(jìn)程中,作為核心活動(dòng)的工程活動(dòng)會(huì)首先被過(guò)程化,然后非工程活動(dòng)才會(huì)被過(guò)程化。而軟件生命周期模型正是工程活動(dòng)被過(guò)程化的成果;CMM/CMMI則是將各類(lèi)活動(dòng)過(guò)程化的成果。
在瀑布模型產(chǎn)生之前,軟件開(kāi)發(fā)以程序編制活動(dòng)為主,沒(méi)有需求分析、設(shè)計(jì)、測(cè)試等活動(dòng)。這些活動(dòng)與程序編制活動(dòng)沒(méi)有結(jié)構(gòu)地混合在一起,組成軟件構(gòu)造的工程活動(dòng)。這樣的工程活動(dòng)難以預(yù)測(cè)和控制,使得管理活動(dòng)難以開(kāi)展。此時(shí)首先需要對(duì)工程活動(dòng)進(jìn)行過(guò)程化,只有當(dāng)處于核心位置的工程活動(dòng)能夠有序地進(jìn)行,非工程活動(dòng)才能根據(jù)工程活動(dòng)的特點(diǎn)開(kāi)展。
結(jié)構(gòu)化分析設(shè)計(jì)方法對(duì)工程活動(dòng)進(jìn)行了改進(jìn),為從需求轉(zhuǎn)化到軟件的過(guò)程提供了完整的轉(zhuǎn)換方法,使得工程活動(dòng)能夠按步驟、有次序地進(jìn)行。瀑布模型是在結(jié)構(gòu)化分析設(shè)計(jì)方法的基礎(chǔ)上對(duì)軟件開(kāi)發(fā)活動(dòng)進(jìn)一步的過(guò)程化。
在瀑布模型的基礎(chǔ)上,其他軟件生命周期模型希望能夠更好地對(duì)軟件開(kāi)發(fā)活動(dòng)進(jìn)行描述和總結(jié),于是從不同的角度,對(duì)于不同類(lèi)型的軟件開(kāi)發(fā)過(guò)程提出了若干種軟件生命周期模型。由于這些模型的開(kāi)發(fā)是在瀑布模型的背景下進(jìn)行的,其研究范圍與瀑布模型接近,關(guān)注于工程活動(dòng)較多。
工程活動(dòng)被過(guò)程化之后,非工程活動(dòng)的過(guò)程化也被重視起來(lái)。
與此同時(shí),美國(guó)國(guó)防部對(duì)軟件承包商提出在進(jìn)度和成本預(yù)算內(nèi)開(kāi)發(fā)出高質(zhì)量軟件的要求,促使軟件產(chǎn)業(yè)界對(duì)相關(guān)問(wèn)題進(jìn)行研究。美國(guó)國(guó)防部的一個(gè)研究小組分析軟件危機(jī)后得出結(jié)論:“軍用軟件開(kāi)發(fā)中,當(dāng)前最主要的問(wèn)題不是技術(shù)問(wèn)題,而是管理問(wèn)題[8]”。也就是說(shuō),不是工程活動(dòng)的問(wèn)題(技術(shù)問(wèn)題),而是非工程活動(dòng)的問(wèn)題(管理問(wèn)題)。
SEI在Watts Humphrey的領(lǐng)導(dǎo)下,收集產(chǎn)業(yè)經(jīng)驗(yàn)并借鑒傳統(tǒng)行業(yè)的質(zhì)量理論,在此基礎(chǔ)上進(jìn)一步發(fā)展并形成了CMM/CMMI模型。由于這樣的發(fā)展背景,CMM/CMMI關(guān)注于包括工程活動(dòng)在內(nèi)的軟件開(kāi)發(fā)活動(dòng)的各個(gè)方面。
3軟件生命周期模型對(duì)CMM/CMMI的影響?yīng)?/p>
3.1CMM/CMMI的產(chǎn)生背景
從前面的討論可以看出,在軟件生命周期模型被提出的過(guò)程中,CMM/CMMI基本沒(méi)有影響軟件生命周期模型的發(fā)展,在各種軟件生命周期模型中都沒(méi)有受到CMM/CMMI影響的內(nèi)容。但是,在CMM/CMMI模型中,卻可以看到瀑布模型的影子。本節(jié)將討論瀑布模型在整體上對(duì)CMM/CMMI的影響。
CMM/CMMI產(chǎn)生的一個(gè)目的是為了美國(guó)政府和美國(guó)國(guó)防部能有效地評(píng)估軟件承包商。而美國(guó)政府和美國(guó)國(guó)防部都有自己的軟件開(kāi)發(fā)標(biāo)準(zhǔn)。從CMM/CMMI與美國(guó)國(guó)防部的軟件開(kāi)發(fā)標(biāo)準(zhǔn)之間的關(guān)系,可以推斷出一些結(jié)論。
1988年之前,美國(guó)國(guó)防部的軟件研發(fā)標(biāo)準(zhǔn)是DOD—STD—2167。該標(biāo)準(zhǔn)將瀑布模型作為美國(guó)國(guó)防部軍用軟件的開(kāi)發(fā)規(guī)范[9]。
1988年,重新修訂DOD—STD—2167,發(fā)布了DOD—STD—2167A。它允許但未制定新的模型如螺旋模型等。Barry Boehm報(bào)告指出:不幸的是,2167A所參考的軍標(biāo)MILSPECS和說(shuō)明性的例子依然是面向瀑布模型的,因此依然繼續(xù)使用瀑布模型[9]。
1994年,美國(guó)國(guó)防部發(fā)布了MIL—STD—498《軍用標(biāo)準(zhǔn)——軟件開(kāi)發(fā)和文檔》,以此取代了上述DOD—STD—2167A等三部軍用標(biāo)準(zhǔn)。在與軟件生命周期模型的關(guān)系上,MIL—STD—498標(biāo)準(zhǔn)提高了與增量模型和演化模型的兼容性[10]。
1995年ISO/IEC頒布了關(guān)于軟件研發(fā)工業(yè)上貫徹的國(guó)際標(biāo)準(zhǔn),即ISO/IEC12207—1995《信息技術(shù)——軟件生命周期過(guò)程》。IEEE根據(jù)ISO/IEC12207的內(nèi)容制定了標(biāo)準(zhǔn)IEEE/EIA12207.0。1997年IEEE/EIA協(xié)會(huì)又相繼頒布了兩部指南, 12207.1和12207.2。
1998年4月,美國(guó)國(guó)防部批準(zhǔn)采用以上三個(gè)標(biāo)準(zhǔn)取代MIL—STD—498軍用標(biāo)準(zhǔn)。
ISO/IEC12207提供了一個(gè)軟件生命周期過(guò)程的高層次的通用框架。在此框架下可以容納各種軟件生命周期模型,并給出了裁減指南[11]。
由此可以看出,在1988—1998年的十年間,美國(guó)國(guó)防部的軟件開(kāi)發(fā)標(biāo)準(zhǔn)所允許采用的軟件生命周期模型從瀑布模型擴(kuò)展到了各種軟件生命周期模型。可以判斷在1988年之前,美國(guó)國(guó)防部的軟件開(kāi)發(fā)標(biāo)準(zhǔn)所允許采用的軟件生命周期模型是瀑布模型,承接美國(guó)國(guó)防部軟件項(xiàng)目的軟件企業(yè)應(yīng)該會(huì)按照瀑布模型進(jìn)行軟件開(kāi)發(fā)。
CMM模型的1.0版本于1991年提出,最早期的版本于1987年提出。因此CMM主要內(nèi)容的確定是在20個(gè)世紀(jì)80年代,其主要實(shí)踐經(jīng)驗(yàn)都來(lái)源于當(dāng)時(shí)承接美國(guó)國(guó)防部項(xiàng)目的軟件企業(yè)的軟件開(kāi)發(fā)活動(dòng)。
并且,對(duì)于非美國(guó)國(guó)防部承包商的其他軟件企業(yè),也在廣泛使用瀑布模型,“在1985年,幾乎所有明確定義了軟件開(kāi)發(fā)生命周期的項(xiàng)目都采用了瀑布模型”[12]。
由此可以推斷,CMM的主要實(shí)踐經(jīng)驗(yàn)都來(lái)源于瀑布模型的實(shí)踐經(jīng)驗(yàn)。
上文提到,到1998年,美國(guó)國(guó)防部的標(biāo)準(zhǔn)所允許采用的軟件生命周期模型從瀑布模型擴(kuò)展到了各種軟件生命周期模型,這是美國(guó)國(guó)防部對(duì)非瀑布生命周期模型的認(rèn)可,也反映了非瀑布生命周期模型在產(chǎn)業(yè)界的應(yīng)用已經(jīng)較為普遍。
CMMI模型的第一個(gè)版本是在1999年提出的。該模型的產(chǎn)生原因之一是對(duì)CMM模型進(jìn)行改進(jìn),處理CMM模型在使用中發(fā)現(xiàn)的問(wèn)題,吸收產(chǎn)業(yè)界新的實(shí)踐經(jīng)驗(yàn)。非瀑布生命周期模型的普遍應(yīng)用所產(chǎn)生的實(shí)踐經(jīng)驗(yàn),也對(duì)CMMI模型產(chǎn)生了一些影響。
3.2瀑布模型對(duì)CMM的影響?yīng)?/p>
CMM作為通用的模型,要適用于各種工程環(huán)境中,因此既不提倡也不反對(duì)各種軟件生命周期模型的使用。在CMM中明確對(duì)軟件生命周期模型的問(wèn)題進(jìn)行了說(shuō)明[7]:
“關(guān)鍵實(shí)踐并不意味著限制軟件生命周期的選擇。已多次使用某一個(gè)特定軟件生命周期的人可能會(huì)在關(guān)鍵實(shí)踐的組織和結(jié)構(gòu)中察覺(jué)到該生命周期的元素。可是,并不存在鼓勵(lì)或阻礙使用任何特定軟件生命周期的企圖。
術(shù)語(yǔ)‘階段’用來(lái)指示軟件項(xiàng)目工作的一種已定義的劃分,但它并不與任何特定的軟件生命周期相聯(lián)系。正如在關(guān)鍵實(shí)踐中所用的那樣,階段可以指嚴(yán)格的序列階段,也可以指部分重疊的和迭代的階段。”
上述說(shuō)明基本上表明了CMM編寫(xiě)者的初衷:避免CMM受到軟件生命周期模型的影響;希望CMM模型能夠適用于各種軟件生命周期模型。盡管CMM的編寫(xiě)者存在這樣的愿望,但CMM產(chǎn)生的時(shí)代背景使CMM受到了瀑布模型的影響。瀑布模型對(duì)于CMM的主要影響表現(xiàn)在:
CMM將統(tǒng)計(jì)質(zhì)量控制理論應(yīng)用在軟件行業(yè);
CMM過(guò)于強(qiáng)調(diào)需求的固化和跟蹤;CMM過(guò)于強(qiáng)調(diào)瀑布模型的產(chǎn)出物和典型活動(dòng)。
以上幾點(diǎn)通常會(huì)使實(shí)施CMM的軟件組織認(rèn)為與CMM最匹配的軟件生命周期模型是瀑布模型。下面將分別對(duì)這幾點(diǎn)進(jìn)行討論。
1)將統(tǒng)計(jì)質(zhì)量控制理論應(yīng)用在軟件行業(yè)
統(tǒng)計(jì)質(zhì)量控制理論主要應(yīng)用于傳統(tǒng)行業(yè)中的組織。這些組織的生產(chǎn)特點(diǎn)是產(chǎn)品的規(guī)模化生產(chǎn),生產(chǎn)工藝穩(wěn)定,同一生產(chǎn)流程多次重復(fù),因此可以對(duì)某一生產(chǎn)流程的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)。通過(guò)與統(tǒng)計(jì)結(jié)果的比較確定該次生產(chǎn)流程的質(zhì)量,從而對(duì)產(chǎn)品質(zhì)量進(jìn)行控制。而軟件行業(yè)的特點(diǎn)是難以規(guī)模化生產(chǎn)。規(guī)模化生產(chǎn)是軟件工程學(xué)科的發(fā)展目標(biāo)。
本文認(rèn)為,在瀑布模型成熟應(yīng)用的時(shí)代,在某些適合應(yīng)用瀑布模型的軟件開(kāi)發(fā)領(lǐng)域,已經(jīng)存在類(lèi)似項(xiàng)目不斷重復(fù)、生產(chǎn)流程不斷重復(fù)的情形。這種情形還不是規(guī)模化生產(chǎn),但已經(jīng)有了規(guī)模化生產(chǎn)的征兆,如流程的穩(wěn)定重復(fù)。
瀑布模型簡(jiǎn)單而易于理解,在適合于使用瀑布模型的軟件開(kāi)發(fā)活動(dòng)當(dāng)中,各項(xiàng)活動(dòng)的穩(wěn)定性和可重復(fù)性較強(qiáng)。在瀑布模型盛行的20世紀(jì)70~80年代這二十年間,大廠商和美國(guó)國(guó)防部的軟件合同商都在廣泛使用瀑布模型。
由于瀑布模型和結(jié)構(gòu)化分析設(shè)計(jì)方法的成熟應(yīng)用,軟件的需求分析、設(shè)計(jì)、編碼、測(cè)試活動(dòng)相對(duì)比較成熟可控,不同項(xiàng)目之間的可比性較強(qiáng),數(shù)據(jù)有較強(qiáng)的統(tǒng)計(jì)意義,可以應(yīng)用統(tǒng)計(jì)質(zhì)量控制理論對(duì)各類(lèi)活動(dòng)進(jìn)行統(tǒng)計(jì)和質(zhì)量控制。
2)CMM過(guò)于強(qiáng)調(diào)需求的固化和跟蹤
需求的開(kāi)發(fā)和管理,由于其對(duì)于軟件開(kāi)發(fā)的重要性和復(fù)雜性,一直是各種軟件生命周期模型關(guān)注的問(wèn)題。原型模型通過(guò)原型來(lái)誘導(dǎo)和確認(rèn)需求;增量模型通過(guò)每次增量發(fā)布的可運(yùn)行的版本來(lái)確認(rèn)需求;瀑布模型則通過(guò)需求規(guī)格說(shuō)明書(shū)來(lái)確認(rèn)需求。
瀑布模型從需求開(kāi)始,以需求規(guī)格說(shuō)明書(shū)來(lái)固化需求,強(qiáng)調(diào)后續(xù)活動(dòng)與需求的一致性。瀑布模型的這一特點(diǎn)與CMM模型的需求管理關(guān)鍵過(guò)程域中的部分內(nèi)容非常類(lèi)似。需求管理關(guān)鍵過(guò)程域規(guī)定要建立需求基線作為后續(xù)工作的基礎(chǔ),要對(duì)需求進(jìn)行跟蹤。
相對(duì)于原型模型通過(guò)原型對(duì)需求不斷的精化,增量模型通過(guò)可運(yùn)行的版本對(duì)需求進(jìn)行確認(rèn)。CMM中需求管理的思想更接近于瀑布模型。
3)CMM過(guò)于強(qiáng)調(diào)瀑布模型的產(chǎn)出物和典型活動(dòng)
CMM模型中軟件產(chǎn)品工程關(guān)鍵過(guò)程域中,規(guī)定了需要進(jìn)行的工程活動(dòng)。CMM規(guī)定的工程活動(dòng)包括需求分析、體系結(jié)構(gòu)設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼、集成測(cè)試、系統(tǒng)測(cè)試和驗(yàn)收測(cè)試等。CMM并沒(méi)有說(shuō)明這些工程活動(dòng)要嚴(yán)格按照瀑布模型的順序進(jìn)行,也沒(méi)有說(shuō)明這些活動(dòng)不能重疊和迭代。但是相比較其他軟件生命周期模型的產(chǎn)出物和典型活動(dòng),這些活動(dòng)與瀑布模型過(guò)于相似。
3.3軟件生命周期模型對(duì)CMMI的影響?yīng)?/p>
從軟件行業(yè)的角度看,CMMI吸收了最近若干年軟件產(chǎn)業(yè)的一些實(shí)踐經(jīng)驗(yàn),也參考了CMM在使用過(guò)程中的反饋問(wèn)題,因此內(nèi)容上受到了新的生命周期模型的影響。這些影響主要表現(xiàn)在兩個(gè)方面:
a)修正CMM中受到瀑布模型影響的內(nèi)容。
瀑布模型對(duì)CMM的影響在3.2節(jié)已有描述。其中CMM過(guò)于強(qiáng)調(diào)需求的固化和跟蹤以及CMM過(guò)于強(qiáng)調(diào)瀑布模型的產(chǎn)出物和典型活動(dòng)在CMMI中都得到了修正。CMMI中的需求管理過(guò)程域不再要求建立需求基線;在相關(guān)工程類(lèi)過(guò)程域中也不再?gòu)?qiáng)調(diào)瀑布模型的產(chǎn)出物和典型活動(dòng),而代之以各種類(lèi)型的產(chǎn)出物和典型活動(dòng)。這一修正也從側(cè)面支持了本文3.2節(jié)中的部分觀點(diǎn)。
但對(duì)于將統(tǒng)計(jì)質(zhì)量控制理論應(yīng)用在軟件行業(yè),CMMI模型沒(méi)有變化,依然以統(tǒng)計(jì)質(zhì)量控制理論作為過(guò)程改進(jìn)的主導(dǎo)思想。
b)吸收了迭代式生命周期模型的思想。迭代式生命周期模型典型的如螺旋模型、增量模型、統(tǒng)一軟件開(kāi)發(fā)模型等,在產(chǎn)業(yè)界已經(jīng)普遍應(yīng)用。通過(guò)迭代來(lái)規(guī)避風(fēng)險(xiǎn)、確認(rèn)需求等優(yōu)秀實(shí)踐是產(chǎn)業(yè)界比較新的實(shí)踐成果。CMMI模型吸收了迭代的思想,認(rèn)為項(xiàng)目過(guò)程本身是一個(gè)不斷演化、經(jīng)過(guò)多次迭代的過(guò)程,在模型中多處反映了這一思想。
例如CMMI原文中對(duì)需求管理 SP1.2的解釋[13]:
“Requirements evolve throughout the project, especially as described by the specific practices of the Requirements Development process area and the Technical Solution process area. As the requirements evolve, this specific practice ensures that project participants commit to the current, approved requirements and the resulting changes in project plans, activities, and work products.”
可翻譯為:“在項(xiàng)目過(guò)程中,需求不斷進(jìn)化,特別是在需求開(kāi)發(fā)和技術(shù)解決方案過(guò)程域的特定實(shí)踐中。在需求不斷進(jìn)化的情況下,本特定實(shí)踐確保項(xiàng)目的參與人對(duì)當(dāng)前的、經(jīng)過(guò)批準(zhǔn)的需求達(dá)成一致,并對(duì)后續(xù)的項(xiàng)目計(jì)劃、活動(dòng)和工作產(chǎn)品的變更達(dá)成一致。”
又如在對(duì)產(chǎn)品集成過(guò)程域的介紹性說(shuō)明中提到:
“Product integration is more than just a one-time assembly of the product components at the conclusion of design and fabrication. Product integration can be conducted incrementally, using an iterative process of assembling product components, evaluating them, and then assembling more product components. This process may begin with analysis and simulations (e.g., threads, rapid prototypes, virtual prototypes, and physical prototypes) and steadily progress through increasingly more realistic incremental functionality until the final product is achieved.”
可翻譯為:“產(chǎn)品集成不只是在設(shè)計(jì)和建造結(jié)束時(shí)對(duì)產(chǎn)品組件的一次性組裝。產(chǎn)品集成通常增量地進(jìn)行,采取集成產(chǎn)品組件、評(píng)價(jià)它們、再集成更多的產(chǎn)品組件這樣一個(gè)迭代的過(guò)程。這一過(guò)程可以開(kāi)始于分析和模擬(如相關(guān)串聯(lián)、快速原型、虛擬原型和實(shí)體原型),并穩(wěn)步進(jìn)展,逐漸增加更多實(shí)現(xiàn)了的功能,直至達(dá)成最終產(chǎn)品。”
這些內(nèi)容已經(jīng)完全符合迭代式生命周期模型的思想。類(lèi)似以上的內(nèi)容,在CMMI模型中還有很多,本文不再一一贅述。
CMMI對(duì)于迭代思想的吸收使之更加貼近各種迭代式生命周期模型,使得使用這些生命周期模型的項(xiàng)目能更加順暢地符合CMMI的要求。
4結(jié)束語(yǔ)
本文從整體上討論了CMM/CMMI與軟件生命周期模型的關(guān)系。討論了兩者在發(fā)展歷史中的關(guān)系、兩者關(guān)注范圍的比較以及兩者內(nèi)容的相互影響。為進(jìn)一步研究?jī)烧邇?nèi)容上的具體聯(lián)系和相互影響提供了基礎(chǔ),對(duì)CMM/CMMI的實(shí)施活動(dòng)也具備一定的參考意義。
參考文獻(xiàn):
[1]LAI R. The move to mature process[J].IEEE Software, 1993,10(4):14-17.
[2]HUMPHREY W S. Characterizing the software process: a maturity framework[R]. Pittsburgh:Carnegie Mellon Software Engineering Institute, 1987.
[3]HUMPHREY W S, SWEET W L. A method for assessing the software engineering capability of contractors[R]. Pittsburgh:Carnegie Mellon Software Engineering Institute, 1987.
[4]International Standards Organization.ISO 9001—2000,Quality ma ̄nagement systems-requirements[S]. 2000.
[5]ZAHRAN S.軟件過(guò)程改進(jìn)[M]. 陳新,等譯. 北京:機(jī)械工業(yè)出版社, 2002:46-47.
[6]FUGGETTA A. Software process: a roadmap[C]//FINKELSTEIN A. Future of software engineering. Proc of the 22nd International Conference on Software Engineering (ICSE2000). New York: ACM Press, 2000:25-34.
[7]PAULK M C, et al. Key practices of the capability maturity model SM, version 1.1[R]. Pittsburgh: Carnegie Mellon Software Engineering Institute, 1993.
[8]Department of Defense. Report of the defense science board task force on military software[R]. Washington, D C:Office of the Under Secretary of Defense for Acquisition,1987.
[9]BROOKS F P.人月神話[M]. 汪穎,等譯. 北京:清華大學(xué)出版社, 2002:367.
[10]US Department of Defense. MIL-STD-498, Military standard-software development and documentation[S]. 1994.
[11]ISO/IEC 12207—1995. Information technology software life cycle processes[S].1995.
[12]POLLICE G. How far have we come?[EB/OL]. [2006-09-25].http://www-128.ibm.com/developerworks/rational/library/dec04/pollice/index.html.
[13]CMMI Product Team. Capability maturity model integration(CMMI) version 1.1 (CMMI-SE/SW/IPPD,v1.1) staged representation[R]. Pittsburgh: Carnegie Mellon Software Engineering Institute, 2001:86-87.
“本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文”