`
JerryWang_SAP
  • 浏览: 1031612 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

使用工具Source Monitor测量您Java代码的环复杂度

阅读更多

代码的环复杂度(Cyclomatic complexity,有时也翻译成圈复杂度)是一种代码复杂度的衡量标准,在1976年由Thomas J. McCabe, Sr. 提出。

来看看计算公式。

代码环复杂度 = E − N + 2

E = 程序控制流图中边的个数

N = 程序控制流图中点的个数

很容易得出这样的结论:代码环复杂度越高,越容易出bug。

 

可以想象如果需要开发人员自己去把一段代码的控制流图画出来,然后去数图中边和点的个数,这种做法效率太低了也容易出错。

好消息是,有一款名为Source Monitor的免费软件,能够帮我们来度量Java代码的环复杂度。当然这款软件也支持C++和C#。

 

为了说明如何使用这款软件,我写了一段简单的Java代码。

package test;

import java.util.ArrayList;

public class monthTool {

static ArrayList<String> monthCollection = new ArrayList<String>();

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";

}

}

}

其中我用了三种不同的方式实现了同一个逻辑,将一个代表月份的整数转成了月份名称。

下面是Source Monitor的具体用法。

1. 创建一个新的项目:

 

这里能看到所有Source Monitor支持的编程语言。

 

2. 指定您本地的Java项目文件地址:

 

3. 指定您的Java项目文件夹内,您希望SourceMonitor计算哪些Java文件的环复杂度。

 

4. 点OK,就可以开始扫描啦。

 

很快Source Monitor就将我们指定的Java文件的环复杂度计算完毕。点击菜单“Display Method Metrics”来查看结果:

 

从环复杂度扫描结果能看出,明显第三种从月份名称集合里通过ArrayList自带的get方法取得月份名称是最优的解法——环复杂度仅为2。

 

也可以通过图表的方式更直观得看到方法的环复杂度比较:

 

X轴的值代表每个方法的环复杂度,Y轴代表这些环复杂度的不同值出现的次数。

比如下图的意思是,环复杂度为1的方法(X轴刻度为1的节点)共有4个(Y轴刻度为4),环复杂度为2的方法(X轴刻度为2的节点)有1个(Y轴刻度为1)。以此类推。

 

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

 

 
 
0
0
分享到:
评论

相关推荐

    代码复杂度检查工具Source Monitor

    通过检查关键的编程指标,如圈复杂度(Cyclomatic Complexity)和代码深度注释率,Source Monitor提供了一种量化的方式来识别代码中的潜在问题,从而优化代码结构,降低维护成本。 **一、圈复杂度** 圈复杂度是...

    SourceMonitor 一款简单的代码复杂度查看工具

    总结来说,SourceMonitor是一款强大的代码复杂度查看工具,它通过量化代码的复杂性,帮助开发者更好地理解代码结构,优化代码质量,提升软件工程的效率和可靠性。无论是个人开发者还是团队,都值得将SourceMonitor...

    source monitor 圈复杂度

    在实际应用中,Source Monitor的圈复杂度功能可以与代码审查、持续集成和静态代码分析工具结合使用,形成一套完整的代码质量管理流程。通过定期检查和分析圈复杂度,开发团队可以持续改进代码库,保持代码的清晰和...

    强大的代码检查工具SourceMonitor

    SourceMonitor是一款广受欢迎的代码检查工具,专为开发者设计,用于度量和分析源代码的复杂性。它支持多种编程语言,包括但不限于C、C++、C#、Java、VB.NET、JavaScript、PHP等。这款工具的核心功能在于帮助开发人员...

    SourceMonitor,免费代码统计工具,圈复杂度,代码数量,覆盖率等等

    SourceMonitor,免费代码统计工具,圈复杂度,代码数量,覆盖率等等

    SourceMonitor扫描圈复杂度

    总的来说,SourceMonitor通过提供圈复杂度等关键指标,为开发者提供了一种量化评估代码复杂性的工具,从而有助于提升软件项目的质量和可维护性。通过定期使用SourceMonitor,开发团队可以及时发现并修复可能导致问题...

    SourceMonitor 代码重构的小工具

    1. **代码复杂性测量**:SourceMonitor可以分析源代码的复杂性,包括函数的深度、循环和嵌套结构。复杂性高的代码往往更难理解和维护,因此,这一功能对于识别潜在问题和优化代码至关重要。 2. **代码覆盖率**:该...

    <转>SourceMonitor: 代码重构的小工具,大用场

    SourceMonitor是一款强大的源代码分析工具,专为软件开发者设计,用于度量和管理代码的复杂性。它能够帮助程序员有效地进行代码重构,提升代码质量和可维护性。通过深入剖析代码,SourceMonitor提供了一系列关键指标...

    SOURCE MONITOR V323

    总的来说,"SOURCE MONITOR V323"是一款强大的代码复杂度分析工具,对于任何希望改善代码质量和提升开发效率的团队来说,都是一个不可或缺的利器。通过其详尽的分析报告和直观的界面,开发者能够更好地理解代码结构...

    SourceMonitor最新版本

    **SourceMonitor:强大的代码分析与度量工具** SourceMonitor是一款高效且全面的代码审查工具,专为软件开发人员设计,支持多种编程语言,包括C++、C#、Java、Delphi、Visual Basic以及HTML。这款工具的核心功能...

    软件工程测试-SourceMonitor

    在软件工程测试领域,SourceMonitor是一款不可或缺的代码分析工具。它主要用于度量和管理软件项目的源代码,帮助开发者和测试人员了解代码的质量、复杂性和可维护性。SourceMonitor提供了丰富的功能,如代码行统计、...

    Source Monitor使用 - 副本.doc

    Source Monitor 是一款强大的源代码分析工具,尤其在软件测试领域中,它被广泛用于度量和评估代码的质量。本实验报告旨在介绍如何使用 Source Monitor 对源代码进行度量,并理解其提供的各项指标,以帮助提升软件...

    代码统计工具SourceMonitor

    强大的代码统计工具,支持多种格式的代码统计,附教程

    软件复杂度与SourceMonitor.ppt

    SourceMonitor是一款用于代码复杂度分析的工具,它可以自动计算上述各种复杂度指标,帮助软件开发者和测试团队了解代码的健康状况,优化代码结构,提高软件质量,降低维护成本。通过对软件复杂度的深入理解和有效...

    SourceMonitor代码工具

    利用SourceMonitor可以为C++、C、C#、Java、Delphi、Visual Basic和HTML的源代码文件测试代码数量和性能。最终结果可以描绘成图、输出打印。

    代码行数统计工具SourceCount

    源代码统计工具SourceCount是一款非常实用的软件,它专为开发者设计,用于高效地分析和统计项目中的代码结构。在软件开发过程中,了解代码的组成是至关重要的,它可以帮助我们评估项目的规模,优化代码质量,以及...

    NET代码复杂度检查工具

    早就听说了微软内部的静态代码检查和代码强制格式美化工具 StyleCop)不是代码格式化(代码美化)工具,而是代码规范检查工具(Code Review 工具),它不仅仅检查代码格式,而是编码规范,包括命名和注释等。...

    SourceMonitor

    SourceMonitor (TM) Version 3.5 Campwood Software LLC, Burlington, ...利用SourceMonitor可以为C++、C、C#、Java、Delphi、Visual Basic和HTML的源代码文件测试代码数量和性能。最终结果可以描绘成图、输出打印。

Global site tag (gtag.js) - Google Analytics