逻辑覆盖测试用例设计
逻辑覆盖测试用例设计
实验目标
- 能够依据程序画出程序流程图
- 理解常用覆盖方法的内涵
- 理解常用覆盖方法的强弱关系
- 能够使用常用覆盖方法设计测试用例
背景知识
白盒测试通常采用静态测试方法和动态测试方法开展。动态测试是参照系统需求或测试规则,通过预先设计一组测试输入,并借助此输入动态运行程序,从而达到发现程序错误的过程。
覆盖是是动态测试中的一类有效测试方法,主要包括逻辑覆盖、基本路径测试等.其中,逻辑覆盖基于程序内部的逻辑结构,通过对程序逻辑结构的遍历实现程序的覆盖。依据覆盖源程序结构的详尽程度,可分为语句覆盖、判定覆盖、条件覆盖、条件判定覆盖、条件组合覆盖和路径覆盖六种类型
具体介绍如下
语句覆盖
语句覆盖是一类比较弱的测试标准,具体是指选择足够的测试用例,使程序中的每个语句至少能被执行一次。
局限性:测试不充分,对程序执行逻辑的覆盖率较低,属于最弱的覆盖方式。
判定覆盖
判定覆盖又称为分支覆盖,是比语句覆盖稍强的一类测试标准,具体是指选择足够的测试用例,使程序中的每个判定获得每一种可能的结果至少一次,也就是说,各个判定的每个分支至少都被执行一次
局限性:测试不充分,仅对整个判定的最终取值进行各方面的度量,但判定内部每一个子表达式的取值未被考虑
条件覆盖
条件覆盖是比判定覆盖更强的一类测试标准,具体是指选择足够的测试用例,使程序各判定中的每个条件获得可能的取值
局限性:测试不充分,虽弥补了判定覆盖的漏洞,对程序内部每一个子表达式的取值进行了度量,但条件覆盖并不能满足判定覆盖
条件判定覆盖
条件判定覆盖综合了判定覆盖和条件覆盖特点,是比条件覆盖更强的一类测试标准,具体视选择足够的测试用例,使程序中各判定的每个分支至少都被执行一次,且使各判定条件获得各种可能的取值。
局限性:测试不充分,未考虑单个判定对整体程序的影响,对程序执行逻辑的覆盖率较低
条件组合覆盖
条件组合覆盖是指选取足够的测试用例,使判定中条件的各种组合都至少被执行一次
局限性,测充分,某些情况可遗漏覆盖部分路径,且组合数量相对较大,往往花费较多的时间
路径覆盖
路径覆盖是相当强的一类覆盖标准,具体是指设计足够多的测试用例,使程序中所有可能的路径被执行一次
局限性:测试不充分,测试所需用用例数量相对较大,使工作量呈指数级增长
值得提醒的是,软件评测师考试中,逻辑覆盖相关知识点往往占据一定的分支,提醒多采用六种覆盖方式进行测试用例额的设计和依据各类覆盖的强弱关系进行语句判断
因此针对各类覆盖的强弱关系总结如下
- 满足条件组合覆盖的测试用例一定满足语句覆盖、判定覆盖、条件覆盖和条件判定覆盖
- 满足条件判定覆盖的测试用例一定满足语句覆盖、条件覆盖、判定覆盖
- 满足判定覆盖的测试用例一定满足语句覆盖
- 满足条件覆盖的测试用例不一定满足语句覆盖及判定覆盖
综上所述,各类覆盖均不是十全十美的,仅使用一种覆盖往往会导致测试片面,不充分,实际测试工作中通常会综合采用多种覆盖。例如,测试通过准则可能要求语句覆盖达到%,判定覆盖达到90%等
实验
针对源程序1采用六种逻辑覆盖方法设计测试用例
#include<stdio.h>
void main(){float A,B,X;scanf("%f %f %f",&A,&B,&X);if((A>1)&&(B==0))X=X/A;if((A==2)||(X>1))X=X+1;print("% f",X);
}
测试用例设计,绘制程序流程图,如所示
第二步,设计测试用例满足语句覆盖,如表所示
用例编号 | 测试用例 | 覆盖路径 |
---|---|---|
1 | A=2,B=0,X=3 | ace |
第三部,设计测试用例满足判定覆盖,如表3.2所示。其中,if((A>1)&&(B==0)),
if ((A==2)||(X>1))为源程序的两个判定。在此,考虑两个判定的每个分支被执行一次即可。
用例编号 | 测试用例 | 覆盖路径 |
---|---|---|
1 | A=3,B=0,X=1 | A-C-D |
2 | A=2,B=1,X=3 | A-B-E |
第四步,设计测试用例满足条件覆盖。如表3.3所示,if((A>1)&&(B==0)),
if ((A==2)||(X>1))为源程序的两个判定。而
A>1 B==0 A==2 X>1
为两个判定的4个条件。在此,考虑
A>1 A<=1 B==0 B!=0 A==2 A!=2 X>1 X<=1
8种取值分别被执行一次即可
用例编号 | 测试用例 | 覆盖条件 |
---|---|---|
1 | A=2,B=0,X=3 | A>1 B=0 A==2 X>1 |
2 | A=-1,B=2,X=1 | A<=1 B!=0 X<=1 |
第五步,设计测试用例满足条件判定覆盖,如表3.4所示。在此, 需要同时满足条件覆盖和判定覆盖
条件判定覆盖测试用例
用例编号 | 测试用例 | 覆盖路径 | 覆盖条件 |
---|---|---|---|
1 | a-c-e | a>1 b=0 a=2 x>1 | 2,0,4 |
2 | a-b-d | a<=1 b!=0 a!=2 x<=1 | 1,2,0 |
第六步,设计测试用例满足条件组合覆盖。其中,if((A>1)&&(B==0)),
if ((A==2)||(X>1))为源程序的两个判定.在此,考虑((A>1)&&(b=0))
(A>1)&&(b!=0) (A<=1)&&(B=0) (A<=1)&&(B!=0) (A==2)||(x>1) (A=2)||(x<=1)
(A!=2)||(x>1) (A!=2)||(x<=1)八种组合情况均被执行一次即可
表条件组合覆盖测试用例
用例编号 | 测试用例 | 覆盖条件组合 |
---|---|---|
1 | A=2,B=0,X=4 | A>1 B=0 A=2 X>1 |
2 | 2,3,1 | A>1 B!=0 A=2 x<=1 |
3 | 1,0,1 | a<=1 b=0 a!=2, x<=1 |
4 | 1,2,1 | a<=1 b!=0 a!=2 x<=1 |
注意:
条件组合仅仅针对同一个判定语句内存在多个条件的情况,在此情况下,讲这些条件的取值进行笛卡尔乘积组合即可。也就是说,对于不同的判定无需考虑条件组合,以及对但条件的判断语句仅需要满足自身所有取值即可
第七步,设计测试用例满足路径覆盖。再次,需满足程序中所有可能的路径被执行一次的要求
用例编号 | 测试用例 | 覆盖路径 |
---|---|---|
1 | A=1,b=1,x=1 | a-b-d |
2 | 1,1,2 | a-b-e |
3 | 3,0,6 | a-c-d |
4 | 2,0,4 | a-c-e |
注意,实际设计出的覆盖路径及输入数据如果与上述设计不尽相同,则并非一定有误,例如在判定覆盖中,可选择a-c-e路径和a-b-d路径的组合也可以选择a-b-e和a-c-d的组合,均满足判定覆盖的要求。因此,本任务的操作步骤及用例仅仅用作参考
任务2:针对源程序2才用6种逻辑覆盖方法设计测试用例
int testing(int x,int y){int software = 0;if((x>0) && (y>0))software = x+y+10;elsesoftware = x+y-10;if(software<0)software = 0return software;
}
第一步,绘制程序流程图,如3.2所示
第二步,设计测试用例满足语句覆盖,如表3.7所示
语句覆盖是用例
用例编号 | 测试用例 | 覆盖路径 |
---|---|---|
1 | 1,1 | a-b-e-f |
2 | 1,-1 | a-c-d-f |
第三步,设计测试用例满足判定覆盖其中。if((x>0)&&(y>0)) if(software<0)为源程序的两个判定。再次,考虑两个判定的每个分支执行一次即可
判定覆盖测试用例
用例编号 | 测试用例 | 覆盖路径 |
---|---|---|
1 | 1,1 | a-b-e-f |
2 | 1,-1 | a-c-d-f |
第四步,设计测试用例满足条件覆盖
如表3.9所示,if((x>0)&&(y>0)) if(software<0)为源程序的两个判定。而x>0,y>0和software为两个判定中的三个条件,因此,考虑 x>0 x<=0 y>0 y<=0 software<0 software >=0 6种取值均被执行一次
条件覆盖测试用例
用例编号 | 测试用例 | 覆盖路径 |
---|---|---|
1 | x=3,y=3 | a-b-e-f |
2 | x=-3,y=0 | a-c-d-f |
第五步,设计测试用例满足条件判定覆盖,需要同时满足条件覆盖和判定覆盖
条件判定覆盖
用例编号 | 测试用例 | 覆盖路径 |
---|---|---|
1 | x=3,y=3 | a-b-e-f |
2 | x=-3,y=0 | a-c-d-f |
第六步,设计测试用例满足条件组合覆盖(x>0)&&(y>0) (x>0)&&(y<=0) (x<0)&&(y>0) (x<=0)&&(y<=0)四种情况,以及software<0和 software>=0两种 取值均被执行一次即可
条件组合覆盖测试用例
用例编号 | 测试用例 | 覆盖路径 |
---|---|---|
1 | 1,1 | a-b-e-f |
2 | -1,0 | |
-1,2 | ||
第七步,设计测试用例满足路径覆盖
用例编号 | 测试用例 | 覆盖路径 |
---|---|---|
1 | 1,1 | a-b-e-f |
-1,100 | acef | |
abdf | ||
-1,-1 | acdf |
相关文章:

逻辑覆盖测试用例设计
逻辑覆盖测试用例设计 实验目标 能够依据程序画出程序流程图理解常用覆盖方法的内涵理解常用覆盖方法的强弱关系能够使用常用覆盖方法设计测试用例 背景知识 白盒测试通常采用静态测试方法和动态测试方法开展。动态测试是参照系统需求或测试规则,通过预先设计一…...

面试官:说一下MySQL中的锁机制吧
5. 1MySQL有哪些锁? 为保证数据的一致性,需要对并发操作进行控制,因此产生了锁。同时锁机制也为实现MySQL的各个隔离级别提供了保证。 锁冲突 也是影响数据库并发访问性能的一个重要因素。所以锁对数据库而言显得尤其重要,也更加…...

STL库中list的迭代器实现痛点分析
前文本篇文章准备换个模式,之前都是先详解模拟实现,但是模拟实现的基本逻辑大多数老铁都是明白的,所以我们这次主要讲解STL库中list的独特性,也就是模拟实现中的重难点文末有模拟实现的源码一,list实现的特殊类list实现…...

字符编码对比(GBK、Unicode、UTF-8)
摘要我们在网上能看到各种文字和符号,那么它们是怎么存储和转化的,还有我们常常提及的UTF-8,为什么都要设置这种编码方式,这里就探讨下。字符集字符集:就是各国文字、符号、数字的集合。常见的字符集有:ASC…...

【百面成神】Redis基础11问,你能坚持到第几问
前 言 🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端 ☕专栏简介:纯手打总结面试题,自用备用 🌰 文章简介:Redis最基础、重要的11道面试题 文章目录…...

十大排序算法极简汇总篇
说明 十大排序算法可以说是每个程序员都必须得掌握的了,如果你们像从 0 详细学习每一篇,那么你们可以看前面的文章。 但是呢,有些人可能已经学过,想要快速复习一下,看看代码怎么写的,那么可以看这篇十大排…...

数据结构笔记
文章目录第一章:数据结构与算法第二章:稀疏数组和队列一 、稀疏sparsearray 数组(一)案例需求(二)稀疏数组介绍(三)应用实列(四)代码实现二、队列(…...

web前端框架——Vue的特性
目录 前言: 一.vue 二.特性 1.轻量级 2.数据绑定 3.指令 4.插件 三.比较Angular 、React 、Vue 框架之间的比较 1. Angular Angular的优点: 2. React React 的优点: 3.vue 3.Vue的优点: 前言: 本篇文章…...

提权工具推荐(PEASS-ng、linpeas_linux_amd64、winPEASany_ofs)
介绍 在这里,您可以找到适用于Windows、Linux/Unix*和MacOS的权限提升工具。 这些工具搜索您可以利用的可能的本地权限提升路径,并用漂亮的颜色打印给您,这样您就可以很容易地识别错误配置。 查看book.hacktricks.xyz中的本地Windows权限提升检查表WinPEAS-Windows本地权限…...

Spark - 继承 FileOutputFormat 实现向 HDFS 地址追加文件
目录 一.引言 二.源码浅析 1.RDD.saveAsTextFile 2.TextOutputFormat 3.FileOutputFormat 三.源码修改 1.修改文件生成逻辑 - getRecordWriter 2.允许目录存在 - checkoutputSpecs 3.全部代码 - TextOutputFormatV2 四.追加存储代码实战 五.总结 一.引言 Output d…...

树莓派编程控制继电器及继电器组
目录 一,继电器说明 ● 继电器接口说明 ① 继电器输入端: ② 继电器输出端: 二,树莓派控制继电器 三,树莓派控制继电器组 一,继电器说明 通俗点讲,可以把继电器理解成是一些功能设备的控制开关。 ● LOW&#…...

oracle和mysql的区别
Oracle与MySQL的区别以及优缺点 MySQL的特点 1、性能卓越,服务稳定,很少出现异常宕机; 2、开放源代码无版本制约,自主性及使用成本低; 3、历史悠久,社区和用户非常活跃,遇到问题及时寻求帮助…...

<Linux开发> linux应用开发-之-uart通信开发例程
一、简介 串口全称叫做串行接口,串行接口指的是数据一个一个的按顺序传输,通信线路简单。使用两条线即可. 实现双向通信,一条用于发送,一条用于接收。串口通信距离远,但是速度相对会低,串口是一种很常用的工…...

基于深度学习的安全帽检测系统(YOLOv5清新界面版,Python代码)
摘要:安全帽检测系统用于自动化监测安全帽佩戴情况,在需要佩戴安全帽的场合自动安全提醒,实现图片、视频和摄像头等多种形式监测。在介绍算法原理的同时,给出Python的实现代码、训练数据集,以及PyQt的UI界面。安全帽检…...

Linux - 进程控制(进程替换)
0.引入创建子进程的目的是什么?就是为了让子进程帮我执行特定的任务让子进程执行父进程的一部分代码如果子进程想执行一个全新的程序代码呢? 那么就要使用进程的程序替换为什么要有程序替换?也就是说子进程想执行一个全新的程序代码ÿ…...

Java中 ==和equals的区别是什么?
作用: 基本类型,比较值是否相等引用类型,比较内存地址值是否相等不能比较没有父子关系的两个对象equals()方法的作用: JDK 中的类一般已经重写了 equals(),比较的是内容自定义类如果没有重写 equals(),将…...

Linux(网络基础---网络层)
文章目录0. 前言1. IP协议1-1 基本概念1-2 协议头格式2. 网段划分2-1 基本概念2.2 IP地址分五大类2-3 特殊的IP地址2-4 IP地址的数量限制2-5 私有IP地址和公网IP地址2-6 路由0. 前言 前面我们讲了,应用层、传输层;本章讲网络层。 应用层:我…...

空间信息智能应用团队研究成果介绍及人才引进
目录1、多平台移动测量技术1.1 车载移动测量系统1.2 机载移动测量系统2、数据处理与应用技术研究2.1 点云与影像融合2.2 点云配准与拼接2.3 点云滤波与分类2.4 道路矢量地图提取2.5 道路三维自动建模2.6 道路路面三维病害分析2.7 多期点云三维变形分析2.8 地表覆盖遥感监测分析…...

ChatGPT应用场景与工具推荐
目录 写在前面 一、关于ChatGPT 二、应用实例 1.写文章 2.入门新的知识 3.解决疑难问题 4.生成预演问题 5.文本改写 6.语言翻译 7.思维导图 8.PDF阅读理解 9.操作格式化的数据 10.模拟场景 11.写代码 三、现存局限 写在前面 本文会简单介绍ChatGPT的特点、局限以…...

图像分类卷积神经网络模型综述
图像分类卷积神经网络模型综述遇到问题 图像分类:核心任务是从给定的分类集合中给图像分配一个标签任务。 输入:图片 输出:类别。 数据集MNIST数据集 MNIST数据集是用来识别手写数字,由0~9共10类别组成。 从MNIST数据集的SD-1和…...

艹,终于在8226上把灯点亮了
接上次点文章ESP8266还可以这样玩这次,我终于学会了在ESP8266上面点亮LED灯了现在一个单片机的价格是几块,加上一个晶振,再来一个快递费,十几块钱还是需要的。所以能用这个ESP8266来当单片机玩,还是比较不错的可以在ub…...

脱不下孔乙己的长衫,现代的年轻人该怎么办?
“如果我没读过书,我还可以做别的工作,可我偏偏读过书” “学历本该是我的敲门砖,却成了我脱不下的长衫。” 最近,“脱下孔乙己的长衫”在网上火了。在鲁迅的原著小说中,孔乙己属于知识阶级(长衫客…...

Matlab实现遗传算法
遗传算法(Genetic Algorithm,GA)是一种基于生物进化理论的优化算法,通过模拟自然界中的遗传过程,来寻找最优解。 在遗传算法中,每个解被称为个体,每个个体由一组基因表示,每个基因是…...

评价公式-均方误差
均方误差的公式可以通过以下步骤推导得出: 假设有n个样本,真实值分别为y₁, y₂, ……, yₙ,预测值分别为ŷ₁, ŷ₂, ……, ŷₙ。 首先,我们可以定义误差(error)为预测值与真实值之间的差: …...

冲击蓝桥杯-时间问题(必考)
目录 前言: 一、时间问题 二、使用步骤 1、考察小时,分以及秒的使用、 2、判断日期是否合法 3、遍历日期 4、推算星期几 总结 前言: 时间问题可以说是蓝桥杯,最喜欢考的问题了,因为时间问题不涉及到算法和一些复杂的知识…...

10个杀手级应用的Python自动化脚本
10个杀手级应用的Python自动化脚本 重复的任务总是耗费时间和枯燥的。想象一下,逐一裁剪100张照片,或者做诸如Fetching APIs、纠正拼写和语法等任务,所有这些都需要大量的时间。为什么不把它们自动化呢?在今天的文章中,…...

2023史上最全软件测试工程师常见的面试题总结 备战金三银四
在这里我给大家推荐一套专门讲解软件测试简历,和面试题的视频,实测有效,建议大家可以看看! 春招必看已上岸,软件测试常问面试题【全网最详细,让你不再踩坑】_哔哩哔哩_bilibili春招必看已上岸,…...

2023年全国最新安全员精选真题及答案29
百分百题库提供安全员考试试题、建筑安全员考试预测题、建筑安全员ABC考试真题、安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 81.(单选题)同一建筑施工企业在12个月内连续发生(&…...

关系数据库的7个基本特征
文章目录关系数据库中的二维表─般满足7个基本特征:①元组(行)个数是有限的——元组个数有限性。 ②元组(行)均不相同——元组的唯—性。 ③元组(行)的次序可以任意交换——元组的次序无关性。 ④元组(行)的分量是不可分割的基本特征——元组分量的原子性。 ⑤属性(列)名各不相…...

2023QT面试题总会
1、Qt信号槽机制的优势 (1)类型安全。需要关联的信号和槽的签名必须是等同的,即信号的参数类型和参数个数同接收该信号的槽的参数类型和参数个数相同。不过,一个槽的参数个数是可以少于信号的参数个数的,但缺少的参数…...