前言

记录一次软件测试课程的课后作业,作业内容是白盒测试中的基本路径测试,步骤如下

  1. 分析程序的控制流
  2. 计算环形复杂度
  3. 找出基本路径
  4. 设计测试用例
  5. 执行测试用例(要求使用JUnit)

作业要求

使用白盒测试用例设计方法为下面的程序设计测试用例(基本路径测试)并用JUnit测试:

  • 程序要求

    10个铅球中有一个假球(比其他铅球的重量要轻),用天平三次称出假球。

  • 程序设计思路

    第一次使用天平分别称5个球,判断轻的一边有假球;拿出轻的5个球,取出其中4个第二次称,两边分别放2个球:如果两边同重,则剩下的球为假球;若两边不同重,拿出轻的两个球称第三次,轻的为假球。

  • 递交材料

    测试用例设计电子稿、源程序、JUnit测试截图。

程序代码及控制流图

程序代码

文件SearchBall.java内容如下。

注意不要让代码的行号变动,程序流图中节点的编号是根据这份代码里每条执行语句里的行号对应的。

package module;

public class SearchBall {
private static int x[]=new int[10];
public SearchBall(){}
public void setBWeight(int w[]){
for(int i=0;i<w.length;i++){
x[i]=w[i];
}
}
public String BeginSearch(){
if(x[0]+x[1]+x[2]+x[3]+x[4]<x[5]+x[6]+x[7]+x[8]+x[9]){
if(x[1]+x[2]==x[3]+x[4]){
return "1号是假球";
}
if(x[1]+x[2]<x[3]+x[4]){
if (x[1]<x[2]) {
return "2号是假球";
}else {
return "3号是假球";
}
}else {
if (x[3]<x[4]){
return "4号是假球";
}
else{
return "5号是假球";
}
}
}else {
if(x[6]+x[7]==x[8]+x[9]){
return "6号是假球";
}
if(x[6]+x[7]<x[8]+x[9]) {
if (x[6]<x[7]) {
return "7号是假球";
}else {
return "8号是假球";
}
}else {
if (x[8]<x[9]) {
return "9号是假球";
}else {
return "10号是假球";
}
}
}
} }

程序控制流图

下图中节点中的数字是对应可执行语句在上面代码中的行号;上的Y代表判定结果为真,N代表判定结果为假。

计算环形复杂度

控制流图\(G\)的环形复杂度计算公式:\(V(G)=E-N+2\),其中\(E\)为控制流图中边的数量,\(N\)是控制流图中的节点数量。

函数BeginSearch()的控制流图的环形复杂度为

\[V(G)=18-19+2=1
\]

基本路径

从程序流图中可知,共有10条基本路径,具体如下

路径编号 经过节点
1 12-13-14
2 12-13-16-17-18
3 12-13-16-17-20
4 12-13-16-23-24
5 12-13-16-23-27
6 12-31-32
7 12-31-34-35-36
8 12-31-34-35-38
9 12-31-34-41-42
10 12-31-34-41-44

测试用例设计与执行

测试用例设计

路径编号 用例输入 期待输出
1 {5, 10, 10, 10, 10, 10, 10, 10, 10, 10} "1号是假球"
2 {10, 5, 10, 10, 10, 10, 10, 10, 10, 10} "2号是假球"
3 {10, 10, 5, 10, 10, 10, 10, 10, 10, 10} "3号是假球"
4 {10, 10, 10, 5, 10, 10, 10, 10, 10, 10} "4号是假球"
5 {10, 10, 10, 10, 5, 10, 10, 10, 10, 10} "5号是假球"
6 {10, 10, 10, 10, 10, 5, 10, 10, 10, 10} "6号是假球"
7 {10, 10, 10, 10, 10, 10, 5, 10, 10, 10} "7号是假球"
8 {10, 10, 10, 10, 10, 10, 10, 5, 10, 10} "8号是假球"
9 {10, 10, 10, 10, 10, 10, 10, 10, 5, 10} "9号是假球"
10 {10, 10, 10, 10, 10, 10, 10, 10, 10, 5} "10号是假球"

Junit执行测试用例

基于JUnit生成的测试代码,我补充了测试函数BeginSearch()的代码,文件SearchBallTest.java内容如下。

package test.module; 

import org.junit.Test;
import org.junit.Before;
import org.junit.After;
import module.SearchBall;
import static org.junit.Assert.assertEquals; /**
* SearchBall Tester.
*
* @author <Authors name>
* @since <pre>4月 7, 2020</pre>
* @version 1.0
*/
public class SearchBallTest { @Before
public void before() throws Exception {
} @After
public void after() throws Exception {
} /**
*
* Method: setBWeight(int w[])
*
*/
@Test
public void testSetBWeight() throws Exception {
//TODO: Test goes here...
} /**
*
* Method: BeginSearch()
*
*/
@Test
public void testBeginSearch() throws Exception {
SearchBall obj = new SearchBall();
int[] input;
int ballIndex;
// 遍历测试各个基本路径
for(int i=0;i<10;++i){
// 生成用例输入
input = new int[]{10, 10, 10, 10, 10, 10, 10, 10, 10, 10};
input[i]=5;
obj.setBWeight(input);
// 测试用例输出
ballIndex = i+1;
assertEquals(ballIndex+"号是假球", obj.BeginSearch());
}
}
}

执行函数testBeginSearch(),得到如下图所示的结果(从下图也可以看到项目的结构)

其它


作者:@臭咸鱼

转载请注明出处:https://www.cnblogs.com/chouxianyu/

欢迎讨论和交流!


JUnit白盒测试之基本路径测试:三次找到假球的更多相关文章

  1. Android APP压力测试(三)之Monkey日志自动分析脚本

    Android APP压力测试(三) 之Monkey日志自动分析脚本 前言 上次说要分享Monkey日志的分析脚本,这次贴出来分享一下,废话不多说,请看正文. [目录] 1.Monkey日志分析脚本 ...

  2. 用junit Test Suite来组合测试

    在测试过程中,有时可能想一次性运行所有的测试类,或是选择性的运行某些测试类.这样的话我们就可以用TestSuite来统一管理我们的测试类. 比如说我现在有三个测试类:junitTest4,TestCa ...

  3. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

  4. 【转】c# Image获得图片路径的三种方法 winform

    代码如下:c# pictureBox1.Image的获得图片路径的三种方法 winform 1.绝对路径:this.pictureBox2.Image=Image.FromFile("D:\ ...

  5. Sencha 基础Demo测试,三种showView的方法

    直接贴代码吧 Ext.define("build.controller.MainController",{ extend:"Ext.app.Controller" ...

  6. JUnit使用参数测试和一组测试

    JUnit该参数测试和一组测试使用简单 参数测试 作为替代阵列int a0,a1,a2喜欢,当测试加法assertEquals(3.0, h.add(1, 2), 0.1);相当于声明一个变量,要測试 ...

  7. c# pictureBox1.Image的获得图片路径的三种方法 winform

    代码如下:c# pictureBox1.Image的获得图片路径的三种方法 winform 1.绝对路径:this.pictureBox2.Image=Image.FromFile("D:\ ...

  8. JUnit 3.8 通过反射测试私有方法

    测试私有(private)的方法有两种: 1)把目标类的私有方法(修饰符:private)修改为(public),不推荐,因为修改了源程序不佳 2)通过反射 (推荐) 代码演示: 目标程序 Priva ...

  9. JUnit 5和Selenium基础(三)

    在这一部分教程中,将介绍JUnit 5的其他功能,这些功能将通过并行运行测试,配置测试顺序和创建参数化测试来帮助减少测试的执行时间.还将介绍如何利用Selenium Jupiter功能,例如通过系统属 ...

随机推荐

  1. 在Shadow DOM使用原生模板

    原生模板的优势 延迟了资源加载 延迟了加载和处理模板所引用的资源的时机,这样,用户就能够在模板中使用任意多的资源,却不阻碍页面的渲染. 延迟了渲染内容 无论模板在什么位置,浏览器不会把模板中的内容直接 ...

  2. 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/ZRjGGy 可交互视频 此视频是可 ...

  3. JAVA基础之IO流知识总结

    一.IO流体系图 IO常用的几个流: [I/O流原理作用] Input/Output:输入输出机制 输入机制:允许java程序获取外部设备的数据(磁盘,光盘,网络等). 输出机制:保留java程序中的 ...

  4. 3DGIS与BIM集成集成技术及铁路桥梁可视化系统

    3DGIS与BIM的集成技术 3DGIS与BIM的集成技术包括2部分:一是将Revit软件生成的BIM针对3DGIS的快速无损格式转换,这种转换包括几何信息(如形状.位置等信息)和属性信息(如建筑信息 ...

  5. form里面文件上传并预览

    其实form里面是不能嵌套form的,如果form里面有图片上传和其他input框,我们希望上传图片并预览图片,然后将其他input框填写完毕,再提交整个表单的话,有两种方式! 方式一:点击上传按钮的 ...

  6. Map - 与君初相识

    前言 生活中,我们常会看到这样一种集合:IP地址与主机名,身份证号与个人等,这种一 一对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对应关系的对象,即 java.util.Map 接口 ...

  7. flask 链接mysql数据库 小坑

    #config.py MYSQL_NAME = 'root' MYSQL_PASSWORD = 'zyms90bdcs' MYSQL_HOST = 'xxxx' MYSQL_POST = ' MYSQ ...

  8. vue 接口 对象数组的传入传出

    数组传入 对象的话用{...obj} <selectFile :tableData="[...tableData]" @uploadSuccess="data =& ...

  9. SpringBoot图文教程17—上手就会 RestTemplate 使用指南「Get Post」「设置请求头」

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1-Spr ...

  10. Jenkinsfile里定义对象和函数,获取git提交人, 发送钉钉通知

    自从开始使用Jenkinsfile作为Jenkins配置后就一发不可收,因为开发者自定义CI脚本实在太方便了. 比如,最近开发的以一个项目涉及多人,提交冲突挺多的,有的人自己没编译通过就提交了,导致后 ...