McCabe度量法

2023-11-15

概论:


McCabe度量法是由 托马斯·麦克凯 提出的一种基于程序控制流的复杂性度量方法。又称环路度量,循环复杂度(Cyclomatic complexity), 也称为条件复杂度或圈复杂度,是一种软件度量。它认为程序的复杂性很大程度上取决于程序图的复杂性。单一的顺序结构最为简单,循环和选择所构成的环路越多,程序就越复杂。

McCabe度量法以图论为工具,先画出程序图,然后用该图的环路数作为程序复杂性的度量值。程序图是退化的程序流程图。也就是说,把程序流程图的每一个处理符号都退化成一个结点,原来连接不同处理符号的流线变成连接不同结点的有向弧,这样得到的有向图就叫做程序图。

根据图论,在一个强连通的有向图G中,环的个数V(G)由以下公式给出:


其中,V(G)是有向图G中环路数,m是图G中弧数,n是图G中结点数,p是图G中强连通分量个数。在一个程序中,从程序图的入口点总能到达图中任何一个结点,因此,程序总是连通的,但不是强连通的。为了使图成为强连通图,从图的出口点到入口点加一条用虚线表示的有向边,使图成为强连通图。这样就可以使用上式计算环路复杂性了。


有的也有用E来代表图G中弧数,即




例题:


例1

采用McCabe度量法计算下图所示程序的环路复杂性为( )


alt

A.1   B.2   C.3   D.4  

解:

环形复杂度 ,其中,E是流图中边的条数,M是结点数。

即 V(G) = 11-10+2 = 3




例2

下图用 白盒测试 方法进行测试,图中有( )条路径。采用McCabe度量计算该程序图的环路复杂性为( )


alt

问题1 选项 A.3   B.4   C.5   D.6  

问题2 选项 A.3   B.4   C.5   D.6  

解:

将所有结点标注序号,根据图示,可以找到不同的路径共4条:

1-2-3-11;
1-2-3-4-5-6-10-11;
1-2-3-4-5-7-9-10-11;
1-2-3-4-5-7-8-9-10-11。

第一空选择B选项。

alt

根据环路复杂度计算公式 ,第二空选择B选项。




例3

对下图所示的程序流程图进行判定 覆盖测试,则至少需要( )个测试用例。采用 McCabe度量法计算其环路复杂度为( )。


alt

问题1选项 A.2   B.3   C.4   D.5  

问题2选项 A.2   B.3   C.4   D.5  


解:

判定覆盖是设计足够多的测试用例,使得程序中的每一个判断至少获得一次“真”和一次“假”,即使得程序流程图中的每一个真假分支至少被执行一次。根据题意,只需2个测试用例即可;


根据环路复杂度的计算公式


判定覆盖(分支覆盖)

判定覆盖与条件覆盖的区别

软件测试中条件覆盖,路径覆盖,语句覆盖,分支覆盖的区别




例4

对下图所示流程图采用白盒测试方法进行测试,若要满足路径覆盖,则至少需要( )个测试用例。采用McCabe度量法计算该程序的环路复杂性为( )


alt

问题1选项 A.3  B.4  C.6  D.8 


问题2选项 A.1  B.2  C.3  D.4 


解:

问题1考查白盒测试路径覆盖:覆盖所有可能的路径。

根据流程图,若要覆盖所有可能路径,对于a的取值需要a=0,a<0,a>0三种用例,而对于i的取值需要i>0和i<=0两种用例,排列组合,共需要6组用测才能覆盖所有可能的路径。


问题2对于环形复杂度计算,根据公式 ,其中,E是流图中边的条数,N是结点数。





例5

采用McCabe度量法计算下列程序图的环路复杂性为( )


alt

问题1选项

A.2  B.3  C.4  D.5 


解:

McCabe度量法先画出程序图,然后采用公式V(G)=m-n+2计算环路复杂度,其中m是有向弧的数量,n是结点的数量。


10-8+2=4。



例6

对以下的程序伪代码(用缩进表示程序块)进行路径覆盖测试,至少需要( )个测试用例。采用McCabe度量法计算其环路复杂度为( )。


alt

问题1选项

A.2  B.4  C.6  D.8 


问题2选项 A.2  B.3  C.4  D.5 


对于本题,用例(x,y,z)分别为(1,1,0)(1,-1,0)(-1,0,1)(-1,0,-1),这4个测试用例可以走完所有可能路径。因为在伪代码中,我们可以看到,当x>0时,只需要对Y分别取大于0和不大于0的值即可,z不参与比较;当x不大于0时,只需要对z分别取大于0和不大于0的值即可,y不参与比较,只需要4个用例即可。


对于第二空,转换为结点图如下:

alt

 根据 ,其中m是有向图的弧,为15,n为有向图的节点数,为13,15-13+2=4,即环路复杂的为4。




例7

下图所示的程序流程图中有(  )条不同的简单路径。采用McCabe度量法计算该程序图的环路复杂性为(  )


alt

问题1选项

A.3  B.4  C.5  D.6 


问题2选项

A.3  B.4  C.5  D.6 


解:

环形复杂度定量度量程序的逻辑复杂度。描绘程序控制流的流图之后,可以用下述3种方法中的任何一种来计算环形复杂度。

(1)流图中的区域数等于环形复杂度。
(2)流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。
(3)流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。
这种环路度量法,计算的思路是这样的:它是考虑控制的复杂程度,即条件选择的分支繁杂程度。
图中有3次简单的判断。故3条简单路径,形成3块环形区域,区域复杂度为3



例8

软件的复杂性主要体现在程序的复杂性。(  )是度量软件复杂性的一个主要参数。若采用McCabe度量法计算环路复杂性,则对于下图所示的程序图,其环路复杂度为(  )。

alt

问题1选项

A.代码行数  B.常量的数量  C.变量的数量  D.调用的库函数的数量 


问题2选项

A.2  B.3  C.4  D.5 


解:

代码行数度量法以程序的总代码行数作为程序复杂性的度量值。


McCabe度量法先画出程序图,然后采用公式 计算环路复杂度,其中m是有向弧的数量,n是结点的数量。在本题中,结点数为9,弧为11,所以环路复杂度为11-9+2=4。




alt



参考:

McCabe度量方法计算程序复杂度

希赛题库

本文由 mdnice 多平台发布

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

McCabe度量法 的相关文章

  • git使用问题

    1 windows 7专业版使用sourceTree拉取代码的问题 之前一直用的好好的 今天拉不了代码了 错误如下 git c diff mnemonicprefix false c core quotepath false fetch o
  • jsp+servlet实现的简单登录验证

    jsp servlet连接数据库的登录验证 1 打开IDEA 新建login jsp文件

随机推荐

  • springboot图片验证码

    前言 大家好 我是小小 今天我们用五分钟来用springboot实现我们常用的图形验证码功能模块 用户登录几乎是一个线上系统必不可少且使用相对比较频繁的一个模块 为了防止恶意暴力尝试 防止洪水攻击 防止脚本自动提交等 验证码是一个较为便捷且
  • 二十、待机唤醒实验

    目录 一 stm32的三种低功耗模式 二 寄存器的介绍 1 电源控制寄存器 PWR CR 2 电源控制 状态寄存器 PWR CSR 三 库函数配置的具体步骤 1 使能电源时钟 2 设置 WK UP 引脚作为唤醒源 3 设置 SLEEPDEE
  • C++错误解决:double free or corruption (out): 0x00000000011abe70 ***

    前言 博主最近疯狂的迷恋上了leetcode刷题 想要锻炼脑力和算法思想的 推荐去这个网站上刷题 因为是用c 编写的 而且提交的时候会经常遇到一些报错 比如题目的这个 好了 下面开始解答 错误信息 double free or corrup
  • 总结:printf打印时需要的格式字符(占位符)

    在C语言中 printf有许多不同的打印格式 这些格式都是我们需要去了解的 下面我将简单讲解一下需要打印不同的类型时 后面需要加的字母 打印int类型十进制整数 d 打要short类型的整数 h 也可以加l和ll组成 lh和 llh 打印l
  • “阿里爸爸”最新产出:Java面试突击核心讲(1658页),转载40W+

    现在的互联网开发岗招聘 程序员面试背八股文已经成为了不可逆转的形式 其中一个Java岗几百人在投简历也已经成为了常态 更何况一份面试题动辄七八百道 你吃透了 技术只要不是很差 面试怎么可能有大问题 但是也有尴尬的情况发生 面试八股文背的特别
  • SSM三层架构之间整合

    一 前言 之前学习ssm框架的时候都是每个框架独立分散的系统性学习 对于框架的整体 总结效果不太好 后来看了黑马视频教程有个老师的思路给了我比较大的启发 以spring为中心 去整合springmvc mybatis 无论是搭建环境 还是理
  • zabbix配置文件(zabbix_agentd.conf、zabbix_server.conf)

    文章目录 一 etc zabbix zabbix server conf 二 etc zabbix zabbix agentd conf 一 etc zabbix zabbix server conf 基本配置段 ListenPort 10
  • 时间序列预测--基于CNN的股价预测

    最近应一位读金融学朋友的求助 正好最近任务不忙 决定花小半天的时间帮他写一份有关股价预测的代码 也当作给自己练练手了 于是想把这个过程记录下来 希望可以帮助到像我一样的小白 一 数据集 1 数据分析 首先 先看看数据集长什么样 这是最简单的
  • Archery- SQL审核查询平台告警通知设置

    邮箱通知 进入系统管理 配置项管理 工单通知分类里面 ARCHERY BASE URL 平台地址 告警通知的时候可以点此链接跳转 访问审核sql详情页 DDL NOTIFY AUTH GROUP DDL工单通知权限组名 对应权限组管理页面的
  • 王佑镁等|“阿拉丁神灯”还是“潘多拉魔盒”:ChatGPT教育应用的潜能与风险...

    点击上方蓝色文字关注我们 作者简介 王佑镁 博士 教授 博士生导师 温州大学大数据与智慧教育研究中心主任 浙江温州 325035 王旦 梁炜怡 硕士研究生 温州大学教育学院教育技术系 浙江温州 325035 柳晨晨 博士 副教授 温州大学教
  • [Vue warn]: Error in nextTick: "TypeError: Right-hand side of 'instanceo

    报错如下 原因 props 中出传来的默认值给的是具体的字符串 解决办法 将具体字符串变成String 类型 解决根据 验证传入的 props 参数的数据规格 如果不符合数据规格 Vue 会发出警告 能判断的所有种类 也就是 type 值
  • [博文精选] 怎样向妻子解释MapReduce

    http www csdn net article 2011 08 26 303688 摘要 印度Java程序员Shekhar Gulati在自己的博客发表了How I explained MapReduce to my Wife 一文 比
  • Boot Loader之Grub

    配置文件 boot grub grub conf etc grub conf 详解 default 0 设定默认启动的内核 timeout 5 默认的超时时间 单位是秒 如果超时就会启动默认的内核 在超时时间内可以按键 e 进入grub菜单
  • 修改Vue网页标题和图标文档

    修改Vue网页标题和图标文档 修改图标 1 找到public文件夹 与src文件同级的文件夹 2 在这个文件夹中找到favicon ico 这就是页面标题图标文件 3 把需要修改的文件放到这里面 注意 这里需要时ico文件 可以去网上搜一下
  • c高级 day2

    写一个1 sh脚本 将以下内容放到脚本中 在家目录下创建目录文件 dir 在dir下创建dir1和dir2 把当前目录下的所有文件拷贝到dir1中 把当前目录下的所有脚本文件拷贝到dir2中把dir2打包并压缩为dir2 tar xz 再把
  • window11 安装Docker Desktop错误及解决办法

    Docker Desktop Requires log out You need to log out of windows Then your docker users membership will be taken into acco
  • wlan-cloud-ucentral docker 服务器部署

    第一步 docker io安装 先卸载 sudo apt get remove docker docker engine docker io containerd runc 后安装 sudo apt install docker io 第二
  • groupdel: cannot remove the primary group of user 'lxh1'的解决办法

    故障现象 用groupdel删除test组时 报以上错误 原因为test组中有lxh1用户 lxh1的主组 解决办法 更改lxh1的主组后即可删除 1 2 3 4 5 6 7 8
  • yml配置map map<string,list>

    java Configuration PropertySource value classpath application yml encoding utf 8 ConfigurationProperties prefix mapvule
  • McCabe度量法

    概论 McCabe度量法是由 托马斯 麦克凯 提出的一种基于程序控制流的复杂性度量方法 又称环路度量 循环复杂度 Cyclomatic complexity 也称为条件复杂度或圈复杂度 是一种软件度量 它认为程序的复杂性很大程度上取决于程序