王 穎,柳小軍,郭繼光
(中國電子科學(xué)研究院,北京 100041)
在軟件項目管理中,軟件評估的準(zhǔn)確與否是關(guān)系著所制定的項目計劃好壞的一個重要前提。而軟件規(guī)模評估是軟件評估中首要的也是最重要的尺度,軟件規(guī)模評估是估算軟件產(chǎn)品大小的過程,一旦確定了項目的規(guī)模,即可產(chǎn)生相應(yīng)的開發(fā)進(jìn)度表。但不準(zhǔn)確的規(guī)模評估將導(dǎo)致項目預(yù)算和工作進(jìn)度的較大偏差。因此,對軟件項目如何進(jìn)行準(zhǔn)確的規(guī)模評估研究是一個重要而切實(shí)的問題。
軟件度量(Software Measurement)是通過各種不同的量度(metric)對軟件生命周期中的各個元素進(jìn)行度量(Measure),它能夠?yàn)轫椖抗芾碚咛峁┯嘘P(guān)項目的各種重要信息,同時也是進(jìn)行大多評估活動的基礎(chǔ)。建立完整可行的軟件度量體系,基于定量的度量和客觀基準(zhǔn)進(jìn)行項目的管理和監(jiān)控,已經(jīng)被公認(rèn)為是軟件項目規(guī)范運(yùn)作、成功執(zhí)行的基本要求之一。正確地運(yùn)用度量可以幫助項目經(jīng)理更好地確定軟件規(guī)模,規(guī)劃資源投入,安排項目進(jìn)度,核算工作量、評估產(chǎn)出質(zhì)量及評價組織績效。
軟件產(chǎn)業(yè)最初的度量實(shí)踐來自對軟件規(guī)模的估算,自20 世紀(jì)80 年代,對軟件規(guī)模測算的各種各樣的方法就開始被提出來,例如:功能點(diǎn)分析(FPA,function points analysis)、代 碼 行(LOC,lines of code)、德爾菲法(Delphi technique)、COCOMO 模型、特征點(diǎn)(feature point)、對象點(diǎn)(object point)、3-D功能點(diǎn)(3-D function points)、Bang 度量(DeMarco's bang metric)、模糊邏輯(fuzzy logic)和標(biāo)準(zhǔn)構(gòu)件法(standard component)等,這些估算方法又會不斷細(xì)化為更多具體的方法。
所提出的這些方法各有優(yōu)缺點(diǎn),專家法最簡單易行,但誤差最大,不適合開發(fā)商使用;代碼行由于與開發(fā)語言有關(guān),且誤差也較大,對有經(jīng)驗(yàn)的開發(fā)商有利,但對用戶來說沒法掌握;COCOMOII 模型測算的比較準(zhǔn),但是參數(shù)的取值比較困難,所以也不太適合用戶評價;功能點(diǎn)分析法是在20 世紀(jì)70 年代中期,IBM 委托Allan Albrecht 工程師和他的一些同事為解決LOC 度量所產(chǎn)生的問題和局限性而研究發(fā)布的[1],隨后被國際功能點(diǎn)用戶協(xié)會(IFPUG,the international function point users' group)提出的IFPUG 方法繼承,在國際軟件行業(yè)范圍得到一致接受和廣泛應(yīng)用。下面將探討如何建立一種基于FPA的軟件度量體系,并應(yīng)用于軟件項目管理。
IFPUG 功能點(diǎn)的分析計算基本過程為:(1)明確用戶需求;(2)確定計算范圍和應(yīng)用程序邊界;(3)確定基本功能要素及其復(fù)雜性,并轉(zhuǎn)化為功能點(diǎn);(4)確定調(diào)整因子值;(5)計算已調(diào)整功能點(diǎn)[2]。
功能點(diǎn)測量中的基本功能要素被分為兩大類共五個功能要素。(1)數(shù)據(jù)類:內(nèi)部邏輯文件ILF(Internal Logical Files)、外部接口文件EIF(External Interface Files);(2)事務(wù)類:外部輸入EI(External Inputs)、外部輸出EO(External Outputs)、外部查詢EQ(External Queries)。數(shù)據(jù)類功能要素即每個ILF 和EIF 的復(fù)雜度由數(shù)據(jù)元素類型DET(Data Element Type)和記錄元素類型RET(Record Element Type)決定。事務(wù)類功能要素即每個EI、EO、EQ 的復(fù)雜度由數(shù)據(jù)元素類型DET(Data Element Type)和引用文件類型FIR(File Types Referenced)決定。
功能點(diǎn)方法由5 個僅取決于需求規(guī)格說明的要素組成,并有自己特定的規(guī)則,所以它是能取得可重復(fù)和可跟蹤結(jié)果的構(gòu)造性方法。根據(jù)計算規(guī)則首先確定每個功能的分類及其功能復(fù)雜度,從而可以得到每個功能的權(quán)值,全部功能的權(quán)值相加就得到“未調(diào)整的功能點(diǎn)數(shù)”?!拔凑{(diào)整的功能點(diǎn)數(shù)”還不能完整表現(xiàn)出系統(tǒng)的全部基本特征,功能點(diǎn)方法通過14 項系統(tǒng)基本特征進(jìn)行調(diào)整,得到“已調(diào)整的功能點(diǎn)數(shù)”。
功能點(diǎn)分析法(FPA)認(rèn)為整個項目的規(guī)模由信息處理規(guī)模、技術(shù)復(fù)雜度、功能點(diǎn)數(shù)FP 三部分構(gòu)成。
(1)信息處理規(guī)模
依據(jù)標(biāo)準(zhǔn)可以計算出系統(tǒng)(或模塊)中所含每一種元素的數(shù)目,乘以加權(quán)值(weight)的合計數(shù)即為信息處理規(guī)模,稱為UAF(unadjusted function points)[3]。
每種描述權(quán)值對應(yīng)的數(shù)據(jù)見表1。
表1 功能點(diǎn)權(quán)值表
計算關(guān)系式為
式中每項的計算分別是統(tǒng)計值和加權(quán)系數(shù)的累加,因此有
(2)技術(shù)復(fù)雜度
調(diào)整系數(shù)的值取決于14 個通用系統(tǒng)的特性,每個特性有相關(guān)的描述,以幫助確定系統(tǒng)特性的影響程度。影響程度的取值范圍為0 ~5,即從沒有影響到有強(qiáng)烈影響。對這些特性進(jìn)行評估,可以得到對系統(tǒng)的調(diào)整系數(shù)VAF(value adjustment factor),調(diào)整系統(tǒng)的經(jīng)驗(yàn)公式為
(3)計算功能點(diǎn)數(shù)
將功能點(diǎn)數(shù)乘以修訂系數(shù),則得到修訂以后的功能點(diǎn)數(shù)為
一個應(yīng)用系統(tǒng)的功能性是由一組事務(wù)類型和數(shù)據(jù)組類型來共同描述的。數(shù)據(jù)的概念是把數(shù)據(jù)元素看作是基本項。一個數(shù)據(jù)組的類型是應(yīng)用系統(tǒng)存儲的數(shù)據(jù)元素的集合,可以基于數(shù)據(jù)組類型中的數(shù)據(jù)元素定義子群,這個特征描述可以直接應(yīng)用到IFPUG FPA 中。
參考COSMIC-FFP 子過程(Sub-process)的概念,可以使用7 類邏輯活動來描述事務(wù)類型,當(dāng)然,這些邏輯活動是用于處理數(shù)據(jù)元素的。這7 類邏輯活動分別是:
輸入(Entry)活動 用戶向應(yīng)用程序輸入數(shù)據(jù)元素的過程。
輸出(Exit)活動 將數(shù)據(jù)元素輸出給用戶的過程。
控制(Control)活動 用戶輸入控制信息數(shù)據(jù)元素的過程。
確認(rèn)(Confirm)活動 確認(rèn)數(shù)據(jù)元素輸出給用戶的過程。
讀取(Read)活動 從一個存儲數(shù)據(jù)集類型中讀取數(shù)據(jù)元素的過程。
寫入(Write)活動 將數(shù)據(jù)元素寫入一個存儲的數(shù)據(jù)集類型的過程。
計算(Calculate)活動 從一些現(xiàn)有的數(shù)據(jù)元素中計算新的數(shù)據(jù)元素的過程。
這7 類邏輯活動都可以通過FSM 方法的識別規(guī)則識別出來,然后使用這些邏輯活動可以描述識別出的數(shù)據(jù)元素。有了這些邏輯活動,可以定義:一個事務(wù)類型就是邏輯活動的一個集合。
一個應(yīng)用程序理論上應(yīng)包含一個事務(wù)類型的集合和一個數(shù)據(jù)組類型的集合。任何一種功能類型在其邏輯功能方面都是不同的,這種區(qū)別首先體現(xiàn)在第一步的抽象中,也就是說第一步的抽象是由其具體規(guī)則通過定義各自的功能點(diǎn)分析變量給出的。在表示FPA 變量及其屬性時,以向量的形式來表示這種邏輯區(qū)別。因此,一個應(yīng)用程序是一個功能類型的向量。
用一個由τ 個事務(wù)類型Ti和σ 個數(shù)據(jù)組類型Fj的向量來定義一個應(yīng)用[4],有關(guān)FSM 方法的組件的具體定義如下。
定義1 一個應(yīng)用程序H 的定義為:H =(T1,…,Tτ,F(xiàn)1,…,F(xiàn)σ)。其中,事務(wù)類型Ti是由大量的邏輯活動組成,而與一個活動相關(guān)的解釋是由下標(biāo)加以區(qū)分的。
定義2 一個事務(wù)類型Ti定義為由一個由活動組成的向量,即Ti=(Pi1,…,Pin)。
一個活動是由以下4 個特性來刻畫的。
(1)該活動所屬的類別θik,即θik∈{Entry,Exit,Confirm,Read,Write,Calculate};
(2)對于活動Read 和Write,要注明所引用的數(shù)據(jù)組類型rik;
(3)該活動所處理的數(shù)據(jù)元素的集合Dik;
(4)對于Calculate 活動,要注明所計算出來的數(shù)據(jù)元素的集合Cik。
而一個活動的具體定義見定義3。
定義3 一個活動Pik就是一個由以上4 個特性組成的四元組,即Pik=(θik,rik,Dik,Cik)。
數(shù)據(jù)組類型實(shí)際上就是一個數(shù)據(jù)元素的集合。每個數(shù)據(jù)元素都屬于一個確定的子群。一個數(shù)據(jù)組類型是由一個二元序偶的集合來描述的,而每個序偶是由一個數(shù)據(jù)元素及其所屬的子群來描述的。具體的定義如定義4。
定義4 一個數(shù)據(jù)組類型Fj是一個由序偶組成的集合,即Fj={(dj1,gj1),…,(djr,gjr)}。其中:djk表示數(shù)據(jù)元素,而gik指定了djk所屬的子群。
根據(jù)以上定義,可以用度量函數(shù)FPM 來表示有關(guān)功能規(guī)模的假設(shè),即FPM(a)就是應(yīng)用a 的功能規(guī)模,當(dāng)然還可以測試有關(guān)FSM 度量的假設(shè)。例如,如果現(xiàn)在有2 個應(yīng)用:a 和a′,假定應(yīng)用a 的規(guī)模大于a′,即FPM(a)>FPM(a′)?;谶@種假設(shè),對于一個給定的應(yīng)用,任何一種FSM 方法都可以根據(jù)事務(wù)和數(shù)據(jù)集進(jìn)行抽象。
根據(jù)FPA 的數(shù)據(jù)模型可以看出,一個FPA 活動對應(yīng)于通用模型中的一個以上的活動。具體的映射關(guān)系見表2,表中每種事務(wù)功能允許的活動用“√”標(biāo)出。
表2 FPA 的事務(wù)功能和通用FSM 模型之間的映射關(guān)系
根據(jù)2.2 節(jié)中有關(guān)FSM 方法組件的描述,功能點(diǎn)分析(FPA,function point analysis)中的數(shù)據(jù)功能對應(yīng)于數(shù)據(jù)組類型Fj,而數(shù)據(jù)元素類型(DET,data element type)對應(yīng)于數(shù)據(jù)元素djk,參考文件類型(FTR,file type referenced)對應(yīng)于該數(shù)據(jù)元素所屬的子群。FPA 方法能夠區(qū)分內(nèi)部數(shù)據(jù)需求和外部數(shù)據(jù)需求,而通用FSM 抽象模型定義了7 類邏輯活動來區(qū)分這些需求。因此,認(rèn)為外部接口文件(EIF,external interface file)就是不能在Write 活動中使用的一個數(shù)據(jù)類型。給出FPA 的抽象數(shù)據(jù)模型描述,具體描述如下。
根據(jù)以上描述可以定義一個度量函數(shù)FPC,即FPC(a)就是應(yīng)用系統(tǒng)a 的功能規(guī)模,具體的描述如下。
WEIF、WILF、WEI、WEO和WEQ表示度量過程中根據(jù)相應(yīng)功能要素的復(fù)雜度等級所得到的功能點(diǎn)數(shù)量,而其值的決定要素是DET 和FTR 或者DET 和RET 的數(shù)量。具體的取值范圍為:WEIF={7,10,15},WILF={5,7,10},WEI=WEQ={3,4,6},WEO={4,5,7}[5]。
從計算方法來看,F(xiàn)PA 似乎只是在項目前期進(jìn)行規(guī)模估算的一種工具,但以功能點(diǎn)為基本度量出發(fā)點(diǎn),結(jié)合相關(guān)的度量體系,進(jìn)行指標(biāo)的設(shè)定、過程數(shù)據(jù)的收集和分析,則可以很好地輔助項目管理者作出決策,改善軟件過程。這里將以某國家重點(diǎn)項目的規(guī)模估算和進(jìn)度控制過程為例,討論功能點(diǎn)分析法在項目管理中的應(yīng)用。
步驟一:將系統(tǒng)的軟件功能清單中列舉的功能劃入EI、EQ、EO、ILF、EIF 中,并計算相應(yīng)的個數(shù),劃分結(jié)果見表3。
表3 功能點(diǎn)劃分
步驟二:根據(jù)功能描述,大致確定各要素的復(fù)雜程度;確定處理和文件的功能點(diǎn)權(quán)值。
步驟三:未調(diào)整的功能點(diǎn)的計算。
步驟二、步驟三操作的結(jié)果見表4。
表4 功能點(diǎn)賦值表
步驟四:計算調(diào)整后的功能點(diǎn)。
為14 項系統(tǒng)基本特征賦值,這里為簡單起見均賦值為4,即認(rèn)為有很重要的影響,則
已調(diào)整功能點(diǎn)數(shù)= VAF* 未調(diào)整功能點(diǎn)數(shù)=1.21* 249 =301.29。
步驟五:根據(jù)功能點(diǎn)計算成本。
根據(jù)某科研單位軟件開發(fā)人員的工資情況及項目的實(shí)際環(huán)境,取單位功能點(diǎn)成本為10000元,則該系統(tǒng)的軟件成本為301.29* 10000=3012900 元。
通過以上應(yīng)用實(shí)例證明,功能點(diǎn)估算方法簡單、實(shí)用、可行性強(qiáng),對于客戶來說,可以不必理解功能的具體開發(fā)和實(shí)現(xiàn)過程,而根據(jù)功能的復(fù)雜度粗略估算出系統(tǒng)的規(guī)模,進(jìn)而了解開發(fā)成本,能夠建立開發(fā)者與顧客之間的信任關(guān)系,即開發(fā)者將用戶的需求轉(zhuǎn)化成要實(shí)現(xiàn)的功能,通過功能點(diǎn)的多少來衡量軟件規(guī)模的大小。
功能點(diǎn)分析方法已將軟件質(zhì)量、生產(chǎn)率和經(jīng)濟(jì)分析構(gòu)筑在堅實(shí)的經(jīng)濟(jì)學(xué)基礎(chǔ)上,成為軟件度量的基礎(chǔ)。功能點(diǎn)方法是用戶能夠理解的度量方法,它可以在項目的早期準(zhǔn)確度量軟件的規(guī)模。通過借助一種通用的FSM 抽象數(shù)據(jù)模型,把該模型與功能點(diǎn)分析方法相結(jié)合,能夠通過它,用戶可以與軟件開發(fā)企業(yè)達(dá)成確保項目成功的共識和期望,軟件項目管理人員可以在軟件的整個生命周期對它進(jìn)行跟蹤和管理,采取主動和量化的方式來處理軟件項目中固有的問題,獲得更精確的估量和更客觀的評價。
[1]DAVID GARMUS,DAVID HERRON. 功能點(diǎn)分析-成功項目的測量實(shí)踐[M].北京:清華大學(xué)出版社,2003.
[2]余方,李娟,王曉程,等. 功能點(diǎn)分析方法研究[J]. 計算機(jī)科學(xué),2007,34(11):245-247.
[3]IFPUG(International Function Point Users Group).Function Point Counting Practices Manual-Release 4. 2[R].Westerville,2004.
[4]BRIAND L C,LABICHE Y,HE S.Automating Regression test Selection Based on UML Designs[J].Information and Software Technology,2009,51(1):16-30.
[5]CUADRADO-GALLEGO J J,MACHADO-PIRIZ F,AROBA-PAEZJ.On the Conversion Between IFPUG and COSMIC Software Functional Size Units:A Theoretical and Empirical study[J]. The Journal of Systems and Software,2008,81(5):661-672.