在軟體開發中,軟體品質是衡量軟體是否符合需求、標準的重要體現。除了代碼品質外,影響軟體整體品質的因素還有很多。因此,要確保軟體的整體品質,就需要在各個環節嚴格控制。
本文列出了衡量軟體品質的5個最常用的指標。
1. SLOC(Source Lines of Code,原始碼行)
計算程式碼數可能是最簡單的衡量指標,主要體現了軟體的規模,並為項目增長和規劃提供了相關資料。例如,如果每月統計一次代碼的行數,就可以繪製一個項目發展概覽圖。當然,由於存在項目重構或是設計階段等因素,這種方式並不太可靠,但是可以為項目的發展提供一個視角。
可以只統計邏輯程式碼(Source Logical Line of Code,SLLOC),這樣可以獲得稍準確的資訊。邏輯程式碼不包含空行、單個括弧行和注釋行。可以使用Metrics工具來統計。
程式碼數不應該用來評估開發人員的效率,否則,可能會產生重複、不可維護的或不專業的代碼。
2. 每個程式碼片段/模組/時間段中的bug數
要想實現更好的測試以及更高的可維護性,bug跟蹤是必不可少的。每個程式碼片段、模組或時間段(天、周、月等)內的bug可以很容易通過工具統計出來(如Mantis)。這樣,可以及早發現並及時修複。
Bug數可以作為評估開發人員效率的指標之一,但必須注意,如果過分強調這種評估方法,軟體開發人員和測試者可能會成為敵人。在生產企業中,要保證員工彼此之間的凝聚力。
為了更好的實現評估,可以根據重要性和解決成本將bug劃分為低、中、高三個層級。
3. 程式碼涵蓋範圍
在單元測試階段,程式碼涵蓋範圍常常被拿來作為衡量測試好壞的指標,也用來考核測試工作完成情況。可以使用的工具也有很多,如Cobertura等。
程式碼涵蓋範圍並不能代表單元測試的整體品質,但可以提供一些測試覆蓋率相關的資訊,可以和其他一些測試單位一起來使用。
此外,在查看程式碼涵蓋範圍時,還需注意單元測試代碼、整合測試情境和結果等。
4. 設計/開發約束
軟體開發中有很多設計約束和原則,其中包括:
- 類/方法的長度
- 一個類中方法/屬性的個數
- 方法/建構函式參數的個數
- 代碼檔案中魔術數字、字串的使用(魔術數字指直接寫在代碼中的具體數值,其他人難以理解數位意義)
- 注釋行比例等
代碼的可維護性和可讀性是很重要的,Team Dev可以選擇以上這些原則中的一個或全部,並通過一些自動化工具(如maven
pmd外掛程式)來遵循這些原則,這將大大提高軟體產品的品質。
5. 循環複雜度(Cyclomatic Complexity)
循環複雜度是用來衡量一個模組判定結構的複雜程度,已經成為評估軟體品質的一個重要標準,能協助開發人員識別難於測試和維護的模組,在成本、進度和效能之間尋求平衡。循環複雜度可以使用pmd工具來自動化計算。
循環複雜度數量上表現為獨立路徑的條數,即合理的預防錯誤所需測試的最少路徑條數,循環複雜度大說明程式碼可能品質低且難於測試和維護。
計算公式為:V(G) = E - N + 2P
E:邊,代表節點間的程式流;
N:節點,程式中代碼的最小單元
P:出口節點
中共8條邊,7個節點,因此循環複雜度為8 - 7 + 2*1=3。這意味著,理論上需要編寫3個測試案例來覆蓋所有的判定條件。
其實,循環複雜度的計算還有更直觀的方法,因為循環複雜度所反映的是“判定條件”的數量,所以循環複雜度實際上就是等於判定節點的數量再加上1,也即控制流程圖的地區數,對應的計算公式為:V(G)=地區數=判定節點數+1。
在項目開發中,可以根據項目類型,來定義上限數(6、8或10等)。
以上是最常用的5種軟體品質度量指標,當然,還可以結合其他的指標,對項目有一個更清晰的認識。