白盒测试-路径覆盖

​ 程序中的路径是执行程序时经过的分支的集合。路径覆盖法是指设计一定数量的测试用例运行被测程序,使程序中的所有路径都至少被执行一次。路径覆盖率的计算方法为:测试时至少被执行过一次的路径总数 / 程序的总路径数。

栗子

public static int test(int a, int b, int c) {int result = 0;if (a == 0 || b > 2) {result = b - a;}if (a > 0 && c > 0) {result = c * a;}return result;
}

第 1 步:分析待测试代码,画出程序的流程图。

在这里插入图片描述

第 2 步:分析流程图。

从上图中可以看出,这段代码共有两个判断语句,每个判断语句分别有取真值、取假值两个分支。那么,程序中共有如下四条路径:

  • 路径 1 :A - C 路径 2 :A - D 路径 3 :B - C 路径 4 :B - D

第 3 步:编写测试用例。

​ 根据路径覆盖的定义,我们需要设计一些测试用例,使程序中的每个路径至少被执行一次。

测试用例编号输入数据预期结果路径覆盖情况
testcase_01a = -2 , b = 1 , c = 9result = 0路径 1 :A - C
testcase_02a = 5 , b = -2 , c = 3result = 15路径 2 :A - D
testcase_03a = 0 , b = 3 , c = 3result = 3路径 3 :B - C
testcase_04a = 1 , b = 5 , c = 9result = 9路径 4 :B - D

​ 路径覆盖可以使程序中的每一条路径都经过测试,确保程序执行路径的正确性。但是,对于判断语句多且复杂、循环次数多的程序,需覆盖的路径数量可能非常庞大,无法在短时间内测试完,例如,下图是一段代码的流程图,图中含有多个判断语句、循环语句,如果要将所有路径都测试到,将花费大量的时间,所以,在实际的项目测试中基本不可能把所有路径都覆盖到。

在这里插入图片描述

​ 路径覆盖可以保证程序中的所有路径都被覆盖到,但对于包含多且复杂的判断语句、循环语句的程序来说,要覆盖每一条路径将会非常困难。

代码实现

​ Demo.java

public static int test(int a, int b, int c) {int result = 0;if (a == 0 || b > 2) {result = b - a;}if (a > 0 && c > 0) {result = c * a;}return result;
}

​ TestDemo4.java

import org.junit.Assert;
import org.junit.Test;public class TestDemo4 {@Testpublic void test01() {Assert.assertEquals(0, Demo.test(-2, 1, 9));}@Testpublic void test02() {Assert.assertEquals(15, Demo.test(5, -2, 3));}@Testpublic void test03() {Assert.assertEquals(3, Demo.test(0, 3, 3));}@Testpublic void test04() {Assert.assertEquals(9, Demo.test(1, 5, 9));}}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT 和 Elasticsearch:使用 Elastic 数据创建自定义 GPT

作者:Sandra Gonzales ChatGPT Plus 订阅者现在有机会创建他们自己的定制版 ChatGPT,称为 GPT,这替代了之前博客文章中讨论的插件。基于本系列的第一部分的基础 —— 我们深入探讨了在 Elastic Cloud 中设置 Elasticsearch 数据和创建向量嵌…

13.多通道视频流缓存以及显示架构

1 简介 多通道视频流缓存以及显示架构是一个在数字图像处理中很基础也很重要的一个架构。在图像拼接以及高分辨率图像显示方面应用范围较为广泛。本文将介绍一个四通道的图像显示。可以四个图像信息输入以及拼接到一个显示屏里面。使用的开发板为A7 2 框架图 架构图如下图所示…

基于ollama搭建本地chatGPT

ollama帮助我们可以快速在本地运行一个大模型,再整合一个可视化页面就能构建一个chatGPT,可视化页面我选择了chat-ollama(因为它还能支持知识库,可玩性更高),如果只是为了聊天更推荐chatbox 部署步骤 下载…

【大语言模型】基础:余弦相似度(Cosine similarity)

余弦相似度是一种用来确定两个向量之间相似性的度量。它在数据科学、信息检索和自然语言处理(NLP)等多个领域被广泛使用,用于度量在多维空间中两个向量之间角度的余弦。这个指标捕捉的是方向上的相似性而非大小,使其非常适合比较长…

【Java集合进阶】数据结构(二又树,二又查找树,平衡二又树)

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 …

快速上手Vue

目录 概念 创建实例 插值表达式 Vue响应式特性 概念 Vue是一个用于 构建用户界面 的 渐进式 框架 构建用户界面&#xff1a;基于数据渲染出用户看到的页面 渐进式&#xff1a;Vue相关生态&#xff1a;声明式渲染<组件系统<客户端路由<大规模状态管理<构建工具 V…

Spring Batch

Spring是一个开放源代码的J2EE应用程序框架&#xff0c;由Rod Johnson发起&#xff0c;是针对bean的生命周期进行管理的轻量级容器&#xff08;lightweight container&#xff09;。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题&#xff0c;提供了功能强大IOC、AOP及W…

【数据结构】4.List的介绍

目录 1.什么是List 2.常见接口介绍 3.List的使用 1.什么是List 在集合框架中&#xff0c;List是一个接口&#xff0c;继承自Collection。 Collection也是一个接口&#xff0c;该接口中规范了后序容器中常用的一些方法&#xff0c;具体如下&#xff1a; Iterable也是一个接口…

【菜狗学前端】ES6+笔记(包含Promise及async、await等)

老样子。复制上来的图片都没了&#xff0c;想看原版可以移步对应资源下载(资源刚上传&#xff0c;还在审核中) &#xff08;免费&#xff09;菜狗学前端之ES6笔记https://download.csdn.net/download/m0_58355897/89135424 一 解构赋值 解构赋值 解构指的是把一个数据…

【第十五届】蓝桥杯省赛C++b组

今年的蓝桥杯省赛已经结束了&#xff0c;与以往不同&#xff0c;今年又回到了8道题&#xff0c;而22&#xff0c;23年出现了10道题 大家觉得难度怎么样&#xff0c;欢迎进来讨论&#xff0c;博主今年没参加哈&#xff0c;大家聊聊&#xff0c;我听听大家的意见和看法哈 试题A:…

【C语言】每日一题,快速提升(1)!

调整数组使奇数全部都位于偶数前面 题目&#xff1a; 输入一个整数数组&#xff0c;实现一个函数 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分 所有偶数位于数组的后半部分 解题思路&#xff1a; 给定两个下标left和right&#xff0c;left放在数组的起始…

《经典论文阅读1》YouTubeDNN—基于深度学习的搜推系统开山之作

论文链接&#xff1a; https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/45530.pdf全文由『说文科技』原创出品。版权所有&#xff0c;翻版必究。 这篇发表于2016年九月的文章&#xff0c;在搜索推荐仍然基于矩阵分解的时代&#xff0c;抛…