圈复杂度评价及工具

转载请注明出处:http://blog.csdn.net/horkychen

圈复杂度用来评价代码复杂度,以函数为单位,数值越大表示代码的逻辑分支越多,理解起来也更复杂。圈复杂度可以成为编码及重构的重要参考指标,以指导撰写可读性高的代码。有关圈复杂度的定义,可以自行搜索。《代码大全》有如下的定义:

计算子程序中决策点数量的技术 (代码大全2,19章P458)

1.由1计数,一直往下通过程序。

2.一旦遇到以下关键字,或者其同类的词,就加1:

  if, while, repeat, for, and, or

3. 给case(switch)语句中的每一种情况都加1.

作者也给了处理复杂度度量结果的建议:

0-5:  子程序可能还不错

6-20: 得想办法简化子程序了

10+  把子程序的某一部分拆分成另一个子程序并调用它。

这些数字和策略都不是绝对的,正如作者所言至少应当视其为警示。

也有工具可以帮我们完成复杂度的统计工作:cyclo (支持C/C++)

http://maultech.com/chrislott/resources/cmetrics/

对Windows平台,可以使用MinGW编译。

使用时,指定要进行统计的文件就可以了。

时间: 2024-09-26 09:45:46

圈复杂度评价及工具的相关文章

关于圈复杂度CCN NCSS

关于软件度量中的圈复杂度   首先看两个概念:   NCSS(Non Commenting Source Statements)有效代码行,扣除注释. CCN(Cyclomatic Complexity Number),圈复杂度.1个方法的CCN值通常意味着我们需要多少个测试案例来覆盖其不同的路径.当CCN发生很大波动或者CCN很高的代码片段被变更时,意味改动引入缺陷风险高.根据资料,圈复杂度(或CC)大于10的方法存在很大的出错风险. 以下内容摘自:http://blog.csdn.net/y

程序复杂度之圈复杂度

圈复杂度(Cyclomatic complexity)也称为条件复杂度或循环复杂度,是一种软件度量,是由Thomas J. McCabe, Sr. 在 1976 年提出,用来表示程序的复杂度,其符号为 VG 或是 M.圈复杂度是对源代码中线性独立路径数的定量测量. 圈复杂度使用的程序的控制流图来计算:在图中的节点对应于程序中一组不可分割的命令[代码行],有向边连接两个可连续执行的节点:[可连续执行的两个节点:第二个节点的命令组可能在第一个节点执行后立刻开始执行].圈复杂度可以应用到独立的功能,模

圈复杂度-三元运算语句的复杂度是怎么计算的?

问题描述 三元运算语句的复杂度是怎么计算的? 装了一个sourcemonitor,看了网上的介绍三元云散符语句也包括在内,请问相关法则是什么?比如if(a || b)没搜到,多谢. 函数圈复杂度(Function Complexity):圈复杂度指示一个函数可执行路径的数目,以下语句为圈复杂度的值贡献1:if/else/for/while语句, 三元运算符语句,if/for/while判断条件中的"&&"或"||" ,switch语句,后接break

算法复杂度评价一例

问题 数据结构课堂上抛出一个问题,下面一段算法,复杂度是_______? i=1; while(i<=n) i=i*3; A. O(3n) B. O(n) C. O(n3) D. O(log3n) 意外 连叫三位同学回答,列一例外选B,让我有些吃惊.看来这是老师的问题,大家的思维没有到位. 分析及解答 所谓复杂度,是要对关键运算的次数进行计数.关键运算的次数,与问题规模有关.在这里,就是要考察循环了.关键运算是乘法,我们看执行算法中,需要多少次乘法.而问题规模呢?显然,执行多少次循环,与n的初值

什么是Cyclomatic Complexity(圈复杂度)?

  Campwood Software   SourceMonitor Version 3.5 The freeware program SourceMonitor lets you see inside your software source code to find out how much code you have and to identify the relative complexity of your modules. For example, you can use Sour

李彦宏高度评价首位女性高管

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 北京时间2008年3月21日,全球最大的中文搜索引擎百度(NASDAQ:BIDU)宣布任命李昕晢女士为公司新的首席财务官,任期从2008年3月31日起正式生效. 加入百度之前,李昕晢在全球最大的汽车信贷机构通用汽车金融服务公司北美区担任总会计师,为将通用汽车金融服务公司打造成集团内部最具盈利能力的实体做出重要贡献.更早前,李昕晢女士也曾担任中

技术债务管理以及Firefox/Chromium的债务评价

现在的软件开发是在遍地敏捷,人人讲唯快不破的时代,哪有人有时间思考代码质量,设计的质量? 哪个又不是从一堆代码中杀出血路来实现另一个功能?一个产品都存活不了几年,何必考虑什么可维护性? 我们追求进度的时候,总是要牺牲些东西,或是破坏了一些东西等着后面补.这就是技术债! 管理不好,债台高筑,即使不破产,也是要拆东墙,补西墙的玩平衡.现实是残酷的,但不影响我们抬头看看这个世界. 技术债务 技术债务(Technical Debt)这个词,我最早是从InfoQ关于Uber的一个访谈中了解到的,正好也在思

人才培养变革之道的摩托罗拉公司

要想获得成功,必须拥有适合自己特点的战略,拥有满足战略实施要求的各类流程,拥有制定流程与实施流程的人才.从这个意义上讲,决定企业成败的关键因素就是人才. 将人才培养专门化 摩托罗拉自成立之初就清醒地认识到人才的重要性,并始终如一地将人才的开发作为公司运营的重要工作之一. 早在20世纪70年代,为了应对当时的挑战,摩托罗拉公司明确地将人才的培训与培养提上了议事日程.为了配合企业科技领先的战略,成立了摩托罗拉科技中心,将专业人才的培养与复合型人才的培养结合起来. 80年代,摩托罗拉加快了人才培养的步

测试覆盖率工具--clover.net

以前上软件测试课时,看到老师演示的一个统计C语言的测试覆盖率的工具,当时就想不知道.NET下是否有同样的工具.碰巧昨天就发现了clover.net,它能帮你分析那些代码已经经过了测试. 下面是我们上的软件测试课中关于覆盖分析的一些资料: 覆盖分析是对需求的实现程度或对程序的执行程度的分析. 覆盖分析包括两部分,即基于需求的覆盖分析和基于结构的覆盖分析.基于需求的覆盖分析是分析测试用例对软件需求的覆盖程度,以证实所选的测试用例满足指定的需求覆盖准则 .基于结构的覆盖分析是分析测试用例 对被测程序的