
引言
項(xiàng)目的成本管理,是指在規(guī)定時(shí)間內(nèi),為確保項(xiàng)目目標(biāo)的實(shí)現(xiàn),對(duì)項(xiàng)目實(shí)際發(fā)生的成本支出采取的各種控制措施和控制過程。其管理活動(dòng)包括:資源需求預(yù)測(cè)、成本估算、成本預(yù)算和成本控制[3]。成本估算是后續(xù)成本管理活動(dòng)的前提,也是成本管理中的重點(diǎn)與難點(diǎn)。
軟件項(xiàng)目的成本估算,并非傳統(tǒng)資金意義上的估算。由于人的腦力勞動(dòng)是軟件開發(fā)的主體活動(dòng),因此軟件開發(fā)的主要投入在于支付開發(fā)人員腦力勞動(dòng)的報(bào)酬。不同軟件開發(fā)單位的薪資水平存在很大差別,所以從普適性考慮,軟件項(xiàng)目成本估算研究的主要范圍是軟件項(xiàng)目的工作量和工作進(jìn)度[6]。因此,衡量軟件成本的常用單位有人天、人月、人年等形式,并且有轉(zhuǎn)換系數(shù)可在不同單位間進(jìn)行換算。在估算出軟件開發(fā)所需的人力成本之后,再根據(jù)開發(fā)單位的實(shí)際情況和項(xiàng)目?jī)?nèi)的其它費(fèi)用即可估算出相應(yīng)的成本[4]。
1 軟件項(xiàng)目成本估算階段
軟件項(xiàng)目的成本估算,一般需要經(jīng)過以下3個(gè)階段:
(1)規(guī)模估算階段。規(guī)模估算是指對(duì)軟件的大小進(jìn)行量化衡量,它是后續(xù)工作量估算的前提。估算軟件大小有兩種基本方式:估算軟件所解決問題的大小和數(shù)量,比如功能點(diǎn),因此也稱功能規(guī)模的度量;估算解決方案的大小即技術(shù)規(guī)模的度量,比如代碼行數(shù)。一般在項(xiàng)目初期主要以估算問題大小為主,隨著項(xiàng)目的開展逐步采用以估算解決方案大小的方式。
(2)工作量和進(jìn)度估算階段。工作量估算是對(duì)軟件開發(fā)所需人力的估算,這是軟件項(xiàng)目的主要成本。進(jìn)度估算將估算項(xiàng)目各任務(wù)單元可支配的時(shí)間,并制定里程碑計(jì)劃。工作量估算和進(jìn)度估算共同決定了項(xiàng)目團(tuán)隊(duì)的規(guī)模和結(jié)構(gòu)[4]。
(3)估算反饋階段。包括對(duì)成本估算方法本身的反饋,以及估算實(shí)踐中的階段性結(jié)果反饋[6]。在初期對(duì)項(xiàng)目掌握的情況較少并且仍有較多不確定性,隨著項(xiàng)目開展可了解到更多的信息以及既成事實(shí)后的情況。因此,通過不斷地進(jìn)行階段性估算結(jié)果反饋,有利于調(diào)整估算方法相關(guān)數(shù)據(jù),從而提高估算結(jié)果的精確性。
2 軟件成本估算方法
軟件成本估算方法主要有以下4種:類比估算法、項(xiàng)目分解法、專家估算法和參數(shù)模型法。
(1)類比估算法。類比估算法也稱基于案例的推理[2],即從已完成的類似項(xiàng)目的實(shí)際成本來估算新項(xiàng)目的成本。估算過程中,需確定項(xiàng)目之間的各項(xiàng)差異,并確定各項(xiàng)修正系數(shù),對(duì)各項(xiàng)數(shù)據(jù)加以運(yùn)算調(diào)整。
(2)項(xiàng)目分解法。需要對(duì)項(xiàng)目進(jìn)行分解,根據(jù)分解的先后順序不同,可分為自上而下估算法和自下而上估算法。自上而下估算法的思想是從項(xiàng)目整體進(jìn)行推算,將已估算出的項(xiàng)目整體工作量,按比例分?jǐn)傊另?xiàng)目的各項(xiàng)活動(dòng)中去。該方法比較適合在項(xiàng)目初期的總體設(shè)計(jì)中運(yùn)用[8]。自下而上估算法與自上而下估算法正好相反,這種方法是將項(xiàng)目逐層分解成足夠基本明確工作量的子任務(wù),在測(cè)算各子任務(wù)成本后,將它們累計(jì)起來就是整個(gè)軟件項(xiàng)目的成本。這種方法更適用于項(xiàng)目后期或分解后的子項(xiàng)目成本估算。
(3)專家估算法。邀請(qǐng)對(duì)軟件應(yīng)用領(lǐng)域或開發(fā)環(huán)境有豐富知識(shí)的專家對(duì)該軟件項(xiàng)目進(jìn)行工作量估算,當(dāng)遇到一個(gè)與已有軟件項(xiàng)目類似的新項(xiàng)目時(shí),可邀請(qǐng)熟悉原軟件項(xiàng)目的人員作為專家。
為了避免單個(gè)專家主觀因素的偏向性,該方法大都采取邀請(qǐng)多個(gè)專家進(jìn)行估算,并對(duì)多個(gè)估算結(jié)果進(jìn)行綜合。其中由美國(guó)蘭德公司(RAND Corporation)推廣的Delphi法正是匯集多個(gè)專家意見的技術(shù),其步驟大致如下[10]:①組織者向各專家提供軟件規(guī)格說明書和估算表格供他們進(jìn)行研究。估算表中應(yīng)包括軟件成本估算的最小值(ai)、最有可能值(mi)、最大值(bi)以及簡(jiǎn)要說明和填表時(shí)間;②在專家研究軟件規(guī)格說明后,組織者召集他們召開討論會(huì)議。會(huì)上專家可向組織者提問,組織者也可向?qū)<医榻B類似軟件的有關(guān)情況,專家之間也可展開討論;③專家填寫估算表格,并匿名提交;④組織者對(duì)表格數(shù)據(jù)進(jìn)行匯總和分類摘要,并將結(jié)果反饋給各專家。Delphi法中的估算值匯總可用三點(diǎn)估計(jì)法,設(shè)各專家的估算期望值為Ei,最終估算期望中值為E,則有Ei=(ai+4mi+bi)/6,E=sum(Ei)/n;⑤組織者召集專家開會(huì),對(duì)估算結(jié)果進(jìn)行討論;⑥各專家研究估算結(jié)果,重新提交一份估算表格。重復(fù)④至⑥步驟,直至獲得一個(gè)大多數(shù)專家認(rèn)可的估算值。
Delphi法可以避免集體討論盲目屈從權(quán)威或多數(shù)的缺陷,消除相互間的影響,能讓專家充分表達(dá)各自見解,集思廣益。然而該方法實(shí)施過程繁瑣,并且非常耗時(shí)。
(4)參數(shù)模型法,即通過采用一個(gè)或多個(gè)數(shù)學(xué)公式得出估算值的方法。這些數(shù)學(xué)公式一般是在搜集大量歷史軟件項(xiàng)目數(shù)據(jù)的基礎(chǔ)上,進(jìn)行數(shù)學(xué)建模得出經(jīng)驗(yàn)公式,使用起來比較方便快捷。但一般都需要經(jīng)過一定的校準(zhǔn)之后才具有實(shí)際參考意義。
3 IFPUG
在規(guī)模估算階段,比較流行的參數(shù)模型有IFPUG(International Function Point Users Group,國(guó)際功能點(diǎn)用戶協(xié)會(huì))功能點(diǎn)分析法。該方法最初是由IBM公司的工程師Allan Albrecht所設(shè)計(jì)的自頂向下法,后被IFPUG所采用、發(fā)展和推廣,并出版了多個(gè)版本的功能點(diǎn)計(jì)算實(shí)踐手冊(cè)[7]。該方法是目前應(yīng)用最廣泛的軟件規(guī)模度量技術(shù),在我國(guó)的軟件行業(yè)軟件工程定額標(biāo)準(zhǔn)(2009版)中也參考了該方法。該方法的基本步驟如下:
(1)把軟件系統(tǒng)分解為如表1所示的5類功能點(diǎn),并估算各類功能點(diǎn)的數(shù)量(FPi)[1]。
(2)給各功能點(diǎn)分配復(fù)雜度權(quán)重(Wi),如表2所示[2]。
在給各功能點(diǎn)分配權(quán)重時(shí),有定量的判斷規(guī)則。判斷ILF和EIF的復(fù)雜度依據(jù)的是其中所包含的數(shù)據(jù)元素類型數(shù)(data element type,DET)和記錄元素類型數(shù)(record element type,RET)。它們的判斷表格如表3所示[5]。
而對(duì)EI、EO和EQ復(fù)雜度的判斷,除了DET外還需要依據(jù)所涉及的文件類型數(shù)(file type referenced,F(xiàn)TR),并且有所不同。EI的復(fù)雜度判斷表格如表4所示[5],EO和EQ復(fù)雜度判斷表格如表5所示[5]。
(3)計(jì)算出一個(gè)未修正的功能點(diǎn)數(shù)(Unadjusted Function Point Count,UFPC)[9]:
UFPC=sum(FPi×Wi)。
(4)計(jì)算調(diào)整后的功能點(diǎn)數(shù)。僅從功能點(diǎn)數(shù)和其本身的復(fù)雜度,不能全面地反映系統(tǒng)規(guī)模,為此IFPUG還引入了14個(gè)系統(tǒng)特性(general system characteristic)對(duì)UFPC進(jìn)行修正:數(shù)據(jù)通信、分布式數(shù)據(jù)處理、性能、可配置性、事務(wù)效率、實(shí)時(shí)數(shù)據(jù)輸入、終端用戶易用性、在線升級(jí)、復(fù)雜運(yùn)算、代碼復(fù)用性、安裝簡(jiǎn)易程度、操作方便性、多場(chǎng)合適應(yīng)性、易于調(diào)整變更[1]。將該系統(tǒng)特性(Fi)按對(duì)系統(tǒng)規(guī)模的影響程度劃分為6個(gè)級(jí)別,從無影響到最大影響分別用數(shù)字0~5表示,這樣最終的功能點(diǎn)數(shù)FP可由以下公式計(jì)算得出:
FP= UFPC×(0.65+0.01×sum(Fi))
上式中的0.65和0.01均為經(jīng)驗(yàn)常量。
4 COCOMO
在工作量估算階段,常用的參數(shù)模型有COCOMO(Constructive Cost Model, 結(jié)構(gòu)化成本模型)。該模型是由Barry Boehm在1981提出的(因此也稱為COCOMO81模型),是他研究了美國(guó)TRW公司的大量軟件項(xiàng)目后,推導(dǎo)出的一個(gè)成本估算模型[7]。該模型按詳細(xì)程度,分成基本型、中等型和詳細(xì)型?;拘桶匆韵鹿綐?gòu)建[10]:
E=a×Sb。
其中,E表示工作量,是按人月度量的;S是指規(guī)模,是按千行源代碼為單位的;a、b是常量,常量的選擇與軟件項(xiàng)目的類型有關(guān),Boehm把系統(tǒng)類型分為3種,如表6所示[10]。
中等型模型的計(jì)算公式最終調(diào)整為:
E=a×Sb×EAF ,其中EAF=∏15[]i=1Fi
詳細(xì)模型是對(duì)中等模型的進(jìn)一步擴(kuò)展,其基本公式與中等模型的公式相同。它把系統(tǒng)劃分為系統(tǒng)層、子系統(tǒng)層、模塊層,按這3層提供不同的成本驅(qū)動(dòng)因素表,供不同層次估算使用。同時(shí)還將模型常量按開發(fā)階段的不同進(jìn)行一定的調(diào)整。
COCOMO81推出后,在軟件業(yè)得到了廣泛應(yīng)用,也取得了良好效果。但軟件工程技術(shù)突飛猛進(jìn),新的軟件過程模型不斷涌現(xiàn),COCOMO81的應(yīng)用漸漸遇到了更多的困難。為了適應(yīng)新的需要,Boehm與其合作者對(duì)COCOMO進(jìn)行了不斷改進(jìn),在1996年正式發(fā)布了第一個(gè)版本的COCOMOⅡ[6],在COCOMOⅡ中對(duì)COCOMO81做了較大變更,比如劃分為應(yīng)用組裝模型、早期設(shè)計(jì)模型、后構(gòu)架模型。早期設(shè)計(jì)模型和后架構(gòu)模型的計(jì)算公式均為[6]:
PM=A×SE×∏n[]i=1EMi
其中,PM為工作量,單位為人月,A為常量3.13(CO COMOⅡ2003版),S是指規(guī)模(按千行源代碼為單位),EMi為工作量系數(shù),類似于COCOMO81中的工作量因素,在早期設(shè)計(jì)模型中概括為7個(gè)(式中n=7),而在后架構(gòu)模型中擴(kuò)展為17個(gè)(式中n=17)。E由以下公式計(jì)算所得[6]:
E=B+0.01×∑5[]i=1SFj
其中,B為常量0.93(COCOMOⅡ2003版)[6], SFj為:有先例、開發(fā)靈活性、架構(gòu)/風(fēng)險(xiǎn)解決方案、團(tuán)隊(duì)凝聚力、過程成熟這5個(gè)特性各按6個(gè)等級(jí)取值而來的比例因子[6]。
5 結(jié)語
軟件項(xiàng)目估算的目的不是預(yù)測(cè)項(xiàng)目實(shí)施的結(jié)果,而是幫助確定項(xiàng)目目標(biāo),使其在合理范圍內(nèi),從而能讓項(xiàng)目在可控狀態(tài)下達(dá)成項(xiàng)目目標(biāo)[11]。軟件的估算離不開歷史數(shù)據(jù)的支撐,雖然有行業(yè)數(shù)據(jù)參考,但其準(zhǔn)確度非常低,不同開發(fā)組織的生產(chǎn)率水平相差非常大,因此需要盡早積累開發(fā)組織自身的歷史數(shù)據(jù)??蓮囊唤M少量的數(shù)據(jù)開始,例如:每人每月完成的代碼行數(shù)、交付一個(gè)用戶故事的平均時(shí)長(zhǎng)、BUG出現(xiàn)的概率以及修復(fù)時(shí)長(zhǎng)等。
參考文獻(xiàn)參考文獻(xiàn):
[1] IFPUG.Function point counting practices manual[M].Westerville:IFPUG,1999.
[2] BOB HUGHES,MIKE COTTERELL.軟件項(xiàng)目管理[M].第5版.北京:機(jī)械工業(yè)出版社,2010.
[3] 池仁勇.項(xiàng)目管理[M].第2版.北京:清華大學(xué)出版社,2009.
[4] 房東.軟件項(xiàng)目估算模型研究與實(shí)踐[D].濟(jì)南:山東大學(xué),2006.
[5] 胡云龍.軟件規(guī)模度量方法介紹[J].計(jì)算機(jī)時(shí)代,2006(7):1721.
[6] 蔣敏迪.軟件成本估算模型及其實(shí)現(xiàn)[D].廣州:中山大學(xué),2004.
[7] 李莉.基于功能點(diǎn)的COCOMOⅡ估算模型研究和應(yīng)用[D].廈門:廈門大學(xué),2008.
[8] 劉瑞河,陳志成.軟件項(xiàng)目管理中的成本估算[J].江西理工大學(xué)學(xué)報(bào),2007,28(1):3639.
[9] 舒小仙.軟件項(xiàng)目管理的成本估算[J].中國(guó)水運(yùn),2008,8(12):8081.
[10] 鄭人杰,殷人昆,陶永雷.實(shí)用軟件工程[M].第2版.北京:清華大學(xué)出版社,1997.
[11] STEVE MCCONNELL.軟件估算——“黑匣子”揭密[M].北京:電子工業(yè)出版社,2007.
作者簡(jiǎn)介:龔銀鋒(1983-),男,碩士,寧波數(shù)字電視有限公司項(xiàng)目經(jīng)理,研究方向?yàn)檐浖?xiàng)目管理、業(yè)務(wù)運(yùn)營(yíng)支撐系統(tǒng)。