向 峰
COCOMO(構(gòu)造性成本模型,Constructive Cost Model)出現(xiàn)在軟件工程日趨成熟之際,它既是對(duì)該學(xué)科方法與技術(shù)等變化的反映,同時(shí)也是這些變化的指示器。COCOMO已經(jīng)并將繼續(xù)成為介紹、闡釋軟件工程方法與技術(shù)的不可或缺的工具。
一、引言
COCOMO由Barry Boehm在其1981年的論著《軟件工程經(jīng)濟(jì)學(xué)》一書中所提出,被描述成為一種用于估計(jì)軟件項(xiàng)目耗費(fèi)、成本、時(shí)間表等的模型。正如他所指出的,“COCOMO適用于對(duì)當(dāng)前軟件工程的指導(dǎo)方針以及該方針在整個(gè)軟件生命周期中的作用做出解釋” 。事實(shí)上,基于COCOMO的估計(jì)已經(jīng)成為當(dāng)今最為流行的估計(jì)方法,并對(duì)工業(yè)生產(chǎn)和軟件工程教學(xué)產(chǎn)生了深遠(yuǎn)的影響。
本文簡單介紹了COCOMO的最初模型,回溯了COCOMO的發(fā)展歷程,并對(duì)以COCOMO 81及其后續(xù)者作為軟件估計(jì)教學(xué)和軟件項(xiàng)目管理基礎(chǔ)的一些方法進(jìn)行了闡述。
二、COCOMO及其后續(xù)產(chǎn)品
在《軟件工程經(jīng)濟(jì)學(xué)》這一經(jīng)典教材中,有關(guān)COCOMO的內(nèi)容僅占全書33章中的13章,其他章節(jié)則是對(duì)成本效率分析,多目標(biāo)決策分析,解決不確定性、風(fēng)險(xiǎn)、以及信息價(jià)值等的論述。然而,這并不妨礙COCOMO成為該書的靈魂,也正是由于包含了COCOMO,這本教科書式的論著才受到了長久的追捧。
(一)COCOMO 81 - 一種構(gòu)造性成本模型
COCOMO 81具有典型的開放式、構(gòu)造性特征,正如人們通常所認(rèn)為的,它既是一個(gè)估算模型,同時(shí)又是一個(gè)演示如何建立估算模型的詳細(xì)實(shí)例。COCOMO之所以被稱為“構(gòu)造性成本模型”,源于Barry Boehm最初利用它來說明如何構(gòu)建一個(gè)成本估算模型。早期的“黑盒”估算工具所依賴的模型,其細(xì)節(jié)被賣家認(rèn)為是私有的,盡管他們聲稱模型是建立在“數(shù)以千計(jì)的數(shù)據(jù)”基礎(chǔ)之上,但是卻沒有公開發(fā)表的論文對(duì)此做出印證。而與此相反的,開發(fā)COCOMO 81及其后續(xù)產(chǎn)品的目的,就是意圖建立一個(gè)完全開放式的、透明的模型。
Barry Boehm于1981年擔(dān)任TRW公司(Thompson Ramo Wooldrige Inc)的軟件開發(fā)與技術(shù)總監(jiān),COCOMO 81即建立在對(duì)該公司63個(gè)項(xiàng)目相關(guān)數(shù)據(jù)的分析基礎(chǔ)之上,采用當(dāng)時(shí)流行的瀑布式軟件開發(fā)模式。在月人工量(man-months)與基于交付源指令(DSI)的項(xiàng)目規(guī)模關(guān)系圖中,COCOMO數(shù)據(jù)大致形成三個(gè)集群,Boehm將它們分別稱為組織型的(Organic)、半分離型的(Semidetached)、以及嵌入式的(Embedded)模式,這三種模式下的軟件開發(fā)復(fù)雜性與困難程度呈逐步增加的趨勢(shì)。
COCOMO由三個(gè)不斷深入的層次組成,分別為“基本(Basic)COCOMO”、“中間(Intermediate)COCOMO”、以及“詳細(xì)(Detailed)COCOMO”。基本COCOMO是一種靜態(tài)的單值模型,它根據(jù)(由代碼行數(shù)來度量的)程序規(guī)模來計(jì)算軟件開發(fā)的工作量和成本。中間COCOMO 模型采用15個(gè)成本驅(qū)動(dòng)改進(jìn)基本模型,是對(duì)產(chǎn)品、硬件、工作人員、項(xiàng)目特性等因素的主觀評(píng)估,其中,成本驅(qū)動(dòng)的影響定為項(xiàng)目級(jí)。詳細(xì)COCOMO 模型是三種模型中最精確的,具有中間 COCOMO 模型的所有特性;它將軟件開發(fā)劃分為四個(gè)階段,并根據(jù)相應(yīng)的階段賦予成本因子不同的權(quán)重,此時(shí)的計(jì)算細(xì)化到子系統(tǒng)/模塊,更加符合軟件開發(fā)的真實(shí)情況。
(二)COCOMO 81中的施教時(shí)刻
施教時(shí)刻(Teachable moments)是指在就某一問題進(jìn)行討論或?qū)W習(xí)時(shí),能夠產(chǎn)生大量與該問題相關(guān)的認(rèn)識(shí)、看法、理解等認(rèn)知的那段時(shí)間。施教時(shí)刻可以事先進(jìn)行安排和計(jì)劃,也可能隨機(jī)的、自發(fā)的產(chǎn)生。在施教時(shí)刻,人們把對(duì)某一問題的討論設(shè)置在特定的情境或條件之下,從而在這些前提不斷擴(kuò)大和深入時(shí),有助于獲得對(duì)該問題更深層次、更廣泛的理解。比如,對(duì)COCOMO有關(guān)等式的推導(dǎo)附帶著線性回歸、統(tǒng)計(jì)密度函數(shù)、方差分析等方面的知識(shí),選擇成本驅(qū)動(dòng)及其參數(shù)則涉及了對(duì)工作效率、成本、時(shí)間表等的有關(guān)影響因子的分析;我們可以這樣認(rèn)為,施教時(shí)刻是將認(rèn)知擴(kuò)大到一個(gè)預(yù)先設(shè)定好的更廣泛領(lǐng)域的過渡階段。Richard E. (Dick) Fairley在其所教授的軟件項(xiàng)目管理課程中列舉的COCOMO中所包含的施教時(shí)刻如表1所示:
(三)Ada COCOMO與Ada過程模型
COCOMO 81是典型的基于瀑布式模型的批處理模式,它隨著軟件工程的日趨成熟而逐步發(fā)展起來,在第一時(shí)間反映并指示了了軟件工程方法與技術(shù)領(lǐng)域的諸多變化。Ada COCOMO是COCOMO 81的“增強(qiáng)版”,是專門針對(duì)嵌入式系統(tǒng)的估算模型,這類系統(tǒng)大多采用Ada編程語言開發(fā)(Boehm & Royce,1987)。TRW公司所采用的Ada過程模型集增量開發(fā)、風(fēng)險(xiǎn)管理、結(jié)構(gòu)骨架、漸增測(cè)試、統(tǒng)一軟件度量等于一體(Royce,1990)。Ada COCOMO中增加了新的成本驅(qū)動(dòng),并對(duì)工作量乘數(shù)做出了相應(yīng)的調(diào)整,其對(duì)COCOMO 81最突出的兩點(diǎn)增強(qiáng)表現(xiàn)為,(a)整合了四個(gè)尺度因子以適應(yīng)嵌入式系統(tǒng)中工作效率和時(shí)間估計(jì)方程的指數(shù),(b)為軟件產(chǎn)品或系統(tǒng)的增量開發(fā)提供了一個(gè)估計(jì)程序。在COCOMO 81及其擴(kuò)展(包括Ada COCOMO)中,指數(shù)因子(> 1)都顯示出成本費(fèi)用因經(jīng)營規(guī)模擴(kuò)大而增加的一種趨勢(shì),這與大規(guī)模產(chǎn)品中溝通費(fèi)用和整合工作量的非線性增加有關(guān)。乘數(shù)因子便是根據(jù)產(chǎn)品和項(xiàng)目的特性而非規(guī)模來調(diào)整對(duì)工作量的估計(jì)。
Ada COCOMO在COCOMO 81的基礎(chǔ)上進(jìn)一步引入了軟件安全性、復(fù)用性、基于新成本驅(qū)動(dòng)的嵌入式系統(tǒng)等內(nèi)容,同時(shí)也在更廣泛的意義上對(duì)基于連續(xù)性數(shù)據(jù)采集與分析的模型參數(shù)改進(jìn)、軟件開發(fā)過程模型的特性、迭代式開發(fā)的軟件修訂等問題進(jìn)行了探討。Ada COCOMO中包含的施教時(shí)刻(表2)反映了對(duì)COCOMO 81的一種漸進(jìn)性的累積過程,因此,COCOMO的教學(xué)可以稱之為是對(duì)COCOMO、軟件估計(jì)、軟件工程方法與技術(shù)等發(fā)展歷程的強(qiáng)化認(rèn)識(shí)。
(四)COCOMO II
COCOMO II發(fā)布于1997年,隨后在2000年進(jìn)行了一些小的升級(jí)和改動(dòng)。COCOMO II的最初使命是為自1981年以來不斷改變著的軟件工程方法、模型以及技術(shù)等提供一個(gè)開放式的、構(gòu)建性的估計(jì)模型,同時(shí),這個(gè)模型將力求完善,以滿足一系列開發(fā)方法與相應(yīng)的實(shí)際開發(fā)工作的需求。
COCOMO II的主要特點(diǎn)表現(xiàn)在,分別用兩個(gè)單獨(dú)的指數(shù)方程來進(jìn)行工作量和時(shí)間表的估計(jì),取代了COCOMO 81的三個(gè)模式;用五個(gè)尺度因子來調(diào)整方程指數(shù);增加了三個(gè)規(guī)模選項(xiàng);對(duì)成本驅(qū)動(dòng)進(jìn)行了重新定義和補(bǔ)充;另外還包括一個(gè)非線性復(fù)用模型、兩級(jí)成本驅(qū)動(dòng)粒度、一個(gè)貝葉斯校正方法。它的主要目標(biāo)是為產(chǎn)品、開發(fā)過程、質(zhì)量、軟件項(xiàng)目的成功模式之間的沖突提供調(diào)解的途徑,從而輔助估計(jì)。采用MBASE方法通過對(duì)軟件規(guī)模、成本模型粒度、開發(fā)過程等的預(yù)先選擇,COCOMO II就能夠根據(jù)設(shè)定與約束條件等來滿足待估項(xiàng)目的需求。與之前的COCOMO 81和Ada COCOMO相比,COCOMO II包含了更多的施教時(shí)刻(表3),所涉及的內(nèi)容更加寬泛。
三、教學(xué)
一般來說,教育是指在學(xué)校內(nèi)完成一定的專業(yè)知識(shí)學(xué)習(xí),通過考核,最終獲得授予證書或文憑的資格。軟件工程的雙重教學(xué)目的在于,第一,幫助學(xué)生打下扎實(shí)的基礎(chǔ)已以應(yīng)付未來新知識(shí)的學(xué)習(xí);第二,向?qū)W生傳授技能,以適應(yīng)當(dāng)前和短期內(nèi)的商業(yè)環(huán)境。合理的確定這兩個(gè)目標(biāo)在軟件工程教學(xué)中的比例,也是對(duì)教師們的一項(xiàng)長期的考驗(yàn)。
因此,基于COCOMO的教學(xué)大致表現(xiàn)為以下幾種形式:介紹COCOMO工具及其使用方法;講解各種COCOMO模型中所包含的理論內(nèi)容;通過檢驗(yàn)一個(gè)COCOMO模型來完成數(shù)據(jù)采集和分析的實(shí)驗(yàn);通過團(tuán)隊(duì)項(xiàng)目來開發(fā)一個(gè)COCOMO估計(jì)工具;以使用COCOMO為基礎(chǔ)的、介紹并討論表1~3中相關(guān)話題的、相對(duì)詳盡的軟件工程課程。
另一方面還要將技術(shù)傳授給軟件開發(fā)人員、維護(hù)人員、管理人員,從而提高其工作效率。然而,軟件工程教學(xué)需要明確基于某一問題的假定和約束條件。比如,進(jìn)行估計(jì)的人必須首先要了解估算過程中都包含哪些內(nèi)容、不同環(huán)境下工作量乘子的有關(guān)影響、方程與乘子的精度局限性、根據(jù)所處條件進(jìn)行校正模型時(shí)需要考慮的事項(xiàng)等等。那些審查并批準(zhǔn)估算的人必須知道應(yīng)該向進(jìn)行估算的人員提出哪些問題以及如何去評(píng)定他們的回答。除此,
開發(fā)人員與管理人員也需要了解軟件工程工具的實(shí)用性、成本、特點(diǎn)、以及局限等問題。
四、最新發(fā)展
USC(The University of Southern California)軟件工程中心目前對(duì)COCOMO理論方面的研究側(cè)重于在COCOMO II的基礎(chǔ)上進(jìn)行擴(kuò)展并開發(fā)出新的模型,同時(shí),也嘗試整合多個(gè)模型而建立一個(gè)單獨(dú)的、功能齊備的估計(jì)工具。對(duì)COCOMO II的擴(kuò)展主要是指模型利用COCOMO II的輸出結(jié)果并通過各種途徑來實(shí)現(xiàn)對(duì)結(jié)果的修正。新模型可以在COCOMO方法的基礎(chǔ)上進(jìn)行估計(jì)但要求有其獨(dú)立的輸入,如果有必要,新模型也可以與COCOMO II聯(lián)合使用。圖1簡單描述了COCOMO的發(fā)展歷程。每一個(gè)擴(kuò)展模型和新模型都經(jīng)由COCOMO這座大門而向?qū)W生們展示了軟件工程領(lǐng)域的最新發(fā)展與動(dòng)態(tài)。
五、結(jié)束語
COCOMO 81是一個(gè)開放式的、透明的、面向瀑布式的軟件項(xiàng)目工作效率、成本、時(shí)間表等的估計(jì)模型。從表1~3及圖1中不難看出,COCOMO的發(fā)展是緊密跟隨軟件工程的腳步的,很多時(shí)候它反映了該領(lǐng)域方法與技術(shù)的變革,在其發(fā)展的每一步,COCOMO都為激發(fā)并探討未知領(lǐng)域提供了一種機(jī)制。COCOMO對(duì)軟件工程教學(xué)的影響遠(yuǎn)遠(yuǎn)的超出了單純的對(duì)估計(jì)方法和估計(jì)工具的學(xué)習(xí),它將軟件開發(fā)與維護(hù)中的許多問題具體化、深入化。正如《軟件工程經(jīng)濟(jì)學(xué)》一書的序言中所指出的,COCOMO模型適用于“對(duì)當(dāng)前軟件工程的指導(dǎo)方針以及該方針在整個(gè)軟件生命周期中的作用做出解釋” 。
參考文獻(xiàn):
[1]Boehm, B. W., Royce, W., TRW IOC Ada COCOMO: definitions and refinements. In: Proceedings of the Third International COCOMO Users Group, Software Engineering Institute,1987.
[2]Royce, W.,TRWs Ada process model for incremental development of large software systems, In: Proceedings of the 12th International Conference on Software Engineering. IEEE Computer Society Press, 1990,pp: 2-11.
[3]Richard E. (Dick) Fairley,The influence of COCOMO on software engineering education and training, The Journal of Systems and Software,80 (2007),pp: 1201-1208.
[4]Boehm, B. et al., COCOMO suite methodology and evolution. Crosstalk 18 (4),2005,pp: 20-25.
[5]趙昌木.美國教學(xué)方法改革的經(jīng)驗(yàn),1994.
[6]鄭人杰.實(shí)用軟件工程.北京:清華大學(xué)出版社,1997.
(作者簡介:向峰(1982—),2007年碩士畢業(yè)于武漢大學(xué)國際軟件學(xué)院;現(xiàn)任武漢大學(xué)東湖分校計(jì)算機(jī)科學(xué)學(xué)院教師,從事軟件工程專業(yè)教學(xué)工作。)