姓名
学号
实验成绩
年级、班
2016 级 软 件
工程二班
安阳师范学院计算机与信息工程学院
综合性、设计性实验报告书
实 验 课 程:
软件测试技术
实验指导教师:
宋翠叶
实 验 时 间:
2018.11.6~2018.11.13
实 验 题 目:
测试用例设计与自动化执行
实验类型:
□ 综合性
设计
计算机信息工程学院结合性、设计性实验报告书
一、 实验目的与要求
1. 掌握等价类划分法和边界值法等黑盒测试用例设计方法;
2. 掌握动态测试的基本过程,熟练编写自定义的测试程序,完成测试的执行与分析。
3. 针对三角形判定需求和下一日问题描述两个问题,分别完成以下四步工作:
1) 设计函数接口(并明确测试对象)
2) 初步实现函数(编译链接通过即可)
3) Case 设计与编制(给出设计过程和设计结果)
4) 应用 Junit4 框架,完成参数化测试类编写与运行
4. 应用 Junit4 实现两个函数接口的打包测试
二、 实验仪器设备及实验环境
硬件:实验室 PC 机,一人一台;
软件:Windows 系统,JDK+eclipse 环境, JUnit 框架, Office 办公软件
三、 总的设计思想、实验原理等
针对待测程序,在明确其功能需求之后,可综合应用各种测试用例设计方法完成测试用
例的设计,从而巩固所学方法;通过将测试输入、实际结果与预期结果的比较、整体测试结
果的统计等过程以程序方式实现,可加深对动态测试的理解,提高测试能。通过本报告的要
求,增强文档规范意识和文档撰写能力。
四、 三角形判定问题实验步骤
问题描述:一个程序需读入三个正数,把这三个数值看作一个三角形的三条
边的长度值。如果输入不合法,输出“Illegal Input”;否则如果这三条边构不
成三角形,则输出“构不成三角形”;否则输出构成三角形的类型,如“普通三
角形”,“直角三角形”,“等腰三角形”,“等腰直角三角形”或“等边三角形”。
待实现函数接口列表:
序号
1
函数名称
}
Triangle{
2
3
GetTriangl
eType(){ }
main() { }
待测试接口列表:
序号
1
函数名称
testGetTri
angleType(
)
throws
Exception
{
}
形参列表
返回值类型
功能简述
double a,
double b,
double c,
\
String[]
args
\
string
void
定义三个值作为三边,并在
接下来的语句中附给 side1,
side2,side3
用于判断三角形的类型
简单运行一个等边三角形的
例子
形参列表
返回值类型
功能简述
/
void
判断预期输出与实际输出是
否一样
计算机信息工程学院结合性、设计性实验报告书
1. 初步实现函数(编译链接通过即可)
public String GetTriangleType() //判断三角形类型
{
if(side1<0||side2<0||side3<0)
try {
return "Illegal Input";
} catch (Exception e) {
// TODO Auto-generated catch block
}
if(side1+side2<=side3||side1+side3<=side2||side2+side3<=side1)
try {
return "构不成三角形";
} catch (Exception e) {
// TODO Auto-generated catch block
}
if(side1==side2&&side2==side3)//等边三角形
return "等边三角形";
else if(side1==side2||side2==side3||side1==side3)//等腰三角形
{
if(Math.abs(side1*side1-(side2*side2+side3*side3))<0.001
||Math.abs(side2*side2-(side1*side1+side3*side3))<0.001
||Math.abs(side3*side3-(side1*side1+side2*side2))<0.001)
return "等腰直角三角形";
else
return"等腰三角形";
}
else if(Math.abs(side1*side1-(side2*side2+side3*side3))<0.001
||Math.abs(side2*side2-(side1*side1+side3*side3))<0.001
||Math.abs(side3*side3-(side1*side1+side2*side2))<0.001)
return "直角三角形";
else//一般三角形
return "一般三角形";
}
2. Case 设计与编制(给出设计过程和设计结果)
等价类说明
等价类精化条件说明
A.仅构成普通三角形 构不成其他特殊类型
A
A
A
构不成其他特殊类型
构不成其他特殊类型
构不成其他特殊类型
测试用例
编号
1
2
3
4
输入
数据
2,3,4
3,2,4
2,5,6
6,2,7
预期
输出
普通三角形
普通三角形
普通三角形
普通三角形
计算机信息工程学院结合性、设计性实验报告书
B. 仅构成等腰三角形 能构成等腰三角形
B
B
但构不成其他特殊类型
能构成等腰三角形
但构不成其他特殊类型
能构成等腰三角形
但构不成其他特殊类型
C. 构成等腰直角三角
形
构成等腰三角形且满足直
角三角形条件
C
D. 构成直角三角形
D
D
D
构成等腰三角形且满足直
角三角形条件
仅构成直角三角形
但构不成其他特殊类型
仅构成直角三角形
但构不成其他特殊类型
仅构成直角三角形
但构不成其他特殊类型
仅构成直角三角形
但构不成其他特殊类型
5
6
7
8
9
10
11
12
13
E. 等边三角形
构成三角形,且三边相等 14
E
构成三角形,且三边相等 15
F. 够不成三角形
无法构成三角形
F
无法构成三角形
16
17
G.
Illegal Input
G
G
输入值包含 0,负数或字符 18
输入值包含 0,负数或字符 19
输入值包含 0,负数或字符 20
3. 参数化测试
@RunWith(Parameterized.class)
public class TriangleTest {
3,2,2
2,3,2
4,5,5
等腰三角形
等腰三角形
等腰三角形
1,1,
1.414213
2,2,
2.828426
3,4,5
等 腰 直 角 三
角形
等 腰 直 角 三
角形
直角三角形
4,3,5
直角三角形
5,12,13
直角三角形
6,8,10
直角三角形
2,2,2
3,3,3
2,2,6
1,1,2
-1,2,3
1,-1,3
1,2,-1
等边三角形
等边三角形
够 不 成 三 角
形
够 不 成 三 角
形
Illegal Input
Illegal Input
Illegal Input
private Triangle t;
private double s1;
private double s2;
private double s3;
private String exp_type;//预期值
private boolean excepted;
public TriangleTest(double s1,double s2,double s3,boolean excepted,String
type) throws Exception{
this.s1 = s1;
this.s2 = s2;
this.s3 = s3;
this.excepted = excepted;
this.exp_type = type;
}
计算机信息工程学院结合性、设计性实验报告书
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Before
public void setUp() throws Exception {
t = new Triangle(s1,s2,s3);
}
@After
public void tearDown() throws Exception {
}
@Parameters
public static Collection data(){
Object[][] object = {
{2,3,4,"一般三角形"},
{3,2,4,"一般三角形"},
{2,5,6,"一般三角形"},
{6,2,7,"一般三角形"},
{2,2,3,"等腰三角形"},
{2,3,2,"等腰三角形"},
{4,5,5,"等腰三角形"},
{1,1,1.414213,"等腰直角三角形"},
{2,2,2.828426,"等腰直角三角形"},
{3,3,3,"等边三角形"},
{2,2,2,"等边三角形"},
{3,4,5,"直角三角形"},
{4,3,5,"直角三角形"},
{5,12,13,"直角三角形"},
{6,8,10,"直角三角形"},
{2,2,6,"构不成三角形"},
{1,1,2,"构不成三角形"},
{-1,2,3,"Illegal Input"},
{1,-1,3,"Illegal Input"},
{1,2,-1,"Illegal Input"},
};
return Arrays.asList(object);
}
@Test
public void testGetTriangleType() throws Exception { //比较预期值与实际值
String result_type = t.GetTriangleType();
assertEquals(exp_type,result_type);
}
计算机信息工程学院结合性、设计性实验报告书
}
五、 下一日问题实验步骤
问题名称:NextDate 问题
输入:年、月、日,表示一个日期
输出:年、月、日,表示输入日期的下一天的日期
如果输入不合理,输出“不合法日期”
年的范围规定在[1850,2800]之间
待实现函数接口列表:
序号
1
2
3
函数名称
NextDate( ){
}
theday
main() { }
形参列表
String lastdate
\
返回值类型
功能简述
定义年,月,日,构造函数
String lastdate
String[] args
string
void
得出下一天的日期
简单测试一下
待测试接口列表:
序号
1
函数名称
GetnextdateT
est( ){ }
\
形参列表
返回值类型
功能简述
void
判断预期输出与实际输出是
否一样
1. 初步实现函数(编译链接通过即可)
public String theday(String lastdate) {
day=day+1;
if(day>date[year][month]) {
day=1;
month++;
if(month>12) {
month=1;
year++;
}
}
String fix; //生成年月日的字符串
fix=""+year+"-";
if(month<10) fix = fix +0+month+"-";
fix = fix +month+"-";
else
if(day<10) fix = fix +0+day;
else
return fix;
fix=fix+day;
}
2. Case 设计与编制(给出设计过程和设计结果)
计算机信息工程学院结合性、设计性实验报告书
设条件桩如下:
C1:年是否为闰年
C2:月份是哪类月
C3:日是否在月末
动作桩如下:
A1:年份不动
A2:年份加 1
A3:月份不动
A4:月份加 1
A5:月份变为 1
A6:日期加 1
A7:日期变为 1
1
Y
2
Y
1,2,3,4,
5,6,7,8,
9,10,11
1,2,3,4,
5,6,7,8,
9,10,11
Y
√
N
√
√
√
桩
C1 年是否
为闰年
C2 月份是
哪类月
C3 日是否
在月末
A1 年份不
动
A2 年份加
1
A3 月份不
动
A4 月份加
√
1
A5 月份变
为 1
A6 日期加
1
A7 日期变
√
为 1
3
Y
12
Y
√
√
√
4
Y
12
N
√
√
5
N
6
N
1,2,3,4,
5,6,7,8,
9,10,11
1,2,3,4,
5,6,7,8,
9,10,11
N
√
√
Y
√
√
√
√
√
7
N
12
Y
√
√
√
8
N
12
N
√
√
√
输入条件说明
闰年前十一个月月末
闰年前十一个月月末
闰年前十一个月非月末
闰年前十一个月非月末
闰年十二月月末
闰年十二月月末
测试用例编号
1
2
3
4
5
6
输入数据
2012-01-31
2012-02-29
2016-03-03
2020-11-11
2024-12-31
2020-12-31
预期输出
2012-02-01
2012-03-01
2016-03-04
2020-11-12
2025-01-01
2021-01-01
计算机信息工程学院结合性、设计性实验报告书
闰年十二月非月末
闰年十二月非月末
平年前十一个月月末
平年前十一个月月末
平年前十一个月非月末
平年前十一个月非月末
平年十二月月末
平年十二月月末
平年十二月非月末
平年十二月非月末
7
8
9
10
11
12
13
14
15
16
2000-12-01
2012-12-15
2013-01-31
2013-02-28
2015-03-03
2021-11-11
2026-12-31
2027-12-31
2001-12-01
2019-12-15
2000-12-02
2012-12-16
2013-02-01
2013-03-01
2015-03-04
2021-11-12
2027-01-01
2028-01-01
2001-12-02
2019-12-16
3. 参数化测试类
@RunWith(Parameterized.class)
public class NextDateTest {
private NextDate nextDate;
private String nString;
private String exp_type;//预期日期
public NextDateTest(String nString,String type)
throws Exception{
this.nString=nString;
this.exp_type = type;
}
@Before
public void setUp() throws Exception {
nextDate = new NextDate(nString);
}
@Parameters
public static Collection data(){
Object[][] object = {
{"2012-01-31","2012-02-01"},
{"2012-02-29","2012-03-01"},
{"2016-03-03","2016-03-04"},
{"2020-11-11","2020-11-12"},
{"2024-12-31","2025-01-01"},
{"2020-12-31","2021-01-01"},
{"2000-12-01","2000-12-02"},
{"2012-12-15","2012-12-16"},
{"2013-01-31","2013-02-01"},
{"2013-02-28","2013-03-01"},
{"2015-03-03","2015-03-04"},