武秋實(shí)
項(xiàng)目成本估算一直是信息系統(tǒng)開發(fā)項(xiàng)目的重大困擾。某些企業(yè)利用信息不對(duì)稱虛報(bào)軟件規(guī)模和成本,使業(yè)主蒙受巨大的經(jīng)濟(jì)損失;個(gè)別企業(yè)壓低價(jià)格,惡性競(jìng)爭(zhēng),擾亂市場(chǎng)秩序;大量項(xiàng)目預(yù)算不足,帶來成本風(fēng)險(xiǎn),甚至造成項(xiàng)目失敗。為此,IT項(xiàng)目的成本估算一直是企業(yè)、學(xué)術(shù)界、用戶、政府、第三方等各方重點(diǎn)關(guān)注的問題,研究并提出了眾多的估算方法,基本可以分為模型驅(qū)動(dòng)、數(shù)據(jù)驅(qū)動(dòng)和經(jīng)驗(yàn)驅(qū)動(dòng)三類。
本文就模型驅(qū)動(dòng)的估算方法進(jìn)行闡述和研究,為項(xiàng)目工作量以及人工成本的管理和控制提供理論依據(jù),有效應(yīng)對(duì)成本風(fēng)險(xiǎn)。
進(jìn)行IT項(xiàng)目成本估計(jì)的模型很多,1977年IBM公司的Walston和Felix提出了最早的軟件成本估算模型,又稱IBM模型。模型基于對(duì)源代碼行數(shù)L的計(jì)數(shù)。
該方法給出了工作量、工期、人數(shù)、文檔量等變量與代碼行的關(guān)系,具有較好的點(diǎn)估計(jì)效果。
1981年,Barry Boehm提出COCOMO模型,該模型經(jīng)過長(zhǎng)期發(fā)展,經(jīng)歷了COCOMO81、COCOMOII,目前已經(jīng)發(fā)展成為一組模型套件。其核心公式為工作量與代碼行的指數(shù)關(guān)系。
從以上兩個(gè)典型模型可見國(guó)外的模型主要依據(jù)代碼行數(shù)進(jìn)行成本的點(diǎn)估計(jì)。
國(guó)內(nèi)的模型研究起步較晚。2013年,中國(guó)軟件行業(yè)協(xié)會(huì)系統(tǒng)與軟件過程改進(jìn)分會(huì)發(fā)布了《軟件研發(fā)成本度量規(guī)范》,提出了依據(jù)功能點(diǎn)數(shù)進(jìn)行區(qū)間估計(jì)的方法;中國(guó)系統(tǒng)與軟件度量用戶組還建立了中國(guó)軟件過程基準(zhǔn)數(shù)據(jù)庫(kù),截至2014年3月1日,該數(shù)據(jù)庫(kù)包含國(guó)內(nèi)外項(xiàng)目數(shù)據(jù)4 634套。
《軟件研發(fā)成本度量規(guī)范》的核心公式是功能點(diǎn)數(shù)S與工作量AE的轉(zhuǎn)換。
其中PDR為功能點(diǎn)耗時(shí)率,SWF為軟件因素調(diào)整因子,RDF為開發(fā)因素調(diào)整因子。依據(jù)數(shù)據(jù)庫(kù)中不同項(xiàng)目的功能點(diǎn)耗時(shí)率,可以將功能點(diǎn)S轉(zhuǎn)換成一個(gè)工作量AE的區(qū)間,從而進(jìn)行區(qū)間估計(jì)。
《軟件研發(fā)成本度量規(guī)范》模型的提出為軟件項(xiàng)目預(yù)算、立項(xiàng)審批、招投標(biāo)、項(xiàng)目計(jì)劃、變更管理等工作提供了模型支撐,基準(zhǔn)數(shù)據(jù)庫(kù)為模型提供了數(shù)據(jù)支撐。
SPI模型對(duì)軟件成本的計(jì)算過程分為測(cè)算規(guī)模、測(cè)算工作量、測(cè)算工期和測(cè)算費(fèi)用4個(gè)步驟。
2.1.1 測(cè)算規(guī)模
規(guī)模S的測(cè)算主要包括功能點(diǎn)度量和規(guī)模調(diào)整兩部分。功能點(diǎn)度量采用預(yù)估功能點(diǎn)計(jì)數(shù)法,數(shù)出項(xiàng)目的內(nèi)部邏輯文件ILF和外部接口文件EIF數(shù)量。然后,進(jìn)行復(fù)用度調(diào)整和需求變更調(diào)整。復(fù)用度調(diào)整因子RUF的取值為0~1的任意實(shí)數(shù),需求變更調(diào)整因子CF的取值為1~2的任意實(shí)數(shù)。
采用預(yù)估功能點(diǎn)計(jì)數(shù)法測(cè)算規(guī)模的方法見公式(7)。
假設(shè)某項(xiàng)目有15個(gè)內(nèi)部邏輯文件ILF,10個(gè)外部接口文件EIF,復(fù)用度調(diào)整因子RUF為1,需求變更調(diào)整因子CF為1.5,則規(guī)模S的取值為1 012.5功能點(diǎn),即S=35×15+15×10)×1×1.5。
2.1.2 測(cè)算工作量
測(cè)算工作量AE的方法是根據(jù)功能點(diǎn)耗時(shí)率PDR,將以功能點(diǎn)測(cè)算的規(guī)模S轉(zhuǎn)換為人時(shí)工作量UE,然后根據(jù)軟件因素SWF和開發(fā)因素RDF對(duì)工作量進(jìn)行調(diào)整。
功能點(diǎn)耗時(shí)率的取值見表1。
表1 功能點(diǎn)耗時(shí)率基準(zhǔn)數(shù)據(jù)
軟件因素SWF受軟件規(guī)模SF、應(yīng)用類型AT和質(zhì)量特征QR的影響,幾個(gè)變量的關(guān)系見公式(9)。
軟件規(guī)模調(diào)整因子SF的取值方法見公式(10)。
應(yīng)用類型調(diào)整因子AT的取值見表2。
表2 應(yīng)用類型調(diào)整因子取值表
質(zhì)量特征調(diào)整因子QR的取值方法見表3。
表3 質(zhì)量特征調(diào)整因子取值表
開發(fā)因素RDF受開發(fā)語言SL和開發(fā)團(tuán)隊(duì)項(xiàng)目經(jīng)驗(yàn)DT的影響,幾個(gè)變量的關(guān)系見公式(11)。
開發(fā)語言調(diào)整因子SL的取值見表4。
表4 開發(fā)語言調(diào)整因子取值表
開發(fā)團(tuán)隊(duì)項(xiàng)目經(jīng)驗(yàn)影響因子DT的取值見表5。
表5 開發(fā)團(tuán)隊(duì)項(xiàng)目經(jīng)驗(yàn)調(diào)整因子取值表
假設(shè)某項(xiàng)目的規(guī)模S取值為1 012.5功能點(diǎn);功能點(diǎn)耗時(shí)率PDR取P50,取值為7.31;應(yīng)用類型調(diào)整因子AT取值1.0,質(zhì)量特征調(diào)整因子QR取值1.0,開發(fā)語言調(diào)整因子SL取值為1.0,開發(fā)團(tuán)隊(duì)項(xiàng)目經(jīng)驗(yàn)調(diào)整因子DT取值為1.0。
則軟件規(guī)模調(diào)整因子SF為0.98[(269.644 6+1 012.5×0.709 4)/1 012.5],軟件因素調(diào)整因子SWF取值為0.98(0.98×1.0×1.0),開發(fā)因素調(diào)整因子取值為1.0(1.0×1.0),工作量AE取值為7 221.64人時(shí)(1 012.5×7.31×0.98×1.0)。
2.1.3 測(cè)算工期
工期D的測(cè)算是依據(jù)工作量AE-工期D模型,將工作量轉(zhuǎn)換為工期。工作量-工期模型見公式(12)。
假設(shè)項(xiàng)目的工作量取值為7 221.64人時(shí),則工期為5.73個(gè)月。
2.1.4 測(cè)算費(fèi)用
軟件開發(fā)費(fèi)用P的測(cè)算是根據(jù)工作量AE和人月成本F計(jì)算的,計(jì)算方法見公式(13)。
北京市的人月成本F取值為23 100元。以項(xiàng)目工作量為7 221.64人時(shí)為例,則項(xiàng)目的開發(fā)費(fèi)用P取值為947 839.92(7 221.64/176×23 100)元。
2014年4月30日,中國(guó)系統(tǒng)與軟件度量用戶組依據(jù)基準(zhǔn)數(shù)據(jù)庫(kù)發(fā)布行業(yè)基準(zhǔn)數(shù)據(jù)SSMBK-201404,其中功能點(diǎn)耗時(shí)率的數(shù)據(jù)見表1。其中,P10是指基準(zhǔn)數(shù)據(jù)庫(kù)中所有歷史項(xiàng)目生產(chǎn)率數(shù)據(jù)的10分位點(diǎn),P50為行業(yè)生產(chǎn)率的50分位點(diǎn),即中位數(shù)。
在實(shí)際運(yùn)用中,可以用P50來預(yù)測(cè)最有可能工作量,P25和P75分別預(yù)測(cè)工作量的下限和上限。如果項(xiàng)目要求特別嚴(yán)格,也可以使用P10和P90來預(yù)測(cè)下限和上限。這樣,就將功能點(diǎn)數(shù)轉(zhuǎn)換成了一個(gè)工作量區(qū)間,再通過工作量區(qū)間轉(zhuǎn)換為成本區(qū)間。
假設(shè)某項(xiàng)目功能點(diǎn)數(shù)為1 012.5,分別采用P25、P50和P75進(jìn)行工時(shí)下限、最有可能值和上限的預(yù)測(cè),則項(xiàng)目所需工作量在3 665.15~12 813.22人時(shí)之間,最有可能為7 221.64人時(shí);所需費(fèi)用在48.11萬~168.17萬元之間,最有可能為94.78萬元。
基于基準(zhǔn)數(shù)據(jù)可以得出一個(gè)成本區(qū)間,但是對(duì)于預(yù)算、價(jià)格談判等投資決策的情景而言,該區(qū)間太廣,對(duì)決策的參考意義不大。
根據(jù)馬克思主義經(jīng)濟(jì)學(xué),商品的社會(huì)價(jià)值是由生產(chǎn)商品的社會(huì)必要?jiǎng)趧?dòng)時(shí)間決定的。因此,軟件產(chǎn)品的招標(biāo)價(jià)格和預(yù)算金額也應(yīng)該按照行業(yè)平均成本來進(jìn)行計(jì)算。個(gè)別企業(yè)的勞動(dòng)生產(chǎn)率較高,則其開發(fā)本軟件的成本低于招標(biāo)價(jià)格,可以得到盈利;反之,勞動(dòng)生產(chǎn)率較低的企業(yè),則會(huì)虧損。這符合市場(chǎng)經(jīng)濟(jì)的規(guī)律。
因此,采用P50作為社會(huì)必要?jiǎng)趧?dòng)生產(chǎn)率來預(yù)測(cè)最有可能值,采用P45和P55來進(jìn)行下限和上限的估算,既能合理評(píng)估軟件的行業(yè)平均成本,又可以給出較小的區(qū)間值。
但是,大部分人僅能獲得P25和P75的值,無法獲取P45和P55的值,因此可以采用一定的數(shù)據(jù)處理方法近似取得。如內(nèi)插法、回歸分析法等。現(xiàn)采用回歸分析法進(jìn)行取值。
表6 生產(chǎn)率數(shù)據(jù)回歸分析相關(guān)數(shù)據(jù)
表7 生產(chǎn)率數(shù)據(jù)回歸預(yù)測(cè)
根據(jù)表1的數(shù)據(jù),以分位點(diǎn)為變量x,以生產(chǎn)率為變量y,進(jìn)行回歸分析??傻贸鰞勺兞康年P(guān)系如公式(14)所示。
幾個(gè)參數(shù)的計(jì)算如下:
可以認(rèn)為,回歸分析的效果很理想。據(jù)此公式,可以對(duì)各個(gè)分位點(diǎn)的軟件行業(yè)基準(zhǔn)生產(chǎn)率數(shù)據(jù)進(jìn)行預(yù)測(cè)。詳見表7。
P45的預(yù)測(cè)值為6.17人時(shí)/功能點(diǎn),P50的預(yù)測(cè)值為7.10人時(shí)/功能點(diǎn),P55的預(yù)測(cè)值為8.13人時(shí)/功能點(diǎn)。
采用P45、P50和P55對(duì)功能點(diǎn)數(shù)為1 012.5的項(xiàng)目進(jìn)行預(yù)測(cè),則項(xiàng)目所需的工作量區(qū)間為6 095.42~8 031.73人時(shí),最有可能為7 014.18人時(shí);費(fèi)用區(qū)間為80.00萬~105.42萬元,最有可能為92.06萬元。
此次預(yù)測(cè)的區(qū)間明顯縮小,而且給出的是行業(yè)平均生產(chǎn)率水平下的軟件成本,可以作為預(yù)算和價(jià)格談判等投資決策提供很好的參考。