java 圈复杂度_详解圈复杂度

article/2025/10/23 5:05:01

83aad3d6225b40aceef6bbd53b92e4af.gif

详解圈复杂度

圈复杂度概念

圈复杂度(Cyclomatic complexity,简写CC)也称为条件复杂度,是一种代码复杂度的衡量标准。由托马斯·J·麦凯布(Thomas J. McCabe, Sr.)于1976年提出,用来表示程序的复杂度,其符号为VG或是M。它可以用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,也可理解为覆盖所有的可能情况最少使用的测试用例数。圈复杂度大说明程序代码的判断逻辑复杂,可能质量低且难于测试和 维护。程序的可能错误和高的圈复杂度有着很大关系。

圈复杂度计算方法

点边计算法

86471e7c503f9692725d97c0842cee7e.png

圈复杂度的计算方法很简单,计算公式为:

V(G) = E - N + 2

其中,e表示控制流图中边的数量,n表示控制流图中节点的数量。

几个节点通过边连接。下面是典型的控制流程,如if-else,While,until和正常的流程顺序:

ff4f07bbaf601660311aaa2b7b5b2354.png

节点判定法

其实,圈复杂度的计算还有更直观的方法,因为圈复杂度所反映的是“判定条件”的数量,所以圈复杂度实际上就是等于判定节点的数量再加上1,也即控制流图的区域数,对应的计算公式为:

V (G) = P + 1

其中P为判定节点数,判定节点举例:

if语句

while语句

for语句

case语句

catch语句

and和or布尔操作

?:三元运算符

对于多分支的CASE结构或IF-ELSEIF-ELSE结构,统计判定节点的个数时需要特别注意一点,要求必须统计全部实际的判定节点数,也即每个ELSEIF语句,以及每个CASE语句,都应该算为一个判定节点。

判定节点在模块的控制流图中很容易被识别出来,所以,针对程序的控制流图计算圈复杂度V(G)时,一般采用点边计算法,也即V(G)=e-n+2;而针对模块的控制流图时,可以直接使用统计判定节点数,这样更为简单。

圈复杂度计算练习

练习1:

void sort(int * A)

{

int i=0;

int n=4;

int j = 0;

while(i < n-1)

{

j = i +1

while(j < n)

{

if (A[i] < A[j])

swap(A[i], A[j]);

}

i = i + 1

}

}

使用点边计算法绘出控制流图:

b243f615243bded83965c9e2eb71c85a.png

其圈复杂度为:V(G) = 9 - 7 + 2 = 4

练习2:

U32 find (string match){

for(auto var : list)

{

if(var == match && from != INVALID_U32) return INVALID_U32;

}

//match step1

if(session == getName() && key == getKey())

{

for (auto& kv : Map)

{

if (kv.second == last && match == kv.first)

{

return last;

}

}

}

//match step2

auto var = Map.find(match);

if(var != Map.end()&& (from != var->second)) return var->second;

//match step3

for(auto var: Map)

{

if((var.first, match) && from != var.second)

{

return var.second;

}

}

return INVALID_U32;

};

其圈复杂度为:V(G) = 1(for) + 2(if) + 2(if) + 1(for) + 2(if) + 2(if) + 1(for) + 2(if) + 1= 14

圈复杂度的意义

在缺陷成为缺陷之前捕获它们。

圈复杂度与缺陷

一般来说圈复杂度大于10的方法存在很大的出错风险。圈复杂度和缺陷个数有高度的正相关:圈复杂度最高的模块和方法,其缺陷个数也可能最多。

圈复杂度与结构化测试

此外,它还为测试设计提供很好的参考。一个好的用例设计经验是:创建数量与被测代码圈复杂度值相等的测试用例


http://chatgpt.dhexx.cn/article/FIQuS17B.shtml

相关文章

控制台图形化打印二叉树(c/c++)

二叉树作为一种常见的数据结构,我们在学习的过程中会经常用到. 当我们做课设的时候,能把二叉树图形化的打印出来无疑是一个加分项,所以今天我们就来探讨一下如何图形化的打印出二叉树来. 目录 分析阶段 如何打印 如何将数据存入打印数组 代码实现 存储结构定义 二叉树的…

C语言:围圈报数游戏

游戏规则&#xff1a;有N个人围成一圈&#xff0c;顺序排号&#xff0c;从第一个人开始1到D报数&#xff0c;&#xff0c;凡报到D的人退出圈子&#xff08;下场&#xff09;&#xff0c;问最后留下来的是原来的第几号&#xff1f; 逻辑思想&#xff1a;用布尔数组记下每个人的…

c语言 打印共九行的菱形,用C语言打印图案的几种实现方法

循环的使用 维普资讯 http://doc.xuehai.net 科技伯. 1 1 0计算机与信息技术 0 S IN E I F R TO CE C N O MA I N 20 06年第 4期 用 C语言打印图案的几种实现方法 陈莹张青锋 (口师范学院计科系河南周口周 46 0 ) 60 0 摘要&#xff1a;经过几年来在 c语言教学中的实践&#xf…

C语言实现打印简易圣诞树

C语言实现打印简易圣诞树 引言想法的诞生一棵简易的圣诞树怎么构成梯形的代码梯形的叠加做一个长方形树干 总代码及其输出的简易圣诞树 引言 各位大佬好&#xff0c;我是一名大一的学生&#xff0c;目前只学习了C语言的语法基础&#xff0c;在CSDN这个平台上将自己所学的东西记…

HTML圈c怎么打出来,一种方便固定手表的展示C圈的制作方法

本实用新型属于展示C圈技术领域&#xff0c;具体涉及一种方便固定手表的展示C圈。 背景技术&#xff1a; 展示C圈是用来展示手表的必备器材&#xff0c;展示C圈采用耐用透明展示底座&#xff0c;方便工作人员为顾客展示手表的折光度。 原有展示C圈&#xff0c;手表固定在C圈上时…

c语言圈复杂度switch,干货|C语言switch\/case圈复杂度优化重构

点击上方“中兴开发者社区”&#xff0c;关注我们 每天读一篇一线开发者原创好文 ▍作者简介 作者陈彬是一名Linux驱动开发工程师&#xff0c;对Linux内核、软件设计和敏捷有较浓厚的兴趣和长期实践经验。自从项目建立起代码质量规范和监控工具后&#xff0c;如何重构高圈复杂度…

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

软件重构是改善代码可读性、可扩展性、可维护性等目的的常见技术手段。圈复杂度作为一项软件质量度量指标,能从一定程度上反映这些内部质量需求(当然并不是全部),所以圈复杂度往往被很多项目采用作为软件质量的度量指标之一。 C语言开发的项目中,switch/case代码块是一个很容…

Excel2016打开文件后显示空白

打开文件时显示 打开后空白 解决办法:

Excel双击文件打开后是空白,再次双击才能打开

Excel双击打开文件只弹出空白页面&#xff0c;再双击才打开所需页面。 解决方案&#xff08;仅供参考&#xff09;&#xff1a;WINR -->regedit-->修改HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\command项->默认值 数值数据原值后面加上 “%1” 点击确定即可 如&…

【Windows】Excel2019打开文档显示空白且工具栏灰色无法点击

如标题&#xff0c;要想打开Excel文档&#xff0c;只能通过菜单栏操作&#xff1a;文件->打开&#xff0c;然后选择要打开的文档才能正常显示。遇到这个问题很久了&#xff0c;今天着实忍不住了&#xff0c;特记录一下解决方法。 1、查看是否隐藏 点击“视图”菜单&#x…

Excel 2016打开后显示灰色空白页解决方法

重新装了系统&#xff0c;安装上Excel2016&#xff0c;发现打开xls文件只显示一个灰色的开始页面 再次打开excel文件才显示内容&#xff0c;一直这样岂不是太繁琐&#xff1f; 找到了一个教程&#xff0c;在Excel启动选项设置一下。文件-选项-常规-启动选项&#xff0c;将应用…

解决Excel打开后灰色没有内容的问题

问题现象 双击打开的Excel文件&#xff0c;扩展名包括xls、xlsx、csv&#xff0c;如下图&#xff1a; 解决方案 1、打开注册表 快捷键Win R&#xff0c;输入regedit&#xff1a; 2、修改注册表 计算机\HKEY_CLASSES_ROOT\Excel.csv\shell\Open\command计算机\HKEY_CLA…

excel打开空白不显示内容

打开excel文档不显示文件内容&#xff0c;一片灰色 找到此文件&#xff1a;HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\command 修改 “默认” 值 修改前&#xff1a;“C:\Program Files\Microsoft Office\Root\Office16\EXCEL.EXE” /dde 修改后&#xff1a;“C:\Program F…

excel2007打开灰色空白

选项-高级 把dde项勾选掉即可&#xff0c;重启excel 转载于:https://www.cnblogs.com/gsl371-blog/p/7006957.html

excel白屏未响应_「excel打开空白」Excel 2016 打开后空白的解决方法 - seo实验室

excel打开空白 最近使用excel 2016时遇到一个这样的状况,就是双击打开一个有内容的xlsx表格后显示空白,用管理员身份打开也是一样,这里总结一下解决方法: 说明:Office 2016在安装时会默认安装在系统盘,都不给修改安装位置的机会,我的安装位置是做了修改的(修改Office 20…

Excel - 插入空白行

简单的插入一个空白行&#xff0c;只需选中一行&#xff0c;右键&#xff0c;选择插入一行即可。 如果要一次插入多个空行&#xff0c;可以按住Ctrl键&#xff0c;然后逐个选中想要插入的行&#xff0c;然后执行插入操作&#xff0c;如下所示&#xff1a; 选中张三、王五、田七…

html文件桌面图标空白,excel桌面图标空白但是能打开

本文的教程为大家分享了两种excel文件不显示图标的情况&#xff0c;以及他们对应的不显示图标的解决方法和设置. Excel文件不显示图标的第一种方式&#xff1a;图标未知 如下面的截图&#xff0c;一个Excel文档&#xff0c;在桌面上预览&#xff0c;可以看到excel文件不显示图标…

如何解决每次打开Excel2016文件都是灰色空白页,要把文件拖进去才能显示

1、打开注册表&#xff1a;开始->运行&#xff0c;输入“regedit”后&#xff0c;回车。 2、"HKEY_CLASSES_ROOT"。 3、展开root后进入找到如图所示的 sheet8->open-command;找到默认值。 4、鼠标 右键 默认值 选择更改 会出现如图所示的对话框。 5、修改这个值…

解决Excel打开后空白的问题 (页面为灰色)——实战分享

今天听到一同事说电脑意外断电后&#xff0c;重启电脑返回桌面后打开所有的Excel文档都变成空白的了&#xff0c;如下图&#xff1a; 只能通过“打开”命令来打开Excel文档。但可以正常打开word文档。。。后来经过网上搜索问题目答案&#xff0c;终于很快搜到了方法解决了以上的…

Excel 2016 打开后空白的解决方法

最近使用Excel 2016时遇到一个这样的状况&#xff0c;就是双击打开一个有内容的xlsx表格后显示空白&#xff0c;用管理员身份打开也是一样&#xff0c;这里总结一下解决方法&#xff1a; 说明&#xff1a;Office 2016在安装时会默认安装在系统盘&#xff0c;都不给修改安装位置…