软件测试考试中的环路复杂度、线性无关路径的理解

news2024/9/23 5:19:58

题目如下,回答问题1至3


int GetMaxDay (int year ,int month){
	int maxday=0;						//1
	if (month>=1 && month <=12)	{		//2,3
		if (month==2)			{		//4
			if (year %4 ==0 ) 	{		//5
				if (year %100 ==0) {	//6
					if (year %400 ==0) 	{//7
						maxday=29;		//8
					else 				//9
						maxday=28;
					}
				else maxday=28;			//10
				}
				else 
					maxday=28;			//11
			}
			else {						//12
				if (month==4 || month ==6 || month==9 ||month ==11)//13,14,15,16
					maxday=30;			//17
				else 					//18
					maxday=31;
			}
		}
		return maxday;					//19
}

问题1、针对上述C程序给出满足100%DC(判定覆盖)所需的逻辑条件;
问题2、画出上述程序的控制流程图,并计算环路复杂度V(G);
问题3、给出问题2中的控制流图的线性无关路径;

问题1 解析:

①定义:

        判定覆盖(Decision Coverage)又称为分支覆盖,其原则是设计足够的测试用例,使得程序中每个判定语句的取真和取假分支至少被执行一次。

        除了双值的判定语句外,还有多值判定语句,如case语句,因此判定覆盖更一般的含义是:使得每一个判定获得每一种可能的结果至少一次。
 

问题2 解析:

(1)控制流图定义:

控制流图是描述陈谷控制流的一中图示方法,它由节点和定向边构成。控制流图的节点代表一个基本块,定向边代表控制流的方向。如果判断条件表达式是复合条件,即条件表达式是由一个或者多个逻辑运算符连接的表达式,则需要改变复合条件的判断为一系列单个条件的判断。本题中,if(month>=1 && month <=12)这条判断语句中的判定由两个条件组成,因此在画控制流图的时候要拆开成两个条件语句。同理if (month==4 || month==6 ||month ==9 ||month==11)这条判断语句中的判定条件由4个条件组成,因此在画控制流图的时候要拆成4个条件判断。如果复合条件之间是“&&”的关系,则拆开后反应在控制流图中是沿左子树往下,反之如果条件之间是“||”的关系,则在控制流图上是沿右子树往下

                                                 图1 控制流图

(2)环路复杂度


McCabe 复杂性度量方式有如下三种:

 

 1)通过控制流图的区域个数来计算

公式:V(G)=区域数

程序的环路复杂性为控制流图的区域数(即封闭的区域数+1)。

在下图中可以看到,有 1 和 2 两个封闭区域,因此,环路复杂度V(G)=2 + 1 = 3。

(2个封闭的区域+1个开放区域) 

2)通过控制流图的边数和结点数来计算

公式:V(G) = e - n + 2

其中, e 即 edge ,表示图中边的数目; n 即 node ,表示结点个数。

下图中V(G)= e - n + 2 = 7条边 − 6个结点 + 2 = 3。

因此,环路复杂度V(G)=3。

  3)通过控制流图中的判定结点个数来计算

公式:V(G) = P + 1

其中,P表示判定结点的数目。所谓判定节点数,即有多个分支的节点,比如下图中的节点 2 ,它可以走3或者5,这个时候它就需要做判断了。所以, 2 是一个判定节点。同样地,下面的 节点3 也像节点 2 一样分析。

因此,图中V(G)=2个判定结点+1 = 3,所以环路复杂度为3。

         讲到这里,我们来给环路复杂性做个小结。事实上,程序的环路复杂性给出了程序基本路径集中的独立路径条数,这是确保可执行语句至少执行一次所必需的测试用例数目的上界。

 问题3 解析:

从控制流图来看,一条线性无关路径是至少包含一条在其他线性无关路径中从未有过的边的路径。程序的环路复杂度等于线性无关路径的条数。所以本题有11条线性无关路径。

 由上面的流程控制图可以看到,
(1)路径:1-2-19中,2-19是其他所有路径都没有经历的,所以是一条线性无关的路径;
(2)路径:1-2-3-19中,3-19是其他所有路径都没有经历的,所以是一条线性无关的路径;
同理:1-2-3-4-12-13-14-15-16-18-19,1-2-3-4-12-13-14-15-16-17-19,1-2-3-4-12-13-14-15-17-19,1-2-3-4-13-14-17-19,1-2-3-4-12-13-17-19,1-2-3-4-5-11-19,1-2-3-4-5-6-10-19,1-2-3-4-5-6-7-9-19,1-2-3-4-5-6-7-19是线性无关的路径。(红色路径都是其他路径没有包含的)

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

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

相关文章

安防行业深度报告:技术创新与格局重构

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。通过运用云计算、人工智能等新技术&#xff0c;安防行业正经历从传统安防向 AI 智慧安防转型升级的过程。这种升级将改变传统安防只能事后查证、人工决策的劣势&#xff0c;使得全程监控、智能决策成为可能。通过运用后端云…

C/C++ 个人笔记

仅供个人复习&#xff0c; C语言IO占位符表 %d十进制整数(int)%ldlong%lldlong long%uunsigned int%o八进制整型%x十六进制整数/字符串地址%c单个字符%s字符串%ffloat&#xff0c;默认保留6位%lfdouble%e科学计数法%g根据大小自动选取f或e格式&#xff0c;去掉无效0 转义符表…

epoll() 多路复用 和 两种工作模式

1.epoll API 介绍 typedef union epoll_data {void *ptr;int fd;uint32_t u32;uint64_t u64; } epoll_data_t;struct epoll_event {uint32_t events; /* Epoll events */epoll_data_t data; /* User data variable */ };常见的Epoll检测事件&#xff1a;- EPOLLIN- EPOLLOUT- …

C#---第十九课:不同类型方法的执行顺序(new / virtual / common / override)

本文介绍不同类型的方法&#xff0c;在代码中的执行顺序问题&#xff1a; 构造方法普通方法&#xff08;暂用common代替&#xff09;、虚方法&#xff08;Virtual修饰&#xff09;、New方法&#xff08;new修饰&#xff09;三个优先级相同overide方法&#xff08;会替换virtual…

Arduino驱动TEMT6000传感器(光照传感器篇)

目录 1、传感器特性 2、硬件原理图 3、驱动程序 TEMT6000是一个三极管类型的光敏传感器,其光照强度和基极的电流成正比。用起来也相当简单,可以简单的连接该传感器的基极到模拟电压输入,通过简单的检测电压值就可以判断当前的光照强度。 1、

基于Linux操作系统的keepalived双机热备和keepalived+lvs(DR)基本配置操作

目录 keepalived双机热备 一、概述 &#xff08;一&#xff09;具体工作原理如下&#xff1a; &#xff08;二&#xff09;实验拓补 二、安装NFS、配置 1、第一台机器配置&#xff1a;NFS &#xff1a;192.168.11.101 2、更改配置文件 3、安装NFS进行目录共享 4、编辑…

花5分钟判断,你的Jmeter技能是大佬还是小白!

jmeter 这个工具既可以做接口的功能测试&#xff0c;也可以做自动化测试&#xff0c;还可以做性能测试&#xff0c;其主要用途就是用于性能测试。但是&#xff0c;有些公司和个人&#xff0c;就想用 jmeter 来做接口自动化测试。 你有没有想过呢&#xff1f; 下面我就给大家讲…

C# textBox1.Text=““与textBox1.Clear()的区别

一、区别 textbox.Text "" 和 textbox.Clear() 都可以用于清空文本框的内容&#xff0c;但它们之间有一些细微的区别。 textbox.Text "": 这种方式会将文本框的 Text 属性直接设置为空字符串。这样会立即清除文本框的内容&#xff0c;并将文本框显示为空…

git 基础入门

Git基础入门 Git是一个分布式 版本管理系统&#xff0c;用于跟踪文件的变化和协同开发。 版本管理&#xff1a;理解成档案馆&#xff0c;记录开发阶段各个版本 分布式&集中式 分布式每个人都有一个档案馆&#xff0c;集中式只有一个档案馆。分布式每人可以管理自己的档案…

ThinkPHP 验证码扩展库的使用,以及多应用模式下,如何自定义验证码校验规则

ThinkPHP 验证码扩展库的使用&#xff0c;以及多应用模式下&#xff0c;如何自定义验证码校验规则 一、安装二、页面使用三、验证码相关配置属性1. 自定义验证码配置2. 自定义验证码&#xff08;一&#xff09;普通验证码3. 自定义验证码&#xff08;二&#xff09;算数验证码4…

搭建web网站

1.基于域名www.openlab.com可以访问网站内容为welcome to openlab!!! (1).安装所需软件HTTPD、mod_ssl [rootserver ~]# yum install httpd mod_ssl -y 添加域名映射&#xff1a;vim /etc/hosts (2)创建网站目录及网页&#xff0c;修改主配置文件新建openlab目录网站 配置文…

第二届828 B2B企业节启动,华为云携手上万伙伴共筑企业应用一站购平台

当前&#xff0c;数字技术与实体经济深度融合&#xff0c;为千行百业注入新动力、拓展新空间。数据显示&#xff0c;2022年中国数字经济规模超过50万亿&#xff0c;占GDP比重超过40%&#xff0c;继续保持在10%的高位增长速度&#xff0c;成为稳定经济增长的关键动力。 为加速企…

DevOps系列文章之 Python基础

列表 Python中的列表类似于C语言中的数组的概念&#xff0c;列表由内部的元素组成&#xff0c;元素可以是任何对象 Python中的列表是可变的 简单的理解就是&#xff1a;被初始化的列表&#xff0c;可以通过列表的API接口对列表的元素进行增删改查 1、定义列表 1.可以将列表当成…

网络模型分析

# 用户空间和内核空间 # 阻塞IO # 非阻塞IO # IO多路复用 IO多路复用-select 内核中遍历找到就绪的fd并保留&#xff0c;不匹配的就置为0&#xff0c; 以上的操作重复&#xff0c;知道所有的FD都完成 IO多路复用-poll IO多路复用-epoll IO多路复用-事件通知机制 很多进程都要用…

WebGL非矩阵变换

目录 平移 示例代码&#xff1a; 齐次坐标矢量的最后一个分量w 旋转 p的坐标&#xff0c;可得等式 R1&#xff1a; 使用r、α、β来表示点p的坐标&#xff0c;可得等式 R2&#xff1a; 利用三角函数两角和公式&#xff0c;可得等式 R3&#xff1a; 最后&#xff0c;将…

8.27周报

文章目录 前言论文阅读摘要介绍模型算法 总结 前言 本周学习了GAN论文《Generative Adversarial Nets》&#xff0c;了解GAN主要由两部分组成&#xff1a;生成器和判别器&#xff0c;知道生成器G和判别器D的作用及原理&#xff0c;相比于其他的生成模型&#xff0c;了解GAN的优…

【java】【项目实战】[外卖六]套餐管理业务开发

目录 一、新增套餐 1 需求分析 2 数据模型 3 代码实现 3.1 实体类SetmealDish 3.2 SetmealDto 3.3 SetmealDishMapper 3.4 SetmealDishService 3.5 SetmealDishServiceImpl 3.6 SetmealController 3.7 DishController 3.8 SetmealService 3.9 SetmealServiceImp…

4.21 用了 TCP 协议,数据一定不会丢吗?

目录 数据包的发送流程: 建立连接时丢包 流量控制丢包 网卡丢包 RingBuffer过小导致丢包 网卡性能不足 接收缓冲区丢包 两端之间的网络丢包 ping命令查看丢包&#xff1a; mtr命令&#xff1a; 发生丢包了怎么办 用了TCP协议就一定不会丢包吗​编辑 这类丢包问题怎…

Mysql--技术文档--基本概念--《世界上最流行的关系型数据库之一》

官方网址 MySQL 阿丹&#xff1a; 作为关系型数据库管理的老大哥&#xff0c;一个合格的程序员多多少少一定要了解mysql库。 官方解释 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管…

浙大MBA冲刺上岸经验分享:紧急备战的大龄考生

前些天我在朋友圈分享了一组我们前段时间在浙大开学前同学聚会的照片。结果&#xff0c;许多朋友都开始询问与浙大有关的情况&#xff0c;并且他们最关心的问题集中在以下几点&#xff1a;我去年备考花费了多少时间&#xff1f;要不要报班学习&#xff1f;现在开始备考还有机会…