[代碼質量] 推薦一個vs自帶工具分析代碼的複雜度

轉載自: https://blog.csdn.net/zh_geo/article/details/52954145編程

 

VS2012 -> Analyze -> Calculate code metrics feature. 安全

代碼度量(Code Metrics)是用來測量專業標準的軟件特性. 在某些方面,它提供了量化的有用反饋給開發者.post

查看代碼度量值很簡單:在項目或解決方案上按右鍵,選擇"Calculate Code Metrics". 如下是一些相似的結果:性能

結果窗口中有五個不一樣的度量特性:圈複雜度(Cyclomatic Complexity), 繼承深度(Depth of Inheritance), 類耦合度(Class Coupling), 代碼行數(Lines of Code), 和一個總的可維護指數(Maintainability Index). 經過展開左邊的樹結點,你能夠從整個項目深刻觀察類裏面的方法. 可是特徵中的那些數字是什麼意思呢?測試

 

圈複雜度(Cyclomatic Complexity)
圈複雜度是調用方法時取得的線性獨立路徑的總數,基於if,switch,while和相似的分支語句的數量. 若是一個方法沒有這樣的語句存在,就表示方法中只有一條可行路線,這樣的狀況下圈複雜度的值爲1..net

public int DoSomething(int x) {
if (x == 1) {
// code that is executed when x is 1
}

if (x == 2) {
// code that is executed when x is 2
}
// code that is executed even if x is neither 1 or 2
return x;
}


在這個例子中,有三條可行的路線存在,走哪條路線取決於x的值:設計

  • 1.當x是1
  • 2.當x是2
  • 3.當x不是1也不是2

圈複雜度告訴你兩件重要事. 首先,它指出一個方法的綜合複雜度. 值越低越好,若是數值較高,就說明方法可能覆蓋了過多不一樣狀況的處理(例如,嘗試作太多容錯處理),說明方法須要分解成更簡單的只知足一種狀況的單一職責方法(這樣會更容易維護).3d

其次,爲了確保每種狀況都被徹底地測試,你必須爲每條路線建立惟一的測試用例. 圈複雜度告訴你須要寫多少個測試用例來確保全部可能的狀況都已經被覆蓋.code

若是一個代碼段的圈複雜度值多於測試用例的數量,你就會發現有些狀況沒有被處理,並且可能藏匿着bug.htm


繼承深度(Depth of Inheritance)
繼承深度是表示一個類的繼承的級數,起始值爲1(全部類都是繼承自Object). 這個例子有3級繼承:

該值是越低越好; 若是繼承深度在3或4以上,你的代碼可能超出設計標準(over-engineered),說明代碼是難以維護的.

數值越高,就越多子類須要修改 -- 消耗時間和金錢,也潛在地引入bug -- 若是你對基類作出重大變動的話.

只要你考慮下每一個變動對於子類會引入一些潛在的bug,這些bug會影響到他們引用的全部對象... 你就懂我意思了.


類耦合度(Class Coupling)
類耦合度是計算一個類中引用到的對象類型數,不包括原始的和內置的類型,像int和string. 該值是越低越好; 值越高,就表明類綁定了越多類,也意味着存在越多依賴關係在它的中間環境中.

隨着類的耦合度的增長,它就會變得難以分離出來用在另外一個項目中. 簡單來說,類的耦合度越高,它的重用性就越低.

咱們都看過不少理論案例說類要儘可能可重用,但實際編程,大部分類都是高度針對特定項目而編寫的,或多或少須要徹底重寫才能"重用"在另外一個項目中.

若是類在它最初被建立的時候設計得更完善,咱們就能夠在以後省掉不少時間.


代碼行數(Lines of Code)
代碼行數是經過計算執行的代碼行數來量度軟件塊的大小. 雖然和上面的特徵同樣,這個值也是越低越好(緣由很簡單,你以更少的代碼完成功能就能減小你思考的負擔),但在用這個特徵前有幾條告誡你須要知道:

  • 1.不是每行代碼都相等. 有些行是很是簡單,有些卻很是複雜,會花費數小時來計算.
  • 2.它不計算已刪除或已覆蓋的代碼
  • 3.有時將一行復雜的代碼分割成幾行會令它更容易理解; 在這樣的狀況下,增長了代碼行但更容易維護.
  • 4.除非設計完善並完全測試過,並且已成型的全部代碼是出自你本人,不然代碼行數不會精確反映投入軟件中的努力的量.

要聰明地使用這個度量值. 在之前,代碼行數出名地被濫用於測量每日的編程生產力,帶來了災難性的結果. 請記住,比起寫代碼,軟件開發有更多重要的東西.

 

可維護指數(Maintainability Index)
最後是可維護指數,範圍是0到100,用來指示全部類,成員,命名空間或項目的可維護性. 事實上,它是一個以前全部度量值的合計值,但它也同時包含一些額外的度量值,像霍爾斯特德量(Halstead Volume),該值用來量度程序的總長度和詞彙數. 與以前的度量值不一樣,這個值是越高越好.

可維護指數還提供了一個紅/黃/綠的交通燈圖標,讓你一眼看見問題的區域. 交通燈會轉黃當數值低於20,當數值低於10時會轉紅,這時你須要從新檢查你的代碼以躲避危險.


總結
Visual Studio 2008的代碼度量不會量度性能或者安全性,也不會幫助你解決任何bug. 它只會在開發時幫你找出軟件中的隱藏問題區域.


你越早看到本文,就越節省你的時間和金錢(用於重構不可維護的代碼). 你也會自我感受良好,由於你知道你可以第一時間處理好程序.

 

英文原文: http://www.geekzone.co.nz/vs2008/4773

百度百科: http://baike.baidu.com/view/2830155.htm

相關文章
相關標籤/搜索