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

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


int GetMaxDay (int year ,int month){int maxday=0;						//1if (month>=1 && month <=12)	{		//2,3if (month==2)			{		//4if (year %4 ==0 ) 	{		//5if (year %100 ==0) {	//6if (year %400 ==0) 	{//7maxday=29;		//8else 				//9maxday=28;}else maxday=28;			//10}else maxday=28;			//11}else {						//12if (month==4 || month ==6 || month==9 ||month ==11)//13,14,15,16maxday=30;			//17else 					//18maxday=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://xiahunao.cn/news/1619903.html

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

相关文章

【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…

学习JAVA打卡第四十四天

Scanner类 ⑴Scanner对象 scanner对象可以解析字符序列中的单词。 例如&#xff1a;对于string对象NBA 为了解析出NBA的字符序列中的单词&#xff0c;可以如下构造一个scanner对象。 将正则表达式作为分隔标记&#xff0c;即让scanner对象在解析操作时把与正则表达式匹配的字…

postman-使用Postman的模拟服务来模拟(mock)后端数据,完成前端模拟API调用

最近项目上比较忙&#xff0c;任务多时间紧&#xff0c;导致后端开发任务繁多&#xff0c;无法及时开发完毕&#xff0c;但是前端同学已经把对应功能开发完成&#xff0c;需要进行前后端联调来验证API及一些交互问题&#xff1b;这不能因为后端的进度来影响前端的工作完成情况&…

JAVA修练秘籍第五章《卧薪尝胆》

往期&#xff1a; JAVA 修炼秘籍第一章&#xff1a;《痛苦的折磨》 JAVA 修炼秘籍第二章&#xff1a;《逐渐魔化》 JAVA 修炼秘籍第三章&#xff1a;《绝地反击》 JAVA 修炼秘籍第四章&#xff1a;《闭关修炼》 文章目录 一、类和对象1.类的实例化2.属性3.方法 二、static关键字…

FreeMarker使用

说明&#xff1a;FreeMake可以通过设置一个模板&#xff0c;使用一些语法规则&#xff0c;可根据返回的VO数据填充到这个模板中&#xff0c;生成一个静态。这个技术&#xff0c;在项目中可以实现如预览页面的功能&#xff0c;将查询完成的VO数据按照这个模板填充&#xff0c;生…

网络模型分析

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

魔鬼之城

题目描述 在一个被分割为N*M个正方形房间的矩形魔鬼之城中&#xff0c;一个探险者必须遵循下列规则才能跳跃行动。他必须从(1, 1)进入&#xff0c;从(N, M)走出&#xff1b;在每一房间的墙壁上都写了一个魔法数字&#xff0c;是1&#xff5e;13之内的自然数&#xff1b;探险者可…

心灵毒药之CIA篇(二)

2019独角兽企业重金招聘Python工程师标准>>> 工欲善其事,必先利其器,而且最好是最锋利,最合适的器.因为器能成为你身体的延伸部分,同时还可以成为你信心的来源. 磨器的耐心,用器的巧心,藏器的无心. 转载于:https://my.oschina.net/piginwind/blog/713487

啊,万恶的this

一、全局下&#xff0c;this一般都指向window 全局下&#xff0c;ES5非严格模式&#xff0c;下面的this都是window。 console.log(this); function abc(){console.log(this); } abc();二、对象中的this 1、最常见的this情况&#xff1a; var a100;var obj{a:1,b:function()…

关押罪犯

题目&#xff1a; 描述S 城现有两座监狱&#xff0c;一共关押着 NNN 名罪犯&#xff0c;编号分别为 111 ~ NNN。他们之间的关系自然也极不和谐。 很多罪犯之间甚至积怨已久&#xff0c;如果客观条件具备则随时可能爆发冲突。 我们用 “怨气值”&#xff08;一个正整数值&#…

罪恶

&#xff0d;&#xff0d;&#xff0d;&#xff0d; 罪恶 还是属于闲得慌&#xff0c;瞎拍。也许您会帮我想个更棒的标题&#xff0c;或者干脆叫“无题”。 转载于:https://www.cnblogs.com/hzy5901/archive/2010/03/16/5871737.html

游戏开发学什么?四步修炼骨灰级高手

游戏开发学什么&#xff1f;四步修炼骨灰级高手 近日App Store公布了2013年年度最佳游戏奖项&#xff0c;复古风格的捕鱼游戏《奇葩钓鱼》荣获了iPhone平台上年度最佳游戏的殊荣&#xff0c;拥有独特视觉效果的横版冒险游戏《罪恶之地》夺得了iPad平台上年度最佳游戏的桂冠。…

代码随想录打卡—day42—【DP】— 8.27 01背包基础

1 01背包基础 背包概述&#xff1a; 1.1 01背包是什么 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 1.2 01背包二维数组 二维数组还…

3D飞镖游戏源码ios版

一款ios 3D飞镖游戏源码,通过物理引擎和重力感应来控制飞镖向目标物体击中&#xff01;游戏比较简单&#xff0c;可以学习一下3D游戏的基本开发. 源码下载&#xff1a; http://code.662p.com/view/6262.html 开发平台&#xff1a; 在xcode 4.3编译通过&#xff0c;iphone4&am…

PS飞镖靶的制作

首先我们在Ps中新建一个600像素*600像素的画布&#xff0c;设置分辨率300/200都可以。 步骤如下&#xff1a; 1.拉出两条参考线&#xff0c;一条垂直居中&#xff0c;一条水平居中。 2.用椭圆工具在两参考线中心点拉出一个圆形&#xff0c;设置颜色红色。用矩形选框工具裁剪掉3…

[SCOI2011]飞镖[数学模拟]

2335: [SCOI2011]飞镖 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 482 Solved: 152[Submit][Status][Discuss] Description 飞镖是在欧洲颇为流行的一项运动。它的镖盘上分为20个扇形区域&#xff0c;分别标有1到20的分值&#xff0c;每个区域中有单倍、双倍和三倍的区…

【题解】[SCOI2011] 飞镖

模拟题 红靶子的我们先不考虑。 如果是 {1,2,2} &#xff0c; {2,2,3} 这种只涉及两种倍数的话&#xff0c;我们想到不定方程&#xff1a; axby c 的通解形式&#xff08;a,b,c 为常数&#xff09;&#xff0c;从而探讨 x,y 在规定取值内是否有解。 探讨 {1,2,3} 的情况。 …

搭载双筒飞镖?这款无人机太危险

折叠式的设计使之方便携带&#xff0c;堪称猎犬好搭档。 近日&#xff0c;基于SuperDrone无人机&#xff0c;南非Haevic公司改造了一款搭载飞镖枪的无人机——DartDrone&#xff0c;专为兽医及狩猎人员研发。 据悉&#xff0c;SuperDrone是一款采用可折叠结构的六翼无人机&…

BZOJ2335: [SCOI2011]飞镖

Description 飞镖是在欧洲颇为流行的一项运动。它的镖盘上分为20个扇形区域&#xff0c;分别标有1到20的分值&#xff0c;每个区域中有单倍、双倍和三倍的区域&#xff0c;打中对应的区域会得到分值乘以倍数所对应的分数。例如打中18分里面的三倍区域&#xff0c;就会得到54分。…