JUnit白盒测试之基本路径测试:三次找到假球
前言
记录一次软件测试课程的课后作业,作业内容是白盒测试中的基本路径测试,步骤如下
- 分析程序的控制流
- 计算环形复杂度
- 找出基本路径
- 设计测试用例
- 执行测试用例(要求使用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()
的控制流图的环形复杂度为
\]
基本路径
从程序流图中可知,共有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白盒测试之基本路径测试:三次找到假球的更多相关文章
- Android APP压力测试(三)之Monkey日志自动分析脚本
Android APP压力测试(三) 之Monkey日志自动分析脚本 前言 上次说要分享Monkey日志的分析脚本,这次贴出来分享一下,废话不多说,请看正文. [目录] 1.Monkey日志分析脚本 ...
- 用junit Test Suite来组合测试
在测试过程中,有时可能想一次性运行所有的测试类,或是选择性的运行某些测试类.这样的话我们就可以用TestSuite来统一管理我们的测试类. 比如说我现在有三个测试类:junitTest4,TestCa ...
- 「译」JUnit 5 系列:条件测试
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
- 【转】c# Image获得图片路径的三种方法 winform
代码如下:c# pictureBox1.Image的获得图片路径的三种方法 winform 1.绝对路径:this.pictureBox2.Image=Image.FromFile("D:\ ...
- Sencha 基础Demo测试,三种showView的方法
直接贴代码吧 Ext.define("build.controller.MainController",{ extend:"Ext.app.Controller" ...
- JUnit使用参数测试和一组测试
JUnit该参数测试和一组测试使用简单 参数测试 作为替代阵列int a0,a1,a2喜欢,当测试加法assertEquals(3.0, h.add(1, 2), 0.1);相当于声明一个变量,要測试 ...
- c# pictureBox1.Image的获得图片路径的三种方法 winform
代码如下:c# pictureBox1.Image的获得图片路径的三种方法 winform 1.绝对路径:this.pictureBox2.Image=Image.FromFile("D:\ ...
- JUnit 3.8 通过反射测试私有方法
测试私有(private)的方法有两种: 1)把目标类的私有方法(修饰符:private)修改为(public),不推荐,因为修改了源程序不佳 2)通过反射 (推荐) 代码演示: 目标程序 Priva ...
- JUnit 5和Selenium基础(三)
在这一部分教程中,将介绍JUnit 5的其他功能,这些功能将通过并行运行测试,配置测试顺序和创建参数化测试来帮助减少测试的执行时间.还将介绍如何利用Selenium Jupiter功能,例如通过系统属 ...
随机推荐
- 前端每日实战:92# 视频演示如何用纯 CSS 创作一颗逼真的土星
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/EpbaQX 可交互视频 此视频是可 ...
- 纯CSS实现带返回顶部右侧悬浮菜单
这是我做个人网页的时候加上的带返回顶部右侧悬浮菜单效果,如下图, 使用工具是Hbuilder. 代码如下: <!DOCTYPE html> <html> <head> ...
- leetcode 249 250 set和map的简单用法
leetcode249,利用了STL中的set class Solution { public: vector<int> intersection(vector<int>&am ...
- 处理公共CDN突然失效的情况
公共CDN的使用 刚开始开发我的博客时,使用的bootcdn,发现他们被黑过,虽然想骂那些“黑客”,但是我们也没办法去防范,只能从自己的网站上入手解决. 那时我还没技术解决这个问题,网上搜过,大都只提 ...
- Java并发编程(02):线程核心机制,基础概念扩展
本文源码:GitHub·点这里 || GitEE·点这里 一.线程基本机制 1.概念描述 并发编程的特点是:可以将程序划分为多个分离且独立运行的任务,通过线程来驱动这些独立的任务执行,从而提升整体的效 ...
- 原生js实现随着滚动条滚动,导航会自动切换的效果
最近学习前端,把前面用原生js写的一段有关tab切换效果的代码贴上,实现的效果比较简陋,请大家见谅 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...
- turtle学习笔记续集
turtle(海龟)是Python重要的标准库之一,它能够进行基本的图形绘制.turtle图形绘制的概念诞生于1969年,成功应用于LOGO编程语言. turtle库绘制图形有一个基本框架:一个小海龟 ...
- 基于 HTML5 WebGL 的发动机 3D 可视化系统
前言 工业机械产品大多体积庞大.运输成本高,在参加行业展会或向海外客户销售时,如果没有实物展示,仅凭静态.简单的图片说明书介绍,无法让客户全面了解产品,不仅工作人员制作麻烦,客户看得也费力.如 ...
- ipadmini iOS8.4.1系统精简
主要是删除一些系统自带的应用.语言,以及关闭不需要的进程. 精简之后运行流畅性还是能看得出有所提升的.(流畅的玩点游戏还是可行的) 文件的操作可以用Filza.iFile,也可以用爱思助手,但是爱思助 ...
- js实践篇:例外处理Try{}catch(e){}
本文转载至:http://blog.csdn.net/ocean20/article/details/7301008 程序开发中,编程人员经常要面对的是如何编写代码来响应错误事件的发生,即例外处理(e ...