軟體度量

軟體度量（）是一個對於軟體性質及其規格的量測。軟體度量的目的是獲得客觀、可以複製及量化的量測結果，依軟體度量性質及特性的不同，可以分別應用在軟體開發的時程及預算規劃、成本估算、品質保證測試、軟體偵錯、軟體性能最佳化或專案人員配置的最佳化等領域。

舉例
源代碼行數簡稱SLOC，是最簡單的一種軟體度量，以下以包括注釋的實體源代碼行數（LOC）為準，說明軟體度量的特性及一些限制。

以下的C程式碼只有一行，其LOC為1：

for (i = 0; i < 10; i += 1) printf("hello"); /* How many lines of code is this? */

但程式碼在重新排版為以下的程式碼時，其LOC就從1改變為5，但實際的程式機能沒有改變：

/* Now how many lines of code is this? */
for (i = 0; i < 10; i += 1)
{
    printf("hello");
}

若不使用迴圈的架構，直接呼叫10次printf，一般不建議以這種方式撰寫程式，但其LOC為11，比上述二個程式的LOC都大：

/* It is not a good code style */
printf("hello");
printf("hello");
printf("hello");
printf("hello");
printf("hello");
printf("hello");
printf("hello");
printf("hello");
printf("hello");
printf("hello");

不同的軟體度量可量測的軟體性質也隨之不同，像源代碼行數適合量測軟體的大小，但無法量測軟體的模組化程度，而且此度量方式是要量測原代碼的長度，不適合作為軟體規劃階段進行度量。

常見的軟體度量
以下是一些常見的軟體度量：
 平衡計分卡
 每行程式的程式錯誤比率
 COCOMO（構造性成本模型）
 代碼覆蓋率
 内聚力
 註解密度
 
 耦合力
 循環複雜度
 DSQI（設計結構品質指標）
 
 霍爾斯特德複雜度量測
 
 類別及介面的數量
 源代碼行數
 客戶需求行數
 程式執行時間
 程式載入時間
 二進制檔案長度

限制 
軟體的開發過程相當複雜，其方法論及目標都有高度的變異性，因此很難定義軟體質或是量的數據，並確定一個有效的和及時的計量方式，尤其要在軟體的細部設計前進行相關的預估，更加困難。另一個困難、常產生爭議的是度量的定義，以及各度量之間的重要性。
實務上的軟體度量常常縮減為以下幾個因素的組合：
 時程
 大小或是複雜度
 成本
 品質

度量的目標可能會針對是上述的一項因素或是多項因素。

評論
軟體開發者指出過於簡化的軟體度量可能弊大於利。有些軟體開發者也注意到軟體度量已成為軟體開發過程中的一部份。有些軟體開發者注意到軟體度量可能造成程式設計者的壓力及焦慮，或是設法製造不實的度量，不過也有些軟體開發者認為軟體度量對程式設計者有正面影響，可以肯定自身工作的價值。

有些軟體開發者認為許多軟體度量的定義不夠精確，而在實務上也很難預估當軟體完成時，其對應的軟體度量的目標值為何，不過也有些軟體開發者認為不精確的量測至少比沒有量測要好「若對一個事物無法測量，也就無法控制這個事物。」。

軟體度量已廣為政府機關、美國軍方、美国国家航空航天局（NASA）、資訊科技諮詢機構、學術機構所使用，也有許多商用或學術使用的。

相關條目
计算机科学

软件危机
軟體開發工作量預估
软件工程

软件质量

注释

参考文献

時髦術語
度量指标

程序分析