軟件度量
![本頁使用了標題或全文手工轉換](http://images.weserv.nl/?url=//upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
軟件度量(software metric)是一個對於軟件性質及其規格的量測。軟件度量的目的是獲得客觀、可以複製及量化的量測結果,依軟件度量性質及特性的不同,可以分別應用在軟件開發的時程及預算規劃、成本估算、質素保證測試、軟件偵錯、軟件效能最佳化或專案人員組態的最佳化等領域。
舉例
原始碼行數簡稱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(構造性成本模型)
- 代碼覆蓋率
- 內聚力
- 註解密度[1]
- 同步變化的軟件元件
- 耦合力
- 循環複雜度
- DSQI(設計結構質素指標)
- 機能點分析
- 霍爾斯特德複雜度量測
- 指令路徑長度
- 類別及介面的數量
- 原始碼行數
- 客戶需求行數
- 程式執行時間
- 程式載入時間
- 二進制檔案長度
- 軟件包裝度量
- 加權微機能點
限制
軟件的開發過程相當複雜,其方法論及目標都有高度的變異性,因此很難定義軟件質或是量的數據,並確定一個有效的和及時的計量方式,尤其要在軟件的細部設計前進行相關的預估,更加困難。另一個困難、常產生爭議的是度量的定義,以及各度量之間的重要性[2][3]。 實務上的軟件度量常常縮減為以下幾個因素的組合:
度量的目標可能會針對是上述的一項因素或是多項因素。
評論
軟件開發者指出過於簡化的軟件度量可能弊大於利[4]。有些軟件開發者也注意到軟件度量已成為軟件開發過程中的一部份[2]。有些軟件開發者注意到軟件度量可能造成程式設計者的壓力及焦慮,或是設法製造不實的度量,不過也有些軟件開發者認為軟件度量對程式設計者有正面影響,可以肯定自身工作的價值[5]。
有些軟件開發者認為許多軟件度量的定義不夠精確,而在實務上也很難預估當軟件完成時,其對應的軟件度量的目標值為何[6],不過也有些軟件開發者認為不精確的量測至少比沒有量測要好「若對一個事物無法測量,也就無法控制這個事物。」[7]。
軟件度量已廣為政府機關、美國軍方、美國太空總署(NASA)[8]、資訊科技諮詢機構、學術機構所使用[9],也有許多商用或學術使用的軟件開發預估軟件。
相關條目
註釋
- ^ Descriptive Information (DI) Metric Thresholds. Land Software Engineering Centre. [19 October 2010]. (原始內容存檔於2011-07-06).
- ^ 2.0 2.1 Binstock, Andrew. Integration Watch: Using metrics effectively. SD Times. BZ Media. [19 October 2010]. (原始內容存檔於2012-09-13).
- ^ Kolawa, Adam. When, Why, and How: Code Analysis. The Code Project. [19 October 2010]. (原始內容存檔於2011-11-14).
- ^ Kaner, Dr. Cem, Software Engineer Metrics: What do they measure and how do we know?, [2012-04-16], (原始內容存檔於2020-04-26)
- ^ ProjectCodeMeter (2010) "ProjectCodeMeter Users Manual" page 65 (PDF). [2012-04-16]. (原始內容存檔 (PDF)於2017-03-24).
- ^ Lincke, Rüdiger; Lundberg, Jonas; Löwe, Welf, Comparing software metrics tools (PDF), International Symposium on Software Testing and Analysis 2008, 2008: 131–142 [2012-04-16], (原始內容存檔 (PDF)於2018-04-17)
- ^ DeMarco, Tom year =. Controlling Software Projects: Management, Measurement and Estimation. ISBN 0-13-171711-1.
- ^ NASA Metrics Planning and Reporting Working Group (MPARWG) 互聯網檔案館的存檔,存檔日期2011-10-22.
- ^ USC Center for Systems and Software Engineering. [2012-04-16]. (原始內容存檔於2017-12-11).
參考文獻
- DeMarco, Tom. Controlling Software Projects: Management, Measurement and Estimation. 1982. ISBN 0-13-171711-1.