`
jsjzhou
  • 浏览: 28540 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

软件度量之圈复杂度

阅读更多
软件度量之圈复杂度
一种代码复杂度的衡量标准,中文名称叫做圈复杂度。在软件测试的概念里,圈复杂度“用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,即合理的预防错误所需测试的最少路径条数,圈复杂度大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系”。

控制流图是McCabe复杂度计算的基础,McCabe度量标准是将软件的流程图转化为有向图,然后以图论的知识和计算方法来衡量软件的质量。 McCabe复杂度包括圈复杂度(Cyclomatic complexity)、基本复杂度、模块涉及复杂度、设计复杂度和集成复杂度等。控制流程图分析是一个静态的分析过程,它提供静态的度量标准技术,一般主要运用在白盒测试的方法中。

控制流图的一个重要性质是它的可规约性(reducibility)。如果程序中不存在从循环外跳到循环内的goto语句,那么这个程序对应的控制流图是可规约的(reducible),反之这个控制流图就是不可规约的(irreducible)。因此,模块符合结构化程序设计的准则是控制流图可规约的基础。

程序环路复杂性也即为McCabe复杂性度量,它一般常用圈复杂度来描述,记录为V(G)。它用来衡量一个程序模块所包含的判定结构的复杂程度,数量上表现为独立路径的条数,即合理地预防错误所需测试的最少路径条数,圈复杂度大的程序,说明其代码可能质量低且难于测试和维护。经验表明,程序的可能存在的 Bug数和圈复杂度有着很大的相关性

圈复杂度的计算方法很简单,计算公式为:V(G)=e-n+2。其中,e表示控制流图中边的数量,n表示控制流图中节点的数量。其实,圈复杂度的计算还有更直观的方法,因为圈复杂度所反映的是“判定条件”的数量,所以圈复杂度实际上就是等于判定节点的数量再加上1,也即控制流图的区域数,对应的计算公式为:V(G)=区域数=判定节点数+1。

对于多分支的CASE结构或IF-ELSEIF-ELSE结构,统计判定节点的个数时需要特别注意一点,要求必须统计全部实际的判定节点数,也即每个 ELSEIF语句,以及每个CASE语句,都应该算为一个判定节点。判定节点在模块的控制流图中很容易被识别出来,所以,针对程序的控制流图计算圈复杂度 V(G)时,最好还是采用第一个公式,也即V(G)=e-n+2;而针对模块的控制流图时,可以直接统计判定节点数,这样更为简单。
分享到:
评论

相关推荐

    sonar最大平均圈复杂度

    圈复杂度,又称 McCabe 复杂度,是软件度量的一个重要指标,由 Thomas J. McCabe 在 1976 年提出。这个概念主要用于评估程序代码的复杂性,从而预测其错误率和维护难度。圈复杂度通过分析程序控制流图(Control Flow...

    source monitor 圈复杂度

    圈复杂度,又称为McCabe复杂度,是软件度量的一个重要概念,由Thomas J. McCabe在1976年提出。它衡量的是程序中控制流的复杂性,即程序执行路径的数量。圈复杂度计算公式通常基于程序的控制流程图,基本规则是:程序...

    idea 计算圈复杂度插件

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

    圈复杂度metrics

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

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

    总之,圈复杂度作为一种有效的程序复杂度度量工具,在软件工程实践中具有重要的应用价值。通过对程序的圈复杂度进行分析,不仅可以帮助开发者更好地理解程序的结构和复杂度,还能指导代码的优化和测试工作,从而提高...

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

    圈复杂度分析方法主要通过度量程序中独立路径的数量,进而评估程序的复杂度。独立路径是指在程序执行过程中能够出现的不同的执行路径。圈复杂度的计算公式是:M = E - N + 2P,其中M代表圈复杂度,E代表控制流图中的...

    软件度量工具CCCC,附源码,用户手册

    C and C++ Code Counter for windows 软件度量工具,可以进行多种静态度量,包括 LOC 圈复杂度 fan-in fan-out等等等等,安装后文件夹内有源代码和用户手册

    cyclo:计算C语言代码的圈复杂度度量

    Cyclo-C语言的圈复杂度工具 原始版本的版权(c)1993 Roger Binns 更新版权(c)2016 Stephen L Arnold 这些工具由Roger Binns作为英国大学计算机科学系的四年级项目(作为计算机科学学位的一部分)生产,用于...

    软件度量小组_软件度量相关工具及报告

    软件度量小组_软件度量相关工具及报告,软件度量小组_软件度量相关工具及报告:CK metrics,LK metrics,ObjectPoints,特征点,cocomo,项目度量报告,圈复杂度,软件项目度量模板

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

    循环复杂度是用于指示程序复杂度的软件度量。 它是对程序源代码中线性独立路径数量的定量度量。 循环复杂度可用于测量代码复杂度。 复杂度分数越高,代码越复杂,这通常会转化为更难于理解,维护和测试的代码。 圈...

    软件工程与软件复杂度分析.pptx

    - **圈复杂度**:基于控制流图计算出的复杂度指标。 - **路径覆盖**:评估测试覆盖范围的有效方法。 此外,还可以采用静态度量(如代码行数)、动态度量(如运行时行为)和结构度量等多种方法来综合评估软件复杂度...

    软件度量方面的源码

    - **复杂度度量**:包括Cyclomatic Complexity(圈复杂度),它通过分析控制流图来估算代码的复杂程度,通常用来识别潜在的错误或难以测试的部分。 - **类和函数的粒度**:度量类和方法的大小可以帮助优化设计,...

    Java软件度量源码

    2. 复杂性度量:复杂性度量旨在量化代码的难度,如圈复杂度(Cyclomatic Complexity),它通过计算控制流图的边数来评估代码的复杂性。高复杂的代码更难以理解和测试,容易出错。 3. 历史度量:这些度量涉及代码的...

    软件度量与过程建模.pdf

    例如,圈复杂度(Cyclomatic Complexity)是一种衡量程序模块复杂性的度量,它可以预示代码中可能出现错误的地方。再比如,代码行数(Lines of Code, LOC)虽然不是一个完美的度量,但可以大致反映出软件项目的规模...

    软件度量实验

    "软件度量实验"是一个以C++语言实现的项目,旨在为开发者提供一套实用的软件度量工具。这个实验涵盖了多种常见的软件度量方法,帮助我们理解和分析软件的各个方面。 一、软件度量基础 软件度量主要分为三类:结构性...

    软件复杂度与SourceMonitor.ppt

    软件复杂度是评估软件质量、可维护性和测试难度的重要指标,它涉及多个维度,包括圈复杂度、基本复杂度、模块设计复杂度、设计复杂度、集成复杂度、行数、规范化复杂度、全局数据复杂度以及局部数据复杂度。...

    软件的度量

    软件度量是软件工程领域中的一个重要概念,它涉及到对软件开发过程和软件产品进行定量分析的方法。通过收集、计算和分析一系列数据,软件度量旨在评估软件的质量、复杂性、性能、可维护性和效率,为项目管理和决策...

Global site tag (gtag.js) - Google Analytics