王養(yǎng)廷
(華北科技學(xué)院計算機(jī)學(xué)院,北京東燕郊 101601)
軟件項(xiàng)目工作量估算是計算項(xiàng)目費(fèi)用的基礎(chǔ),也是制定項(xiàng)目開發(fā)計劃的依據(jù)。為了能夠更加準(zhǔn)確地估計項(xiàng)目工作量,許多機(jī)構(gòu)和學(xué)者對這一領(lǐng)域進(jìn)行了多年的研究,提出了許多方法。目前常用的項(xiàng)目工作量估算方法有專家法、類比法、COCOMO(Constructive Cost Model)模型以及功能點(diǎn)分析方法(Function Point Analysis)等[1-3]。在實(shí)際的項(xiàng)目開發(fā)中應(yīng)該選擇哪種方法進(jìn)行項(xiàng)目工作量估算,應(yīng)該如何進(jìn)行選擇。實(shí)際上每一種方法都很難對項(xiàng)目工作量做出準(zhǔn)確的評估[4],特別是對于相同的項(xiàng)目使用不同的工作量估算方法,得到的結(jié)果可能相差甚多[5-6]。為了能夠有效估計項(xiàng)目工作量,需要考慮項(xiàng)目特點(diǎn)和公司開發(fā)能力,綜合使用各種方法來進(jìn)行估算。
通過對合作公司的多個項(xiàng)目工作量估算結(jié)果進(jìn)行分析和總結(jié),提出了簡單的三步法來估算項(xiàng)目工作量。第一步選擇一個相對簡單的模型,簡化復(fù)雜的項(xiàng)目參數(shù),作為估算模型;第二步選取歷史項(xiàng)目數(shù)據(jù)作為樣本數(shù)據(jù)來修改模型參數(shù);第三步采用類比法根據(jù)修改后的模型來估算項(xiàng)目工作量。
在模型選擇上應(yīng)該考慮比較常見和通用的估算模型??梢赃x擇基本COCOMO模型作為工作量估算模型[7-8],模型工作量估算公式見式(1):
E表示估算的工作量,單位人月;Size表示項(xiàng)目的規(guī)模,使用千行源代碼(KLOC)表示;EAF是一個工作量調(diào)節(jié)因子。a和b是兩個調(diào)節(jié)常數(shù),基本的COCOMO給出了兩個常數(shù)的取值見表1。
表1 COCOMO模型常數(shù)
表中的方式是三種開發(fā)模式,有機(jī)表示相對簡單的小項(xiàng)目組內(nèi)使用熟悉的環(huán)境進(jìn)行開發(fā);嵌入是指項(xiàng)目在嚴(yán)格約束條件下開發(fā),需要解決的問題很少見,沒有經(jīng)驗(yàn)可以借鑒;半有機(jī)介于有機(jī)和嵌入之間。
合作公司作為一個中小軟件企業(yè),多數(shù)的開發(fā)項(xiàng)目都是相同類型或者是相似類型的,因此選擇有機(jī)模式進(jìn)行項(xiàng)目估算。
選擇好模型后,在企業(yè)找出三個典型的、有代表性的項(xiàng)目作為樣本項(xiàng)目。所選的項(xiàng)目是合作公司主要業(yè)務(wù)領(lǐng)域項(xiàng)目,同時也是正常執(zhí)行的項(xiàng)目,有基本的項(xiàng)目數(shù)據(jù)記錄。使用樣本項(xiàng)目的數(shù)據(jù)來修正公式中的參數(shù)a和b。三個項(xiàng)目的代碼行數(shù)和工作量見表2所示。
首先來分析常數(shù)b,這個常數(shù)代表規(guī)模的經(jīng)濟(jì)型是非經(jīng)濟(jì),當(dāng)b>1時表示規(guī)模非經(jīng)濟(jì),當(dāng)b<1時表示規(guī)模經(jīng)濟(jì)。簡單說就是隨著規(guī)模的增加工作量是否高于線性增加,三個項(xiàng)目的每個人月平均代碼行數(shù)如圖1所示。
從圖1可以看出項(xiàng)目的規(guī)模增加對每個人月的平均代碼數(shù)影響不大,隨著代碼規(guī)模的增加開發(fā)效率略下降?;旧戏匣綜OCOMO模型給定的常數(shù)1.05。在修正模型階段不考慮工作量調(diào)節(jié)因子,EAF設(shè)置為1。
圖1 項(xiàng)目規(guī)模與效率關(guān)系
使用三個項(xiàng)目的平均的項(xiàng)目規(guī)模和平均工作量可以計算出常數(shù)a,數(shù)值為0.76。修正后的工作量估算模型為式(2)
在實(shí)際項(xiàng)目工作量估算時,如果項(xiàng)目的類型與樣本項(xiàng)目類型相似,則可以使用式(2)進(jìn)行工作量估算。影響項(xiàng)目工作量的主要因素是規(guī)模,除此之外還有人員、技術(shù)和環(huán)境的因素。首先對項(xiàng)目的規(guī)模進(jìn)行估算,使用式(2)計算出標(biāo)準(zhǔn)的項(xiàng)目工作量。接下來從人員、技術(shù)和環(huán)境三個方面分析當(dāng)前項(xiàng)目與樣本項(xiàng)目的不同,表3列出了這些不同的量化數(shù)據(jù)。
表3 類比系數(shù)表
表3中人員從高到低代表熟練、正常、新手;技術(shù)由高到低代表技術(shù)難度大、一般、簡單;環(huán)境由高到低表示環(huán)境復(fù)雜、一般、簡單。在新的項(xiàng)目工作量估算時把人員、技術(shù)和環(huán)境的變化作為EAF調(diào)節(jié)因子,這樣與標(biāo)準(zhǔn)的項(xiàng)目數(shù)據(jù)進(jìn)行比較,使用公式(3)進(jìn)行類比就可以得到新項(xiàng)目的工作量估算數(shù)據(jù)。
Es是樣本項(xiàng)目的平均工作量,Sizes是樣本項(xiàng)目的規(guī)模,EAFs是樣本項(xiàng)目的調(diào)節(jié)因子,我們設(shè)定樣本的人員、技術(shù)和環(huán)境都是中,這樣EAFs的數(shù)值取1。E是需要估算項(xiàng)目的工作量,Size是需要估算項(xiàng)目的規(guī)模,EAF需要估算項(xiàng)目的調(diào)節(jié)因子。使用表3提供的數(shù)據(jù),可以計算出需要估算項(xiàng)目的調(diào)節(jié)因子EAF,使用式(3)計算出項(xiàng)目工作量。
合作公司已經(jīng)在多個項(xiàng)目中應(yīng)用該方法進(jìn)行項(xiàng)目工作量估算。例如近期開發(fā)的一個項(xiàng)目,所使用的開發(fā)環(huán)境、框架以及部署環(huán)境與樣本項(xiàng)目基本相同,不同的是項(xiàng)目組的人員發(fā)生了變化。按照上面方法進(jìn)行工作量估算,首先估算出項(xiàng)目規(guī)模約為18KLOC,根據(jù)式(2)計算出估算工作量為15.8人月。
假設(shè)樣本項(xiàng)目組都是正常的項(xiàng)目組成員,對應(yīng)系數(shù)為1。與樣本項(xiàng)目組相比5成員中1個是熟練,2個正常,2個新手。項(xiàng)目組平均系數(shù)使用公式(4)進(jìn)行計算,結(jié)果為1.2。
M是項(xiàng)目組平均人員系數(shù),Mi是每個項(xiàng)目組成員的人員系數(shù),n是項(xiàng)目組人數(shù)。由于項(xiàng)目組的技術(shù)和環(huán)境因素基本相同,使用M作為公式(3)中的EAF,得到公式(5)。
Es是上面公式(2)的計算結(jié)果,M是公式(4)的結(jié)果,作為工作量調(diào)節(jié)因子,帶入式(5)進(jìn)行后計算得到新項(xiàng)目工作量估算數(shù)值為19人月。按照這個估算數(shù)據(jù)制定項(xiàng)目開發(fā)計劃,項(xiàng)目實(shí)際的開發(fā)工作量與估算的相近,并基本上按照計劃完成的項(xiàng)目開發(fā)工作。
如果項(xiàng)目組的人員、技術(shù)和環(huán)境因素都存在不同,可以使用表3中的數(shù)據(jù),參考式(4)可以計算出樣本項(xiàng)目調(diào)節(jié)因子EAF,計算方法如式(6)所示。
EAF項(xiàng)目調(diào)節(jié)因子,M是人員系數(shù),使用公式(4)進(jìn)行計算;T是技術(shù)系數(shù),取值見表3;Env是環(huán)境系數(shù),取值見表3。
本文提出的工作量估算方法是在分析和總結(jié)實(shí)際項(xiàng)目工作基礎(chǔ)上提出的,并在合作公司軟件項(xiàng)目中得到了應(yīng)用,比較準(zhǔn)確地估計了開發(fā)項(xiàng)目的工作量;該方法簡單易行,客戶易于理解和接受,得到了公司和客戶的認(rèn)可。但是該方法有一個限制條件,要求估算工作量的項(xiàng)目與樣本項(xiàng)目是相同或相似類型的項(xiàng)目。對于多數(shù)的公司或項(xiàng)目組,一段時間內(nèi)所開發(fā)的項(xiàng)目基本上都是相同類型的,因此該方法對其他公司的項(xiàng)目工作量估算也有參考價值和借鑒意義。
[1] Yeong-Seok Seo,Doo-Hwan Bae,Ross Jeffery.AREION: Software effort estimation based on multiple regressions with adaptive recursive data partitioning.Information and Software Technology[J].2013,55(10):1710-1725.
[2] Nan-Hsing Chiu,Sun-Jen Huang.The adjusted analogybased software effort estimation based on similarity distances. Journal of Systems and Software[J].2007,80(4):628-640.
[3] 付雅芳,楊任農(nóng),劉曉東,王琳.基于灰色關(guān)聯(lián)分析的軟件工作量估算方法[J].系統(tǒng)工程與電子技術(shù),2012,34(11): 2384-2389.
[4] Ashish Sharma,Dharmender Singh Kushwaha.Estimation of Software Development Effort from Requirements Based Complexity.Procedia Technology[J].2012,4:716-722.
[5] 唐林燕.COCOMO估算模型改進(jìn)研究[J].微電子學(xué)與計算機(jī),2006,23(12):58-60.
[6] 馬劍.軟件開發(fā)工作量估算模型研究及其在項(xiàng)目管理的應(yīng)用[D].華北電力大學(xué),2011.
[7] Barry W.Boehm.Software Engineering Economics[M].Englewood Cliffs,NJ:Prentice-Hall,1981.
[8] 趙瑋.軟件工程經(jīng)濟(jì)學(xué)[M].西安:西安電子科技大學(xué)出版社,2008.