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