[VS2010 Ultimate軟體工程實戰手冊]程式碼量度
品質一向是使用者評判東西好不好的一項重要指標,軟體品質也不例外,當然大部份使用者不會去在乎程式碼裡寫了些什麼
,所謂的品質也一向涉及很多層面,像是使用者操作介面、系統是否穩定、執行效能等等因素,這裡面有主觀面的也有客觀
面向的部份。那麼該如何評估品質呢?
是的,量度,量度是一種數量性的指標,可以表示某個目標物的特徵,有了可以具體量化的數據,一般來說也就可以有了改善
的依據或是做為未來預測之用的基礎,在軟體工程裡有個所謂的『軟體量度(Software Metrics)』,用來衝量軟體本身的特徵,
像是程式碼行數、複雜度等等
在ISO 9126裡以6個面項來作為軟體品質評估的基礎,分別為Functionality、Reliability、Usability、Efficiency、Maintainability、Portability
(取自:http://www.chrisbunney.com/wiki/index.php/ISO_9126)
而在INSTAC (Information Technology Research and Standardization Center)則以外部量度及內部量度二方面,來做為評估軟體品質的量度
,外部量度(External Metrics)是指對系統的整體使用或測試所得到的量度,而內部量度(Internal Metrics)則是針對程式碼或文件所分析得到的量度
,過去在實務上很難有個什麼樣的數據來個客觀的評估,通常必須依賴開發人員自已的經驗或是透過review的方式來討論改善
,但這可能引發一種主觀的現象
在VS2010 Ultimate裡提供了我們一個可以評估程式碼量度的工具『程式碼度量Code Metrics』
,透過Code Analysis(FxCop)引擎掃描.exe或dll檔,可依據已定義的度量項目進行計算,分析可得到幾個數據
(可維護性指數、循環複雜度、繼承深度、類別結合程度、程式碼行數)
可維護性指數:採用SEI發展出來的公式來評估,數值介於0~9屬於低維護性,10~19屬於中維護性,20~100則屬於高維護性
循環複雜度:用來評估程式邏輯複雜的程度,像是有使用到if , while , for 等,點數愈高表示循環複雜度愈高
繼承深度:因所有類別至少是繼承Object Class,故至少值會是1以上,相對的數值愈高,表示繼承關係愈多層,則在找尋定義或是重新調整方法較困難
類別結合程度:數值愈高表示類別間相依性愈高,結合程度高表示設計不易重複使用
程式碼行數:扣除註解、縮排、宣告等等的行數,所得到的程式碼行數,當然數值愈高,相對後續要維護上較不易,應適當做切割
當然這些數據所呈現是一個客觀面的評量,對於系統可用性上來說不見得具有直接的關係,但對於維護上或品質的維持上可以提供一些幫助跟評量
開發人員也可以適時的評量自已所撰寫的程式,做為持續改善的依據
Ref:
Visual Studio 2010 Ultimate軟體工程實戰手冊
By No.18