王 晶,呂良慶
(中國科學院 空間科學與應用研究中心總體室,北京100190)
項目估計在項目開發(fā)中起著非常重要的作用,是制定項目計劃的依據(jù),其結(jié)果直接影響著項目資源分配的合理性。目前主流的項目估計方法按照規(guī)模的度量單位劃分主要有兩類:一種是基于功能點度量的估計方法 (例如IFPUG功能點[1]、MarkⅡ功能點[2]和 COSMIC功能點[3]),一種是基于LOC度量的估計方法 (例如Putnam模型[4]、COCOMO模型[5]和Pert算法[6])?;诠δ茳c度量的估計方法實際操作比較復雜,在實際使用上存在一定的困難;基于LOC度量的估計方法依賴于專家的主觀經(jīng)驗判斷,而且LOC不能用于文檔規(guī)模的估計。所以需要一種簡單易操作的估計方法,這種方法應對主觀經(jīng)驗具有比較低的依賴性,而且其度量單位應能度量所有產(chǎn)品的規(guī)模。
另外,歷史項目的統(tǒng)計數(shù)據(jù)是一個組織寶貴的資產(chǎn),具有重要的分析和使用價值。但是隨著組織的發(fā)展,歷史項目的統(tǒng)計數(shù)據(jù)會不斷增加,如何使用這些統(tǒng)計數(shù)據(jù)將成為組織一個亟待解決的問題。
為了同時解決以上兩方面的問題,本文提出了一種基于單元度量的項目估計方法。該方法具有比較完整的框架,包含測量項的定義、數(shù)據(jù)采集方法、數(shù)據(jù)分析方法和估計方法4個方面的內(nèi)容。本文剩余部分將分別對這些內(nèi)容進行介紹,在介紹完估計方法后還使用了來自于載人航天工程的30個實際項目的數(shù)據(jù)進行了驗證。
為了不斷提高估計的準確度,需要對新項目的相關參數(shù)進行測量。表1列出了與項目估計有關的測量項及其測量單位的示例。
表1中列出的測量項有4類:時間類測量項,程序類測量項,測試類測量項和文檔類測量項,這些測量項的統(tǒng)計數(shù)據(jù)由項目組提供。每一個測量項實際上需要統(tǒng)計兩個數(shù)據(jù):估計值和實際值。之所以需要對估計值進行采集,是為了分析估計數(shù)據(jù)和實際數(shù)據(jù)的差異,從而對各個估計因子進行適當?shù)卣{(diào)整以提高估計的準確度。
表1 測量項定義示例
在項目啟動階段,應由專業(yè)的估計人員對項目進行估計。在項目結(jié)束后,由項目組統(tǒng)計測量項的實際值。在采集以上4類測量項的估計值與實際值時,可以使用與表2類似的統(tǒng)計表分別進行采集。值得指出的是,在采集文檔類測量項的數(shù)據(jù)時還需要采集文檔的版本數(shù),以反映版本變更的工作量。
表2 程序規(guī)模統(tǒng)計
指示器是進行數(shù)據(jù)分析的基礎,它是經(jīng)過多次測量后得到結(jié)果的體現(xiàn)[7],反映了一個組織當前的生產(chǎn)力水平和發(fā)展趨勢。表3列出了與項目估計有關的指示器,指示器包含了一系列的估計因子,其使用的初始值可以通過對組織歷史項目的統(tǒng)計數(shù)據(jù)進行計算和分析得到。而這項數(shù)據(jù)分析的任務需要由專業(yè)的項目估計人員來完成。
表3中的估計因子的定義說明如下:
(1)在計算估計因子 “測試各階段發(fā)現(xiàn)的問題數(shù)占總的問題數(shù)的比率”時,直接將各階段發(fā)現(xiàn)的問題數(shù)除以總的問題數(shù),然后將各個值換算成百分制即可。
(2)估計因子 “測試用例的效率”指的是發(fā)現(xiàn)的問題數(shù)占測試用例總數(shù)的比例,在計算時分階段計算,即將每個階段發(fā)現(xiàn)的問題數(shù)除以該階段使用的測試用例總數(shù)即可得到這個階段測試用例的效率。
(3)估計因子 “缺陷密度”的度量單位為個/單元,表示平均一個單元會產(chǎn)生多少個缺陷,該因子的值是通過將測試階段發(fā)現(xiàn)的所有缺陷數(shù)除以程序的單元個數(shù)得到的。
(4)估計因子 “單元代碼行數(shù)”的度量單位為行/個,表示平均一個單元包含多少行代碼,該因子的值是通過將程序的代碼行數(shù)除以總的單元個數(shù)得到的。
表3 指示器列表
(5)估計因子 “單位復雜度單元數(shù)”是一個比率,表示復雜度為1的程序包含的單元個數(shù),該因子的值是通過將程序的單元個數(shù)除以項目復雜度得到的。項目復雜度的度量方法將在4.1節(jié)中說明。
(6)估計因子 “單元文檔頁數(shù)”的度量單位為頁/單元,表示平均一個單元需要用多少頁文檔進行描述,該因子的值是通過將某份文檔的有效頁數(shù) (文檔頁數(shù)* (1+0.1*版本數(shù)))除以單元個數(shù)得到的。
(7)估計因子 “職工平均生產(chǎn)率”的度量單位為單元/人天,表示一個職工平均一天 (8小時)生產(chǎn)多少個單元,該因子按項目階段的不同而不同。在計算某階段的平均生產(chǎn)率時,用總的單元數(shù)除以該階段持續(xù)的時間和該階段參與的職工數(shù)即可得到。
(8)在計算估計因子 “各階段工作量占總工作量的比例”時,將各階段所花費的時間除以項目總時間,再換算成百分制即可。
這些估計因子的初始值是通過對組織歷史項目的統(tǒng)計數(shù)據(jù)進行計算和分析得到的,并隨著新項目建立而使用,新項目的完成而不斷被調(diào)整,以符合組織當前的實際情況,從而提高估計的準確度。
項目估計人員主要根據(jù)偏差類的4個指示器的結(jié)果對估計因子進行調(diào)整。在計算偏差時,使用下式進行計算
偏差較小的估計結(jié)果 (例如小于25%),應該可以作為組織的現(xiàn)有生產(chǎn)水平的估計因子使用。如果偏差較大,則應由估計專家對項目完成的情況進行分析,判斷造成估計偏差較大的原因是否是組織生產(chǎn)水平的改變。若是,則應調(diào)整估計因子使之符合當前組織的生產(chǎn)水平。若是其它特殊原因,則應轉(zhuǎn)而關注這種特殊原因的影響,以決定是否需要調(diào)整估計因子。
估計因子的調(diào)整主要有兩種方法:一種是求平均值法,一種是直接調(diào)整法。求平均值法是將各估計因子的值與使用當前項目統(tǒng)計數(shù)據(jù)計算得到的對應估計因子的值的平均值作為各估計因子調(diào)整后的值。直接調(diào)整法是將各估計因子的值直接調(diào)整為使用當前項目統(tǒng)計數(shù)據(jù)計算得到的對應估計因子的值。求平均值法采用的是逐漸過渡的思想,這種方法可以減少項目的偶然性對估計因子產(chǎn)生的影響,但是調(diào)整的周期比較長;直接調(diào)整的方法調(diào)整的周期短,但是增加了項目的偶然性對估計因子的影響。
在計算得到表3中各個估計因子的初始值后,便可以將其應用于新項目的估計。項目估計的對象包括規(guī)模,工作量/成本,關鍵計算機資源和進度[8],本文提出的方法只對規(guī)模,工作量和進度進行估計,而且沒有考慮需求蔓延的因素。在進行估計時,先估計項目規(guī)模,然后使用估計因子計算得到其它對象的估計值[9]。
在對新項目進行估計時,規(guī)模是對其它內(nèi)容進行估計時的輸入,所以規(guī)模的估計是最基本也是最重要的。項目的規(guī)模主要由程序的大小和文檔的總頁數(shù)來體現(xiàn),本文使用程序的單元總數(shù)來表示程序的大小。在對單元總數(shù)進行估計時,可以使用兩種方法:一種是類推法,一種是任務估算法。
類推法需要從組織的歷史項目中找出與當前項目最為類似的項目,然后將找到的歷史項目的單元數(shù)直接作為當前項目單元數(shù)的估計值。在判斷歷史項目與當前項目的類似程度時,主要從開發(fā)語言,項目類型和項目用途3個方面進行判斷。這種方法要求組織對歷史項目進行了細致的分類,而且對歷史項目的單元數(shù)進行了統(tǒng)計和保存。這種方法需要組織級大量的分析整理工作,其結(jié)果應保存到組織資產(chǎn)庫[10]中,并隨著組織級數(shù)據(jù)的不斷積累,逐漸獲得組織級更準確的項目估計結(jié)果,從而支持整個組織的定量化管理。對項目而言則操作簡單,適合于項目早期的估計。
任務估算法需要先計算項目復雜度。項目復雜度定義為項目所包含的操作過程個數(shù)。“操作過程”指的是軟件與外部系統(tǒng)進行交互的操作和軟件內(nèi)部對數(shù)據(jù)進行加工,存儲或者轉(zhuǎn)發(fā)的操作,一個操作過程實現(xiàn)了一個簡單的功能或者任務。判別一個操作過程的原則如下:
(2)若接收的數(shù)據(jù)來源于不同的外部設備,則為不同的操作過程;若處理或生成的數(shù)據(jù)格式或者類型不同,則為不同的操作過程;若數(shù)據(jù)輸出的目的地為不同的外部設備,則為不同的操作過程。
(3)所有設備的維護與自檢視為一個操作過程,維護與自檢生成記錄的過程也視為一個操作過程。
在實際計算復雜度時,需要先對軟件項目的任務需求(例如任務書,接口協(xié)議等)有一定的了解,統(tǒng)計分析各類操作過程的個數(shù),接著將所有操作過程的個數(shù)累加即可得到該項目的項目復雜度O (process)。
得到項目復雜度O (process)以后,將其乘以估計因子 “單位復雜度單元數(shù)”,即可得到該軟件項目單元數(shù)的估計值N,將N乘以估計因子 “單元文檔頁數(shù)”,就可以得到各種文檔的頁數(shù)的估計值。例如,當前項目的軟件需求規(guī)格說明書的頁數(shù)估計值=N*I,其中I為軟件需求規(guī)格說明書單元文檔頁數(shù)。使用上面的方法,可以計算得到所有文檔頁數(shù)的估計值。進行累加,即可得到當前項目產(chǎn)生文檔總頁數(shù)的估計值。
將N乘以估計因子 “單元代碼行數(shù)”,可以得到程序代碼總行數(shù)的估計值。將N乘以估計因子 “缺陷密度”,可以得到問題總數(shù)的估計值。將問題總數(shù)的估計值乘以估計因子“測試各階段發(fā)現(xiàn)的問題數(shù)占總的問題數(shù)的比率”,可以得到各階段可能發(fā)現(xiàn)的問題個數(shù) (至少為1,若計算結(jié)果為0,則估計值用1代替)。接著將各階段可能發(fā)現(xiàn)的問題個數(shù)除以估計因子 “測試用例的效率”,可以得到各階段測試用例個數(shù)的估計值,進行累加即可得到測試用例總數(shù)的估計值。
這種任務估算方法適用于在類推法的基礎上,對具體項目進行估計的調(diào)整,以確定對于項目的相對準確的估計值,為最初的項目策劃提供估計依據(jù)。這種方法還可以在項目進展過程中,根據(jù)項目工作深入的情況,進行及時的調(diào)整和修正,以適應具體項目特殊情況的發(fā)生和變化,為短期工作的策劃和計劃提供估計依據(jù) (例如在周例會上進行調(diào)整)。
在進行工作量的估計時,將N除以估計因子 “職工平均生產(chǎn)率”,即可得到各階段工作量的估計值 (單位:人天)。將這些估計值進行累加,即可得到項目的總工作量(單位:人天)。
假設某個階段指派的職工人數(shù)為n,將該階段工作量的估計值除以n即可得到該階段持續(xù)時間的估計值。用同樣的方法可以計算得到所有階段持續(xù)時間的估計值,然后根據(jù)項目的啟動時間即可估計出項目的進度。
潞新礦區(qū)內(nèi)變形較大且較難控制的巷道基本都是實體煤掘進巷道,掘進過程中均出現(xiàn)煤炮頻繁、煤體自行片冒、迸射等強烈礦壓顯現(xiàn)現(xiàn)象。沖擊性載荷是造成潞新礦區(qū)巷道掘進成形困難和變形量大的主要原因,而沖擊性載荷的根源則主要包括高應力、煤巖體的儲能特性及結(jié)構特性。
為了對方法進行驗證,本文總共使用了30個來自于載人航天工程等項目的實際統(tǒng)計數(shù)據(jù)。先使用F組織的某實際嵌入式項目P3的數(shù)據(jù)對前面提出的估計方法進行試用,驗證以及簡單的分析。在對項目P3的規(guī)模進行估計時,使用的是任務估算的方法,并通過分析項目的軟件任務書來確定軟件中所包含的操作過程個數(shù)。軟件任務書描述了用戶對項目的任務要求,描述了軟件應實現(xiàn)的主要功能,但沒有涉及過多的細節(jié)。
表4列出了F組織各個估計因子的值,這些值主要是通過對F組織的兩個小型嵌入式軟件項目 (代碼行小于10000行)的統(tǒng)計數(shù)據(jù)進行計算分析得到的。這兩個項目是綜合了工程標準要求的符合程度,過程執(zhí)行的控制程度,發(fā)生的缺陷和反復的情況,發(fā)生缺陷的嚴重程度和影響,以及文檔質(zhì)量等因素,憑借主觀經(jīng)驗判斷選擇的,一個過程執(zhí)行效果比較好,一個過程執(zhí)行效果比較差。這樣選擇,主要是考慮兼顧組織級的 “最好”,“最壞”過程水平的差異,而不是只強調(diào)最優(yōu)的執(zhí)行結(jié)果。在計算估計因子的初始值時,先分別使用兩個項目的統(tǒng)計數(shù)據(jù)進行計算,然后將兩組值進行平均即可得到表4中的各項值。
使用前面提出的估計方法,對項目P3進行估計,并將各項估計值和實際值填入表5,表6和表7。在估計單元總數(shù)時,使用的是任務估算法。由于項目P3的歷史統(tǒng)計數(shù)據(jù)不全面,而為了保證估計值與實際值具有可比性,需要在估計時將 “概要設計”和 “詳細設計”合并為 “設計階段”,且不對測試用例總數(shù),軟件單元回歸測試報告的頁數(shù),軟件配置項回歸測試報告的頁數(shù)和軟件組裝回歸測試報告的頁數(shù)進行估計。
根據(jù)表5-表7中的數(shù)據(jù),將規(guī)模估計值與實際值的偏差,工作量估計值與實際值的偏差,進度估計值與實際值的偏差分別使用圖1,圖2和圖3進行表示。
根據(jù)表格中的數(shù)據(jù)可以計算得到程序規(guī)模估計的偏差為3%,文檔規(guī)模估計的偏差為12%,工作總量估計的偏差為26%,各進度的偏差最大為45%,其中工作總量和進度估計的偏差比較大,需要分析具體的原因。從表5可以看到,造成工作總量和進度偏差比較大的原因主要是由于編碼和測試階段的實際完成時間比計劃完成時間要長。對該項目的實際完成情況進行判斷,編碼階段的任務完成的是比較好的,而測試階段的任務完成的是比較差的,這說明估計因子 “職工平均生產(chǎn)率”的初始值體現(xiàn)的生產(chǎn)水平比當時組織的實際生產(chǎn)水平要高,所以需要將該估計因子調(diào)小。
表4 F組織的相關估計因子
表5 活動參數(shù)估計值與實際值
表6 程序參數(shù)估計值與實際值
表7 文檔參數(shù)估計值與實際值
圖3 項目P3進度估計值與實際值的偏差
本文接著對F組織的15個小型嵌入式項目P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14和P15(其中P7和P11的代碼行在10000行左右,其余項目的代碼行皆小于10000行)使用本文提出的任務估計方法進行估計,并將估計結(jié)果與實際統(tǒng)計數(shù)據(jù)進行比較,比較的結(jié)果使用MRE(the magnitude of relative error)和相關系數(shù)r(the correlation coefficient)進行度量。這兩種度量分別用于評價方法的準確度和一致性。MRE[11]和r[12]的計算公式如下
式中:Xi——第i個實際值,Yi——第i個估計值。
這15個項目都屬于新研制的項目。在估計時,由于統(tǒng)計數(shù)據(jù)不全面,只估計了項目規(guī)模中的單元數(shù)和文檔總頁數(shù)兩項。表8列出了這些項目的估計數(shù)據(jù),實際數(shù)據(jù)以及對應的MRE值,圖4描述了這些項目估計數(shù)據(jù)MRE值的分布情況,圖5描述了這些項目的單元個數(shù)估計值與實際值的線性擬合情況,圖6描述了這些項目的文檔總頁數(shù)估計值與實際值的線性擬合情況。由于部分項目的特殊性,項目生成的文檔并不一致,所以表8列出的各項目文檔的總頁數(shù)和其程序的大小也不一致。
從表8以及圖4可以計算得到這些項目估計數(shù)據(jù)的平均MRE值,其中單元數(shù)的平均MRE值為6.7,文檔總頁數(shù)的平均MRE值為16.2,這說明該估計方法的準確度是比較高的。
通過對表8中的數(shù)據(jù)進行計算可以得到相關系數(shù)r的值,其中單元數(shù)的r值為0.9963,文檔總頁數(shù)的r值為0.9691,結(jié)合圖5和圖6中的線性擬合情況,說明該估計方法的一致性也是比較好的。
從準確度和一致性兩方面的數(shù)據(jù)可以得出結(jié)論:本文提出的項目估計方法適合用于F組織的小型嵌入式軟件項目的估計。對于其它類型的軟件項目是否適用,還有待實際數(shù)據(jù)的驗證。
表8 新研項目的估計數(shù)據(jù)與統(tǒng)計數(shù)據(jù)
圖6 文檔總頁數(shù)的估計值與實際值的線性擬合
本文接著對15個重用型的項目使用本文的方法進行了估計,表9列出了估計和計算的結(jié)果。與前面類似,圖7,圖8和圖9分別描述了估計的準確度和一致性。通過對表9中的數(shù)據(jù)進行進一步計算,可以得到單元數(shù)的平均MRE值為9.5,文檔總頁數(shù)的平均 MRE值為65.6,單元數(shù)的r值為0.9932,文檔總頁數(shù)的r值為0.5324。這說明重用因素對項目估計結(jié)果的影響是比較大的,所以在實際操作時還需要考慮重用因素。在估計一個重用型的項目時,可以先由專家給出該項目的重用率R(重用率指的是組織已經(jīng)研發(fā)實現(xiàn)過的操作過程占所有操作過程的比例),然后再使用本文提出的方法估計得到該項目的單元數(shù)N,于是可以得到該項目實際需要完成的單元數(shù)N’=N* (1-R),接著就可以使用N’來估計文檔規(guī)模,工作量和進度等內(nèi)容了。
表9 重用項目的估計數(shù)據(jù)與統(tǒng)計數(shù)據(jù)
本文提出了一種基于單元度量的項目估計方法。由于F組織在嵌入式軟件項目中開發(fā)的是面向過程的程序,而一個操作過程的實現(xiàn)是由一個或多個單元共同完成的,所以使用項目的操作過程個數(shù)乘以平均每個操作過程包含的單元數(shù),就可以得到該項目的單元數(shù)的估計值。由于F組織開發(fā)的大部分嵌入式軟件項目包含的各類操作過程個數(shù)的分布是一致的,所以使用項目的操作過程的個數(shù)乘以一個操作過程包含單元數(shù)的平均值來得到項目單元總數(shù)的估計值是合理的,這也是本文提出的估計方法的準確度比較高的主要原因之一。
造成該估計值與實際值產(chǎn)生偏差的客觀因素主要是當前項目包含的各類操作過程個數(shù)的分布與初始兩個項目包含的各類操作過程個數(shù)的分布的差異。而產(chǎn)生偏差的主觀因素主要是分析任務需求得到操作過程的個數(shù)與實際操作過程的個數(shù)的差異。由于不同的人對操作過程判別方法的理解程度不一樣,分析任務需求得到的操作過程數(shù)也會不一樣。該方法適用于與F組織類似的單位和企業(yè)的小型嵌入式軟件項目的估計,實際操作簡單,而且充分利用了組織歷史項目的統(tǒng)計數(shù)據(jù),而這是該方法的一個最基本最核心的思想。
[1]CPM 4.3.1.Function point counting practices manual release 4.3.1 [S].
[2]LI Xinchen.The application of markⅡFP method and function point measurement technology research [D].Changsha:National University of Defense Technology,2008:14-21 (in Chinese).[李新忱.MarkⅡFP方法的應用及功能點度量技術的研究 [D].長沙:國防科學技術大學,2008:14-21.]
[3]WANG Xinyu,HOU Hong,HAO Kegang.Research and application of COSMIC2FFP methodology [J].Computer Applications and Software,2008,25 (10):11-13 (in Chinese).[王昕渝,侯紅,郝克剛.COSMIC2FFP方法的研究及應用[J].計算機應用與軟件,2008,25 (10):11-13.]
[4]XIA Xiaoxiang.Research of software project estimation [D].Nanjing:Nanjing University of Science and Technology,2006:19-21(in Chinese). [夏曉翔.軟件項目估算管理方法研究[D].南京:南京理工大學,2006:19-21.]
[5]Barry Boehm.Cost estimation with COCOMOⅡ [R].California:University of Southern California,Center for Software Engineering,2002:2-11.
[6]Jose Manuel Herren,Rafael Herren,Johan Renen.Revisiting the PERT mean and variance [J].European Journal of Operational Research,2011,210 (2):448-451.
[7]ZHANG Jin.Guideline for software quality management[M].Beijing:Publishing House of Electronics Industry,2009:123-126(in Chinese).[張瑾.軟件質(zhì)量管理指南 [M].北京:電子工業(yè)出版社,2009:123-126.]
[8]CHEN Jiayu,LI Yang,LIU Jinguo,et al.Estimation method of embedded software project [J].Computer Science,2008,35(11):236-238(in Chinese).[陳佳豫,李楊,劉金國,等.一種嵌入式軟件項目估計方法 [J].計算機科學,2008,35(11):236-238.]
[9]Jones C.Estimating software costs [M].LIU Congyue,HAO Jiancai,SHEN Dongkai,transl.2nd ed.Beijing:Publishing House of Electronics Industry,2008:4-10(in Chinese).[Jones C.軟件項目估計 [M].劉從越,郝建材,申冬凱,譯.2版.北京:電子工業(yè)出版社,2008:4-10.]
[10]GJB5000A-2008,Chinese national military capability maturity model for software development [S] .(in Chinese) .[GJB5000A-2008,中華人民共和國國家軍用軟件研制能力成熟度模型 [S].]
[11]Mohammad Azzeh,Daniel Neagu,Peter I Cowling.Analogybased software effort estimation using fuzzy numbers [J].The Journal of Systems and Software,2011,84 (2):270-284.
[12]Luiz Fernando Capretz,Venus Marza.Improving effort estimation by voting software estimation models [J].Advances in Software Engineering,2009,2009:1-8.doi:10.1155/2009/829725
[13]Deshpande M V,Bhirud S G.Analysis of combining software estimation techniques[J].International Journal of Computer Application,2010,5 (3):1-2.
[14]ZHANG Junguang.A method for result validity verifying of software project schedule estimation [J].Beijing Post University Transaction,2008,31 (5):44-47(in Chinese).[張俊光.軟件項目進度估計結(jié)果有效性驗證方法 [J].北京郵電大學學報,2008,31 (5):44-47.]
[15]LIU Di.Apply research on the scale of software evaluation based on improved function point analysis[D].Hefei:Hefei University of Technology,2007:4-16(in Chinese).[劉迪.基于改進的功能點分析法在軟件項目規(guī)模估計中的應用研究[D].合肥:合肥工業(yè)大學,2007:4-16.]