1. 基于代碼行和功能點(diǎn)的估算
軟件項目的規(guī)模是影響軟件項目成本和工作量的主要因素。在基于代碼行(loc,line of code)和功能點(diǎn)(function point)的估算方法中,利用代碼行和功能點(diǎn)來表示軟件系統(tǒng)的規(guī)模,并通過對軟件項目規(guī)模的估算進(jìn)而來估算軟件項目的成本和工作量。
顯然,一個軟件項目的代碼行數(shù)目越多,它的規(guī)模也越大。軟件代碼行的數(shù)目易于度量,許多軟件開發(fā)組織和項目組都保留有以往軟件項目代碼行數(shù)目的記錄,這有助于在以往類似軟件項目代碼行記錄的基礎(chǔ)上對當(dāng)前軟件項目的規(guī)模進(jìn)行估算。
用代碼行的數(shù)目來表示軟件項目的規(guī)模簡單易行,自然、直觀且易于度量。但是其缺點(diǎn)也非常明顯。在軟件開發(fā)初期很難估算出終軟件系統(tǒng)的代碼行數(shù);軟件項目代碼行的數(shù)目通常依賴于程序設(shè)計語言的功能和表達(dá)能力;采用代碼行的估算方法會對那些設(shè)計精巧的軟件項目產(chǎn)生不利的影響;該方法只適合于過程式程序設(shè)計語言,不適合于非過程式程序設(shè)計語言(如函數(shù)式或者邏輯語言)。
針對上述問題,人們提出用軟件系統(tǒng)的功能數(shù)目來表示軟件系統(tǒng)的規(guī)模。1979年ibm的albrecht提出了計算功能點(diǎn)的方法。該方法需要對軟件系統(tǒng)的二個方面進(jìn)行評估,即評估軟件系統(tǒng)所需的內(nèi)部基本功能和外部基本功能,然后根據(jù)技術(shù)復(fù)雜度因子對這二個方面的評估結(jié)果進(jìn)行加權(quán)量化,產(chǎn)生軟件系統(tǒng)功能點(diǎn)數(shù)目的具體計算值。具體的,以下是軟件系統(tǒng)功能點(diǎn)的計算公式。
fp = ct× (0.65 + 0.01×sfi) (i=1..14)
其中,ct是5個信息量的“加權(quán)和”,fi是14個因素的“復(fù)雜性調(diào)節(jié)值”(i =1..14),0.65和0.01是經(jīng)驗常數(shù)。
ct的計算方法如表 3所示,ct =(簡單用戶輸入數(shù)×3 +一般用戶輸入數(shù)×4+復(fù)雜用戶輸入數(shù)×6)+(簡單用戶輸出數(shù)×4+一般用戶輸出數(shù)×5+復(fù)雜用戶輸出數(shù)×7)+(簡單用戶查詢數(shù)×3+一般用戶查詢數(shù)×4+復(fù)雜用戶查詢數(shù)×6)+(簡單文件數(shù)×7+一般文件數(shù)×10+復(fù)雜文件數(shù)×15)+(簡單外部界面數(shù)×5+一般外部界面數(shù)×7+復(fù)雜外部界面數(shù)×10)。其中,用戶輸入數(shù)是指由用戶提供的、用來輸入的應(yīng)用數(shù)據(jù)項的數(shù)目;用戶輸出數(shù)是指軟件系統(tǒng)為用戶提供的、向用戶輸出的應(yīng)用數(shù)據(jù)項的數(shù)目;用戶查詢數(shù)是指要求回答的交互式輸入的項;文件數(shù)是指系統(tǒng)中主文件的數(shù)目;外部界面數(shù)是指機(jī)器可讀的文件數(shù)目(如磁盤或者磁帶中的數(shù)據(jù)文件)。
表 3. ct值的加權(quán)計算
參數(shù)取值加權(quán) |
加權(quán)因子 |
終值 |
||
簡單 | 一般 | 復(fù)雜 | ||
用戶輸入數(shù) |
´3 | ´4 | ´6 |
|
用戶輸出數(shù) |
´4 | ´5 | ´7 |
|
用戶查詢數(shù) |
´3 | ´4 | ´6 |
|
文件數(shù) |
´7 | ´10 | ´15 |
|
外部界面數(shù) |
´5 | ´7 | ´10 |
|
ct= |
|
fi(i=1..14)14個因素的“復(fù)雜性調(diào)節(jié)值”取值見表 4。
表 4. fi的取值表
序號i |
問題 |
fi的取值(0,1,2,3,4,5) 0-沒有影響 1-偶有影響 2-輕微影響 平均影響 4-較大影響 5-嚴(yán)重影響 |
f1 |
系統(tǒng)需要可靠的備份和復(fù)原碼 | |
f2 |
系統(tǒng)需要數(shù)據(jù)通信嗎 | |
f3 |
系統(tǒng)有分布處理功能嗎 | |
f4 |
性能是臨界狀態(tài)嗎 | |
f5 |
系統(tǒng)是否在一個實(shí)用的操作系統(tǒng)下運(yùn)行 | |
f6 |
系統(tǒng)需要聯(lián)機(jī)數(shù)據(jù)項嗎 | |
f7 |
聯(lián)機(jī)數(shù)據(jù)項是否在多屏幕或多操作之間進(jìn)行切換 | |
f8 |
需要聯(lián)機(jī)更新主文件嗎 | |
f9 |
輸入、輸出、查詢和文件很復(fù)雜嗎 | |
f10 |
內(nèi)部處理復(fù)雜嗎 | |
f11 |
代碼需要被設(shè)計成可重用嗎 | |
f12 |
設(shè)計中需要包括轉(zhuǎn)換和安裝嗎 | |
f13 |
系統(tǒng)的設(shè)計支持不同組織的多次安裝嗎 | |
f14 |
應(yīng)用的設(shè)計方便用戶修改和使用嗎 |
例如,假設(shè)項目組要開發(fā)一個軟件項目a。根據(jù)用戶的需求描述,該軟件項目的ct取值如表 5所示。進(jìn)一步的,假設(shè)該軟件項目的14個復(fù)雜性調(diào)節(jié)值全部取平均程度。那么根據(jù)表 5可知,該軟件項目的ct=341,14個復(fù)雜性調(diào)節(jié)因素的累加值sfi=42,因而根據(jù)公式fp = ct× (0.65 + 0.01×sfi) (i=1..14)可知,該軟件項目的功能點(diǎn)fp=341× (0.65 + 0.01×42) = 364.87,即該項目的功能點(diǎn)數(shù)目大致為364。