下面將以某個計(jì)算機(jī)輔助設(shè)計(jì)(CAD)應(yīng)用為例,估算開發(fā)的軟件包的輸入、輸出、查詢、文件及外部接口。為了達(dá)到這個估算目的,我們假設(shè)復(fù)雜度加權(quán)因子都是平均的。根據(jù)對軟件范圍的敘述,對軟件功能進(jìn)行分解,識別出主要的幾個功能:用戶界面和控制功能、二維幾何分析、三維幾何分析、數(shù)據(jù)庫管理、計(jì)算機(jī)圖形顯示功能、外設(shè)控制以及設(shè)計(jì)分析模塊。后可得到如表2所示的估算表。
由表2得到總計(jì)數(shù)值為318
接著,估算14個復(fù)雜度加權(quán)因子(Fi,根據(jù)問題對項(xiàng)目的影響取值范圍是0~5),表3給出了因子值。
FP=總計(jì)數(shù)值×[0.65+0.01×ΣFi]=366
第二種方法是采用類比的方法,根據(jù)歷史數(shù)據(jù)來進(jìn)行估算。
如果有一個以前做過的類似項(xiàng)目并且掌握它的規(guī)模,可以把新項(xiàng)目的各個主要部分與原有項(xiàng)目的相應(yīng)部分進(jìn)行比較,得出一個比例關(guān)系,將各部分相對于原項(xiàng)目規(guī)模比例相加,計(jì)算出新項(xiàng)目的規(guī)模。如果估算者的經(jīng)驗(yàn)豐富并且新項(xiàng)目與老項(xiàng)目具有足夠的相似性,能夠得到合理的估算值。
但是采用類比法,往往還要解決可重用代碼的估算問題。估計(jì)可重用代碼量的好辦法是由程序員或系統(tǒng)分析員詳細(xì)地考查已存在的代碼,估算出新項(xiàng)目可重用的代碼中需重新設(shè)計(jì)的代碼百分比、需重新編碼或修改的代碼百分比以及需重新測試的代碼百分比。根據(jù)這三個百分比,可用下面的計(jì)算公式計(jì)算等價(jià)新代碼行:
等價(jià)代碼行 = [(重新設(shè)計(jì)% +重新編碼% +重新測試%)/3]× 已有代碼行
比如:有10,000行代碼,假定35%需要重新設(shè)計(jì),55%需要重新編碼,75%需要重新測試,那么其等價(jià)的代碼行可以計(jì)算為:
[(30% + 50% + 70%)/3]×10,000= 5,500 等價(jià)代碼行。即:重用這10000代碼相當(dāng)于編寫5500代碼行的工作量。
2、工作量估算
估算出軟件規(guī)模并且對軟件的開發(fā)周期進(jìn)行定義后,開始估算軟件項(xiàng)目的工作量。軟件規(guī)模的估算結(jié)果是代碼量,但是軟件項(xiàng)目的開發(fā)、實(shí)施過程并不是只有編碼的工作,實(shí)際上編碼的工作量在這個過程中是小的。編寫文檔、架構(gòu)設(shè)計(jì)、系統(tǒng)設(shè)計(jì)、測試以及實(shí)施發(fā)布等將占用大量的工作時間。因此,對軟件項(xiàng)目工作量的估算是確定、估算這樣一個代碼量的項(xiàng)目所需的各種工作,相加得到項(xiàng)目的工作量。從軟件規(guī)模(代碼量)估算出項(xiàng)目工作量主要采用下述的兩個方法:
(1)好的方法是利用歷史數(shù)據(jù),根據(jù)以前做過的類似項(xiàng)目規(guī)模與新項(xiàng)目規(guī)模的比例關(guān)系,對照以前項(xiàng)目的工作量求出新項(xiàng)目的工作量。
采用這個方法的前提是:a.對以前項(xiàng)目規(guī)模和工作量的計(jì)量是正確的;b.至少有一個以前的項(xiàng)目的規(guī)模和新項(xiàng)目類似;c.新項(xiàng)目的開發(fā)周期、使用的開發(fā)方法、開發(fā)工具與以前項(xiàng)目的類似,而且開發(fā)人員的技能和經(jīng)驗(yàn)也不能與原來的人員相差太大。
(2)如果沒有歷史數(shù)據(jù)可用,或者新項(xiàng)目與以前做過的項(xiàng)目差別較大,那么可以使用一個成熟的估算模型,如采用IBM模型、COCOMO模型或Putnam方法論,將軟件項(xiàng)目規(guī)模轉(zhuǎn)換成工作量。
這些模型通過對大量不同類型組織已完成項(xiàng)目進(jìn)行研究,得出的項(xiàng)目規(guī)模與工作量之間的關(guān)系和轉(zhuǎn)換方法。這些行業(yè)性的模型可能不如自己的歷史數(shù)據(jù)精確,但是非常有效。目前,還沒有一種估算模型能夠適用于所有的軟件類型和開發(fā)環(huán)境,在監(jiān)理活動中,從這些模型得到的結(jié)果必須根據(jù)項(xiàng)目的實(shí)際情況慎重使用,或者采用多個模型進(jìn)行估算、掌握工作量的基本范圍并與實(shí)際的工作量計(jì)劃比較。
下面以IBM模型為例來進(jìn)行計(jì)算。 為了計(jì)算,我們應(yīng)當(dāng)利用逆向法將功能點(diǎn)轉(zhuǎn)化成一個等價(jià)的SLOC數(shù)值。這一步可以使用表4的語言等價(jià)表來完成:
所以,使用java 2完成上述項(xiàng)目(366功能點(diǎn))時,將大約需要下列SLOC數(shù):
L = 366×46 = 16386行 = 16.386KLOC
E = 5.2×L0.91 = 5.2×16.3860.91 = 66人/月
DOC = 49×L1.01 = 49×16.3861.01 = 826頁