霍爾斯特德複雜度量測()是由霍爾斯特德在1977年提出的一種軟體度量方法,是有關軟體開發經驗科學的論文中的一部份。
霍爾斯特德觀察到軟體度量應該要反映在不同程式語言中演算法實現的方式,但又要獨立於使用的平台及語言。這些度量要可以由靜態代碼中計算而得。
霍爾斯特德的目標是識別軟體中可量測的性質,以及各性質之間的關係。有點類似識別物體中可量測的性質(如氣體的體積、質量及壓強),以及各性質之間的關係(如理想氣體方程式的體積、質量及壓強),因此霍爾斯特德複雜度量測不單單只是一種的度量。
計算
針對特定的演算法,首先需計算以下的數值:
- \,\eta_1 為不同運算子的個數。
- \,\eta_2 為不同運算元的個數。
- \,N_1 為所有運算子合計出現的次數。
- \,N_2 為所有運算元合計出現的次數。
上述的運算子包括傳統的運算子及保留字,運算元包括變數及常數。
依上述數值,可以計算以下的量測量:
- 程式詞彙數(Program vocabulary):\eta = \eta_1 + \eta_2 \,。
- 程式長度(Program length):N = N_1 + N_2 \,。
- 計算程式長度(Calculated program length):\hat{N} = \eta_1 \log_2 \eta_1 + \eta_2 \log_2 \eta_2 。
- 容量(Volume):V = N \times \log_2 \eta 。
- 難度(Difficulty):D = { \eta_1 \over 2 } \times { N_2 \over \eta_2 } 。
- 精力(Effort):E = D \times V 。
難度量測和撰寫程式或是瞭解程式(例如代碼審查時)的困難度有關。
精力可以用以下的關係式轉換為實際的程式撰寫時間。
- 程式撰寫時間:T = {E \over 18}秒。
霍爾斯特德交付錯誤(Halstead's delivered bugs)是估計在實現過程中會產生的錯誤。
*交付錯誤數量(Number of delivered bugs):B = {E^{2 \over 3} \over 3000},或者是B = {V \over 3000}。
參考資料
相關條目
- 機能點
- 循環複雜度
外部連結
- [http://www.virtualmachinery.com/sidebar2.htm The Halstead metrics] - Extensive discussion on the calculation and use of Halstead Metrics in an object-oriented environment (with specific reference to Java).
- [http://www.verifysoft.com/en_halstead_metrics.html Calculation of Halstead metrics] - Measurement of Halstead Metrics.
评论 (0)