当前位置: 首页 > news >正文

逻辑覆盖测试用例设计

逻辑覆盖测试用例设计

实验目标

  • 能够依据程序画出程序流程图
  • 理解常用覆盖方法的内涵
  • 理解常用覆盖方法的强弱关系
  • 能够使用常用覆盖方法设计测试用例

背景知识

白盒测试通常采用静态测试方法和动态测试方法开展。动态测试是参照系统需求或测试规则,通过预先设计一组测试输入,并借助此输入动态运行程序,从而达到发现程序错误的过程。

覆盖是是动态测试中的一类有效测试方法,主要包括逻辑覆盖、基本路径测试等.其中,逻辑覆盖基于程序内部的逻辑结构,通过对程序逻辑结构的遍历实现程序的覆盖。依据覆盖源程序结构的详尽程度,可分为语句覆盖、判定覆盖、条件覆盖、条件判定覆盖、条件组合覆盖和路径覆盖六种类型

具体介绍如下

语句覆盖

语句覆盖是一类比较弱的测试标准,具体是指选择足够的测试用例,使程序中的每个语句至少能被执行一次。

局限性:测试不充分,对程序执行逻辑的覆盖率较低,属于最弱的覆盖方式。

判定覆盖

判定覆盖又称为分支覆盖,是比语句覆盖稍强的一类测试标准,具体是指选择足够的测试用例,使程序中的每个判定获得每一种可能的结果至少一次,也就是说,各个判定的每个分支至少都被执行一次

局限性:测试不充分,仅对整个判定的最终取值进行各方面的度量,但判定内部每一个子表达式的取值未被考虑

条件覆盖

条件覆盖是比判定覆盖更强的一类测试标准,具体是指选择足够的测试用例,使程序各判定中的每个条件获得可能的取值

局限性:测试不充分,虽弥补了判定覆盖的漏洞,对程序内部每一个子表达式的取值进行了度量,但条件覆盖并不能满足判定覆盖

条件判定覆盖

条件判定覆盖综合了判定覆盖和条件覆盖特点,是比条件覆盖更强的一类测试标准,具体视选择足够的测试用例,使程序中各判定的每个分支至少都被执行一次,且使各判定条件获得各种可能的取值。

局限性:测试不充分,未考虑单个判定对整体程序的影响,对程序执行逻辑的覆盖率较低

条件组合覆盖

条件组合覆盖是指选取足够的测试用例,使判定中条件的各种组合都至少被执行一次

局限性,测充分,某些情况可遗漏覆盖部分路径,且组合数量相对较大,往往花费较多的时间

路径覆盖

路径覆盖是相当强的一类覆盖标准,具体是指设计足够多的测试用例,使程序中所有可能的路径被执行一次

局限性:测试不充分,测试所需用用例数量相对较大,使工作量呈指数级增长

值得提醒的是,软件评测师考试中,逻辑覆盖相关知识点往往占据一定的分支,提醒多采用六种覆盖方式进行测试用例额的设计和依据各类覆盖的强弱关系进行语句判断

因此针对各类覆盖的强弱关系总结如下

  • 满足条件组合覆盖的测试用例一定满足语句覆盖、判定覆盖、条件覆盖和条件判定覆盖
  • 满足条件判定覆盖的测试用例一定满足语句覆盖、条件覆盖、判定覆盖
  • 满足判定覆盖的测试用例一定满足语句覆盖
  • 满足条件覆盖的测试用例不一定满足语句覆盖及判定覆盖

综上所述,各类覆盖均不是十全十美的,仅使用一种覆盖往往会导致测试片面,不充分,实际测试工作中通常会综合采用多种覆盖。例如,测试通过准则可能要求语句覆盖达到%,判定覆盖达到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);
}

测试用例设计,绘制程序流程图,如所示

第二步,设计测试用例满足语句覆盖,如表所示

用例编号测试用例覆盖路径
1A=2,B=0,X=3ace

第三部,设计测试用例满足判定覆盖,如表3.2所示。其中,if((A>1)&&(B==0)),

if ((A==2)||(X>1))为源程序的两个判定。在此,考虑两个判定的每个分支被执行一次即可。

用例编号测试用例覆盖路径
1A=3,B=0,X=1A-C-D
2A=2,B=1,X=3A-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种取值分别被执行一次即可

用例编号测试用例覆盖条件
1A=2,B=0,X=3A>1 B=0 A==2 X>1
2A=-1,B=2,X=1A<=1 B!=0 X<=1

第五步,设计测试用例满足条件判定覆盖,如表3.4所示。在此, 需要同时满足条件覆盖和判定覆盖

条件判定覆盖测试用例

用例编号测试用例覆盖路径覆盖条件
1a-c-ea>1 b=0 a=2 x>12,0,4
2a-b-da<=1 b!=0 a!=2 x<=11,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)八种组合情况均被执行一次即可

表条件组合覆盖测试用例

用例编号测试用例覆盖条件组合
1A=2,B=0,X=4A>1 B=0 A=2 X>1
22,3,1A>1 B!=0 A=2 x<=1
31,0,1a<=1 b=0 a!=2, x<=1
41,2,1a<=1 b!=0 a!=2 x<=1

注意:

条件组合仅仅针对同一个判定语句内存在多个条件的情况,在此情况下,讲这些条件的取值进行笛卡尔乘积组合即可。也就是说,对于不同的判定无需考虑条件组合,以及对但条件的判断语句仅需要满足自身所有取值即可

第七步,设计测试用例满足路径覆盖。再次,需满足程序中所有可能的路径被执行一次的要求

用例编号测试用例覆盖路径
1A=1,b=1,x=1a-b-d
21,1,2a-b-e
33,0,6a-c-d
42,0,4a-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所示

语句覆盖是用例

用例编号测试用例覆盖路径
11,1a-b-e-f
21,-1a-c-d-f

第三步,设计测试用例满足判定覆盖其中。if((x>0)&&(y>0)) if(software<0)为源程序的两个判定。再次,考虑两个判定的每个分支执行一次即可

判定覆盖测试用例

用例编号测试用例覆盖路径
11,1a-b-e-f
21,-1a-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种取值均被执行一次

条件覆盖测试用例

用例编号测试用例覆盖路径
1x=3,y=3a-b-e-f
2x=-3,y=0a-c-d-f

第五步,设计测试用例满足条件判定覆盖,需要同时满足条件覆盖和判定覆盖

条件判定覆盖

用例编号测试用例覆盖路径
1x=3,y=3a-b-e-f
2x=-3,y=0a-c-d-f

第六步,设计测试用例满足条件组合覆盖(x>0)&&(y>0) (x>0)&&(y<=0) (x<0)&&(y>0) (x<=0)&&(y<=0)四种情况,以及software<0和 software>=0两种 取值均被执行一次即可

条件组合覆盖测试用例

用例编号测试用例覆盖路径
11,1a-b-e-f
2-1,0
-1,2

第七步,设计测试用例满足路径覆盖

用例编号测试用例覆盖路径
11,1a-b-e-f
-1,100acef
abdf
-1,-1acdf

相关文章:

逻辑覆盖测试用例设计

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

面试官:说一下MySQL中的锁机制吧

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

STL库中list的迭代器实现痛点分析

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

字符编码对比(GBK、Unicode、UTF-8)

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

【百面成神】Redis基础11问,你能坚持到第几问

前 言 &#x1f349; 作者简介&#xff1a;半旧518&#xff0c;长跑型选手&#xff0c;立志坚持写10年博客&#xff0c;专注于java后端 ☕专栏简介&#xff1a;纯手打总结面试题&#xff0c;自用备用 &#x1f330; 文章简介&#xff1a;Redis最基础、重要的11道面试题 文章目录…...

十大排序算法极简汇总篇

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

数据结构笔记

文章目录第一章&#xff1a;数据结构与算法第二章&#xff1a;稀疏数组和队列一 、稀疏sparsearray 数组&#xff08;一&#xff09;案例需求&#xff08;二&#xff09;稀疏数组介绍&#xff08;三&#xff09;应用实列&#xff08;四&#xff09;代码实现二、队列&#xff08…...

web前端框架——Vue的特性

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

提权工具推荐(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…...

树莓派编程控制继电器及继电器组

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

oracle和mysql的区别

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

<Linux开发> linux应用开发-之-uart通信开发例程

一、简介 串口全称叫做串行接口&#xff0c;串行接口指的是数据一个一个的按顺序传输&#xff0c;通信线路简单。使用两条线即可. 实现双向通信&#xff0c;一条用于发送&#xff0c;一条用于接收。串口通信距离远&#xff0c;但是速度相对会低&#xff0c;串口是一种很常用的工…...

基于深度学习的安全帽检测系统(YOLOv5清新界面版,Python代码)

摘要&#xff1a;安全帽检测系统用于自动化监测安全帽佩戴情况&#xff0c;在需要佩戴安全帽的场合自动安全提醒&#xff0c;实现图片、视频和摄像头等多种形式监测。在介绍算法原理的同时&#xff0c;给出Python的实现代码、训练数据集&#xff0c;以及PyQt的UI界面。安全帽检…...

Linux - 进程控制(进程替换)

0.引入创建子进程的目的是什么&#xff1f;就是为了让子进程帮我执行特定的任务让子进程执行父进程的一部分代码如果子进程想执行一个全新的程序代码呢&#xff1f; 那么就要使用进程的程序替换为什么要有程序替换&#xff1f;也就是说子进程想执行一个全新的程序代码&#xff…...

Java中 ==和equals的区别是什么?

作用&#xff1a; 基本类型&#xff0c;比较值是否相等引用类型&#xff0c;比较内存地址值是否相等不能比较没有父子关系的两个对象equals()方法的作用&#xff1a; JDK 中的类一般已经重写了 equals()&#xff0c;比较的是内容自定义类如果没有重写 equals()&#xff0c;将…...

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. 前言 前面我们讲了&#xff0c;应用层、传输层&#xff1b;本章讲网络层。 应用层&#xff1a;我…...

空间信息智能应用团队研究成果介绍及人才引进

目录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的特点、局限以…...

图像分类卷积神经网络模型综述

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

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...