软件测试实验3
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件测试实验3
广东海洋大学学生实验报告书
实验名称实验三黑盒测试(2)课程名称软件测试成绩
学院(系)软件学院专业软件工程班级
学生姓名学号实验地点实验日期
一、实验目的:
1. 掌握黑盒测试方法中的等价类划分方法和边界值分析方法。
2. 掌握组合分析工具Pict的使用
二、实验内容:
1.编写NextDate()函数,结合等价类划分方法和边界值分析方法来设计测试用例,并运行测试验
证是否存在缺陷。
(详细代码在后面的附录中)
测试程序源代码已检查
下面是对NextDate程序划分等价类:
●年份在1900-2010内(含边界)
●月份在1-12月内(含边界)
●闰年二月29天
●输入必须是整数
●输入月份对应天数一定
●输入必须是八个数
有效等价类无效等价类
年份在1900-2010内(含边界)(1) 1.年份小于1900(7)
2.年份大于 2010(8)
输入必须为整数(2)输入非整数(9)
输入月份在1-12内(含边界)(3) 1.月份小于1(10)
2.月份大于12(11)
输入闰年2月29天(4)输入闰月无29号(12)
输入月份正确天数(5)输入日期不与月份对应(13)
输入为八个数(6) 1.输入大于八个数(14)
2.输入小于八个数(15)
根据等价类划分测试用例:
测试用例覆盖等价类
19010331 (1)(2)(3)(5)(6)
20000229 (1)(2) (3)(4)(5)(6)
19010228 (1)(2)(3)(5)(6)
18990130 (7) (2) (3) (5) (6)
20110130 (8)(2)(3)(5)(6)
*asd1238 (1)(9)(3)(5)(6)
19010030 (1)(2)(10)(5)(6)
19011330 (1)(2)(11)(5)(6)
19010229 (1)(2)(3)(12)(5)(6)
19010332 (1)(2)(3)(13)(6)
190103112 (1)(2)(3)(5)(14)
1901312 (1)(2)(3)(5)(15)
2.假设一个基于登录的测试集,需要如下参数:帐户、密码、验证码、按钮。
每个参数都要列出其
对应的值,如下所示:
帐户名: 空,不存在,超长,超短,正常
密码: 空,超长,超短,不匹配,正常
验证码: 空,超长,超短,不匹配,正常
按钮: 确定,取消
上述的测试如果做完全的测试,需要多少个测试用例?请说明组合分析算法的思想,并使用Pict工具生成测试用例。
1)从列表可以看出,有250种组合方式。
在短时间内对其做测试,将是非常困难的。
研究表明,通
过PICT,测试用例的数量将大大降低;同时,也可保证很高的测试覆盖率。
2) 组合分析算法思想:
通过对测试变量的所有维度及维度的组合,避免穷举测试所有维度的所有值及其组合来减少测试用例数量的一种方法
3)PICT是一个命令行工具;测试用例的输入、输出可通过文本模式的文件进行。
C:\Documents and Settings\tongzhan>pict
Pairwise Independent Combinatorial Testing
Usage: pict model [options]
Options:
/o:N - Order of combinations (default: 2)
/d:C - Separator for values (default: ,)
/a:C - Separator for aliases (default: |)
/n:C - Negative value prefix (default: ~)
/e:file – File with seeding rows
/r[:N] - Randomize generation, N – seed
/c - Case-sensitive model evaluation
/s - Show model statistics
PICT安装的时候,在系统环境中自动增加了PICT的PATH,所以可在任意路径下执行。
如直接通过PICT执行参数文档,测试用例会打印在屏幕上,如下所示:
D:\测试方法\两两测试>pict login.txt
帐户名密码验证码按钮
不存在空不匹配确定
空正常正常取消
超长不匹配空确定
超短超短空取消
超短空超长取消
空超长不匹配确定
正常超短正常确定
不存在不匹配超短取消
空正常超短确定
超长超长正常取消
正常正常不匹配取消
正常不匹配超长确定
不存在超长正常确定
超短不匹配正常确定
不存在正常空确定
超长空超短取消
超短超长超短取消
正常空空确定
超短超长空确定
超短正常正常确定
空超短超短确定
空超短超长确定
正常超长超短取消
不存在空正常确定
超长超短不匹配取消
超短不匹配不匹配取消
超长正常超长取消
空空空确定
空不匹配超长取消
不存在超短超长取消
空超长超长确定
也可把测试用例保存到指定文件中,如下所示:
D:\测试方法\两两测试>pict login.txt > 登录.xls 三、实验总结
通过本次试验加深了对黑盒测试中的“划分等价类”分析方法、“边界类”分析方法的了解。
并学会了如何使用pict软件。
附录
NextDate()函数源代码
1、调用java类库
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class CTime{
private String strTime;
public CTime(String strTime)
{
this.strTime=strTime;
}
public void printNextTime()
{
Calendar cal=Calendar.getInstance();
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
try
{
date=sdf.parse(this.strTime);
cal.setTime(date);
cal.add(Calendar.DATE,1);
System.out.println(sdf.format(cal.getTime()));
}
catch(Exception e)
{
//TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args)
{
CTime time=new CTime("2005-12-31");
time.printNextTime();
}
}
2、自定义编写函数
package NextDate;
//NextDate函数部分代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class NextDate {
private int year;
private int month;
private int day;
public NextDate(int year, int month, int day) { this.year = year; this.month = month;
this.day = day;
}
public NextDate() {
year = 1;
month = 1;
day = 1;
}
public int getyear() {
return this.year;
}
public int getmonth() {
return this.month;
}
public int getday() {
return this.day;
}
public boolean isleap() {
boolean fla1 = true;
if ((this.year % 4 == 0 && this.year % 100 != 0) || (this.year % 400 == 0)) {
fla1 = true;
} else {
fla1 = false;
}
return fla1;
}
public void nextday() { switch (this.month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
if (this.day == 31) {
this.month = this.month + 1; this.day = 1;
} else {
this.day = this.day + 1;
}
break;
case 4:
case 6:
case 9:
case 11:
if (this.day == 30) {
this.month = this.month + 1; this.day = 1;
this.day = this.day + 1;
}
break;
case 12:
if (this.day == 31) {
this.month = 1;
this.day = 1;
this.year = this.year + 1; } else {
this.day = this.day + 1; }
break;
case 2:
if (this.isleap()) {
if (this.day == 29) { this.day = 1;
this.month = 3;
} else {
this.day = this.day + 1;
}
}else {
if (this.day == 28) {
this.day = 1;
this.month = 3;
} else {
this.day = this.day + 1; }
}
break;
}
}
public boolean nextday(NextDate date) { boolean fla = true; if ((date.year < 1912) || (date.year > 2050)) { fla = false;
if ((date.month < 1) || (date.month > 12)) { fla = false;
} else {
switch (date.month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
if (date.day == 31) {
date.month = date.month + 1;
date.day = 1;
} else {
if(date.day<31&&date.day>=1){
date.day = date.day + 1;
}
else{
fla=false;
}
}
break;
case 4:
case 9:
case 11:
if (date.day == 30) {
date.month = date.month + 1;
date.day = 1;
} else {
if(date.day<30&&date.day>=1){ date.day = date.day + 1; }
else{
fla=false;
}
}
break;
case 12:
if (date.day == 31) {
date.month = 1;
date.day = 1;
date.year = date.year + 1;
} else
{if(date.day<31&&date.day>=1) {
date.day = date.day + 1;
}
else{
fla=false;
}
}
case 2:
if (this.isleap()) {
if (this.day == 29) {
this.day = 1;
this.month = 3;
} else {
if(this.day<29&&this.day>=1){ this.day = this.day + 1;
}
else{
fla=false;
}
}
} else {
if (this.day == 28) {
this.day = 1;
this.month = 3;
} else {
if(this.day<28&&this.day>=1) {
this.day = this.day + 1;
}
else{
fla=false;
}
}
}
break;
}
}
}
return fla;
}
public boolean isDate(NextDate date) { boolean flag = true; if ((date.year < 1912) || (date.year > 2050)) {
flag = false;
System.out.println("年的值不在指定范围内"); } else {
if ((date.month < 1) || (date.month > 12)) {
flag = false;
System.out.println("月的值不在指定范围内");
} else {
switch (date.month) {
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if ((date.day > 31) || (date.day < 1)) {
flag = false;
System.out.println("日期的值不在指定范围内"); }
break;
case 4:
case 6:
case 9:
case 11:
if ((date.day > 30) || (date.day < 1)) {
flag = false;
System.out.println("日期的值不在指定范围内");
}
break;
case 2:
if (date.isleap()) {
if ((date.day > 29) || (date.day < 1)) {
flag = false;
System.out.println("本月是闰月,请在1-29之间重新输入!"); } } else {
if ((date.day > 28) || (date.day < 1)) {
flag = false;
System.out.println("本月是2月,请在1-28之间重新输入!"); } }
}
}
}
return flag;
}
public static void main(String args[]) throws IOException { NextDate date = new NextDate();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.println("输入年:");
date.year = Integer.parseInt(br.readLine());
System.out.println("输入月:");
date.month = Integer.parseInt(br.readLine());
System.out.println("输入日:");
date.day = Integer.parseInt(br.readLine());
if (date.isDate(date)) {
System.out.println("今天是" + date.year + "年" + date.month + "月"
+ date.day + "日!");
}
if (date.nextday(date)) {
System.out.println("下一天是" + date.year + "年" + date.month + "月"
+ date.day + "日!");
}
}
}
}
指导教师日期
注:请用A4纸书写,不够另附纸。
第页,共页。