徐建軍,陳衛(wèi)華,王 浩,候 斌
(中廣核工程有限公司核電安全監(jiān)控技術(shù)與裝備國家重點(diǎn)實(shí)驗(yàn)室,廣東 深圳 518172)
“十四五”以來,我國企業(yè)數(shù)字化轉(zhuǎn)型被提升到重要的戰(zhàn)略位置,數(shù)字經(jīng)濟(jì)和數(shù)字產(chǎn)業(yè)發(fā)展速度正在加快。新形勢下,我國軟件業(yè)界不斷通過提升管理水平主動轉(zhuǎn)型,圍繞著軟件度量構(gòu)建的進(jìn)度、成本、質(zhì)量、效率等指標(biāo),持續(xù)改進(jìn)軟件開發(fā)過程、提升軟件產(chǎn)品的交付效率和交付質(zhì)量。在軟件業(yè)務(wù)規(guī)??焖侔l(fā)展的同時,我國軟件行業(yè)的管理水平依然相對落后,綜合競爭能力與軟件產(chǎn)業(yè)強(qiáng)國相比仍相對較低。據(jù)近年發(fā)布的中國軟件行業(yè)研究報(bào)告,我國軟件行業(yè)還存在項(xiàng)目成本高、產(chǎn)品交付周期難以控制等問題。尤其是作為項(xiàng)目成本評估的軟件工程規(guī)模度量、費(fèi)用估算標(biāo)準(zhǔn)化問題,一直沒有得到科學(xué)有效的解決。其主要原因是缺乏標(biāo)準(zhǔn)化、智能化的軟件管理手段以及過度依賴人工經(jīng)驗(yàn)。
軟件項(xiàng)目的規(guī)模度量和過程控制一直都比較困難。軟件具有不可見性、抽象性和知識密集型的特點(diǎn)。與硬件相比,軟件沒有明顯的生產(chǎn)制造階段,屬于非實(shí)物性的腦力勞動。隨著企業(yè)對軟件需求的不斷發(fā)展,業(yè)界曾運(yùn)用預(yù)算倒推法、工作分解法、源代碼行法以及文檔頁碼數(shù)等評價方法,開展軟件規(guī)模度量和成本估算[1]。但以上方法大都嚴(yán)重依賴評估人員的工作經(jīng)驗(yàn)和能力,且存在軟件開發(fā)語言、開發(fā)工具、應(yīng)用環(huán)境等方面的差異??陀^來看,過度依靠人工方式度量軟件規(guī)模,不可避免地會給成本估算帶來不確定性和效率低下的問題。鑒于此,基于專業(yè)和普適的模型和規(guī)范,找到1種科學(xué)、合理的軟件規(guī)模度量和成本自動估算方法尤顯必要和緊迫。
國內(nèi)外對軟件項(xiàng)目的開發(fā)質(zhì)量和進(jìn)度控制已有較深入的研究。美國卡內(nèi)基梅隆大學(xué)軟件工程研究所在20世紀(jì)80年代就提出了能力成熟度模型集成(capability maturity model integration,CMMI),通過軟件度量幫助軟件企業(yè)和軟件項(xiàng)目提高項(xiàng)目管理水平和改進(jìn)軟件質(zhì)量[2]。2018年,CMMI研究院正式發(fā)布CMMI 2.0中文版,為軟件項(xiàng)目敏捷過程提供直接方法指導(dǎo)。周伯生等對CMMI進(jìn)行了初次研究,并提出了軟件度量模型構(gòu)建方法和質(zhì)量模型構(gòu)建方法[3]。楊勛姮等嘗試?yán)密浖詣踊夹g(shù)開展軟件過程和質(zhì)量控制的研究[4],設(shè)計(jì)了輔助實(shí)施質(zhì)量保證的自動化軟件管理工具。冀建偉對相關(guān)法規(guī)標(biāo)準(zhǔn),以及軟件全過程質(zhì)量控制的方法開展研究[5]。
本文在長期實(shí)踐的基礎(chǔ)上,提出了基于軟件系統(tǒng)用例與功能點(diǎn)相結(jié)合的軟件成本自動計(jì)算方法。該方法通過功能點(diǎn)數(shù)的自動計(jì)算,利用人工智能、機(jī)器學(xué)習(xí)、自然語言處理等方法,自動從需求文檔、技術(shù)規(guī)范等文本抽取、識別功能點(diǎn)數(shù)以提高功能點(diǎn)計(jì)數(shù)的準(zhǔn)確性、提升軟件規(guī)模和費(fèi)用估算的智能化水平和效率。該方法具有一定的創(chuàng)新性和較高的應(yīng)用價值。
業(yè)界傳統(tǒng)的軟件規(guī)模度量方法有專家決策法、類比估算法、源代碼行法、功能點(diǎn)估算法等[6]。這些估算法都有各自的適用范圍和優(yōu)缺點(diǎn)。專家決策法是在專家個人和集體判斷的基礎(chǔ)上形成的1種相對主觀的估算方法。該方法的特點(diǎn)是簡單、直觀,可直接依靠專家團(tuán)隊(duì)的集體經(jīng)驗(yàn),得出軟件開發(fā)成本價格。類比估算法是從軟件項(xiàng)目或產(chǎn)品歷史庫中找到與當(dāng)前待評估軟件項(xiàng)目的應(yīng)用領(lǐng)域、運(yùn)行環(huán)境、復(fù)雜度、規(guī)模盡可能一致的同類項(xiàng)目,通過1套行之有效的評價與分析機(jī)制,得出估算成本。類比估算法雖然簡單、直觀,但其前提是必須要建有相對完整、可靠的軟件項(xiàng)目數(shù)據(jù)庫;其不足是對缺乏歷史參考數(shù)據(jù)的嶄新項(xiàng)目的估算有難度。源代碼行法是對軟件項(xiàng)目各功能模塊的源代碼長度進(jìn)行累計(jì)。源代碼行法雖然簡單、直觀,但代碼行必須從技術(shù)開發(fā)的角度估算,因此非專業(yè)技術(shù)人員很難理解和估算[7]。
功能點(diǎn)估算法是近年來業(yè)界比較流行的1種軟件規(guī)模度量方法。該方法通過識別軟件需求的內(nèi)外部邏輯文件及其功能來評估軟件的規(guī)模。相比專家決策法和類比估算法,功能點(diǎn)估算法在估算方法上更具客觀的標(biāo)準(zhǔn)依據(jù),可有效避免對評估人員技術(shù)背景的影響[8]。然而,該方法還需通過人工方式計(jì)算實(shí)現(xiàn)。隨著軟件規(guī)模的增大和項(xiàng)目數(shù)量的增多,傳統(tǒng)人工估算法的統(tǒng)計(jì)效率亟待提高,不能與軟件工程智能化發(fā)展趨勢相適應(yīng)。用例與功能點(diǎn)相結(jié)合的軟件規(guī)模度量法,正是在借鑒如上常用估算法優(yōu)劣勢的基礎(chǔ)上,基于實(shí)踐提出的1種自動估算方法。
用例是軟件系統(tǒng)參與者與系統(tǒng)之間一系列交互行為序列的集合。以用例為核心的需求模型如圖1所示。
圖1 以用例為核心的需求模型
所有用例的集合就組成軟件系統(tǒng)需求全集。用例代表了用戶的需求,其數(shù)學(xué)定義為UC=(ACTOR,CON,AHE,{PRO},EXT,RES,REG,REQ)。其中:UC代表圖例;ACTOR代表軟件系統(tǒng)中完成一系列任務(wù)的各類角色;CON代表基本事件過程的觸發(fā)條件;AHE代表基本事件過程的前提條件;{PRO}代表基本事件集合;EXT代表異常;RES代表后果;REG代表業(yè)務(wù)規(guī)則;REQ代表技術(shù)需求。
基于用例來定義系統(tǒng)軟件需求,實(shí)際上就是以用例需求為核心,通過描述實(shí)現(xiàn)該用例的業(yè)務(wù)邊界、業(yè)務(wù)規(guī)則、功能要求、性能要求、界面規(guī)范及接口交換等諸多功能,完成各類角色的具體任務(wù)和目標(biāo)[9]。
對用例進(jìn)行功能點(diǎn)計(jì)算,需依據(jù)事先確定好的標(biāo)準(zhǔn),計(jì)算出系統(tǒng)用例中每類功能單元所包含的功能點(diǎn)數(shù)量。依照國際功能點(diǎn)用戶組織(International Function Points User’s Group,IFPUG)標(biāo)準(zhǔn),目前功能點(diǎn)計(jì)算涉及5個功能單元。其中:2個為數(shù)據(jù)功能單元,分別為內(nèi)部邏輯文件(internal logical file,ILF)和外部接口文件(external interface file,EIF);3個為事務(wù)功能單元,分別為外部輸入(external input,EI)、外部輸出(external output,EO)和外部查詢(external query,EQ)[9]。
傳統(tǒng)的用例功能點(diǎn)估算由人工完成。為提高計(jì)算效率,本文估算方法可由計(jì)算機(jī)對每個用例模板文檔進(jìn)行遍歷自動計(jì)算。功能點(diǎn)計(jì)算步驟如下。①確定用例功能點(diǎn)估算范圍與邊界。②計(jì)算功能單元ILF、EIF、EI、EO和EQ出現(xiàn)的次數(shù)。③逐一計(jì)算出每個功能單元每次出現(xiàn)的復(fù)雜度值。④由復(fù)雜度值確定每個功能單元出現(xiàn)的權(quán)重。⑤計(jì)算得到未校正的功能點(diǎn)數(shù)Ufp。根據(jù)以上步驟,可得未校正的功能點(diǎn)數(shù)Ufp計(jì)算式為:
Ufp=NEIWEI+NEOWEO+NEQWEQ+NILFWILF+
NEIFWEIF
(1)
式中:Ufp為未校正的功能點(diǎn)數(shù);NEI、NEO、NEQ、NILF、NEIF分別為EI、EO、EQ、ILF和EIF出現(xiàn)的次數(shù);WEI、WEO、WEQ、WILF、WEIF分別為EI、EO、EQ、ILF和EIF的復(fù)雜度加權(quán)因子。
經(jīng)整理,式(1)可簡化為:
(2)
式中:Ni,j為第i個功能單元在復(fù)雜度j時的出現(xiàn)次數(shù);Wi,j為第i個功能單元在復(fù)雜度j時的加權(quán)因子。
根據(jù)IFPUG公布的相關(guān)標(biāo)準(zhǔn),軟件系統(tǒng)的復(fù)雜程度可根據(jù)系統(tǒng)特征的性能復(fù)雜度、界面復(fù)雜度、代碼復(fù)用要求、系統(tǒng)應(yīng)用類型、開發(fā)語言類型等14項(xiàng)影響因子逐個分析賦值,再按IFPUG公布的調(diào)整系數(shù)求和式(3),計(jì)算得出調(diào)整系數(shù)Vaf。
(3)
式中:Vaf為求和后的調(diào)整系數(shù);N為確定的實(shí)際系統(tǒng)性能特征個數(shù),取值為1~14;Ni為第i個影響因子的復(fù)雜程度。
軟件系統(tǒng)的影響因子影響程度,可按每個影響因子的復(fù)雜程度賦值0~5。其中:0為無影響或未出現(xiàn);1為偶發(fā)影響;2為輕度影響;3為一般影響;4為重影響;5為極重影響。需要強(qiáng)調(diào)的是,在利用14項(xiàng)影響因子加權(quán)調(diào)整功能點(diǎn)計(jì)算時,可根據(jù)具體軟件系統(tǒng)的特殊情況,適應(yīng)性地增加新的影響因子。權(quán)值的賦值范圍調(diào)整可以根據(jù)不同的軟件系統(tǒng)用線性插值法獲取[10]。下面以其中軟件應(yīng)用類型、開發(fā)語言類型2個影響因子為例進(jìn)行說明。本文通過參考中國軟件行業(yè)基準(zhǔn)數(shù)據(jù)分析報(bào)告(CSBMK-202010),綜合應(yīng)用類型、開發(fā)語言類型特點(diǎn)和實(shí)踐經(jīng)驗(yàn),獲得相應(yīng)類型的參考調(diào)整系數(shù)權(quán)值。表1為應(yīng)用類型及應(yīng)用范圍調(diào)整系數(shù)參考表。
表1 應(yīng)用類型及應(yīng)用范圍調(diào)整系數(shù)參考表
表2為開發(fā)語言類型及其調(diào)整因子參數(shù)表。
表2 開發(fā)語言類型及其調(diào)整因子參數(shù)表
本文在計(jì)算出Ufp的基礎(chǔ)上,再與求得的Vaf相乘,計(jì)算得到調(diào)整后功能點(diǎn)數(shù)FP,也就是軟件的規(guī)模。
FP=Ufp×Vaf
(4)
在計(jì)算出功能點(diǎn)數(shù)的基礎(chǔ)上,根據(jù)功能點(diǎn)耗時率計(jì)算出工作量。
Ae=Fp×PDR
(5)
式中:Ae為工作量;PDR為功能點(diǎn)耗時率,人時/功能點(diǎn)。
本文在計(jì)算出工作量的基礎(chǔ)上,根據(jù)人月成本,計(jì)算出軟件開發(fā)費(fèi)用P。
(6)
式中:F為人月成本,元;176為按每月22 d、每天8 h計(jì)算得出的工作小時數(shù),h。
設(shè)計(jì)文檔起草發(fā)文模塊用例如表3所示。
本文以核電設(shè)計(jì)文檔管理系統(tǒng)的1個用例規(guī)模度量為例,利用語義分析和文本挖掘技術(shù),自動識別并抽取系統(tǒng)需求文檔用例表中功能點(diǎn)數(shù),計(jì)算出軟件規(guī)模和價格。1個完整的軟件系統(tǒng)需求可以由諸多用例集合組成。而每個用例都可以用1個用例模板表來完整描述。只要通過軟件系統(tǒng)逐個對用例表中的功能點(diǎn)數(shù)進(jìn)行標(biāo)注和統(tǒng)計(jì),就可以通過遍歷把整個軟件系統(tǒng)功能點(diǎn)數(shù)計(jì)算出來,再通過轉(zhuǎn)化實(shí)現(xiàn)軟件系統(tǒng)規(guī)模和價格測算的自動化和智能化。
軟件功能點(diǎn)計(jì)算智能化主要是利用語義分析及文本挖掘技術(shù)抽取用戶需求文本中的用例表,構(gòu)建文本與功能點(diǎn)映射關(guān)系并自動計(jì)算功能點(diǎn)數(shù),度量出軟件規(guī)模,從而計(jì)算費(fèi)用[11]。功能點(diǎn)標(biāo)注和計(jì)算應(yīng)有文本自動識別讀取功能,且在用例表相應(yīng)位置予以標(biāo)注,并根據(jù)計(jì)算式自動計(jì)算功能點(diǎn)數(shù)。功能點(diǎn)自動估算算法如下。
偽代碼算法:[利用用例模板表計(jì)算功能點(diǎn)]
處理步驟A0:導(dǎo)入一張結(jié)構(gòu)化用例表;
do{將用例添加到系統(tǒng)用例集;
do{標(biāo)注用例表中每個類;
If(若該類為ILF)
{則添加到ILF集,并標(biāo)注;}
else{則添加到EIF集,并標(biāo)注;}
do{對事件的行為進(jìn)行識別:
(1)若為EI,則添加到EI集,并標(biāo)注;
(2)若為EO,則添加到EO集,并標(biāo)注;
(3)若為EQ,則添加到EQ集,并標(biāo)注;
} while (最后一個行為);
do{確定ILF集中的每個類:
(1)計(jì)算為該類的一個DET;
(2)計(jì)算為該類的一個RET;
(3)確定復(fù)雜度值和影響因子;
} while (最后一個ILF類);
do{確定EIF集中的每個類:
(1)計(jì)算為該類的一個DET;
(2)計(jì)算為該類的一個RET;
(3)確定復(fù)雜度值和影響因子;
} while (最后一個EIF類);
do{計(jì)算事務(wù)的復(fù)雜度:
累計(jì)EI、EO、EQ和RET、DET總復(fù)雜度值和影響因子;
} while (最后一個行為);
} while (最后一個類);
} while (遍歷最后一張用例表);
處理步驟A1:求和功能點(diǎn)數(shù),計(jì)算出工作量和費(fèi)用。
根據(jù)以上算法,可自動計(jì)算出設(shè)計(jì)文檔起草發(fā)文模塊用例校正后的功能點(diǎn)數(shù),遍歷全部設(shè)計(jì)文檔管理系統(tǒng)用例集,累加計(jì)算出整個用例集的功能點(diǎn)數(shù)。
根據(jù)式(4),通過功能點(diǎn)數(shù)求出軟件系統(tǒng)的工作量Ae,再根據(jù)式(5)計(jì)算出軟件成本。功能點(diǎn)耗時率(PDR)和人月成本(F)2個常量值,可參考軟件行業(yè)普遍采用的平均水平,按功能點(diǎn)耗時率7.12人時/功能點(diǎn)、人月成本2.85萬元/人月進(jìn)行計(jì)算。以上算法全部過程均可通過軟件代碼算法實(shí)現(xiàn)。計(jì)算結(jié)果如下。
Ae=Fp×PDR=512×7.12=3 645人時
為檢驗(yàn)用例功能點(diǎn)自動計(jì)算方法的準(zhǔn)確性,本文將計(jì)算結(jié)果與軟件系統(tǒng)實(shí)際工時進(jìn)行比較。系統(tǒng)記錄實(shí)際工時數(shù)如表4所示。
項(xiàng)目軟件系統(tǒng)按用例功能點(diǎn)法自動計(jì)算所得工時合計(jì)為3 645人時,折算成軟件成本為59.02萬元,準(zhǔn)確率為80.02%。項(xiàng)目事后實(shí)際記錄工時4 544人時、實(shí)際綜合成本75萬元,準(zhǔn)確率為78.69%。
通過對比可知:從軟件規(guī)模看,通過功能點(diǎn)自動計(jì)算得到的工作量,與實(shí)際記錄的工作量數(shù)據(jù)相比準(zhǔn)確度較高,準(zhǔn)確率達(dá)80%左右,偏差為20%左右,遠(yuǎn)小于接受范圍偏差(30%);從軟件成本造價看,通過功能點(diǎn)自動計(jì)算的工時成本為59.02萬元,占項(xiàng)目實(shí)際造價成本75萬元的78.69%,均在可接受范圍內(nèi)。根據(jù)實(shí)際經(jīng)驗(yàn),功能點(diǎn)估算的準(zhǔn)確性主要依靠系統(tǒng)需求的準(zhǔn)確性及完整性,因此本文估算方法的計(jì)算結(jié)果準(zhǔn)確性依賴于用例表描述的準(zhǔn)確性和完整性。所以在實(shí)際軟件度量計(jì)算中,可根據(jù)偏差不斷調(diào)試影響因子權(quán)值,通過迭代持續(xù)縮小估算偏差,并為以后的項(xiàng)目估算提供歷史經(jīng)驗(yàn)數(shù)據(jù)。
用例功能點(diǎn)軟件成本自動計(jì)算方法具有較高的應(yīng)用價值。該方法以國家標(biāo)準(zhǔn)為依據(jù),從用戶需求出發(fā),對用例的功能點(diǎn)進(jìn)行識別和計(jì)算。該方法明確且可量化,結(jié)果確定性強(qiáng)。從普適性方面來看,該方法適用于各種不同應(yīng)用類型的軟件項(xiàng)目,可選擇與之相對應(yīng)的調(diào)整系數(shù)和加權(quán)因子,具有應(yīng)用范圍的普遍性。從可迭代方面來看,該方法可根據(jù)軟件實(shí)際評估中遇到的問題,不斷調(diào)整和優(yōu)化方法和指標(biāo)系數(shù)。隨著技術(shù)和業(yè)務(wù)的高速發(fā)展,用例功能點(diǎn)估算法應(yīng)用場景會越來越多,包括大數(shù)據(jù)技術(shù)結(jié)合的功能點(diǎn)度量、云平臺上的軟件功能點(diǎn)度量等。這將進(jìn)一步提升軟件過程控制的效率和智能化水平。