沈春元 ,陸 峻
(1.海軍駐南京地區(qū)雷達(dá)系統(tǒng)軍事代表室,南京210003; 2.中國(guó)船舶重工集團(tuán)公司第七二四研究所,南京211153)
基于敏捷開發(fā)項(xiàng)目工作量的估計(jì)方法研究
沈春元1,陸 峻2
(1.海軍駐南京地區(qū)雷達(dá)系統(tǒng)軍事代表室,南京210003; 2.中國(guó)船舶重工集團(tuán)公司第七二四研究所,南京211153)
敏捷開發(fā)是當(dāng)前非常流行的一種軟件開發(fā)方法,而常用的軟件工作量估計(jì)方法針對(duì)敏捷開發(fā)項(xiàng)目效果并不好。為能準(zhǔn)確估算出敏捷開發(fā)項(xiàng)目的工作量,研究一種基于神經(jīng)網(wǎng)絡(luò)工作量估算模型,以適用于敏捷開發(fā)項(xiàng)目的工作量估計(jì)。
敏捷開發(fā);工作量估計(jì);神經(jīng)網(wǎng)絡(luò)
“軟件危機(jī)”是在上世紀(jì)60年代末在第一屆北大西洋公約組織軟件工程會(huì)議上首次出現(xiàn)的。產(chǎn)生“軟件危機(jī)”的主要原因之一是:對(duì)軟件開發(fā)成本、所耗費(fèi)的資源以及軟件開發(fā)所需時(shí)間的估算準(zhǔn)確程度不能滿足實(shí)際的需要。經(jīng)過(guò)近半世紀(jì)的歲月,“軟件危機(jī)”這個(gè)術(shù)語(yǔ)所蘊(yùn)涵的軟件項(xiàng)目超時(shí)、超支等問(wèn)題依然困擾著軟件行業(yè)[1],究其原因,軟件項(xiàng)目估算不準(zhǔn)確與需求不穩(wěn)定是最普遍的兩個(gè)原因[2]。
軟件估算是對(duì)軟件項(xiàng)目成本、開發(fā)時(shí)間以及工作量等的估測(cè),其活動(dòng)貫穿于軟件項(xiàng)目開發(fā)的各個(gè)階段。軟件估算是軟件項(xiàng)目管理的關(guān)鍵組成部分。軟件項(xiàng)目估算的準(zhǔn)確與否事關(guān)軟件項(xiàng)目的成敗。尤其是在軟件項(xiàng)目的早期,準(zhǔn)確可信的軟件估算顯得尤為重要。比如,軟件項(xiàng)目的可行性、接下來(lái)項(xiàng)目的總體規(guī)劃和計(jì)劃以及各種資源的分配等都離不開對(duì)項(xiàng)目的估算。由于軟件開發(fā)是個(gè)漸進(jìn)的過(guò)程,在軟件項(xiàng)目的早期對(duì)該軟件認(rèn)識(shí)還比較模糊,加上影響軟件開發(fā)的因素也比較多,只有隨著項(xiàng)目的進(jìn)展對(duì)軟件項(xiàng)目的認(rèn)識(shí)才逐漸清晰,對(duì)其影響因素才逐漸明確。因此,影響軟件準(zhǔn)確估算的參數(shù)也是由不確定變動(dòng)大到確定變動(dòng)小的逐漸明確的過(guò)程[3]。
軟件項(xiàng)目工作量估計(jì)從項(xiàng)目的功能需求定義開始,首先對(duì)軟件規(guī)模進(jìn)行估計(jì),估計(jì)源代碼行數(shù)(SLOC)和文檔頁(yè)數(shù),再以軟件規(guī)模估計(jì)為基礎(chǔ)估計(jì)項(xiàng)目的工作量和成本,最后安排進(jìn)度。對(duì)項(xiàng)目來(lái)說(shuō),工作量是項(xiàng)目中主要的成本內(nèi)容,所以大部分情況下不必再額外估計(jì)成本。在軟件開發(fā)過(guò)程中,一直存在軟件的不可知性、工作量難以量化、需求難以確定等諸多問(wèn)題。這些問(wèn)題導(dǎo)致了難以對(duì)軟件的工作量進(jìn)行精確的估計(jì)。所以,軟件開發(fā)項(xiàng)目的工作量估計(jì)問(wèn)題也成為了軟件工程中非常重要且亟須解決的問(wèn)題。在開發(fā)之前,如果對(duì)軟件的開發(fā)工作量有一個(gè)可靠而精確的估計(jì),可以幫助軟件開發(fā)管理者更有效地控制開發(fā)時(shí)間和預(yù)算。而沒有進(jìn)行估計(jì)或者估計(jì)偏差較大,將會(huì)導(dǎo)致項(xiàng)目的延期,甚至是失敗。那么,軟件工作量估計(jì)作為軟件項(xiàng)目開發(fā)計(jì)劃編制的依據(jù)也就變得越來(lái)越重要。
1.1 Putnam 模型
1978年P(guān)utnam提出了一種動(dòng)態(tài)多變量模型,假定在軟件開發(fā)的整個(gè)生存期中工作量有特定的分布。這種模型是依據(jù)在一些大型項(xiàng)目(總工作量達(dá)到或超過(guò)30人年)中收集到的工作量分布情況而推導(dǎo)出來(lái)的,但也可以應(yīng)用在一些較小的軟件項(xiàng)目中。
L=Ck*K1/3*td4/3
其中,L為源代碼行數(shù)(以LOC計(jì)) ,K為整個(gè)開發(fā)過(guò)程所花費(fèi)的工作量(以人年計(jì)),td為開發(fā)持續(xù)時(shí)間(以年計(jì)),Ck為技術(shù)狀態(tài)常數(shù),它反映了“妨礙開發(fā)進(jìn)展的限制”,取值因開發(fā)環(huán)境而異。Ck典型取值見表1。
表1 技術(shù)狀態(tài)常數(shù)Ck典型取值
從上述方程加以變換,可以得到估算工作量的公式:
K=L3/(Ck3*td4)
還可以估算開發(fā)時(shí)間:
td=[L3/(Ck3*K)]1/4
1.2COCOMO模型(constructivecostmodel)
COCOMO模型又為構(gòu)造性成本模型。它是由巴里·勃姆(Barry Boehm)提出的一種基本的回歸分析公式,使用從項(xiàng)目歷史和現(xiàn)狀中的某些特征作為參數(shù)來(lái)進(jìn)行計(jì)算。
COCOMO由3個(gè)不斷深入和詳細(xì)的層次組成。第一層,“基本COCOMO”,適用對(duì)軟件開發(fā)進(jìn)行快速、早期地對(duì)重要的方面進(jìn)行粗略的成本估計(jì),但因其缺少不同的項(xiàng)目屬性(“成本驅(qū)動(dòng)者”)的因素,所以準(zhǔn)確性有一定的局限性?!爸屑?jí)COCOMO”中考慮進(jìn)了這些成本驅(qū)動(dòng)者。“詳細(xì)COCOMO”加入了對(duì)不同軟件開發(fā)階段影響的考量。
COCOMO這3 個(gè)等級(jí)的模型也都滿足下列公式,即
Effort=a×(KDSI)b×F
其中,Effort為工作量,表示為人月;a和b為系數(shù),具體的值取決于建模等級(jí)(即基本、中等或詳細(xì))以及項(xiàng)目的模式(即組織型、半獨(dú)立型或嵌入型)。這個(gè)系數(shù)的取值先由專家意見來(lái)決定,然后用COCOMO數(shù)據(jù)庫(kù)的項(xiàng)目數(shù)據(jù)來(lái)對(duì)專家給出的取值再進(jìn)一步求精。KDSI為軟件項(xiàng)目開發(fā)中交付的源指令(delivered source instruction,簡(jiǎn)稱DSI)千行數(shù),也有用代碼行(line of codes,簡(jiǎn)稱LOC)表示,代表著軟件規(guī)模。F是調(diào)整因子,基本COCOMO模型中,F(xiàn)=1,后兩個(gè)模型中F為15 個(gè)成本因子對(duì)應(yīng)的工作量乘數(shù)的乘積。
1.3 早期算法模型的缺點(diǎn)
Putnam 模型和COCOMO 模型屬于比較早期的模型,適合于瀑布式生存周期的軟件開發(fā)方法。隨著面向?qū)ο箝_發(fā)方法和敏捷開發(fā)方法等的出現(xiàn),早期的模型已不再適合于軟件工作量估計(jì)和過(guò)程管理的需要。于是,針對(duì)目前主流開發(fā)方法的估計(jì)模型的研究日益迫切。
敏捷開發(fā)是當(dāng)前非常流行的一種開發(fā)方法,而目前對(duì)敏捷開發(fā)項(xiàng)目的工作量估計(jì)主要存在以下兩個(gè)問(wèn)題:第一,工作量估計(jì)的重視程度不夠。在制定開發(fā)計(jì)劃之前只是作粗糙的估計(jì),或者根本不作估計(jì),以合同給定的時(shí)間來(lái)制定軟件產(chǎn)品的開發(fā)計(jì)劃;第二,沒有針對(duì)敏捷開發(fā)項(xiàng)目的工作量估計(jì)工具。目前,對(duì)軟件工作量的估計(jì)主要有Wideband Delphi估計(jì)法、類比估計(jì)法、功能點(diǎn)估計(jì)方法等。而針對(duì)敏捷開發(fā)項(xiàng)目,使用這些估計(jì)方法的效果并不好。所以,往往憑項(xiàng)目管理者的經(jīng)驗(yàn)進(jìn)行估計(jì),估計(jì)結(jié)果也根據(jù)管理者的不同而不同,并不能為項(xiàng)目計(jì)劃的制定提供準(zhǔn)確有效的數(shù)據(jù)支持。
由于常用的工作量估計(jì)方法對(duì)敏捷開發(fā)項(xiàng)目的估計(jì)效果不好,且沒有一個(gè)針對(duì)敏捷開發(fā)項(xiàng)目的工作量估計(jì)工具,所以本文提出了一種基于人工神經(jīng)網(wǎng)絡(luò)的工作量估計(jì)模型來(lái)解決這一問(wèn)題,將使用敏捷開發(fā)方法的項(xiàng)目進(jìn)行工作量估計(jì),并獲得工作量估計(jì)服務(wù)。
利用軟件估算模型進(jìn)行高度準(zhǔn)確性的估算,離不開歷史數(shù)據(jù)的支持。從早期基于算法模型的工作量估算來(lái)看,都需要利用歷史數(shù)據(jù)對(duì)其中的因子參數(shù)進(jìn)行校正調(diào)整;基于類比的估算是對(duì)新項(xiàng)目和歷史項(xiàng)目進(jìn)行比較,以此找出和新項(xiàng)目特征最匹配的歷史項(xiàng)目,進(jìn)而對(duì)新項(xiàng)目進(jìn)行估算。而基于人工神經(jīng)網(wǎng)絡(luò)的工作量估計(jì)模型同樣也需要?dú)v史數(shù)據(jù)的支撐,好在國(guó)際軟件基準(zhǔn)組織ISBSG (International Software Benchmarking Standards Group)提供的數(shù)據(jù)集是從各個(gè)國(guó)家收集的真實(shí)軟件開發(fā)項(xiàng)目數(shù)據(jù),可為估計(jì)模型提供數(shù)據(jù)支撐。
2.1 ISBSG 數(shù)據(jù)集
ISBSG數(shù)據(jù)集是行業(yè)內(nèi)比較著名的公開數(shù)據(jù)集,其中包括了由國(guó)際軟件基準(zhǔn)組織收集的3000多個(gè)項(xiàng)目。但是,由于該數(shù)據(jù)集并不完整,許多項(xiàng)目的屬性缺失,因此采用其中屬性值完整的502個(gè)項(xiàng)目組成的子集進(jìn)行研究。通過(guò)對(duì)ISBSG 數(shù)據(jù)集的研究,并結(jié)合實(shí)際軟件項(xiàng)目特點(diǎn)選取軟件開發(fā)過(guò)程中影響工作量估計(jì)的9個(gè)因子作為基礎(chǔ)數(shù)據(jù),即功能點(diǎn)、生產(chǎn)率、開發(fā)類型、組織類型、團(tuán)隊(duì)規(guī)模、應(yīng)用領(lǐng)域、開發(fā)平臺(tái)、編程語(yǔ)言和開發(fā)技術(shù)等。
2.2 基于 BP 神經(jīng)網(wǎng)絡(luò)的工作量估算模型
工作量估算模型選取三層BP 神經(jīng)網(wǎng)絡(luò),其拓?fù)浣Y(jié)構(gòu)包括輸入層、隱藏層和輸出層。在本模型中輸入層的神經(jīng)元的個(gè)數(shù)為 9 個(gè),而只有一個(gè)工作量的輸出,所以輸出層的神經(jīng)元個(gè)數(shù)為 1 個(gè)。圖1所示為面向敏捷開發(fā)項(xiàng)目的工作量估算模型的三層結(jié)構(gòu)圖。
圖1 工作量估算模型
圖1中,X1~ X9 分別代表功能點(diǎn)、生產(chǎn)率、開發(fā)類型、組織類型、團(tuán)隊(duì)規(guī)模、應(yīng)用領(lǐng)域、開發(fā)平臺(tái)、編程語(yǔ)言和開發(fā)技術(shù)9 個(gè)因子的輸入數(shù)據(jù),經(jīng)權(quán)值矩陣W加權(quán)求和后傳入隱藏層,通過(guò)sigmoid 函數(shù)的作用的輸出數(shù)據(jù),經(jīng)權(quán)值矩陣V加權(quán)求和后,同樣通過(guò)sigmoid 函數(shù)的作用輸出工作量估算數(shù)據(jù)effort,然后與真實(shí)工作量進(jìn)行比較,根據(jù)最小均方誤差方法不斷調(diào)整權(quán)值矩陣W和V的值,直到滿足停止條件。
(1) 網(wǎng)絡(luò)初始權(quán)值的設(shè)計(jì)
網(wǎng)絡(luò)權(quán)值的初始化決定了人工神經(jīng)網(wǎng)絡(luò)的訓(xùn)練初始狀態(tài),為避免網(wǎng)絡(luò)訓(xùn)練不會(huì)從誤差曲面上某個(gè)局部極小點(diǎn)開始,權(quán)值矩陣的初始值使用(0,1) 之間的隨機(jī)值賦值。
(2) 網(wǎng)絡(luò)訓(xùn)練算法的設(shè)計(jì)
訓(xùn)練算法選擇最小均方誤差,輸入數(shù)據(jù)為影響因子與工作量成對(duì)提供到網(wǎng)絡(luò),所以根據(jù)網(wǎng)絡(luò)計(jì)算輸出的實(shí)際工作量與期望輸出的工作量之間誤差信號(hào),通過(guò)逐層向后傳播調(diào)整權(quán)值,使得實(shí)際工作量與期望輸出的工作量之間誤差越來(lái)越小。權(quán)值的調(diào)整算法通常采用梯度下降算法,即沿著誤差曲面下降最快的方向調(diào)整權(quán)值。
(3) 網(wǎng)絡(luò)終止訓(xùn)練條件的設(shè)計(jì)
設(shè)置兩個(gè)可以停止訓(xùn)練的條件,首先是模型的精度,也就是誤差的大小,在本模型中最大誤差設(shè)置為 0.05,即當(dāng)模型的誤差總和小于 0.05 時(shí)即可停止訓(xùn)練網(wǎng)絡(luò)。
2.3 工作量估算模型的訓(xùn)練
根據(jù)以上對(duì)工作量估算模型的設(shè)計(jì),首先對(duì)輸入、輸出數(shù)據(jù)進(jìn)行處理,然后將整個(gè)樣本數(shù)據(jù)集輸入到網(wǎng)絡(luò)中去,保證神經(jīng)網(wǎng)絡(luò)是從整個(gè)樣本數(shù)據(jù)集中學(xué)習(xí)知識(shí),而不是逐個(gè)學(xué)習(xí)單個(gè)樣本的知識(shí)。采用最小均方誤差方法調(diào)整網(wǎng)絡(luò)的權(quán)值參數(shù),當(dāng)總誤差滿足精度要求時(shí),停止訓(xùn)練,得到神經(jīng)網(wǎng)絡(luò)模型的各個(gè)參數(shù),也就確定了該工作量估算模型。 圖 2 所示為整個(gè)模型的實(shí)現(xiàn)算法流程圖。
該模型的算法實(shí)現(xiàn)步驟如下所述:
(1) 權(quán)值初始化,輸入層與隱藏層之間的權(quán)值矩陣用V表示,而隱藏層到輸出層之間的取值矩陣用W表示,對(duì)權(quán)值矩陣W、V初始化為0~1之間的隨機(jī)數(shù),樣本計(jì)數(shù)器p=1,樣本總個(gè)數(shù)P,樣本總誤差E賦為0,網(wǎng)絡(luò)學(xué)習(xí)率賦值為0~1之間的小數(shù),網(wǎng)絡(luò)的訓(xùn)練精度Emin設(shè)置為0.05;
(2) 首先對(duì)訓(xùn)練樣本集進(jìn)行歸一化處理,然后輸入待訓(xùn)練的樣本對(duì),并計(jì)算各層的輸出;
圖2 實(shí)現(xiàn)算法流程圖
(3) 計(jì)算網(wǎng)絡(luò)的輸出誤差,根據(jù)每個(gè)樣本的實(shí)際輸出與期望輸出,可以得出網(wǎng)絡(luò)的輸出誤差;
(4) 計(jì)算網(wǎng)絡(luò)隱藏層和輸出層誤差信號(hào);
(5) 調(diào)整網(wǎng)絡(luò)隱藏層和輸出層權(quán)值;
(6) 檢查是否所有樣本完成一輪訓(xùn)練。若p
(7) 檢查網(wǎng)絡(luò)是否滿足精度要求。當(dāng)滿足精度要求時(shí),即E 當(dāng)訓(xùn)練結(jié)束后即可確定神經(jīng)網(wǎng)絡(luò)的各部分信息,包括各層的神經(jīng)元節(jié)點(diǎn),輸入層到隱藏層之間的權(quán)值矩陣,以及隱藏層與輸出層之間的權(quán)值矩陣,然后利用該神經(jīng)網(wǎng)絡(luò)對(duì)其他輸入數(shù)據(jù)進(jìn)行計(jì)算。 本模型與幾種常用估算方法的優(yōu)缺點(diǎn)對(duì)比表如表2所示。 表2 本模型與常用估算方法優(yōu)缺點(diǎn)對(duì)比 本文研究了基于敏捷開發(fā)的軟件工作量估計(jì)模型,通過(guò)對(duì)敏捷開發(fā)項(xiàng)目數(shù)據(jù)集的分析和訓(xùn)練學(xué)習(xí),得出對(duì)應(yīng)敏捷開發(fā)項(xiàng)目的影響因子和工作量估算模型,針對(duì)性強(qiáng),估算精度高。分析認(rèn)為可大大提高了敏捷開發(fā)項(xiàng)目工作量估算的準(zhǔn)確性。 [1] Hughes Bob,Cotterell Mike.軟件項(xiàng)目管理 [M].廖彬山,王慧譯.4版.北京:機(jī)械工業(yè)出版社,2007. [2] Swapna Kishore,Rajesh Naik.軟件需求與估算[M].姜路,柳劍鋒,丁一夫,譯.北京:機(jī)械工業(yè)出版社,2004. [3] Little Todd.Schedule estimation and uncertainty surrounding the cone of uncertainty[J].Ieee Software,2006,23(3):48-54. Research on effort estimation method based on agile development projects SHEN Chun-yuan1,LU Jun2 (1.Military Representatives Office of Radar System of the Chinese PLA Navy in Nanjing, Nanjing 210003; 2.No.724 Research Institute of CSIC, Nanjing 211153) Agile development is currently a very popular software development method, but commonly-used software effort estimation methods for agile development projects are not good. In order to accurately estimate the workload of agile development projects, an effort estimation model based on neural networks is studied for agile development project applications. agile development; effort estimation; neural networks 2013-11-12; 2013-12-10 沈春元(1965-),男,高級(jí)工程師,研究方向:雷達(dá)及指揮控制系統(tǒng);陸峻(1976-),女,高級(jí)工程師,研究方向:計(jì)算 機(jī)軟件工程化。 TP306 A 1009-0401(2014)01-0065-043 估算方法比較
4 結(jié)束語(yǔ)