圈复杂度

一、现象

1. 代码设计不规范。

当项目规模达到一定的程度,比如达到十万行的代码量。那么项目肯定存在有些类特别大,方法特别多、特别长。

以上因素会导致什么后果呢?

  • 一个类没有做到单一指责,后期对这个类改动会导致其他功能出现Bug。
  • 代码阅读性较差,维护困难。

2. 没有一个准确的标准去衡量代码结构复杂的程度。

各个公司都会有自己的规范,但是开发中很少人能够去完全遵循规范。而且没有一个明确的标准去衡量代码的复杂程度,而且人工去检测代码的复杂程度是很繁琐的。因此我们急需一个标准去检测代码结构复杂的程度,而圈复杂度这个技术就能够很好的去衡量代码的复杂程度。

二、圈复杂度的定义

圈复杂度是用来衡量一个模块判定结构的复杂程度,数量上表现为独立路径的条数。而独立路径就是在控制流程图中从起点到终点的一条回路。
1.1 控制流图(CFG, Control flow graph)也叫控制流程图。是一个过程或程序的抽象表现。常以数据结构链的形式表示。

圈复杂度高在代码中的表现形式:在一段代码中含有很多的 if / else 语句或者其他的判定语句(if / else , switch / case , for , while , | | , ? , …)。

详细:传送门

时间: 2024-10-08 16:53:37

圈复杂度的相关文章

基于Table方法降低代码圈复杂度

描述: 在项目开发过程中,经常要求圈复杂度不能超过10,有时候写着写着圈复杂度就很大,我在项目代码中见过函数圈复杂度大于100的函数,由于历史的原因,代码越积越多,没人出去重构,导致后面很难懂和维护,所以在编码初期就应该在心中有个要求,就是圈复杂度不能超过10,如果超过10,肯定是代码逻辑写的过于复杂,要回过头来 想想怎么去分解功能,让流程简单易懂. 本文主要通过一些例子来介绍基于Table方式降低圈复杂度的过程. 例子1:一个简单的游戏控制函数 你可能会遇到如下类似的代码: if(strcmp

C语言switch/case圈复杂度优化重构

软件重构是改善代码可读性.可扩展性.可维护性等目的的常见技术手段.圈复杂度作为一项软件质量度量指标,能从一定程度上反映这些内部质量需求(当然并不是全部),所以圈复杂度往往被很多项目采用作为软件质量的度量指标之一. C语言开发的项目中,switch/case代码块是一个很容易造成圈复杂度超标的语言特性,所以本文主要介绍下降低switch代码段的重构手段(如下图).switch圈复杂度优化重构可分为两部分:程序块的重构和case的重构.程序块重构是对代码的局部优化,而case重构是对代码的整体设计,

圈复杂度(Cyclomatic Complexity)

圈复杂度(Cyclomatic Complexity)是很常用的一种度量软件代码复杂程度的标准.这里所指的"代码复杂程度"并非软件内在业务逻辑的复杂程度,而是指代码的实现方式的 复杂程度.说起来有点绕是么?打个比方就是嘴笨的人可以把简单的事情说得很复杂.虽然"内在业务逻辑"与"实现方式"有紧密的联系,有很多研究统计指出, 圈复杂度高的代码中错误的可能性更大,维护的成本更高. 它的计算方法很简单,计算公式为:V(G)=e-n+2.其中,e表示控制流

圈复杂度(Cyclomatic Complexity)-转

圈复杂度(Cyclomatic Complexity)是一种代码复杂度的衡量标准.它可以用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,也可理解为覆盖所有的可能情况最少使用的测试用例数.圈复杂度大说明程序代码的判断逻辑复杂,可能质量低且难于测试和维护.程序的可能错误和高的圈复杂度有着很大关系. 下面这个实例中,单元测试的覆盖率可以达到100%,但是很容易发现这其中已经漏掉了一个NPE的测试用例.case1方法的圈复杂度为2,因此至少需要2个用例才能完全覆盖到其所有的可能情况.

圈复杂度和McCabe

[书名]:软件架构--Python语言实现 [主题]:圈复杂度 [摘要]:圈复杂度(Cyclomatic Complexity)是衡量计算机程序复杂程度的一种措施.它根据程序从开始到结束的线性独立路径的数量计算得来的.在 Python 中可以使用 mccabe 包测量程序的圈复杂度. 1 圈复杂度 对于没有任何分支的代码,它的圈复杂度为 1 ,意味着代码只有一条路径.例如下面的函数: 1 2 3 def (a, b): return a + b 对于有一条分支的代码,它的圈复杂度为 2 ,比如下

前端代码质量-圈复杂度原理和实践

写程序时时刻记着,这个将来要维护你写的程序的人是一个有严重倾向,并且知道你住在哪里的精神变态者. 导读你们是否也有过下面的想法? 重构一个项目还不如新开发一个项目...这代码是谁写的,我真想...你们的项目中是否也存在下面的问题? 单个项目也越来越庞大,团队成员代码风格不一致,无法对整体的代码质量做全面的掌控没有一个准确的标准去衡量代码结构复杂的程度,无法量化一个项目的代码质量重构代码后无法立即量化重构后代码质量是否提升针对上面的问题,本文的主角 圈复杂度 重磅登场,本文将从圈复杂度原理出发,介

【软件测试】圈复杂度

圈复杂度:在软件测试的概念里,它用来衡量一个模块判定结构的复杂程度,数量上表现为线性无关的路径条数,即 合理的预防错误所需测试的最少路径条数. 圈复杂度大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系. 圈复杂度的原理:(其实就是分支的个数) 圈复杂度为1,意味着代码只有一条路径. 对于有一条分支的代码,它的圈复杂度为2. 从1开始,一直往下经过程序. 一旦遇到以下关键字,或者其它同类的词,就 +1. 如 if.while.repeat.for.and

什么是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 SourceMo

软件设计的复杂度

http://blog.csdn.net/horkychen/article/details/45381743 什么是软件设计的复杂度 软件技术发展的使命之一就是控制复杂度(Complexity).从高级语言的产生,到结构化编程,再到面向对象编程.组件化编程等等.关于复杂度的定义并不一致,想要详细了解的可以读读The Many Faces of Complexity in Software Design. 英文中Complex和Complicated有着微妙的不同.但总结起来,软件复杂度偏负面意