控制流图|圈复杂度|基本复杂度

控制流图是McCabe复杂度计算的基础,McCabe度量标准是将软件的流程图转化为有向图,然后以图论的知识和计算方法来衡量软件的质量。McCabe复杂度包括圈复杂度(Cyclomatic complexity)、基本复杂度、模块涉及复杂度、设计复杂度和集成复杂度等。控制流程图分析是一个静态的分析过程,它提供静态的度量标准技术,一般主要运用在白盒测试的方法中。
1l[+m&kC+N39951    控制流图的一个重要性质是它的可规约性(reducibility)。如果程序中不存在从循环外跳到循环内的goto语句,那么这个程序对应的控制流图是可规约的(reducible),反之这个控制流图就是不可规约的(irreducible)。因此,模块符合结构化程序设计的准则是控制流图可规约的基础。51Testing软件测试网G}-m瑽璏F
    程序环路复杂性也即为McCabe复杂性度量,它一般常用圈复杂度来描述,记录为V(G)。它用来衡量一个程序模块所包含的判定结构的复杂程度,数量上表现为独立路径的条数,即合理地预防错误所需测试的最少路径条数,圈复杂度大的程序,说明其代码可能质量低且难于测试和维护。经验表明,程序的可能存在的Bug数和圈复杂度有着很大的相关性。
t

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

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

Essential Complexity (ev(G))基本复杂度
  基本复杂度是用来衡量程序非结构化程度的 ,非结构成分降低了程序的质 量,增加了代码的维护难度 ,使程序难于理解。因此,基本复杂度高意味着非结构化程度高 ,难以模块化和维护。实际上,消除了一个错误有时 会引起 其他 的错误。
计算方法
  将圈复杂度图中的结构化部分简化成一个点,计算简化以后流程图的圈复杂度就是基本复杂度。
优点
  衡量非结构化程度;反映代码的质量;预测代码维护量,辅助模块划分;与所用的高级程序设计语言类型无关。
应用
  当基本复杂度为1,这个模块是充分结构化的 ;当基本复杂度大于1而小于圈复杂度,这个模块是部分结构化的;当基本复杂度等 于圈复杂度,这个模块是完全非结构化的。

控制流图|圈复杂度|基本复杂度相关推荐

  1. 软件测试之控制流图以及环形复杂度独立路径求解问题

    首先需要明确的是,控制流图并不等于流程图,可以理解为控制流图的出现是为了后续的环形复杂度的计算和写出独立路径和配以相应的测试用例. 所以控制流图是核心,画图的时候务必谨慎再谨慎,要不然可能你后面的全部 ...

  2. MG996R舵机180度与360度驱动,ULN2003A步进电机驱动,触控开关控制

    产品类型:MG996R舵机 产品扭矩:9kg/cm(4.8V),11kg/cm(6V) 产品速度:0.19秒/60°(4.8V),0.18秒/60°(6V)   #0.19/60=0.0032s/度 ...

  3. xps 9360 8250U 过热死机,CPU散热解决方案,日常温度直降30度 ,从 75 度 到  45度。

    戴尔2006年正式发售的第一款 XPS 笔记本,名为 XPS M1710 系列,它拥有 17 英寸全高清显示屏.Intel Core Duo(Yonah) T2400(1.83G)处理器最高主频 18 ...

  4. 3度带6度带区别、中央经线及带号的计算

    3度带6度带区别.中央经线及带号的计算 1.基本概况 选择投影的目的在于使所选投影的性质.特点适合于地图的用途,同时考虑地图在图廓范围内变形较小而且变形分布均匀.海域使用的地图多采用保角投影,因其能保 ...

  5. 关联规则概念、啤酒加尿布引出购物篮分析、频繁项集、支持度+置信度+提升度

    关联规则概念.啤酒加尿布引出购物篮分析.频繁项集.支持度+置信度+提升度 目录

  6. LSTM模型在问答系统中的应用 2017-06-27 21:03 在问答系统的应用中,用户输入一个问题,系统需要根据问题去寻找最合适的答案。 1:采用句子相似度的方式。根据问题的字面相似度选择相似度最

    LSTM模型在问答系统中的应用 2017-06-27 21:03 在问答系统的应用中,用户输入一个问题,系统需要根据问题去寻找最合适的答案. 1:采用句子相似度的方式.根据问题的字面相似度选择相似度最 ...

  7. halcon知识:圆度和紧凑度

    一.说明 本文是halcon知识:select_shape究竟怎么用(1)的继续,关于select_shape的用途说的还不够,因为这些属性很多,有必要分开介绍. 二.圆度和紧凑度的直观演示 2.1 ...

  8. lisp如何将度分秒转换为弧度_地学中常用度、度分、度分秒,弧度、角度在MATLAB中的转换...

    地学中常用度.度分.度分秒,弧度.角度在MATLAB中的转换 转化为角度: deg = DMS2DEG(35,20,10) deg = 35.3361 转化为弧度 rad=DMS2RAD(35,20, ...

  9. java cfg_如何使用antlr生成Java CFG(控制流图)?

    AFAIK,ANTLR在构建控制流图时没有提供任何具体帮助. 您可以通过遍历AST自己构建一个,并收集操作(无条件语句)和条件(表达式节点控制条件)的知识,并根据该信息组合图形.请注意,switch语 ...

最新文章

  1. vmstat参数解释
  2. matlab基于dct的图像压缩编码解码_基于FPGA的扩频系统设计(下)
  3. Chrome浏览器不支持字体小于12px的解决办法
  4. MYsql:net start mysql 失败 发生系统错误5
  5. 设计模式学习笔记-基础知识篇
  6. 【华为云技术分享】Mind Studio Docker镜像部署分享
  7. python面向对象遇见问题
  8. mysql 无限级分类实现思路
  9. 【自然框架】稳定版的Demo —— 三:主从表的维护方式
  10. 【算法】牛顿迭代法求平方根及多次方根
  11. idea社区版和企业版区别_idea 社区版开发 springboot及问题
  12. C/C++中va_start/va_arg/va_end函数源码文件位置及实现原理
  13. HP iLO There are pending changes that may not take effect until ILO is reset
  14. A53内核板卡,平板电脑、电视盒子完美方案
  15. js实现简易HTML动画-----手翻书版
  16. 测试工程师-入门指南
  17. Socks代理上网工具 tsocks
  18. activemq官方文档分析
  19. 利用MATLAB理解常见概率分布
  20. php导航收录源码,PHP最新响应式自动收录自带查反链导航源码

热门文章

  1. android.graphics.drawable.Drawable.Callback回调接口
  2. Fragment 和 FragmentActivity的使用(二)
  3. Redis 服务器安装
  4. fonts.conf
  5. 使用React搭建初始化环境(React入门)
  6. 2015 EC L - Multiplication Table
  7. Apple 如何知道你使用了私有API
  8. Git - 操作指南
  9. 修改linux系统时间的方法(date命令)
  10. iOS开发拓展篇—CoreLocation地理编码