前言

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

  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. 【MySQL 原理分析】之 Explain & Trace 深入分析全模糊查询走索引的原理

    一.背景 今天,交流群有一位同学提出了一个问题.看下图: 之后,这位同学确实也发了一个全模糊查询走索引的例子: 到这我们可以发现,这两个sql最大的区别是:一个是查询全字段(select *),而一个 ...

  2. 论nw.js的坑~~~感觉我所有的前端能遇到的坑都踩了一遍

    先总结:nw.js 真特么的...难用...文档,我得先百度才能看的稍微明白点文档......!!!!!!我感觉我所有的前端能遇到的坑都踩了一遍,此文针对前后端分离项目,别的先不说 一.不需要在项目里 ...

  3. XCTF---easyjni的WriteUp

    一.题目来源     题目来源:XCTF的mobile区的easyjni题目.     题目下载地址:题目链接地址 二.解题过程     1.下载好题目后,安装到夜神模拟器中,发现有一个输入框和一个按 ...

  4. 【01】openLayers 第一个地图

    效果: 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...

  5. HDFS 客户端读写操作详情

    1. 写操作 客户端向namenode发起上传请求 namenode检查datanode是否已经存有该文件,并且检查客户端的权限 确认可以上传后,根据文件块数返回datanode栈 注:namenod ...

  6. linux4.1.36 解决 SPI 时钟找不到 不生成设备 device

    最初的问题是 编译内核添加了 spi 支持,配置了 board 后,加载25q64驱动不执行probe 函数. 然后发现是,spi-s3c24xx.c 中的 probe 没有执行完就退出了 没有生成 ...

  7. ASP.NET Core 中jwt授权认证的流程原理

    目录 1,快速实现授权验证 1.1 添加 JWT 服务配置 1.2 颁发 Token 1.3 添加 API访问 2,探究授权认证中间件 2.1 实现 Token 解析 2.2 实现校验认证 1,快速实 ...

  8. C语言程序设计(八) 数组

    第八章 数组 //L8-1 #include <stdio.h> int main() { int score1, score2, score3, score4, score5; int ...

  9. 五分钟完成 ABP vNext 通讯录 App 开发

    五分钟完成 ABP vNext 通讯录 App 开发 ABP vNext(后文简称Abp)是 Volo 公司堪称艺术品级的应用开发框架,它基于领域驱动设计(DDD)的思维,创新地采用了模块化的设计.A ...

  10. Kafka的面试题

    1.Kafka的设计是什么样的呢?Kafka将消息以topic为单位进行归纳将向Kafka topic发布消息的程序成为producers.将预订topics并消费消息的程序成为consumer.Ka ...