吳葉青
(海裝駐武漢地區軍事代表局 武漢 430070)
任何一個軟件項目預算、招投標、項目策劃和監控、項目結算中的核心問題就是軟件造價,但是如何核算軟件造價,始終沒有一個很好的解決方案。
甲方往往缺乏有效的方法來衡量軟件項目開發和維護所需的工期和成本,最后只能聽取軟件開發團隊和軟件維護團隊的“一面之辭”,因而使得甲方在項目預算、招投標、項目監督和合同驗收等項目管理方面遇到許多“說不清”的情形。
對軟件研發單位而言,軟件產品價格與研發成本存在的較大偏差,可能導致軟件研發單位無法合理估量軟件研發和維護投入,使得軟件研制進度策劃不合理、軟件研發和維護投入資源不足或過多,帶來軟件產品不能按期交付、軟件功能萎縮、軟件質量下降、軟件交付后不能足夠保障等諸多不良后果。
工業和信息化部《軟件和信息技術服務業發展規劃(2016年—2020年)》中明確提出,軟件市場定價與軟件價值不匹配的問題是我國軟件和信息技術服務業發展依然面臨迫切需要解決的突出問題。
2013年,工業和信息化部行業標準SJ/T 11463—2013《軟件研發成本度量規范》正式發布。在《軟件研發成本度量規范》中規定了從軟件規模估量到軟件成本度量的技術路線,其中軟件規模度量推薦采用國際通行的幾種功能點分析方法。其中NESMA方法、IFPUG方法是目前國內外最通用、最實用的功能點規模度量方法。
功能點是度量軟件規模的一種單位。功能點分析是從用戶角度來看的規模估計,是通過量化與主要外部數據輸入、輸出或文件類型等有關的功能性處理信息,來度量軟件規模的方法[1]。
功能點分析方法是IBM的Albrecht在1979年提出的,這種方法可以用于“需求文檔”、“設計文檔”、“源代碼”、“測試用例”度量,是一種與程序語言無關,能夠有效衡量軟件規模的方法[2]。功能點的估算基于對功能點分析的基礎上。
功能點分析的基礎是基于五個使用戶受益的外部用戶類型[3]:
1)外部輸入:更新內部計算機文件的輸入事務。
2)外部輸出:輸出數據給用戶的事務。
3)內部邏輯文件:系統使用的固定文件,也可以指一起訪問的一組數據,可能由一個或多個記錄類型組成。
4)外部接口文件:允許輸入和輸出從其他計算機應用程序傳出或傳入。
5)外部查詢:由提供信息的用戶引發的事務,但不更新內部文件。用戶輸入信息來指示系統得到需要的詳細信息。
功能點分析方法的核心思想是系統維護的信息及處理的復雜程度決定了系統價值。功能點方法的依據是,用軟件執行功能的數量和復雜程度來衡量軟件規模比用軟件的源代碼行的數量衡量要準確[4]。
功能點分析方法不依賴于項目開發的語言,度量出來的結果可以在不同的開發過程間進行比較,因而適用于確定軟件開發項目或已安裝軟件的規模[5]。
功能點方法已成為軟件規模度量的國內外標準(也是唯一納入國際標準的軟件規模度量方法),目前國際標準化組織ISO/IEC已發布的軟件功能規模度量標準有五種:
1)ISO/IEC 19761(COSMIC-FFP方法);
2)ISO/IEC 20926(IFPUG方法);
3)ISO/IEC 20968(Mk II方法);
4)ISO/IEC 24570(NESMA方法);
5)ISO/IEC 29887(FiSMA方法)。
這五種功能點方法標準間有所差異,適用范圍也有所不同。根據相關國際標準中的方法適用范圍聲明,COSMIC方法適用于商業應用系統和實時系統;IFPUG方法和FiSMA方法適用于所有類型軟件的功能規模度量;Mk II方法適用于邏輯事務能被確定的任何軟件類型;NESMA方法與IFPUG方法非常類似,通過對功能點計數分級,可根據估算的不同時期選擇不同精度的方法進行估算。
這五種方法中,IFPUG方法、NESMA方法因其方法可操作性、適用范圍等因素成為最主要的兩種功能規模度量方法,在美國、巴西、印度、韓國、意大利、西班牙、德國、加拿大、日本、中國等國家的軟件造價活動中廣泛應用。
在《軟件研發成本度量規范》中,軟件研發過程包括從立項開始到項目完成驗收之間的需求分析、設計、編碼、集成、測試、驗收交付活動及相關的項目管理、支持活動。軟件研發成本由軟件研發過程中的所有直接成本和間接成本組成。直接成本由直接人力成本和直接非人力成本組成,間接成本包括間接人力成本和間接非人力成本[6]。
直接人力成本包括開發方的項目組成員工資、獎金、福利等人力資源費用。項目成員包括參與該項目研發過程的所有研發或支持人員。
直接非人力成本包括:辦公費、差旅費、培訓費、業務費、采購費等。
間接人力成本指開發方服務于研發管理整體需求的非項目組人員的工資、獎金、福利等人力資源費用分攤。
間接非人力成本指開發方不為研發某個特定項目而產生的,但服務于整體研發活動的非人力成本分攤。
軟件研發成本估算基本流程步驟如下:
1)據項目特點和估算需求,選用合適的規模度量標準估算軟件規模;
2)根據估算軟件規模,利用基準數據或組織生產率數據估算工作量;
3)利用行業基準數據、組織基準數據或其他數據,估算工期、直接人力成本;
4)根據項目、組織相關情況估算間接人力成本、間接非人力成本、直接非人力成本;
5)確定軟件研發成本。
軟件研發成本估算基本流程見圖1。

圖1 軟件研發成本估算基本流程
軟件研發成本估算中軟件規模的估算結果對整個軟件研發成本有著決定性的影響,軟件規模估算結果直接對工作量、工期估算結果產生影響,對間接非人力成本、間接人力成本估算數據均會產生影響。
軟件造價評估受到許多因素的影響,包括人的技術和環境的影響。在不同軟件造價評估應用場景下,也需要使用適宜的功能點分析方法開展估算,提高在當前估算應用場景下功能規模、估算結果保持應有的估算準確率。
軟件造價評估中,最廣泛應用的功能點分析方法是IFPUG和NESMA功能點標準。
IFPUG功能點標準將所度量的項目或應用區分為兩大類型功能:對最終用戶可見的事務功能(Transaction Function)和對最終用戶不可見的數據功能(Data Function)[7]。
1)數據功能
數據功能有區分為兩種:內部邏輯文件(Inter?nal Logic File,ILF)、外部接口文件(External Inter?face File,EIF)。
數據功能表示的是提供用戶的、滿足內部或外部數據存儲需求的功能。內部邏輯文件指在軟件或軟件部件內部維護、用戶可識別的、邏輯相關的數據組或控制信息組;保存由軟件或軟件部件的一個或多個基本過程維護的數據。外部接口文件是用戶可識別的、邏輯相關的數據組或控制信息組;主要保存軟件或軟件部件的一個或多個基本過程引用的數據。
數據功能的功能規模由其復雜性決定,由其所包含的數據元素類型(DET)和記錄元素類型(RET)的數目決定。數據元素類型是唯一的、用戶可識別的、非重復屬性。記錄元素類型是在一個數據功能中用戶可識別的數據元素類型子集。
數據功能的復雜性判定見表1。

表1 數據功能復雜性判定表
對內部邏輯文件和外部接口文件,其復雜性決定了其功能規模,不同復雜性轉換的功能規模見表2。

表2 數據功能復雜性轉換系數表
當一個軟件或軟件部件被度量其功能規模時,識別其數據功能,其中ILF中低復雜性、平均復雜性、高復雜性ILF數目分別為n1、n2、n3;EIF中低復雜性、平均復雜性、高復雜性EIF數目分別為m1、m2、m3。

數據功能的原始功能點規模為ILF、EIF的功能規模之和。
2)事務功能
事務功能可區分為三個類型:外部輸入(Exter?nal Input,EI)、外部查詢(External Input,EQ)、外部輸出(External Output,EO)。
事務功能是對用戶提供處理數據功能的基本過程,對數據功能的維護、提取、顯示都通過事務功能進行。事務功能包括外部輸入(EI)、外部輸出(EO)和外部查詢(EQ)。
外部輸入指處理來自軟件或軟件部件外的數據或控制信息的基本過程,主要目的是維護一個或多個ILF或者改變應用行為;外部輸出是發送數據或控制信息到軟件或軟件部件外部的基本過程,主要目的是將數據或控制信息經處理邏輯后發送給用戶;外部查詢是提取數據或控制信息并把信息呈現給用戶的基本過程,該過程中不包含處理邏輯,不對ILF進行維護,不改變應用行為。
事務功能的功能規模由其復雜性決定。復雜性由其所包含的數據元素類型(DET)和引用文件類型(FTR)的數目決定。事務功能的數據元素類型與數據功能的定義相同,但其識別規則存在差異。引用文件類型指由事務功能讀取或維護的數據功能。
事務功能的復雜性判定見表3、表4。
事務功能的功能規模復雜性轉換關系見表5。
當一個軟件或軟件部件被度量其功能規模時,識別其事務功能,其中EI、EO、EQ的低復雜性、平均復雜性、高復雜性數目分別為a1、a2、a3;b1、b2、b3;c1、c2、c3。

表3 事務功能EI復雜性判定表

表4 事務功能EO、EQ復雜性判定表

表5 事務功能復雜性轉換系數表

事務功能的原始功能點規模為EI、EO、EQ的功能規模之和。
軟件的原始功能點規模為ILF、EIF、EI、EO、EQ的功能規模之和。
整個軟件開發過程的環境因素對原始功能規模存在影響,IFPUG標準附錄中給出了14種環境因素的詳細定義及選擇這些環境因素權值的指導原則。這14種環境因素及其調整因子[8]可見表6。

表6 環境因素及其調整因子
NESMA功能點標準2005年正式將其標準升為國際標準,隨后在美國、巴西、印度、韓國、意大利、西班牙、德國、加拿大、日本等國應用。
NESMA功能點標準中將所度量的項目或應用區分為兩大類型功能。數據功能與IFPUG功能點標準的一樣分為內部邏輯文件(ILF)、外部接口文件(EIF);事務功能包括外部輸入(EI)、外部輸出(EO)和外部查詢(EQ)。
NESMA功能點標準集成并發展IFPUG功能點標準所提出的功能點分析方法,較大程度借鑒IF?PUG功能點標準,其度量過程與有關術語幾乎完全一致。NESMA功能點標準與IFPUG功能點標準存在的些許差異主要表現外部查詢與外部輸出的識別差異、外部查詢的復雜度確定、隱含查詢處理和代碼表處理等方面[10]。
NESMA功能點標準中包含三種類型的功能點分析方法。這三種功能點分析方法為指示功能點分析方法、簡略功能點分析方法、詳細功能點分析方法。這三種類型功能點分析方法間的差異主要是根據數據模型的詳細程度確定其功能規模計數分級存在差異[11]。
1)指示功能點分析方法
指示功能點分析方法基于概念數據模型或規范化數據模型來確定軟件規模大小。指示功能點分析方法在進行功能規模度量時,只需要識別被度量軟件或軟件部件的內部邏輯文件和外部接口文件。指示功能點法解決了在項目早期模糊需求下進行功能規模估算的問題。
當度量概念數據模型或同等詳細水平的模型時,識別ILF數目為n,EIF數目為m,則其功能規模為

當度量滿足第三范式數據模型或同等詳細水平的模型時,識別ILF數目為n,EIF數目為m,則其功能規模為

2)簡略功能點分析方法
簡略功能點分析方法應用于可識別事務功能的數據模型。在進行功能規模度量時,需識別內部邏輯文件、外部接口文件、外部輸入、外部輸出、外部查詢。
假設識別事務功能和數據功能的數據為:ILF為n,EIF為m,EI為a,EO為b、EQ為c。則其功能規模為
原始功能規模=10n+7m+4a+5b+4c
3)詳細功能點分析方法
詳細功能點分析方法應用于具備詳細數據模型,且事務功能使用數據模型的內在邏輯明確的場景。詳細功能點分析方法中對事務功能、數據功能的復雜性判定與IFPUG功能點標準的一致。
在得到軟件的原始功能規模后,NESMA功能標準和IFPUG標準一樣,需根據軟件實際情況,確定14種環境因素調整因子取值,并估算得到調整后功能規模。
軟件造價評估應用場景可分為預算、項目研發策劃估算、項目結算三種。
1)初步預算應用場景
在初步預算應用場景中,功能規模估算包括招標方進行的成本估算、評標基準價設定、投標方進行的成本估算和項目報價、評標及合同簽訂等類似應用場景。在該應用場景中,應已確定詳細軟件工作說明書,工作說明書應能滿足已選定的規模估算方法所需的功能點計數要求。
在招標、評標基準價設定場景中,計算軟件研發成本時,應使用權威機構發布的行業基準數據和人力成本基準費率等相關信息。在投標方的成本估算和項目報價場景中,除了使用行業基準數據、人力成本基準費率信息,還應考慮投標方的組織基準數據、人力成本基準費率信息。在評標及合同簽訂應用場景中,招標方依據綜合評標法,檢查投標方的功能規模估算成本,評定報價合理性,選擇最終投標方。
在初步預算應用場景中,往往因項目需求尚還較為粗略,適用NESMA標準中的指示功能點分析方法或簡略功能點分析方法對功能規模進行估算。
2)項目研發策劃估算應用場景
項目研發策劃估算應用場景主要包括軟件研發方為制定或維護項目詳細開發計劃而開展的成本估算活動。其中包括因項目范圍發生變更引起的項目計劃的變更維護。在該應用場景中,應已具備已確認的軟件工作說明書,且軟件工作說明書應滿足已選定的規模估算方法所需的功能點計數要求。
在進行項目研發策劃估算時,應使用組織的基準數據和人力成本基準費率信息,并參考使用權威機構發布的行業基準數據和人力成本基準費率信息;除估算研發成本外,還應估算研發工作量、研發工期;綜合考慮資源投入和項目活動、進度要求,以保證項目活動、計劃與資源相協調。
在項目研發策劃估算應用場景中,軟件研發方已進一步細化軟件工作說明書,軟件實現方案已獲得軟件客戶確認,適宜使用NESMA標準中的簡略功能點分析方法對功能規模進行估算。
3)項目結算應用場景中,
項目結算應用場景多發生在軟件項目后期或軟件項目已經結束,主要包括為編制結算/決算而進行的成本測量、為績效評價和過程改進等后評價活動而進行的成本數據的測量和分析。
當在項目結算/決算成本數據測量應用場景中,軟件客戶對項目完成情況進行成本核算,根據最終軟件功能度量軟件實際功能規模,根據組織的基準數據和人力成本基準費率相關信息,以及項目的組織他項實際費用,核算軟件實際成本;將項目測量的規模、成本、工期與預算進行對比,以掌握和評價項目預算的執行情況。
當處在績效評價和過程改進等后評價活動[12]的成本數據測量場景中,軟件研發方對最終軟件功能度量功能規模,并列出軟件功能的功能點清單;同時對項目成本、工期測量數據域項目計劃進行對比,以掌握項目計劃執行情況,考核項目實施效果。
在該應用場景中,軟件設計已實現,適宜使用IFPUG標準、NESMA標準中詳細功能點分析方法對軟件的實際功能規模進行度量。
在項目結算應用場景中,對項目的規模、成本、工期、生產率等有效測量數據應納入到組織或行業的基準數據庫,為以后類似項目成本估算、項目策劃提供參考數據;通過將這些測量數據與組織或行業的基準數據進行對比分析,發現組織軟件過程改進機會。
功能點分析方法可應用于軟件項目的不同階段或應用場景中。在軟件項目的早期,使用NES?MA標準的指示功能點或簡略功能點方法對軟件功能規模進行估算,作為軟件成本預算依據;在獲得詳細軟件需求后,可進一步完善功能規模度量相關細節,得到更為準確的軟件規模估算數據,開展項目策劃工作;在軟件項目審查、結算、過程績效評價時,根據軟件需求、設計、或代碼等相關資料,使用IFPUG標準或NESMA標準中詳細功能點分析方法,對軟件的實際功能規模進行度量,豐富組織或行業基準數據庫數據,評價項目軟件過程執行和改進情況。