精华内容
下载资源
问答
  • 控制流图|圈复杂度基本复杂度

    千次阅读 2015-02-02 23:43:16
    McCabe复杂度包括圈复杂度(Cyclomatic complexity)、基本复杂度、模块涉及复杂度、设计复杂度和集成复杂度等。控制流程图分析是一个静态的分析过程,它提供静态的度量标准技术,一般主要运用在白盒测试的方法中。

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

    控制流图是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而小于圈复杂度,这个模块是部分结构化的;当基本复杂度等于圈复杂度,这个模块是完全非结构化的。 
    展开全文
  • 下载 在 Plugins 搜索 MetricsReload 并下载,重启IDEA ...因此,基本复杂度高意味着非结构化程度高,难以模块化维护。实际上,消除了一个错误有时会引起其他的错误。 iv(G) 模块设计复杂度是用来衡量

    圈复杂度

    圈复杂度(Cyclomatic Complexity)是衡量计算机程序复杂程度的一种措施。它根据程序从开始到结束的线性独立路径的数量计算得来的。

    圈复杂度越高,代码就越难复杂难维护优化

    • 从1开始,一直往下通过程序
    • 一但遇到以下关键字,或者其它同类的词,就加1:if,while,repeat,for,and,or
    • 给case语句中的每一种情况都加1

    if (obj == null) 复杂度为 1
    if (obj == null || obj1 == null) 复杂度为2

    下载

    在 Plugins 搜索 MetricsReload 并下载,重启IDEA
    在这里插入图片描述

    使用

    • 右键 - Analyze - Calculate Metrics
      在这里插入图片描述

    • 选择要分析的文件,选Complexity metrics
      在这里插入图片描述

    • 分析结果如下:
      在这里插入图片描述

    • ev(G) 基本复杂度是用来衡量程序非结构化程度的,非结构成分降低了程序的质量,增加了代码的维护难度,使程序难于理解。因此,基本复杂度高意味着非结构化程度高,难以模块化和维护。实际上,消除了一个错误有时会引起其他的错误。

    • iv(G) 模块设计复杂度是用来衡量模块判定结构,即模块和其他模块的调用关系。软件模块设计复杂度高意味模块耦合度高,这将导致模块难于隔离、维护和复用。模块设计复杂度是从模块流程图中移去那些不包含调用子模块的判定和循环结构后得出的圈复杂度,因此模块设计复杂度不能大于圈复杂度,通常是远小于圈复杂度。

    • v(G) 是用来衡量一个模块判定结构的复杂程度,数量上表现为独立路径的条数,即合理的预防错误所需测试的最少路径条数,圈复杂度大说明程序代码可能质量低且难于测试和维护,经验表明,程序的可能错误和高的圈复杂度有着很大关系。

    展开全文
  • vs2017 圈复杂度 2017年, Opensource.com的作者探讨了多个知识产权领域(包括商标,开源许可合规性)中不断变化的法律前景。 而且版权纠纷仍然是许多人关注的问题,因此,我们最常阅读的文章回答了有关Patrick ...

    vs2017 圈复杂度

    2017年, Opensource.com的作者探讨了多个知识产权领域(包括商标,开源许可和合规性)中不断变化的法律前景。 而且版权纠纷仍然是许多人关注的问题,因此,我们最常阅读的文章回答了有关Patrick McHardy和版权暴利的一些问题也就不足为奇了。

    其他广泛阅读的文章侧重于基本的开源许可主题,例如每个技术人员应了解的知识以及针对初创企业的开源许可管理规则 更多的哲学作品也引起了读者的注意,涵盖了从经济高效的开放源代码许可合规性自由软件 开源软件之间区别以及 自由与自由 之间差异

    最后,我们对Facebook提出的特定许可证有一些React,既批评了它的React许可证,争论我们不要过度React

    展望2018年,可以肯定的是一切都不确定。 随着世界继续拥抱开源,围绕它的法律问题无疑将继续变得有趣而复杂。

    2017年最重要的开源法律文章:

    1. 帕特里克·麦克哈迪(Patrick McHardy)和版权暴利
    2. 开源许可:每个技术人员应了解的知识
    3. 我们不是免费提供软件,而是免费提供软件
    4. 9个针对初创企业的开源许可证管理规则
    5. Facebook React许可错误的5个原因
    6. 经济高效的开源软件许可合规模型
    7. 开源软件和自由软件之间有什么区别?
    8. 欧洲承诺支持开源政府解决方案
    9. 不要对Facebook专利许可过度React
    10. 揭露有雾的GPL许可证

    翻译自: https://opensource.com/article/17/12/best-legal

    vs2017 圈复杂度

    展开全文
  • McCabe复杂度包括圈复杂度(Cyclomatic complexity)、基本复杂度、模块涉及复杂度、设计复杂度和集成复杂度等。控制流程图分析是一个静态的分析过程,它提供静态的度量标准技术,一般主要运用在白盒测试的方法中。 ...

    控制流图是McCabe复杂度计算的基础,McCabe度量标准是将软件的流程图转化为有向图,然后以图论的知识和计算方法来衡量软件的质量。McCabe复杂度包括圈复杂度(Cyclomatic complexity)、基本复杂度、模块涉及复杂度、设计复杂度和集成复杂度等。控制流程图分析是一个静态的分析过程,它提供静态的度量标准技术,一般主要运用在白盒测试的方法中。
    {(]9FZ*N4U0    控制流图的一个重要性质是它的可规约性(reducibility)。如果程序中不存在从循环外跳到循环内的goto语句,那么这个程序对应的控制流图是可规约的(reducible),反之这个控制流图就是不可规约的(irreducible)。因此,模块符合结构化程序设计的准则是控制流图可规约的基础。
    1m(A D:`0^,}g0    程序环路复杂性也即为McCabe复杂性度量,它一般常用圈复杂度来描述,记录为V(G)。它用来衡量一个程序模块所包含的判定结构的复杂程度,数量上表现为独立路径的条数,即合理地预防错误所需测试的最少路径条数,圈复杂度大的程序,说明其代码可能质量低且难于测试和维护。经验表明,程序的可能存在的Bug数和圈复杂度有着很大的相关性。51Testing软件测试网#sJy w*N7h
        圈复杂度的计算方法很简单,计算公式为:V(G)=e-n+2。其中,e表示控制流图中边的数量,n表示控制流图中节点的数量。其实,圈复杂度的计算还有更直观的方法,因为圈复杂度所反映的是“判定条件”的数量,所以圈复杂度实际上就是等于判定节点的数量再加上1,也即控制流图的区域数,对应的计算公式为:V(G)=区域数=判定节点数+151Testing软件测试网a5L%?7@Y.n:|5f%m#b"G
        对于多分支的CASE结构或IF-ELSEIF-ELSE结构,统计判定节点的个数时需要特别注意一点,要求必须统计全部实际的判定节点数,也即每个ELSEIF语句,以及每个CASE语句,都应该算为一个判定节点。判定节点在模块的控制流图中很容易被识别出来,所以,针对程序的控制流图计算圈复杂度V(G)时,最好还是采用第一个公式,也即V(G)=e-n+2;而针对模块的控制流图时,可以直接统计判定节点数,这样更为简单。51Testing软件测试网#bvj!G^ u3I"f9E,K

    展开全文
  • 软件复杂度评价

    千次阅读 2015-12-30 10:16:12
    在应用软件和嵌入式产品(包括硬件、嵌入式软件)的可靠性设计中,有一条基本原则就是“简单可靠”。分析软件复杂度,可以支持对软件的质量检查、应用分析、以及评估后续...可以用圈复杂度对软件的复杂度和质量进行衡
  • seek D、writetext4、关于算法的描述,以下选项中错误的是 ( B )A、算法是指解题方案的准确而完整的描述B、算法的复杂度主要包括时间复杂度和数据复杂度C、算法具有可行性、确定性、有穷性的基本特征D、算法的基本...
  • 算法-floyd判环()算法

    千次阅读 多人点赞 2017-07-03 17:56:44
    此算法又成为龟兔赛跑算法,基本思想是:好比两个人在赛跑,A的速度快,B的速度慢,经过一定时间后,A总是会B相遇,且相遇时A跑过的总距离减去B跑过的总距离一定是长的n倍(初中数学题……)。弗洛伊德(Floy
  • 1、题目描述 给定一个包含n + 1 个整数的数组nums,其数字都在 1 到 n之间(包括 1 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找...基本思想:快慢指针,Floyd判算法,时间复杂度O(n)空间复...
  • 现在软件市场已经形成一定的规模,系统架构的复杂度也越来越高(例如有单体架构,分布式架构,微服务架构)。软件的整个架构体系正在发生很大变化,在这种变化中,企业现在更注重技术的开箱即用,更注重技术在生态...
  • 软件开发基本流程

    2013-03-17 19:11:46
    开发人员在开发代码的时候,要注意编程规范、代码整体风格、圈复杂度、深度、可测性、可维护性 第三步:代码单元测试 单元测试主要是函数级别,可以用行业的一些工具,比如谷歌的gtest 第四歩:代码检视,即代码...
  • oo第一单元总结

    2019-03-27 00:23:00
    oo第一单元总结 一.基于度量来分析自己的程序结构 1.第一次作业 ...基本复杂度为1,说明代码是结构化的,但圈复杂度和模块设计复杂度都非常高,说明程序分支多,质量低,模块间耦合度高,模块难以隔离维护...
  • 程序的属性

    2017-07-24 11:54:10
    为了全面方便的描述一个程序,我们定义了以下属性。 1、功能完整性:程序满足合理需求的反应。 2、强壮型 : 程序面对不合理... 5、可测试性: 这个和圈复杂度的关系特别大,基本圈复杂度决定。 6、可移植...
  • 【OO】第一单元作业-表达式求导总结分析 第一次作业 ...前言:作为之前完全没有接触过“面向对象”设计理念的...度量分析:在main方法中,我的基本复杂度,模块设计复杂度和圈复杂度都比较高。 第一次作业的...
  • 基本排序算法复习

    2014-03-20 12:52:45
    排序算法: 1、冒泡排序 ...双层循环,内层循环一得出一个最小(最大...循环交换复杂度均为n*n。 for(int i=0;i {  for(int j=i+1;j  {  int temp;  if(src[i]>src[j])  {  temp=src[j];  sr
  • 本篇内容包含 排序的介绍 ...第一次:从底部有一个气泡,住12并且35对比,如果比上面小就交换,气泡往上升 第二次:1299对比,如果比上面小就交换,气泡往上升 第三次:重复上面的操作,最后可以把12
  • 函数的圈复杂度:初始值为1,只要遇到if,while,for等等语句复杂度加1,不论是分支还是内嵌都是加1. 可执行的代码行:这个是源代码经过格式化之后的代码行,除去声明语句之后。所谓的格式例如:int a,b;处理之后...
  • OO第二次随笔

    2018-05-01 21:41:00
    一、第五次作业 1.类图  因为这次的电梯要求模拟真实时间运行,而之前我都是通过时间的运算来判断同质捎带的,所以之前的...度量上看,我的圈复杂度和嵌套深度日常红,看来我得好好研究一下怎样才能不嵌套那...
  • 【unordered_set 只提供单向迭代器 + insert/find/erase用法(平均圈复杂度1)】 【STL里面的五种迭代器】 【unordered_set原型及基本操作】 【set 与 unordered_set区别: 导入】 c++std中set与unordered_set...
  • 6.2.3 有向无图的拓扑排序 283 6.2.4 应用——全排序 290 6.3 有向图的强连通分支 292 6.3.1 算法描述与分析 292 6.3.2 程序实现 295 6.3.3 应用——亲情号 300 6.4 无向图的双连通分支 303 6.4.1 算法描述与分析 ...
  •   Floyd判算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm)。可用于判定链表、迭代函数、有限状态机中是否有环。如果有环,可以找出环的起点,求出环的长度。   基本...
  •  (3) 两种基本要素:对数据对象的运算操作、算法的控制结构(运算操作时问的顺序)。  (4) 设计的基本方法:列举法、归纳法、递推法、递归法、减半递推技术回溯法。  2.算法的复杂度  
  • 常用数据结构与算法

    2017-10-17 00:08:45
    本篇内容包含 排序的介绍排序的C的实现排序的Java的实现排序的时间复杂度的计算 ...第一次:从底部有一个气泡,住12并且35对比,如果比上面小就交换,气泡往上升第二次:1299对比,如果比上面小就
  • 涉及的内容是基本的数据结构。在日本,晚上没事安排@…@,时间还是充足的...,于是自己整理下本系列知识点的上章内容。 <p><img alt="moiunt-Fuji" src=...
  • 约瑟夫环问题

    2015-09-14 16:54:32
    约瑟夫环问题:有编号从1...包括一些基本的解法一些优化的算法。 基本解法一: 这个方法比较直观,就是使用循环列表来模拟约瑟夫环。但是复杂度比较高,为O(m*n)  具体的代码如下: /*  * ==
  • 在上次打劫完一条街道之后房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到...
  • 博弈论2(扩展型博弈)

    千次阅读 2020-08-28 08:11:39
    考虑一个两个人的回合制小游戏,圆圈叉叉连成一条线。 博弈问题可以转换成一个搜索问题。 一个标准(基本)的博弈树如下: Max希望收益越大,Min希望收益最小 Max纯策略 树的高度为h,Max做决策只有hhh/222步...

空空如也

空空如也

1 2
收藏数 38
精华内容 15
关键字:

圈复杂度和基本圈复杂度