软件测试覆盖率

软件测试覆盖率简介

  1、定义:覆盖率是用来度量测试完整性的一个手段,同时也是测试技术有效性的一个度量。
  2、计算:覆盖率=(至少被执行一次的item数)/item的总数
  3、特点
     1)通过覆盖率数据,可以检测我们的测试是否充分
     2)分析出测试的弱点在哪方面
     3)指导我们设计能够增加覆盖率的测试用例,有效提高测试质量,但是测试用例设计不能一味追求覆盖率,因为测试成本随覆盖率的增加而增加。

软件测试覆盖率分类

覆盖率按照测试方法大体上可以划分为三大类,即白盒覆盖(white-Box Coverage)、灰盒覆盖(Gray-Box coverage)和黑盒覆盖(Black-Box Coverage)。

白盒覆盖率(white-Box Coverage)

白盒覆盖率中使用的最常见的就是逻辑覆盖率(Logical Coverage ),也叫代码覆盖率(Code Coverage)或者结构化覆盖率(Structural Coverage),我们常见的逻辑覆盖包括:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。
 1、语句覆盖(Statement Coverage)
     1)定义:在测试时,运行被测程序后,程序中被执行的可执行语句的比率。
     2)计算公式:语句覆盖率=(至少被执行一次的语句数量)/(可执行的语句总数)
     3)100%语句覆盖率含义:在测试时,首先设计若干个测试用例,然后运行被测程序,使程序中的每个可执行语句至少执行一次。
     4)特点:语句覆盖可以检验每个可执行语句,但是即使语句覆盖率达到了100%,也会有缺陷发现不了,所以覆盖率只是我们度量的手段。
2、判定覆盖(Decision Coverage)/分支覆盖率(Branch Coverage)
     1)定义:在测试时,运行被测程序后,程序中所有判断语句的取真分支和取假分支被执行到的比率。
     2)计算公式:判定覆盖率=(判定结果被评价的次数)/(判定结果的总数)
     3)100%条件覆盖率含义:在测试时,首先设计若干个测试用例,然后运行测试程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断的真假值均曾被满足。
     4)特点
       (1)若判定覆盖达到100%,则语句覆盖必为100%。
       (2)即使判定覆盖率达到了100%,也会有缺陷发现不了。

 

3、条件覆盖(Condition Coverage)
     1)定义:在测试时,运行被测程序后,程序中所有判断语句中每个条件的可能取值(真值和假值)出现过的比率。
     2)计算公式:条件覆盖率=(条件操作数值至少被评价一次的数量)/(条件操作数值的总数)
     3)100%条件覆盖率含义:在测试时,首先设计若干个测试用例,然后运行被测试程序,要使每个判断中每个条件的可能取值至少满足一次。
     4)特点:覆盖条件的测试用例不一定覆盖判定。
4、判定-条件覆盖(Decision Condition Coverage)/分支条件覆盖(Branch Condition Coverage)
     1)定义:在测试时,运行被测程序后,程序中所有判断语句中每个条件的可能取值(真值和假值)和每个判断本身的判定结果(为真为假)出现的比率。
     2)计算公式:判定-条件覆盖率=(条件操作数值或判定结果至少被评价一次的数量)/(条件操作数值的总数+判定结果的总数)
     3)100%判定-条件覆盖率含义:设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断本身的所有可能结果至少执行一次。换言之,即是要求各个判断的所有的可能的取值组合至少执行一次。
     4)特点
       (1)判定-条件覆盖率实际上就是判定覆盖率和条件覆盖率的组合。
       (2)采用判定-条件覆盖,逻辑表达式中的错误不一定能够查得出来。
5、条件组合覆盖(Condition combination coverage)
     1)定义:在测试时,运行被测程序后,所有语句中原子条件所有的可能的取值结果组合出现过的比率。
     2)计算公式:条件组合覆盖率=(至少被执行一次的条件组合)/(总的可能的条件组合数)
     3)100%条件组合覆盖率含义:设计足够的测试用例,使得判断中条件的各种可能组合至少出现过一次。
     4)特点:若条件组合覆盖率为100%,则语句覆盖率、判定覆盖率、条件覆盖率和判定-条件覆盖率必为100%。
6、路径覆盖(Path Coverage)
     1)定义:在测试时,运行被测程序后,程序中所有可能的路径被执行的比率。
     2)计算公式:路径覆盖率=(至少被执行一次的路径数)/(总的路径数)
     3)100%路径覆盖率含义:设计足够的测试用例,要求覆盖程序中所有可能的路径。
     4)特点
       (1)路径覆盖比判定条件覆盖更强,但是不能包含判定条件覆盖。
       (2)若路径覆盖率为100%,则语句覆盖率、判定覆盖率必为100%。
小结:逻辑覆盖率可以作为软件测试的一个度量,但是,即使达到了100%的逻辑覆盖率,仍然无法保证程序的正确性。

灰盒覆盖率(Gray-Box Coverage)

函数覆盖和接口覆盖可以归为灰盒测试的范畴。
1、函数覆盖
     1)定义:它表示在测试中,有哪些函数被测试到了,其被测试到的频率有多大,这些函数在系统所有函数中占的比例有多大。
     2)计算公式:函数覆盖=(至少被执行一次的函数数量)/(系统中函数的总数)
     3)特点:是针对一个系统或者子系统测试的。
2、接口覆盖(Interface Coverage)/入口点覆盖(Entry-Point Coverage)
     1)定义:要求通过设计一定的用例使得系统的每个接口被测试到。
     2)计算公式:接口覆盖=(至少被执行一次的接口数量)/(系统中接口的总数)         

黑盒覆盖率(Black-Box Coverage)

在实际测试中,与黑盒相关的覆盖率比较少,主要是功能覆盖率(Function Coverage),其中最常见的是需求覆盖。
需求覆盖
     1)定义:它表示在测试中,有哪些函数被测试到了,其被测试到的频率有多大,这些函数在系统所有函数中占的比例有多大通过设计一定的测试用例,要求每个需求点都被测试到。
     2)计算公式:需求覆盖=(被验证到的需求数量)/(总的需求总数)

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【框架学习 | 第五篇】SpringMVC(常用注解、获取请求参数、域对象共享数据、拦截器、异常处理、上传/下载文件)

文章目录 1.SpringMVC简介1.1定义1.2主要组件1.3工作流程1.3.1简要流程1.3.2详细流程 1.4优缺点 2.常用注解3.获取请求参数3.1通过 HttpServletRequest 获取请求参数3.2通过控制器方法的形参获取请求参数3.2.1请求路径参数与方法形参一致3.2.2请求路径参数与方法形参不一致3.2.…

3、设计模式之工厂模式1(Factory)

工厂模式是什么?     工厂模式是一种创建者模式,用于封装和管理对象的创建,屏蔽了大量的创建细节,根据抽象程度不同,主要分为简单工厂模式、工厂方法模式以及抽象工厂模式。 简单工厂模式 看一个具体的需求 看一个…

【划重点】自动引流软件隐藏风险!?你不知道的网络危机与应对策略

先来看成果,评论888领取 在互联网快速发展的今天,自动引流软件以其高效的推广方式和便捷的操作,成为许多商家和个人提升网络知名度的重要工具。然而,这种看似无害的软件,却潜藏着不容忽视的网络安全风险。本文将深入解…

Linux操作系统启动流程

文章目录 1. Linux操作系统启动流程图2.运行流程(1) 加载BIOS(2) 读取MBR(3) GRUB引导(4) 加载Kernel(5) 设定Inittab运行等级(6) 加载…

如何布局马斯克推特上喊的meme币赛道

2024年的牛市正如火如荼的开展,截止当下,比特币已经站上了7.3万美元,远超2021年高点的6.9万美元,比特币的未来是一片大海。 除了比特币的一枝独秀之外,meme板块可以说是市场资金最青睐的。尤其是马斯克在X分享PEPE相关…

初步了解序列化和反序列化

01什么是序列化和反序列化 序列化是将对象转化为字符串以便存储的一种方式。而反序列化恰好是序列化的逆过程,反序列化会将字符串转化为对象供程序使用。 常见的php系列化和反系列化方式主要有:serialize,unserialize;json_enco…

LVGL移植到ARM开发板(GEC6818开发板)

LVGL移植到ARM开发板(GEC6818开发板) 一、LVGL概述 LVGL(Light and Versatile Graphics Library)是一个开源的图形用户界面库,旨在提供轻量级、可移植、灵活和易于使用的图形用户界面解决方案。 它适用于嵌入式系统…

四、MySQL

MySQL MySQL1.初识网站2.安装MySQL2.1 下载(最重要的一点是路径中不能有中文,哪怕是同级目录也不行)2.2安装补丁2.3安装2.4创建配置文件2.5初始化 3.启动MySQL4.连接测试4.1 设置密码4.2 查看已有的文件夹(数据库)4.3 …

【SSM】任务列表案例 基本CRUD SSM整合

文章目录 一、案例功能预览二、接口分析三、前端工程导入四、后端程序实现和测试4.1 准备4.2 功能实现4.2.1 分页查询显示4.2.2 添加计划4.2.2 删除计划4.2.3 修改计划 4.3 前后联调 一、案例功能预览 Github 地址 : ssm-integration-part 二、接口分析 学习计划…

【C++初阶】C++入门(上)

C的认识 ①什么是C? ​ C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。 ​ 于是1982年,Bjarne Stroustrup(本…

激活函数理解

前言 为什么神经网中非要有各种各样的激活函数?他们有什么用?没有他们会怎样?常见的激活函数有哪些,他们都有什么特点? 如果我们不运用激活函数,神经网络的输出信号将仅仅是一个简单的线性函数。线性方程…

【DL经典回顾】激活函数大汇总(七)(CReLU RReLU附代码和详细公式)

激活函数大汇总(七)(CReLU & RReLU附代码和详细公式) 更多激活函数见激活函数大汇总列表 一、引言 欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里,激活函数扮演着不可或…

Solidity 智能合约开发 - 基础:基础语法 基础数据类型、以及用法和示例

苏泽 大家好 这里是苏泽 一个钟爱区块链技术的后端开发者 本篇专栏 ←持续记录本人自学两年走过无数弯路的智能合约学习笔记和经验总结 如果喜欢拜托三连支持~ 本篇主要是做一个知识的整理和规划 作为一个类似文档的作用 更为简要和明了 具体的实现案例和用法 后续会陆续给出…

【应急响应靶场web1】

文章目录 前言 一、web1 1、应急响应 1)背景 2)报错处理 3)webshell查杀 4)网站日志排查 5)隐藏账户 6)挖矿程序 2、渗透复现 1)弱口令登录 2)插件上传 3)getshell 总结 …

还有没有免费裁剪音频的软件?15款音乐裁剪软件测评!(不断更新)

市面上有哪些免费裁剪音频的软件呢?今天,我们就来为大家详细介绍15款热门的音乐裁剪软件,并对其进行深度测评。 裁剪音频软件测评1:金舟音频大师 好评指数:4.5/5 优点罗列:支持音频格式转换、裁剪、降噪、…

Linux-vim显示乱码

Linux运维工具-ywtool 目录 一.问题二.解决2.1 编辑VIM的配置文件2.2 添加以下内容 一.问题 用vim编辑的时候,中文显示乱码 二.解决 2.1 编辑VIM的配置文件 vim ~/.vimrc #如果这个文件不存在,创建一个即可2.2 添加以下内容 添加完成以后就不会在出现中文乱码了 set fil…

爬虫的去重

去重基本原理 爬虫中什么业务需要使用去重 防止发出重复的请求防止存储重复的数据 在爬取网页数据时,避免对同一URL发起重复的请求,这样可以减少不必要的网络流量和服务器压力,提高爬虫的效率,在将爬取到的数据存储到数据库或其…

一个简单而绝妙的思维技巧

在文章的最开头,我想先问你一个问题: 你希望未来的你是什么样的?你希望未来的你比现在的你过得更好,还是过得更糟? 我想,应该没有人会选择后者吧? 尽管从客观上说,未来的我们很可能…

配置安装 Kuboard - kubernetes

目录 安装 Kuboard v3 - kubernetes | Kuboard 将官方yaml文件拿到本地 等待 Kuboard v3 就绪 访问 Kuboard 安装 Kuboard v3 - kubernetes | Kuboard Kuboard的官方非常丰富,大家也可以参考官网教程 将官方yaml文件拿到本地 ​kubectl apply -f https://add…

自定义指令控制权限

1.新建directives auth.ts 2.完整的auth.ts import { wmsStore } from "/store/pinia";//判断是否有某个角色的函数 function hasRoles(role: any) {const pinaRoles wmsStore().roles;if (typeof role string) {return pinaRoles.includes(role)} else if (Array…