`
samjavaeye
  • 浏览: 194568 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

什么是Cyclomatic Complexity(圈复杂度)

 
阅读更多

圈复杂度(Cyclomatic Complexity)是一种代码复杂度的衡量标准。它可以用来衡量一个模块判定结构的复杂程度,数量上表现为独立线性路径条数,也可理解为覆盖所有的可能情况最少使用的测试用例数。圈复杂度大说明程序代码的判断逻辑复杂,可能质量低且难于测试和维护。程序的可能错误和高的圈复杂度有着很大关系。

下面这个实例中,单元测试的覆盖率可以达到100%,但是很容易发现这其中已经漏掉了一个NPE的测试用例。case1方法的圈复杂度为2,因此至少需要2个用例才能完全覆盖到其所有的可能情况。

//程序原代码,圈复杂度为 2
public String case1(int num) {
    String string = null;
    if (num == 1) {
        string = "String";
    }
    return string.substring(0);
}

//上面代码的单元测试代码
public void testCase1(){
    String test1 = case1(1);
}
 
圈复杂度主要与分支语句(if、else、,switch 等)的个数成正相关。当一段代码中含有较多的分支语句,其逻辑复杂程度就会增加。

圈复杂度的计算方法,可以参考这篇文章:http://blog.csdn.net/lg707415323/article/details/7790660

降低圈复杂度的方法,可以参考《控制圈复杂度:9种重构技术

分享到:
评论

相关推荐

    idea 计算圈复杂度插件

    在软件开发过程中,代码的质量和可维护性是至关重要的因素,而圈复杂度(Cyclomatic Complexity)就是衡量代码复杂性的一个重要指标。IntelliJ IDEA,作为一款强大的Java集成开发环境,提供了计算圈复杂度的插件,...

    sonar最大平均圈复杂度

    **圈复杂度(Cyclomatic Complexity)** 圈复杂度,又称 McCabe 复杂度,是软件度量的一个重要指标,由 Thomas J. McCabe 在 1976 年提出。这个概念主要用于评估程序代码的复杂性,从而预测其错误率和维护难度。圈...

    source monitor 圈复杂度

    **圈复杂度(Cyclomatic Complexity)** 圈复杂度,又称为McCabe复杂度,是软件度量的一个重要概念,由Thomas J. McCabe在1976年提出。它衡量的是程序中控制流的复杂性,即程序执行路径的数量。圈复杂度计算公式...

    Measuring Cyclomatic Complexity Of Python Code

    这就是 cyclomatic complexity(圈复杂度)的概念发挥作用的地方。圈复杂度是一种软件度量标准,用于估算程序的复杂程度,它通过计算控制流图的边数来确定。这个指标可以提供关于代码中分支和循环数量的信息,从而...

    SourceMonitor扫描圈复杂度

    **圈复杂度(Cyclomatic Complexity)** 圈复杂度,又称为结构复杂度或McCabe复杂度,是由Thomas J. McCabe在1976年提出的衡量程序复杂性的指标。它基于控制流图(Control Flow Graph, CFG),计算程序路径的数目。...

    圈复杂度metrics

    圈复杂度(Cyclomatic Complexity),也称为结构复杂度或Mccabe度量,是软件度量中的一个重要概念,主要用于评估程序代码的复杂性。这个概念由Thomas J. McCabe在1976年提出,目的是为了帮助软件开发者识别出可能...

    如何测量程序圈复杂度度量

    本文介绍了一种基于程序控制流的数学技术——圈复杂度(Cyclomatic Complexity),该方法由Thomas J. McCabe提出。圈复杂度是一种图形理论的复杂度度量方法,它不仅能够帮助管理者和开发者控制程序的复杂性,还能够...

    面向Python的圈复杂度静态分析方法研究.zip

    在软件工程领域,圈复杂度(Cyclomatic Complexity)是一种衡量程序复杂性的指标,它能够帮助开发者理解代码的复杂程度,预测出错的可能性,并优化代码结构。本研究聚焦于Python编程语言,探讨如何运用静态分析技术...

    resharper-cyclomatic-complexity:ReSharper插件可在您键入时测量圈复杂度

    可以通过转到ReSharper→Extensions Manager并搜索“ Cyclomatic Complexity”来安装它。 循环复杂度是旨在显示代码复杂度的度量。 它测量通过代码块的路径数-分支和条件语句越多,度量越高。 随着代码变得越来越...

    go-cyclomatic-complexity

    为了确保代码质量,开发人员会采用各种代码度量标准,其中一种就是圈复杂度(Cyclomatic Complexity)。圈复杂度是衡量程序结构复杂性的指标,由计算机科学家Thomas J. McCabe提出。Go-cyclomatic-complexity是一个...

    代码复杂度检查工具Source Monitor

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

    Lizard工具,圈复杂度,代码注释率

    首先,Lizard工具是一个源代码分析工具,主要用于计算代码的各种复杂度指标,包括圈复杂度(Cyclomatic Complexity Number, CCN)和代码注释率。Lizard支持多种编程语言,如C、C++、Java、Python等,它可以帮助...

    什么是OOAD中的圈复杂度测试

    在面向对象分析与设计(Object-Oriented Analysis and Design,简称OOAD)中,圈复杂度(Cyclomatic Complexity)是一种衡量代码复杂性的指标,它主要用于软件测试和代码质量评估。这个概念由Michael J. McCabe在...

    软件复杂度与SourceMonitor.ppt

    1. **圈复杂度**(Cyclomatic Complexity, v(G)**)**:由McCabe在1976年提出,通过计算程序图的边数e、节点数n,公式v(G)=e-n+2来衡量模块的复杂程度。圈复杂度越高,表示模块内的逻辑分支越多,测试和维护的难度...

    pybuilder-radon:一个pybuilder插件,使用radon检查项目的圈复杂度

    一个pybuilder插件,使用radon检查项目的圈复杂度。 有关radon的更多信息,请参考。 要将这个插件添加到您的pybuilder项目中,请在build.py顶部添加以下行: use_plugin ( 'pypi:pybuilder_radon' , '~=0.1.0' ) ...

    cyclomatic-complexity:装箱以获取模块的圈复杂度

    圈复杂度 装箱以获取模块的圈复杂度 在本地发展 安装Rust 克隆github回购 执行execute.sh文件。 有关支持的操作的完整列表,请参见DevWorkflow.yml。 任务 编写读取一些命令行参数并设置config的基本代码。

    软件复杂度概述

    软件复杂度的计算方法多种多样,其中最著名的当属McCabe环路复杂度(Cyclomatic Complexity)。 ##### 1. McCabe环路复杂度 - **定义**:McCabe环路复杂度由Thomas J. McCabe于1976年提出,用于量化程序控制流的...

    Cyclomatic-Complexity-:软件项目管理——软件开发的重要组成部分

    在软件开发过程中,代码的质量和可维护性是至关重要的因素,而 cyclomatic complexity(圈复杂度)就是一个衡量代码复杂程度的指标。这个概念由 Thomas J. McCabe 在 1976 年提出,用于评估软件模块的复杂性,进而...

    gocyclo:计算Go源代码中函数的圈复杂度

    具有较高圈复杂度的功能需要更多的测试用例才能覆盖所有可能的路径,并且可能更难理解。 通过应用导致较小功能的通用重构技术,可以降低复杂性。 安装 要安装gocyclo命令,请运行 $ go get github.com/fzipp/gocy

    PyPI 官网下载 | radon-0.4.tar.gz

    Cyclomatic Complexity(环路复杂度)是一种软件度量,用于预测软件的测试难度。它是基于程序控制流图计算得出的,表示了程序中独立路径的数量。这个值越高,代码越难以理解和测试。Radon 可以帮助计算每个函数或...

Global site tag (gtag.js) - Google Analytics