摘要:代碼的環(huán)復雜度,有時也翻譯成圈復雜度是一種代碼復雜度的衡量標準,在年由提出。好消息是,有一款名為的免費軟件,能夠幫我們來度量代碼的環(huán)復雜度。很快就將我們指定的文件的環(huán)復雜度計算完畢。
代碼的環(huán)復雜度(Cyclomatic complexity,有時也翻譯成圈復雜度)是一種代碼復雜度的衡量標準,在1976年由Thomas J. McCabe, Sr. 提出。
來看看計算公式。
代碼環(huán)復雜度 = E ? N + 2
E = 程序控制流圖中邊的個數(shù)
N = 程序控制流圖中點的個數(shù)
很容易得出這樣的結論:代碼環(huán)復雜度越高,越容易出bug。
可以想象如果需要開發(fā)人員自己去把一段代碼的控制流圖畫出來,然后去數(shù)圖中邊和點的個數(shù),這種做法效率太低了也容易出錯。
好消息是,有一款名為Source Monitor的免費軟件,能夠幫我們來度量Java代碼的環(huán)復雜度。當然這款軟件也支持C++和C#。
為了說明如何使用這款軟件,我寫了一段簡單的Java代碼。
package test; import java.util.ArrayList; public class monthTool { static ArrayListmonthCollection = new ArrayList (); public static void main(String[] args) { monthTool tool = new monthTool(); tool.printV1(1); tool.printV2(2); tool.printV1(0); tool.printV2(-1); tool.printV3(3); tool.printV3(13); } public monthTool(){ monthCollection.add("Invalid"); monthCollection.add("January"); monthCollection.add("Febrary"); monthCollection.add("March"); monthCollection.add("April"); monthCollection.add("May"); monthCollection.add("June"); monthCollection.add("July"); monthCollection.add("August"); monthCollection.add("September"); monthCollection.add("October"); monthCollection.add("November"); monthCollection.add("December"); } public void printV1(int month){ System.out.println("Month is: " + getMonthNameV1(month)); } public void printV2(int month){ if( month >= 1 && month <= 12) System.out.println("Month is: " + getMonthNameV2(month)); else System.out.println("Please specify a valid month"); } public void printV3(int month) { System.out.println("Month is: " + getMonthNameV3(month)); } public String getMonthNameV2(int month){ if( month == 1) return "January"; else if( month == 2) return "Febrary"; else if( month == 3) return "March"; else if( month == 4) return "April"; else if( month == 5) return "May"; else if( month == 6) return "June"; else if( month == 7) return "July"; else if( month == 8) return "August"; else if( month == 9) return "September"; else if( month == 10) return "October"; else if( month == 11) return "November"; else if( month == 12) return "December"; else return "Invalid"; } public String getMonthNameV1(int month){ switch (month){ case 1: return "January"; case 2: return "Febrary"; case 3: return "March"; case 4: return "April"; case 5: return "May"; case 6: return "June"; case 7: return "July"; case 8: return "August"; case 9: return "September"; case 10: return "October"; case 11: return "November"; case 12: return "December"; default: return "Invalid"; } } public String getMonthNameV3(int month){ try { return monthCollection.get(month); } catch (java.lang.IndexOutOfBoundsException e){ return "Invalid"; } } }
其中我用了三種不同的方式實現(xiàn)了同一個邏輯,將一個代表月份的整數(shù)轉(zhuǎn)成了月份名稱。
下面是Source Monitor的具體用法。
1. 創(chuàng)建一個新的項目:
這里能看到所有Source Monitor支持的編程語言。
2. 指定您本地的Java項目文件地址:
3. 指定您的Java項目文件夾內(nèi),您希望SourceMonitor計算哪些Java文件的環(huán)復雜度。
4. 點OK,就可以開始掃描啦。
很快Source Monitor就將我們指定的Java文件的環(huán)復雜度計算完畢。點擊菜單“Display Method Metrics”來查看結果:
從環(huán)復雜度掃描結果能看出,明顯第三種從月份名稱集合里通過ArrayList自帶的get方法取得月份名稱是最優(yōu)的解法——環(huán)復雜度僅為2。
也可以通過圖表的方式更直觀得看到方法的環(huán)復雜度比較:
X軸的值代表每個方法的環(huán)復雜度,Y軸代表這些環(huán)復雜度的不同值出現(xiàn)的次數(shù)。
比如下圖的意思是,環(huán)復雜度為1的方法(X軸刻度為1的節(jié)點)共有4個(Y軸刻度為4),環(huán)復雜度為2的方法(X軸刻度為2的節(jié)點)有1個(Y軸刻度為1)。以此類推。
要獲取更多Jerry的原創(chuàng)技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/71750.html
摘要:代碼的環(huán)復雜度,有的地方又翻譯成圈復雜度是一種代碼復雜度的衡量標準,在年由提出。圈復雜度大說明程序代碼可能質(zhì)量低且難于測試和維護。 代碼的環(huán)復雜度(Cyclomatic complexity,有的地方又翻譯成圈復雜度)是一種代碼復雜度的衡量標準,在1976年由Thomas J. McCabe, Sr. 提出。 在軟件測試的概念里,圈復雜度用來衡量一個模塊判定結構的復雜程度,數(shù)量上表現(xiàn)為...
摘要:目前被廣泛用于和的眾多應用中,以及和一些正在開發(fā)的新一代云產(chǎn)品中。年月時,我和德國一位負責的同事就這個話題在半小時的電話會議里產(chǎn)生了爭執(zhí)。德國同事看了之后,同意了我的意見。和微信集成系列教程這個系列教程里,和微信的交互,使用了,使用了。 OData(Open Data Protocol)協(xié)議是一個開放的工業(yè)標準,用于定義RESTFul API的設計和使用。我的文章標題前加上SAP的前綴...
摘要:目前被廣泛用于和的眾多應用中,以及和一些正在開發(fā)的新一代云產(chǎn)品中。年月時,我和德國一位負責的同事就這個話題在半小時的電話會議里產(chǎn)生了爭執(zhí)。德國同事看了之后,同意了我的意見。和微信集成系列教程這個系列教程里,和微信的交互,使用了,使用了。 OData(Open Data Protocol)協(xié)議是一個開放的工業(yè)標準,用于定義RESTFul API的設計和使用。我的文章標題前加上SAP的前綴...
閱讀 2142·2021-10-12 10:11
閱讀 843·2021-10-09 09:41
閱讀 3757·2021-09-09 11:37
閱讀 1933·2021-09-08 10:41
閱讀 2634·2019-08-30 12:58
閱讀 2369·2019-08-30 10:58
閱讀 1272·2019-08-26 13:40
閱讀 4098·2019-08-26 13:36