标签:基于 ann slist 实验目的 ges ... ring 代码 ret
掌握基于覆盖理论与基本路径的基本白盒测试方法和实践
运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结。
根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的Junit脚本。
所有的覆盖的技术:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,基本路径测试方法。
包括的内容有:
1) 被测原代码
package com.test;
import java.util.Scanner;
public class TestPractice {
/*闰年判断
* 返回值为true:该年为闰年
* 返回值为false:该年为平年
*/
public static boolean isLeapYear(int y)
{
if((y % 4 == 0 && y % 100 != 0)||y % 400 == 0)
return true;
else
return false;
}
//下一天判断,返回值为下一天的日期,格式是xxxx年x月x日
public static String NextDate(int y, int m, int d)
{
//判断年份是否超出范围
if(1912 <= y && y <= 2050)
{
//判断月份是否超出范围
if(1 <= m && m <= 12)
{
//大月判断,每个月只有31天
if(m == 1||m == 3||m == 5||m == 7||m == 8||m ==10||m == 12)
{
if(1 <= d && d < 31)
return y+"年"+m+"月"+(d+1)+"日";
else if(d == 31)
{
if(m == 12)
return (y+1)+"年1月1日";
else
return y+"年"+(m+1)+"月1日";
}
else
return "日期超出范围";
}
//小月判断,每个月只有30天
else if(m == 4||m == 6||m == 9||m == 11)
{
if(1 <= d && d < 30)
return y+"年"+m+"月"+(d+1)+"日";
if(d == 30)
return y+"年"+(m+1)+"月1日";
else
return "日期超出范围";
}
/*二月份在平年和闰年天数不同
* 所以需要分开统计
* */
else
{
if(isLeapYear(y))
{
if(1 <= d && d < 29)
return y+"年"+m+"月"+(d+1)+"日";
if(d == 29)
return y+"年"+(m+1)+"月1日";
else
return "日期超出范围";
}
else
{
if(1 <= d && d < 28)
return y+"年"+m+"月"+(d+1)+"日";
if(d == 28)
return y+"年"+(m+1)+"月1日";
else
return "日期超出范围";
}
}
}
else
return "月份超出范围";
}
else
{
return "年份超出范围";
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while(true)
{
System.out.print("请输入日期:");
int y = scan.nextInt();
if(y == -1) break;
int m = scan.nextInt();
int d = scan.nextInt();
System.out.println(NextDate(y,m,d));
}
}
}
2)依据覆盖技术,测试用例列表:
DD路径图:

①语句覆盖:
|
用例ID |
输入值 |
执行路径 |
预期输出 |
||
|
y |
m |
d |
|||
|
1 |
2017 |
5 |
12 |
A-B-C-D-E-F-+3 |
2017年5月13日 |
|
2 |
2017 |
12 |
31 |
A-B-C-D-E-G-H-I-+3 |
2018年1月1日 |
|
3 |
2017 |
5 |
31 |
A-B-C-D-E-G-H-J-+3 |
2017年6月1日 |
|
4 |
2017 |
5 |
32 |
A-B-C-D-E-G-K-+3 |
日期超出范围 |
|
5 |
2017 |
4 |
12 |
A-B-C-D-L-M-+3 |
2017年4月13日 |
|
6 |
2017 |
4 |
30 |
A-B-C-D-L-N-O-+3 |
2017年5月1日 |
|
7 |
2017 |
4 |
31 |
A-B-C-D-L-N-P-+3 |
日期超出时间 |
|
8 |
2016 |
2 |
12 |
A-B-C-D-L-Q-R-+3 |
2016年2月13日 |
|
9 |
2016 |
2 |
29 |
A-B-C-D-L-Q-S-T-+3 |
2016年3月1日 |
|
10 |
2016 |
2 |
30 |
A-B-C-D-L-Q-S-U-+3 |
日期超出范围 |
|
11 |
2017 |
2 |
27 |
A-B-C-D-L-Q-V-W-+3 |
2017年2月28日 |
|
12 |
2017 |
2 |
28 |
A-B-C-D-L-Q-V-X-Y-+3 |
2017年3月1日 |
|
13 |
2017 |
2 |
29 |
A-B-C-D-L-Q-V-X-Z-+3 |
日期超出范围 |
|
14 |
2017 |
13 |
12 |
A-B-C-+1-+3 |
月份超出范围 |
|
15 |
2051 |
4 |
12 |
A-B-+2-+3 |
年份超出范围 |
②分支覆盖(判断覆盖):
|
用例ID |
输入值 |
执行路径 |
预期输出 |
||
|
y |
m |
d |
|||
|
1 |
2017 |
5 |
12 |
A-B-C-D-E-F-+3 |
2017年5月13日 |
|
2 |
2017 |
12 |
31 |
A-B-C-D-E-G-H-I-+3 |
2018年1月1日 |
|
3 |
2017 |
5 |
31 |
A-B-C-D-E-G-H-J-+3 |
2017年6月1日 |
|
4 |
2017 |
5 |
32 |
A-B-C-D-E-G-K-+3 |
日期超出范围 |
|
5 |
2017 |
4 |
12 |
A-B-C-D-L-M-+3 |
2017年4月13日 |
|
6 |
2017 |
4 |
30 |
A-B-C-D-L-N-O-+3 |
2017年5月1日 |
|
7 |
2017 |
4 |
31 |
A-B-C-D-L-N-P-+3 |
日期超出时间 |
|
8 |
2016 |
2 |
12 |
A-B-C-D-L-Q-R-+3 |
2016年2月13日 |
|
9 |
2016 |
2 |
29 |
A-B-C-D-L-Q-S-T-+3 |
2016年3月1日 |
|
10 |
2016 |
2 |
30 |
A-B-C-D-L-Q-S-U-+3 |
日期超出范围 |
|
11 |
2017 |
2 |
27 |
A-B-C-D-L-Q-V-W-+3 |
2017年2月28日 |
|
12 |
2017 |
2 |
28 |
A-B-C-D-L-Q-V-X-Y-+3 |
2017年3月1日 |
|
13 |
2017 |
2 |
29 |
A-B-C-D-L-Q-V-X-Z-+3 |
日期超出范围 |
|
14 |
2017 |
13 |
12 |
A-B-C-+1-+3 |
月份超出范围 |
|
15 |
2051 |
4 |
12 |
A-B-+2-+3 |
年份超出范围 |
③路径覆盖:
|
用例ID |
输入值 |
执行路径 |
预期输出 |
||
|
y |
m |
d |
|||
|
1 |
2017 |
5 |
12 |
A-B-C-D-E-F-+3 |
2017年5月13日 |
|
2 |
2017 |
12 |
31 |
A-B-C-D-E-G-H-I-+3 |
2018年1月1日 |
|
3 |
2017 |
5 |
31 |
A-B-C-D-E-G-H-J-+3 |
2017年6月1日 |
|
4 |
2017 |
5 |
32 |
A-B-C-D-E-G-K-+3 |
日期超出范围 |
|
5 |
2017 |
4 |
12 |
A-B-C-D-L-M-+3 |
2017年4月13日 |
|
6 |
2017 |
4 |
30 |
A-B-C-D-L-N-O-+3 |
2017年5月1日 |
|
7 |
2017 |
4 |
31 |
A-B-C-D-L-N-P-+3 |
日期超出时间 |
|
8 |
2016 |
2 |
12 |
A-B-C-D-L-Q-R-+3 |
2016年2月13日 |
|
9 |
2016 |
2 |
29 |
A-B-C-D-L-Q-S-T-+3 |
2016年3月1日 |
|
10 |
2016 |
2 |
30 |
A-B-C-D-L-Q-S-U-+3 |
日期超出范围 |
|
11 |
2017 |
2 |
27 |
A-B-C-D-L-Q-V-W-+3 |
2017年2月28日 |
|
12 |
2017 |
2 |
28 |
A-B-C-D-L-Q-V-X-Y-+3 |
2017年3月1日 |
|
13 |
2017 |
2 |
29 |
A-B-C-D-L-Q-V-X-Z-+3 |
日期超出范围 |
|
14 |
2017 |
13 |
12 |
A-B-C-+1-+3 |
月份超出范围 |
|
15 |
2051 |
4 |
12 |
A-B-+2-+3 |
年份超出范围 |
3)相应Junit测试脚本、执行结果
package henkepa;
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import java.util.Collection;
import junit.framework.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
//为这个类指定一个ParameterizedRunner
@RunWith(Parameterized.class)
public class checkTest {
private int param1;//存放参数
private int param2;
private int param3;
private String dat;//存放日期
//测试数据,一个是参数,一个是期望结果
@Parameters
public static Collection data(){
return Arrays.asList(new Object[][]{
{2017,2,28,"2017年3月1日"},
{2016,2,28,"2016年2月29日"},
{2016,3,31,"2016年4月1日"},
{2016,12,31,"2017年1月1日"},
{2013,4,30,"2013年5月1日"},
});
}
//构造参数,对变量初始化,加入参数获得测试数据
public checkTest(int param,int param02,int param03,String dat){
this.param1=param;
this.param2=param02;
this.param3=param03;
this.dat=dat;
}
@Test
public void NextDate(){
String d=TestPractice.NextDate(param1,param2,param3);
assertEquals(dat, d);
}
}

4)给出测试参数化和打包测试的脚本,并生成执行结果
package henkepa;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({TestPracticeTest.class,})
public class Test {
}

测试找到的缺陷清单:未找到缺陷
测试总结与心得体会:通过此次实验对白盒测试有了更深的理解;感觉在做的时候语句覆盖、判定覆盖和路径覆盖做起来都是一样的...
标签:基于 ann slist 实验目的 ges ... ring 代码 ret
原文地址:http://www.cnblogs.com/wangkunhuang/p/6708289.html