功能點估演算法
出自 MBA智库百科(https://wiki.mbalib.com/)
目錄 |
面向功能的軟體度量使用軟體的功能作為測量的規範化值。因為“功能”不能直接測量,所以必須通過其他直接測量來導出,用得最多的是功能點技術。功能點(Function Point,FP)技術是Albrecht在1979年首先提出來的一種比較流行的估算方法,它將估算的關註點集中於程式的“功能性”和“實用性”上,而不是LOC的計數上。可以說,功能點估演算法是指一種基於軟體功能的度量方法。與代碼行估演算法不同的是,功能點估演算法是對軟體和軟體開發過程的間接度量。
功能點是基於軟體信息領域的可計算的(直接的)測量及對其複雜性的評估而導出的。功能計算如圖1所示。針對每個功能確定了外部輸出數、外部輸入數、文件數、用戶查詢數和外部介面數等五個信息域特征,每個信息域特征值按下列方式定義。
1)用戶輸出數
計算每個用戶輸出,外部輸出是為用戶提供的面嚮應用的輸出信息,這些信息通常包括報告、屏幕信息、錯誤信息等方面的內容。每一個外部輸出數據都要進行計數,獲得外部輸出數。
2)用戶輸人數
計算每個用戶輸入,它們向軟體提供面嚮應用的數據。外部輸入是每個用戶輸入的面向不同應用的輸入數據,輸入應該與查詢區分開來,分別計算。
3)文件數
計算每個邏輯的主文件。邏輯文件是軟體修改或保存的邏輯記錄集合,它可以是一個大的資料庫的一部分,也可以是一個獨立的文件。
4)用戶查詢數
一個查詢被定義為一次聯機輸入,它引發軟體以聯機方式產生某種即時響應,是軟體以聯機輸出方式產生的獨立查詢信息。每一個不同的查詢都要計算。
5)外部介面數
外部介面是所有用來將信息與其他系統進行交互或共用的埠(如磁帶或磁碟上的數據文件),利用這些介面可以將信息從一個系統傳送到另一個系統。
收集到以上五個信息域特征值後,就將每個計數與一個複雜度值(加權因數)關聯上。採用功能點的組織建立了一個標準,以確定某個特定條目是簡單的、平均的還是複雜的。不過複雜的確定多少有些主觀。
每個功能的總計數值可以作為這個功能的功能點使用,以估算該功能的成本和工作量。整個項目的估算還應考慮一些全局性的因素,並不是所以功能總計數值的簡單相加。整個項目的功能點計算採用下麵的公式:
總FP=∑每個功能的總計數值×(0.65+0.01×∑Fi)
其中,Fi(i=1,2,…,14)是基於對圖2中問題的回答而得到的“複雜度調整值(0~5)”。等式中的常數是根據經驗確定的。
Fi的取值在0~5之間:
Fi:
(1)系統需要可靠的備份和複原嗎?
(2)需要數據通信嗎?
(3)有分佈處理功能嗎?
(4)性能很關鍵嗎?
(5)系統在一個已有的、很實用的操作環境中運行嗎?
(7)聯機數據項是否需要在多個屏幕或多個操作之間切換以完成輸入?
(8)需要聯機更新主文件嗎?
(9)輸入、輸出、文件或查詢很複雜嗎?
(10)內部處理複雜嗎?
(11)代碼需要被設計成可復用的嗎?
(12)設計中需要包括轉換及安裝嗎?
(13)系統的設計支持不同組織的多次安裝嗎?
(14)應用的設計方便用戶修改和使用嗎?
一旦計箕出功能點,則可以使用它以規範軟體生產率、質量及其他屬性的測量和估算,也可以類似於LOC的方法來對每個功能點的錯誤數、每個功能點的缺陷數、每個功能點的成本、每個功能點的文檔頁數、每人月完成的功能點數進行估算。
功能點也可以按照一定的條件轉換為代碼行(LOC),如表1就是一個轉換表,這個表是根據業界的經驗研究得出針對各種語言的轉換率。
表1 功能點到代碼行的轉換表
語言 | 代碼行/FP |
彙編語言 | 320 |
C | 128 |
C++ | 64 |
VB | 32 |
JAVA | 30 |
SQL | 12 |
- 李彤,王煒,鬱湧編著,軟體工程概論,科學出版社,2012.02,第249頁