寧?kù)o峰, 童旅楊
(長(zhǎng)春工業(yè)大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院,吉林長(zhǎng)春 130012)
軟件開(kāi)發(fā)早期階段,首要工作就是對(duì)軟件功能點(diǎn)估算,再到對(duì)工作量估算、成本估算,這將為項(xiàng)目的計(jì)劃、決策及資源分配提供必要的支持。目前較為廣泛的方法是功能點(diǎn)估算方法[1-4]。功能點(diǎn)是代碼行度量的替代方法之一,是對(duì)程序規(guī)模的綜合度量,可以用于項(xiàng)目早期階段的規(guī)模估算。從需求說(shuō)明計(jì)算出功能點(diǎn)比計(jì)算出代碼行更容易,而且可以使用功能點(diǎn)作為基礎(chǔ),計(jì)算出以代碼行表示的規(guī)模度量值[5]。IFPUG功能規(guī)模度量(Functional Size Measurement,F(xiàn)SM)是用功能點(diǎn)分析(FPA)方法[6]來(lái)度量軟件功能規(guī)模。功能點(diǎn)分析從用戶角度度量軟件開(kāi)發(fā),不考慮軟件的物理實(shí)現(xiàn)。
1)早期估算結(jié)果與最后實(shí)際成本相比,其誤差在±30%的范圍內(nèi)。這是當(dāng)前所能達(dá)到的對(duì)開(kāi)發(fā)的早期階段估算的精度。
2)此估算方法允許在軟件生命周期中對(duì)估算去粗取精、去偽存真。每當(dāng)有更多的可用信息時(shí),則可通過(guò)監(jiān)控與再估算達(dá)到更高的精確度。
3)此估算方法易于為估算員所使用。這樣在需要的時(shí)候就能快速進(jìn)行估算。例如進(jìn)度檢查對(duì)策略變更的評(píng)價(jià)就有這種情況。
4)每個(gè)有關(guān)人員都了解這些規(guī)則。當(dāng)估算過(guò)程易于理解的時(shí)候,應(yīng)用軟件功能點(diǎn)估算,管理部門會(huì)感到更加安全。
5)此估算方法由工具及文檔所支持。工具的適用性增加了該方法的效果,這主要是因?yàn)槟芨烨野礃?biāo)準(zhǔn)樣式獲得估算結(jié)果。
6)此估算方法被軟件開(kāi)發(fā)隊(duì)伍及其管理部門所信任。這有助于贏得每個(gè)關(guān)心該估算人員的參與。
軟件功能規(guī)模估算過(guò)程一般分為如下幾步:
1)收集可得的文檔確定估算的類型;
2)確定估算范圍和應(yīng)用邊界;
3)度量數(shù)據(jù)功能和事務(wù)功能;
4)確定未調(diào)整功能點(diǎn)數(shù);
5)確定調(diào)整因子;
6)計(jì)算調(diào)整后的功能點(diǎn)數(shù)并編寫文檔,報(bào)告度量結(jié)果。
軟件功能規(guī)模度量過(guò)程如圖1所示。
圖1 IFPUG功能點(diǎn)法計(jì)算過(guò)程
要對(duì)軟件項(xiàng)目進(jìn)行功能規(guī)模度量,首先要熟悉該軟件所交付的功能或所影響的功能,這些信息的主要來(lái)源就是該軟件項(xiàng)目的文檔,以支持后續(xù)的功能規(guī)模度量活動(dòng)。在熟悉文檔的基礎(chǔ)上,根據(jù)功能點(diǎn)計(jì)數(shù)的目的識(shí)別出功能點(diǎn)計(jì)數(shù)類型,然后確定計(jì)數(shù)范圍和應(yīng)用邊界。由于軟件功能規(guī)模是度量功能用戶需求的結(jié)果,因此要識(shí)別功能用戶需求,進(jìn)而為后續(xù)的功能點(diǎn)計(jì)數(shù)過(guò)程做準(zhǔn)備。度量數(shù)據(jù)功能和事務(wù)功能是功能規(guī)模度量過(guò)程中最重要的活動(dòng),把識(shí)別出來(lái)的功能用戶需求分為數(shù)據(jù)功能和事務(wù)功能,然后根據(jù)相關(guān)規(guī)則對(duì)這些功能進(jìn)行度量,得到這些數(shù)據(jù)功能和事務(wù)功能的功能規(guī)模。不同的功能點(diǎn)計(jì)數(shù)類型有不同的功能規(guī)模計(jì)算公式,結(jié)合前面得到的數(shù)據(jù)功能和事務(wù)功能的功能規(guī)模,計(jì)算基于14項(xiàng)系統(tǒng)基本特征的值的調(diào)整因子,根據(jù)公式得到調(diào)整后的功能點(diǎn)數(shù)量。
軟件項(xiàng)目管理中的功能點(diǎn)估算法將功能點(diǎn)分為5類:內(nèi)部邏輯文件(Internal Logical File,ILF),外部接口文件(External Interface File,EIF),外部輸入(External Input,EI),外部輸出(External Output,EO)和外部查詢(External Inquiry,EQ)。其中,ILF和EIF屬于數(shù)據(jù)類型的功能點(diǎn);EI,EO,EQ屬于事務(wù)類型的功能點(diǎn)。
2.2.1 EI
處理來(lái)自邊界外的數(shù)據(jù)或控制信息的基本過(guò)程,它的主要目的是維護(hù)一個(gè)或多個(gè)ILF或者改變應(yīng)用行為。增、刪、改是典型的EI。
2.2.2 EO
發(fā)送數(shù)據(jù)或控制信息到邊界外部的基本過(guò)程,與EQ相比包含了額外的處理過(guò)程。EO的主要目的是通過(guò)處理邏輯呈現(xiàn)信息給用戶,不僅僅是在應(yīng)用中提取數(shù)據(jù)或控制信息。
2.2.3 EQ
把數(shù)據(jù)或者控制信息發(fā)送到邊界外部的基本過(guò)程,它的主要目的是通過(guò)對(duì)數(shù)據(jù)或控制信息的提取而把數(shù)據(jù)呈現(xiàn)給用戶。其處理邏輯不包含數(shù)學(xué)公式或計(jì)算,也不會(huì)創(chuàng)建衍生數(shù)據(jù),不能維護(hù)ILF,也不能改變應(yīng)用行為。
2.2.4 ILF
被度量應(yīng)用邊界內(nèi)部維護(hù)的、用戶可識(shí)別的、邏輯相關(guān)的數(shù)據(jù)或控制信息組。ILF的主要目的是保存由被度量應(yīng)用的一個(gè)或多個(gè)基本過(guò)程維護(hù)的數(shù)據(jù)。
2.2.5 EIF
用戶可識(shí)別的、邏輯相關(guān)的數(shù)據(jù)組或控制信息,其由被度量應(yīng)用所引用,但在另一個(gè)應(yīng)用邊界內(nèi)維護(hù)。EIF的主要目的是保存由被度量應(yīng)用的一個(gè)或多個(gè)基本過(guò)程引用的數(shù)據(jù),這意味著一個(gè)應(yīng)用的EIF必定是另一個(gè)應(yīng)用的ILF。
未調(diào)整功能點(diǎn)(UFP)是數(shù)據(jù)功能點(diǎn)和事務(wù)功能點(diǎn)的總和。識(shí)別業(yè)務(wù)中所有的數(shù)據(jù)對(duì)象和系統(tǒng)中基本事務(wù)處理。確定功能類型屬于外部接口文件、內(nèi)部邏輯文件、外部輸入、外部輸出還是外部查詢。確定功能點(diǎn)類型之后判斷其對(duì)應(yīng)的功能和復(fù)雜度,復(fù)雜度轉(zhuǎn)換見(jiàn)表1。
表1 復(fù)雜度轉(zhuǎn)換表
計(jì)算功能數(shù)(UFC):
式中:W——根據(jù)不同的復(fù)雜度而定的5個(gè)部分的加權(quán)因子;
X——應(yīng)用中每個(gè)部分的數(shù)量。
系統(tǒng)基本特征的屬性GSC共14項(xiàng),其比重占未調(diào)整功能點(diǎn)的±35%。這14項(xiàng)分別是:
1)數(shù)據(jù)通信;
2)分布式數(shù)據(jù)處理;
3)性能;
4)重度配置;
5)處理速率;
6)在線數(shù)據(jù)輸入;
7)最終用戶使用頻率;
8)在線升級(jí);
9)復(fù)雜處理;
10)可重用性;
11)易安裝性;
12)易操作性;
13)多場(chǎng)所;
14)支持變更。
通用系統(tǒng)特征見(jiàn)表2。
表2 通用系統(tǒng)特征
調(diào)整因子(VAF)的計(jì)算公式如下:
式中:DI——GSC的影響程度。
由式(1)和式(2)得出功能點(diǎn)數(shù):
以圖書管理系統(tǒng)為例,圖書管理系統(tǒng)的主要功能包括管理員信息、管理圖書信息、管理借閱、歸還信息和查詢圖書信息等。簡(jiǎn)要說(shuō)明,應(yīng)用IFPUG功能點(diǎn)分析方法進(jìn)行軟件項(xiàng)目功能點(diǎn)估算。
功能點(diǎn)說(shuō)明及復(fù)雜度轉(zhuǎn)換表分別見(jiàn)表3和表4。
表3 圖書管理系統(tǒng)功能點(diǎn)說(shuō)明表
表4 復(fù)雜度轉(zhuǎn)換表
由式(1)得出系統(tǒng)未調(diào)整的功能點(diǎn)數(shù):
由式(2)得出調(diào)整因子:
由式(3)計(jì)算出功能點(diǎn)數(shù):
由于功能點(diǎn)分析法產(chǎn)生于70年代,現(xiàn)在隨著軟件開(kāi)發(fā)技術(shù)的不斷發(fā)展,很多系統(tǒng)特性方面的調(diào)整系數(shù)不適應(yīng)現(xiàn)在軟件規(guī)模估算的規(guī)模,從而降低了功能點(diǎn)分析法的作用。具體到各個(gè)項(xiàng)目,在管理因素往往會(huì)有很大的差異,或多或少影響項(xiàng)目的規(guī)模和工作量,而這些傳統(tǒng)的功能點(diǎn)都沒(méi)有考慮到,因此有必要對(duì)系統(tǒng)特性進(jìn)行修改。計(jì)算未調(diào)整的功能點(diǎn)數(shù)就是計(jì)算所有的功能點(diǎn)復(fù)雜性權(quán)重和。每個(gè)功能點(diǎn)的復(fù)雜性等級(jí)有“低”、“一般”、“高”3個(gè)等級(jí),UFP復(fù)雜性權(quán)重見(jiàn)表5。
表5 UFP復(fù)雜性權(quán)重
由式(1)得出系統(tǒng)未調(diào)整的功能點(diǎn)數(shù):
在以往的14個(gè)調(diào)整因子的基礎(chǔ)上增加到19個(gè)調(diào)整因子,增加其主觀性。另外增添的5個(gè)因子分別是:與其它應(yīng)用的接口,特殊的安全特征,與第三方的直接交互,用戶訓(xùn)練特征,文檔需求。技術(shù)復(fù)雜因子的組成見(jiàn)表6。
表6 技術(shù)復(fù)雜因子的組成
權(quán)值的取值范圍調(diào)整可以根據(jù)不同的項(xiàng)目用線性插值法來(lái)解決一些近似的問(wèn)題,以EI為例,可將RET和DET看作二元函數(shù)的兩個(gè)自變量X,Y,二元函數(shù)的因變量Z為EI的權(quán)值。利用插值法可以得到Z與X,Y的具體函數(shù)關(guān)系式。用求得的新的函數(shù)關(guān)系更加適合當(dāng)前本項(xiàng)目。避免出現(xiàn)特殊項(xiàng)目的不合理性。
對(duì)一些不合理的GSC項(xiàng)重新定新的DI評(píng)分標(biāo)準(zhǔn)表,進(jìn)行加權(quán)處理,與實(shí)際情況更為接近,估算更為準(zhǔn)確,修改主要涉及的項(xiàng)在線輸入的復(fù)雜度。改進(jìn)后的在線數(shù)據(jù)輸入復(fù)雜度評(píng)分標(biāo)準(zhǔn)見(jiàn)表7。
表7 改進(jìn)后的在線數(shù)據(jù)輸入復(fù)雜度評(píng)分標(biāo)準(zhǔn)表
針對(duì)不同的項(xiàng)目來(lái)確定GSC的內(nèi)容,可通過(guò)經(jīng)驗(yàn)法對(duì)其進(jìn)行確定,添加一個(gè)百分比權(quán)值的因子W,用來(lái)權(quán)衡不同的項(xiàng)目在GSC所占不同影響程度,其總和為1,每個(gè)W介于0到1之間包括邊界。改進(jìn)的公式:
式中:∑W=1;
N——GSC個(gè)數(shù)。
由式(4)得出調(diào)整因子:
改進(jìn)后公式更好地反映各個(gè)GSC對(duì)項(xiàng)目影響的情況,能更加滿足不同類型項(xiàng)目功能點(diǎn)的估算。
調(diào)整后的功能點(diǎn)數(shù)FP用式(3)計(jì)算出功能點(diǎn)數(shù):
FP=UFC*VAF=1.590 5*151=240.165 5
實(shí)際項(xiàng)目的功能點(diǎn)數(shù)為230個(gè),未改進(jìn)前計(jì)算功能點(diǎn)的誤差是|206.7-230|/230=10.13%,改進(jìn)后計(jì)算功能點(diǎn)的誤差為|240.165 5-230|/230=4.42%。即改進(jìn)后的功能點(diǎn)估算的方法更接近真實(shí)值。
首先從軟件項(xiàng)目功能點(diǎn)估算方法中最有代表性的一些方法和技術(shù)進(jìn)行研究,然后對(duì)軟件項(xiàng)目功能點(diǎn)相應(yīng)估算方法進(jìn)行評(píng)價(jià),并在此基礎(chǔ)上對(duì)IFPUG方法進(jìn)行改進(jìn),研究適合一般軟件企業(yè)的功能點(diǎn)估算方法,以期為軟件開(kāi)發(fā)組織提供有效的應(yīng)用估算技術(shù),為提高功能點(diǎn)估算的準(zhǔn)確度提供借鑒。
[1] 蔣輝,尹俊文,何鴻君,等.功能點(diǎn)方法的分析與比較[J].計(jì)算機(jī)工程與科學(xué),2009(5):87-89.
[2] 劉瑩.功能點(diǎn)在基于TSP模型開(kāi)發(fā)過(guò)程中的應(yīng)用研究[J].信息技術(shù)與信息化,2006(4):69-72.
[3] 趙穎,任永昌,邢濤.基于功能點(diǎn)的軟件規(guī)模估算方法研究[J].遼寧工業(yè)大學(xué)學(xué)報(bào),2008,28(5):281-283.
[4] 譚仁先,汪艷.功能點(diǎn)分析在軟件工程中的應(yīng)用[J].蘭州交通大學(xué)學(xué)報(bào),2005,24(5):89-91.
[5] 宋銳,徐鋒.軟件估算:“黑匣子”揭秘[M].北京:電子工業(yè)出版社,2007.
[6] 李幟,林立新,曹亞波.功能點(diǎn)分析方法與實(shí)踐[M].北京:清華大學(xué)出版社,2005.
[7] 許壽椿,林寅.軟件開(kāi)發(fā)成本估算[M].北京:中央民族學(xué)院出版社,1991.
[8] 曹濟(jì),溫麗.軟件項(xiàng)目功能點(diǎn)度量方法與應(yīng)用[M].北京:清華大學(xué)出版社,2012.