McCabe度量法

news2024/11/27 3:56:38

概论:


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 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1023473.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《计算机视觉中的多视图几何》笔记(5)

5 Algorithm Evaluation and Error Analysis 本章主要讲述对算法的验证和误差分析。 概述了两种计算这种不确定性&#xff08;协方差&#xff09;的方法。第一个基于线性近似值&#xff0c;涉及串联各种雅各布表达式&#xff0c;第二个是更容易实施蒙特卡洛方法。 文章目录 …

Soft-Serve小巧强大-轻量级Git服务

文章目录 前言一、Soft-Serve官方解释&#xff1a;我的要求 二、使用步骤我的环境公钥、私钥生成安装镜像参数解释&#xff1a; 配置config.yamlconfig 实操创建用户及绑定公钥创建代码仓库及添加合作者之后就是 git 基本操作了 总结 前言 用过 Gitlab, 也挺好用。 遇到几个问…

固定资产管理系统的作用有哪些

固定资产管理系统的功效原因很多。  它帮助企业更好地管理其固定资金&#xff0c;包括设备的采购、维护、更新和损坏。根据系统管理计划&#xff0c;企业可以更有效地节约成本&#xff0c;提高效率&#xff0c;降低风险。  资产管理系统可以实现企业资产共享与合作应用。在…

「聊设计模式」之中介者模式(Mediator)

&#x1f3c6;本文收录于《聊设计模式》专栏&#xff0c;专门攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎持续关注&&收藏&&订阅&#xff01; 前言 在软件开发过程中&#xff0c;我们通常会遇到一个问题&…

北邮22级信通院数电:Verilog-FPGA(2)modelsim北邮信通专属下载、破解教程

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 1.下载 2.解压打开 3.modelsim初安装 4.…

控制器连接Profinet转Modbus RTU网关与精密数显温控仪通讯

Profinet是一种用于工业自动化领域的通信协议&#xff0c;而Modbus RTU则是一种常见的串行通信协议。由于生产现场中的控制器与精密数显温控仪通常采用不同的通信协议&#xff0c;因此需要借助Profinet转Modbus RTU网关&#xff08;XD-MDPN100&#xff09;完成通信的桥接与转换…

Markdown(MD)——Typora Markdown安装教程(2023九月亲测可用!!!)

目录 一、简介 1.Markdown简介 2.Markdown特点 3.Typora简介 二、安装教程 1.下载安装包 2.解压到文件夹 3.安装 4.破解 ​编辑5.激活 三、Markdown常用语法 1.常用语法 2.用于编辑LaTex公式 四、其他编辑器 一、简介 1.Markdown简介 Markdown 是一种轻量级标记语…

Java多线程篇(3)——线程池

文章目录 线程池ThreadPoolExecutor源码分析1、如何提交任务2、如何执行任务3、如何停止过期的非核心线程4、如何使用拒绝策略 ScheduledThreadPoolExecutor源码分析 线程池 快速过一遍基础知识 7大参数 corePoolSize &#xff1a; 核心线程数 maximumPoolSize&#xff1a; 最…

Docsify介绍—md文件直接生成网页的工具

Markdown是一种轻量级标记语言&#xff0c;它使用易读易写的纯文本格式&#xff0c;用于编写文档&#xff0c;如README&#xff0c;wiki&#xff0c;博客文章等。Markdown语言最初由约翰格鲁伯&#xff08;John Gruber&#xff09;和亚伦斯沃茨&#xff08;Aaron Swartz&#x…

ssm637教材管理系统+vue

项目介绍 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。以前学校对于教材信息的管理和控制&#xff0c;采用人工登记的方式保存相关数据&#xff0c;这种以人力为主的管理模式已然落后。本…

YOLO系列

一、YOLOv1 Bbox使用开根号的原因&#xff1a; 小目标与大目标偏移相同尺度时&#xff0c;小目标检测效果差&#xff0c;那么公式中使用根号就会让小目标损失值更大了 V1网络的一些问题&#xff1a; 小目标检测效果差&#xff0c;当目标出现新配置也不行&#xff0c;目标定位…

红黑树插入的实现

红黑树&#xff1a; 1.概念&#xff1a; 红黑树的性质&#xff1a; 红黑树的插入操作&#xff1a; 其前面的插入和二叉搜索树的一模一样&#xff0c;只是后面需要判断是否满足红黑树的性质&#xff1a; 具体分为三种情况&#xff1a; 1.uncle节点存在且为红色的&#xff1a…

芯科蓝牙BG27开发笔记9-资料整理

SSV5中的例程 在ssv5中有少量开箱即用的例程&#xff0c;第一篇笔记就是从这里开始的&#xff1a; 然而&#xff0c;仅仅这些代码吗&#xff1f;其他例程代码在何处&#xff1f; Software Developer Docs - Silicon Labs 所有内容都可以在官网文档找到。 之前是从ssv5直接开…

Bard人工智能9月19日重大更新

1、巴德现在可以回复来自谷歌地图、航班、酒店和YouTube的实时信息&#xff0c;因此您可以在一个地方完成更多工作。 2、Bard 可能会与其他服务共享您的部分对话和其他相关信息&#xff0c;例如您的位置。这些服务可能会使用该信息进行改进&#xff0c;即使您以后删除了您的 Ba…

python基础语法(四)

感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412;个人主页 &#x1f978;&#x1f978;&#x1f978;C语言 &#x1f43f;️&#x1f43f;️&#x1f43f;️C语言例题 &#x1f423;&#x1f413;&#x1f3c0;python 这…

day50:QTday3,对话框补充、事件处理机制

一、完成文本编辑器的保存工作 widget.h: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QFontDialog> //字体对话框 #include<QFont> //字体类 #include<QMessageBox> //消息对话框 #…

springboot配置注入增强(三)自定义数据源/自定义解析方法

我们回忆下上一篇文章的内容&#xff0c;属性注入的关键节点是PropertySourcesPlaceholderConfigurer的BeanFactory后置处理器org.springframework.context.support.PropertySourcesPlaceholderConfigurer#postProcessBeanFactory&#xff0c;只有在执行这个方法前设置到Enviro…

竞赛 基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类

文章目录 1 前言2 情感文本分类2.1 参考论文2.2 输入层2.3 第一层卷积层&#xff1a;2.4 池化层&#xff1a;2.5 全连接softmax层&#xff1a;2.6 训练方案 3 实现3.1 sentence部分3.2 filters部分3.3 featuremaps部分3.4 1max部分3.5 concat1max部分3.6 关键代码 4 实现效果4.…

平均精度(AP)

什么是平均精度(AP) 平均精度 (AP)并不是精度 (P)的平均值。 平均精度 (AP) 是按类别计算的。 mAP&#xff08;mean average precision&#xff09;是一个平均值&#xff0c;常用作目标检测中的检测精度指标mAP 指标通过对于一个平均目标来检测任务中多个目标所对应不同 AP&a…

9.19号作业

2> 完成文本编辑器的保存工作 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QFontDialog> #include <QFont> #include <QMessageBox> #include <QDebug> #include <QColorDialog> #include <QColor&g…