逻辑覆盖测试用例设计
逻辑覆盖测试用例设计
实验目标
- 能够依据程序画出程序流程图
- 理解常用覆盖方法的内涵
- 理解常用覆盖方法的强弱关系
- 能够使用常用覆盖方法设计测试用例
背景知识
白盒测试通常采用静态测试方法和动态测试方法开展。动态测试是参照系统需求或测试规则,通过预先设计一组测试输入,并借助此输入动态运行程序,从而达到发现程序错误的过程。
覆盖是是动态测试中的一类有效测试方法,主要包括逻辑覆盖、基本路径测试等.其中,逻辑覆盖基于程序内部的逻辑结构,通过对程序逻辑结构的遍历实现程序的覆盖。依据覆盖源程序结构的详尽程度,可分为语句覆盖、判定覆盖、条件覆盖、条件判定覆盖、条件组合覆盖和路径覆盖六种类型
具体介绍如下
语句覆盖
语句覆盖是一类比较弱的测试标准,具体是指选择足够的测试用例,使程序中的每个语句至少能被执行一次。
局限性:测试不充分,对程序执行逻辑的覆盖率较低,属于最弱的覆盖方式。
判定覆盖
判定覆盖又称为分支覆盖,是比语句覆盖稍强的一类测试标准,具体是指选择足够的测试用例,使程序中的每个判定获得每一种可能的结果至少一次,也就是说,各个判定的每个分支至少都被执行一次
局限性:测试不充分,仅对整个判定的最终取值进行各方面的度量,但判定内部每一个子表达式的取值未被考虑
条件覆盖
条件覆盖是比判定覆盖更强的一类测试标准,具体是指选择足够的测试用例,使程序各判定中的每个条件获得可能的取值
局限性:测试不充分,虽弥补了判定覆盖的漏洞,对程序内部每一个子表达式的取值进行了度量,但条件覆盖并不能满足判定覆盖
条件判定覆盖
条件判定覆盖综合了判定覆盖和条件覆盖特点,是比条件覆盖更强的一类测试标准,具体视选择足够的测试用例,使程序中各判定的每个分支至少都被执行一次,且使各判定条件获得各种可能的取值。
局限性:测试不充分,未考虑单个判定对整体程序的影响,对程序执行逻辑的覆盖率较低
条件组合覆盖
条件组合覆盖是指选取足够的测试用例,使判定中条件的各种组合都至少被执行一次
局限性,测充分,某些情况可遗漏覆盖部分路径,且组合数量相对较大,往往花费较多的时间
路径覆盖
路径覆盖是相当强的一类覆盖标准,具体是指设计足够多的测试用例,使程序中所有可能的路径被执行一次
局限性:测试不充分,测试所需用用例数量相对较大,使工作量呈指数级增长
值得提醒的是,软件评测师考试中,逻辑覆盖相关知识点往往占据一定的分支,提醒多采用六种覆盖方式进行测试用例额的设计和依据各类覆盖的强弱关系进行语句判断
因此针对各类覆盖的强弱关系总结如下
- 满足条件组合覆盖的测试用例一定满足语句覆盖、判定覆盖、条件覆盖和条件判定覆盖
- 满足条件判定覆盖的测试用例一定满足语句覆盖、条件覆盖、判定覆盖
- 满足判定覆盖的测试用例一定满足语句覆盖
- 满足条件覆盖的测试用例不一定满足语句覆盖及判定覆盖
综上所述,各类覆盖均不是十全十美的,仅使用一种覆盖往往会导致测试片面,不充分,实际测试工作中通常会综合采用多种覆盖。例如,测试通过准则可能要求语句覆盖达到%,判定覆盖达到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 |
逻辑覆盖测试用例设计相关推荐
- 软件质量保证与测试实验(实验三.逻辑覆盖测试用例设计)
软件质量保证与测试.实验三.逻辑覆盖测试用例设计 0 目录 1 逻辑覆盖测试用例设计 1.1 逻辑覆盖测试用例设计 1.1.1 实验目的 1.1.2 实验预习 1.1.3 实验内容及要求 1.1.4 ...
- 白盒测试中的逻辑覆盖法
链接:在用白盒测试中的逻辑覆盖法设计测试用例时,有语句覆盖.分支覆__牛客网 来源:牛客网 1.语句覆盖: 设计若干测试用例,运行被测程序,使程序中每个可执行语句至少执行一次.只需设计一个测试用例:a ...
- 测试用例设计方法(五)路径覆盖
熟悉测试理论的人都知道,路径覆盖是白盒测试中一种很重要的方法,广泛应用于单元测试.那么基于路径覆盖的分析方法是不是只能应用于单元测试呢,能不能将其推而广之呢.一般而言,在单元测试中,路径就是指函数代码 ...
- 白盒测试的5种逻辑覆盖法
文章目录 判定覆盖法 Decision Coverage (DC) 条件覆盖 Condition Coverage (CC) 判定-条件覆盖 Condition-Decision Coverage 条 ...
- 蓝牙耳机测试用例_移动端测试用例设计总结,这些你得懂!
一.前言 作为移动互联网产品最后一公里的守护者,我们必须要清楚的知道自己该做什么.怎么做.但从版本迭代速度.需求量级.测试人员不断变动等方面综合来看,我们很多人都没有做好充分的准备.测试方法落后.测试 ...
- 移动端测试用例设计总结-笔记
此文来源于公开课笔记!!! 一.前言 作为移动互联网产品『最后一公里的守护者』,我们必须要清楚的知道自己该做什么.怎么做.但从版本迭代速度.需求量级.测试人员不断变动等方面综合来看,我们很多人都没有做 ...
- 【测试设计】基于正交法的测试用例设计工具--PICT
前言 我们都知道成对组合覆盖是一种非常有效的测试用例设计方法,但是实际工作过程中当成对组合量太大,我们往往很难做到有效的用例覆盖. PICT是微软公司出品的一款成对组合命令行生成工具,它很好的解决了上 ...
- 白盒测试中几种逻辑覆盖法及其优缺点
语句覆盖法: 详述: https://blog.csdn.net/hanhanwanghaha/article/details/105633019 定义:设计若干个测试用例,使被测试程序中的每条可执行 ...
- 详述白盒测试的逻辑覆盖的路径覆盖及其优缺点
详述白盒测试的逻辑覆盖的路径覆盖及其优缺点 定义: 与其他覆盖的关系: 路径覆盖率: 测试用例: 优缺点: 定义: https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢 ...
最新文章
- PyCharm导入numpy包遇到的问题
- 使用slice和concat对数组的深拷贝和浅拷贝
- 花了一上午,终于完成了作业
- python扩展库安装
- 生产者消费者问题Java三种实现
- codeforces 940E Cashback 有趣的dp
- [转载] python dict 查找原理
- freeCodeCamp:Confirm the Ending
- php phpexcel导入excel
- Ffmpeg 解复用器列表 demuxer_list
- 基于强化学习的综合能源系统管理综述-笔记
- 仿斗鱼、美团、网易邮箱等 弹窗效果
- Confluence 6 协同编辑问题解决
- 15个免费好用的抓包工具
- 离散数学之数理逻辑——第2章 命题逻辑等值演算
- 实现愤怒的小鸟:我们有很多种小鸟(Bird类),每种小鸟都有飞的行为(fly()方法),还有一个弹弓(Slingshot类),弹弓有一个弹射的行为(shot()方法:调用fly()方法)
- 裸辞闹了个乌龙,就当做个题提升自己吧
- 温暖的奢侈,当手机遇到机器人
- 专科计算机毕业论文范文 致谢,专科毕业论文致谢范文(通用6篇)
- 使用JS进行版本号比较方法