国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用工具Source Monitor測量您Java代碼的環(huán)復雜度

TwIStOy / 428人閱讀

摘要:代碼的環(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 ArrayList monthCollection = 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

相關文章

  • 如何計算并測量ABAP及Java代碼的環(huán)雜度Cyclomatic complexity

    摘要:代碼的環(huán)復雜度,有的地方又翻譯成圈復雜度是一種代碼復雜度的衡量標準,在年由提出。圈復雜度大說明程序代碼可能質(zhì)量低且難于測試和維護。 代碼的環(huán)復雜度(Cyclomatic complexity,有的地方又翻譯成圈復雜度)是一種代碼復雜度的衡量標準,在1976年由Thomas J. McCabe, Sr. 提出。 在軟件測試的概念里,圈復雜度用來衡量一個模塊判定結構的復雜程度,數(shù)量上表現(xiàn)為...

    googollee 評論0 收藏0
  • SAP OData編程指南

    摘要:目前被廣泛用于和的眾多應用中,以及和一些正在開發(fā)的新一代云產(chǎn)品中。年月時,我和德國一位負責的同事就這個話題在半小時的電話會議里產(chǎn)生了爭執(zhí)。德國同事看了之后,同意了我的意見。和微信集成系列教程這個系列教程里,和微信的交互,使用了,使用了。 OData(Open Data Protocol)協(xié)議是一個開放的工業(yè)標準,用于定義RESTFul API的設計和使用。我的文章標題前加上SAP的前綴...

    X1nFLY 評論0 收藏0
  • SAP OData編程指南

    摘要:目前被廣泛用于和的眾多應用中,以及和一些正在開發(fā)的新一代云產(chǎn)品中。年月時,我和德國一位負責的同事就這個話題在半小時的電話會議里產(chǎn)生了爭執(zhí)。德國同事看了之后,同意了我的意見。和微信集成系列教程這個系列教程里,和微信的交互,使用了,使用了。 OData(Open Data Protocol)協(xié)議是一個開放的工業(yè)標準,用于定義RESTFul API的設計和使用。我的文章標題前加上SAP的前綴...

    wanghui 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<