8.2 軟件項目度量


軟件項目度量

軟件項目度量的目的

  • 在物理學界,有一個說法是,當你能夠度量你所說的事物,並能用數字表達它時,你就對它有了一定了解;

    反之,如果不能測量他,也不能用數字表達,就說明你對它的了解還不深入,不能令人滿意。

  • 軟件工程界也接受了這樣的觀點。

  • 軟件項目管理的成熟化也需要度量與數字化,目的是持續改進軟件過程,並用於項目估算、質量控制、生產率評估等,並在項目過程中起到輔助決策的作用。

軟件項目度量的內容

1、生產率度量

  • 項目工作量

  • 項目周期

  • 項目成本

2、質量度量

  • 產品發布之前發現的缺陷數

  • 產品發布后用戶報告的缺陷數

  • 產品的運行速度

軟件項目度量的方法

  1. 面向規模的度量(常用)
  2. 面向功能點的度量(常用)
  3. 面向對象的度量
  4. 面向用例的度量

面向規模的度量

通過對質量和(或)生產率的測量進行規范化而得到的,這些測量是根據開發過的軟件的規模得到的。

  • L表示代碼總量(單位:KLOC),E表示軟件工作量(單位:人月)

    • 人月的意思是指一個人做一個月,是項目參與人數與工作月數的成績,2個人做一個月是2個人月,1個人做兩個月也是2個人月
  • S為軟件項目總開銷,Ne表示代碼出錯的行數,Pd表示文檔頁數

  • 千行代碼( KLOC ): 這些代碼指的是源代碼,通過源代碼的行數來直觀度量一個軟件程序有多大規模。千行代碼就是指一千行程序語句。

  • 生產率(PM):PM = L / E

  • 每千行代碼的平均成本( CKL ):CKL = S / L 單位可以是任何貨幣單位,如元、萬元等

  • 代碼出錯率(EQRl):EQRl = Ne / L

  • 文檔與代碼比(Dl):Dl = Pd / L

示例

以項目A為例:

  • 生產率(PM)= 12.1/24 = 0.51人月;
  • 每千行代碼的平均成本( CKL )= 168/12.1=13.9;
  • 代碼出錯率(EQRl)=134/12.1= 11.1
  • 文檔與代碼比(Dl)=29/12.1=2.4

面向規模的度量優缺點

優點

  • 簡單易行,自然直觀。
  • 是因為LOC是軟件開發的輸出,並且容易計算,且現有很多軟件估算模型都是使用LOC或KLOC作為關鍵輸入。

缺點

  • 依賴於程序設計語言的表達能力和功能
    • 同一個軟件功能,采用不同程序語言開發會有不同的代碼行數;
  • 軟件開發初期很難估算出最終軟件的代碼行數
  • 對精巧的軟件項目不合適
    • 比如有些需要高級數學能力的算法雖然代碼行不多,但其難度很大,工作量、時間和成本都不是能簡單用代碼行數可以判斷的。

面向功能的度量

面向功能的度量概念

  • 基本思想:用軟件的功能表示軟件的規模——軟件包含的功能越多,軟件的規模越大。
  • 面向規模的度量是以代碼行作為度量軟件規模的基本單元,而功能點法以功能點作為度量軟件規模的基本單元。
  • 應用最廣泛的是功能點(Function Point, FP)法
  • 由於是以功能點作為度量依據,這種方法容易在項目開發初期就可估算出
  • 功能點計算目前主要基於經驗公式

功能點計算方法

  • FP = UFC×TCF = UFC × (0.65 + 0.01× ΣFi)
  • UFC (Unadjusted Function Component) : 未調整功能點計數, 是5個信息量的“加權和”
  • TCF (Technical Complexity Factor): 技術復雜度因子
  • Fi: 14個因素的“復雜性調節值” (i =1..14)
  • 0.65, 0.01都是歷史數據總結的經驗常數,現在由國際組織根據大量項目跟蹤分析獲得。
  • TCF=0.65 + 0.01×ΣFi,其中Fi: 14個因素的“復雜性調節值” (i =1..14)。0.65, 0.01是根據經驗常數。需要注意的是,這里的功能點不是指的軟件需求分析文檔里面定義的軟件功能,比如一個登錄功能或者一個訂單管理功能,而是一個軟件規模的計量單位,一個登錄功能可能有4個功能點計數,一個訂單管理功能可能有40個功能點計數。

UFC相關的五類組件

內部邏輯文件(ILF, Internal Logical Files )

  • 一個用戶可識別的邏輯相關的數據組,它在應用程序邊界內,由用戶輸入來維護

  • 它可能是某個大型數據庫的一部分或是一個獨立的文件

    • 之所以叫內部邏輯文件,一方面表示它是文件形式,比如數據庫表
    • 另一方面表示它是所開發系統中的文件,比如是一個學生管理系統中的Student表,而不是后勤管理系統中的某個數據庫表。

外部接口文件(EIF, External Interface Files)

  • 一個用戶可識別的邏輯相關的數據組,但只能被引用,且數據完全存於軟件外部,由另一個應用程序進行維護

  • 是機器可讀的全部接口(如磁盤或磁帶上的數據文件)

  • 是另一個應用程序的內部邏輯文件

    • 正好和內部邏輯文件ILF相反,這類文件存在於所開發的軟件系統外部,通過接口訪問,比如學生管理系統通過接口訪問了后勤管理系統中的校車時刻表。

外部輸入(EI, External Input)

  • 來自於軟件外部的數據輸入

  • 控制信息(不更新ILF) / 業務邏輯信息(更新ILF)

  • 可來自於一個數據輸入屏幕或其他應用程序。

  • 典型的操作是通過系統向數據庫表新增一條記錄,但這個新增記錄可能來自於人通過界面手動錄入的,也可能是通過程序導入到系統中的。

外部輸出(EO, External Output)

  • 經過處理的數據,由程序內部輸出到外部

  • 從ILF、EIF中取出數據經過一定的組合、計算后得出的輸出數據, 如生成報表, 派生數據, 可能更新ILF

用戶查詢(EQ, External Query)

  • 一個輸入輸出的組合過程,從一個或多個ILF、EIF中取出數據輸出到程序外部

  • 輸入過程不更新ILF,輸出過程不進行任何數據處理

UFC相關的五類組件

  • EI:External Input(外部輸入)

  • EO:External Output (外部輸出)

  • EQ:External Query (外部查詢)

  • ILF:Internal Logical File (內部邏輯文件)

  • EIF:External Interface File (外部邏輯文件)

  • 此外,ILF和EIF也稱為邏輯信息存儲組件,EI、EO、EQ統稱為事務組件。

功能組件復雜度加權因子表

UFC的計算方法

▪外部輸入EI數×加權因子(簡單=3,平均=4,復雜=6)

▪外部輸出EO數×加權因子(簡單=4,平均=5,復雜=7)

▪外部查詢EQ數×加權因子(簡單=3,平均=4,復雜=6)

▪內部邏輯文件ILF數×加權因子(簡單=7,平均=10,復雜=15)

▪外部接口EIF數×加權因子(簡單=5,平均=7,復雜=10)

UFC = 上述計算值的總和(加權和)

例子

  • 假設每個功能要素的復雜度都是中等的。
  • 若有一個由25個數據登記表、15個報告、10個外部查詢、 20個邏輯內部表單和5個接口文件組成的學生管理系統,其未調整功能點計數為:
  • UFC =(25x4) +(15x5)+(10x4)+(20x10)+ (5x7) = 450(個功能點)

14個復雜性調節因素Fi


面向功能的度量優缺點

優點

  • 與程序設計語言無關, 在開發前就可以估算出軟件項目的規模

不足

  • 沒有直接涉及算法的復雜度,不適合算法比較復雜的軟件系統;

  • 功能點計算主要靠經驗公式,主觀因素比較多

面向功能的度量:和代碼行的轉換

一個功能點所需的代碼行粗略估算

針對面向規模的度量和面向功能的度量,根據不同編程語言,人們總結了一個映射表,粗略估算了在不同編程語言環境下一個功能點所需的代碼行,並定義了低值、高值、中值和平均值。從這個表也能看出來不同程序語言間代碼數量比例關系。也能利用這個表進行面向規模的度量和面向功能的度量這兩個度量方法之間的轉換。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM