软件测试
题目1
电话号码问题 某城市电话号码由三部分组成。它们的名称和内容分别是: (1)地区码:空白或三位数字; (2)前 缀:非’0’或’1’的三位数字; (3)后 缀:4 位数字。 假定被测程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的电话号码。根据该 程序的规格说明,作等价类的划分,并设计测试方案。
输入 |
有效等价类 |
无效等价类 |
地区码 |
①空白 ②三位数字 |
③字母 ④标点符号等特殊字符 ⑤ 超过三位的数字⑥大于0小于3的数字 |
前缀 |
⑦非0或1的三位数字 |
⑧三位0或者三位1 ⑨字母⑩标点符号等特殊字符⑪小于三位的数字⑫大于三位的数字 |
后缀 |
⑬四位数字 |
⑭小于四位的数字⑮字母等特殊符号⑯大于四位的数字 |
测试方案
覆盖的等价类 |
地区码 |
前缀 |
后缀 |
预期结果 |
① ⑦⑬ |
空白 |
123 |
4567 |
正确 |
② ⑦⑬ |
234 |
123 |
4567 |
正确 |
③ |
asd |
123 |
4567 |
错误 |
④ |
-#¥ |
000 |
4567 |
错误 |
⑤ |
1234 |
123 |
4567 |
错误 |
⑥ |
12 |
123 |
4567 |
错误 |
⑧ |
213 |
000 |
4567 |
错误 |
⑨ |
213 |
asdsad |
4567 |
错误 |
⑩ |
213 |
@$ |
4567 |
错误 |
⑪ |
213 |
12 |
4567 |
错误 |
⑫ |
213 |
12345 |
4567 |
错误 |
⑭ |
213 |
12345 |
123 |
错误 |
⑮ |
213 |
12345 |
asd#$% |
错误 |
⑯ |
213 |
12345 |
45673445 |
错误 |
题目2
题目二:三角形问题 根据下面给出的规格说明,利用等价类划分的方法,给出足够的测试用例。 一个程序读入三个整数。把此三个数值看成是一个三角形的三个边。这个程序要打印出信息, 说明不是三角形、三角形是三边不等的、是等腰的、还是等边的。
输入 |
有效等价类 |
无效等价类 |
a,b,c |
①a=b=c ②a+b>c&&a+c>b&&b+c>a ③ a!=b&&b!=c&&a!=c ④a==b&&b!=c or a==c &b!=c or b==c&&b!=a |
⑤ 输入的是小数⑥输入是字母或者符号 ⑦a+b<=c or b+c <=a or c+b<=a |
测试用例
覆盖的等价类 |
a |
b |
c |
预期结果 |
① ② |
2 |
2 |
2 |
等边三角形 |
②④ |
1 |
2 |
2 |
等腰三角形 |
②③ |
2 |
3 |
4 |
三边不等三角形 |
⑤ |
2.3 |
2 |
3 |
输入错误 |
⑥ |
¥ |
sd |
4 |
输入错误 |
⑦ |
1 |
2 |
3 |
边长度输入错误 |
题目3
日期问题 用决策表测试法测试以下程序:该程序有三个输入变量month、day、year(month 、 day 和year 均为整数值,并且满足:1≤month≤12 和1≤day≤31),分别作为输入日期的月份、日、年份,通过程序 可以输出该输入日期在日历上隔一天的日期。例如,输入为 2004 年11 月29 日,则该程序的输出为 2004 年12 月1 日。 (1) 分析各种输入情况,列出为输入变量 month 、 day 、 year 划分的有效等价类。 (2) 分析程序的规格说明,并结合以上等价类划分的情况,给出问题规定的可能采取的操作(即 列出所有的动作桩)。 (3) 根据 (1) 和 (2) ,画出简化后的决策表。
输入 |
有效等价类 |
无效等价类 |
year |
①1900<=year<=10000 |
②字母③标点符号等特殊字符 ④小于0的数字⑤不为整数 |
month |
⑥ 1<=month<=12 |
⑦小于0的数字 ⑧字母标点符号等特殊字符⑨大于12的数字⑩不为整数 |
day |
如果大月⑪1<=day<=31 如果小月:⑫1<=day<=30 如果闰年2月 1<=days<=29 如果平年 1<=days<=28 |
⑬小于1的数字⑭大月大于31的数字 小月大于30的数字,平年2月大于28的数字,闰年大于29的数字 ⑮字母等特殊字符 ⑯不为整数 |
动作桩:
- 提示 year输入错误
- 提示month输入错误
- 提示day输入错误
- 输出日期
决策表(判定表)
序号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
条件 |
year输入是否正确 |
1 |
0 |
1 |
1 |
0 |
1 |
|
month输入是否正确 |
1 |
1 |
0 |
1 |
0 |
0 |
|
days输入是否正确 |
1 |
1 |
1 |
0 |
1 |
0 |
动作 |
输出日期 |
1 |
0 |
0 |
0 |
0 |
0 |
|
提示year输出错误 |
0 |
1 |
0 |
0 |
1 |
0 |
|
提示month输出错误 |
0 |
0 |
1 |
0 |
0 |
1 |
|
提示day输出错误 |
0 |
0 |
0 |
1 |
0 |
0 |
题目四
生育津贴:生育津贴为女职工产假期间的工资,生育津贴低于本人工资标准的,差额部分由企业补足。(2)参加生育保险累计满一年的职工,在生育(流产)时仍在参保的,按有关规定享受生育保险待遇。(3)生育保险待遇生育津贴发放标准,以职工所在用人单位上年度职工月平均工资为基数按规定假期计发:(职工所在用人单位上年度职工月平均工资/30天 X假期天数)
假期天数:① 正常产假90天(包括产前检查15天);② 独生子女假增加35天;③ 晚育假增加15天;④ 难产假。剖腹产、Ⅲ度会阴破裂增加30天;吸引产、钳产、臀位产增加15天;⑤ 多胞胎生育假,每多生育一个婴儿增加15天;⑥ 流产假:怀孕不满2个月15天;怀孕不满4个月30天;满4个月以上(含4个月)至7个月以下42天;7个月以上遇死胎、死产和早产不成活75天;
设计测试用例
覆盖的等价类 |
假期天数 |
生育津贴 |
① |
90 |
90/30 *月工资 |
①② |
125 |
125/30 *月工资 |
①③ |
105 |
105/30 *月工资 |
① ④难产 |
120 |
120/30 *月工资 |
① ④其他 |
105 |
105/30 *月工资 |
①②③ |
140 |
140/30 *月工资 |
①②④难产 |
155 |
155/30 *月工资 |
①②④其他 |
140 |
140/30 *月工资 |
①③⑤ |
105+15*(婴儿数-1) |
105+15*(婴儿数-1)/30 *月工资 |
①④⑤ |
120+15*(婴儿数-1) |
105+15*(婴儿数-1)/30 *月工资 |
①②③ ④ |
170 |
170/30 *月工资 |
①②③ ④⑤ |
170+15*(婴儿数-1) |
170+15*(婴儿数-1)/30 *月工资 |
⑥不满两个月 |
15 |
15/30 *月工资 |
⑥不满四个月 |
30 |
30/30 *月工资 |
⑥四个月以上七个月以下 |
42 |
42/30 *月工资 |
⑥七个月以上 |
75 |
75/30 *月工资 |
知识储备:
等价类测试用例的设计
1.无效等价类只能有一个 每个测试用例 且都要覆盖
2. 设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;
3. 设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止
条件桩,动作桩
- 条件桩 列出问题的所有条件
- 动作桩 列出可能针对问题所采取的动作 如正确打印内容,提示year出错,提示month出错
代码
测试日历
from sys import argv
from pymongo import mongo_client
from datetime import timedelta,datetime
s=raw_input()
a=s.split(" ")
class OutboundsError(Exception):
def __init__(self,errormsg):
self.__errormsg=errormsg
def __str__(self):
return self.__errormsg
Bigmonth=[1,3,5,7,8,10,12]
try:
year=int(a[0])
month=int(a[1])
days=int(a[2])
if year<1900 or year>=10000:
raise OutboundsError("年份输入有误")
if month<1 or month>=12:
raise OutboundsError("月份输入错误")
if year%400==0 or year%4==0 and year%100!=0:
if month==2 and days>29:
raise OutboundsError("天数输入错误")
elif month==2 and days>28:
raise OutboundsError("天数输入错误")
if month in Bigmonth and days>31:
raise OutboundsError("天数输入错误")
elif month not in Bigmonth and days>30:
raise OutboundsError("天数输入错误")
days=datetime(year,month,days)
afterday=days+timedelta(days=2)
print "{} {} {}".format(afterday.year,afterday.month,afterday.day)
except IndexError as e:
print("输入格式错误")
except ValueError as e:
print("输入信息错误")
except OutboundsError as e1:
print(e1)
测试三角形
import java.util.Scanner;
public class first {
public static void main(String[] args) {
try {
Scanner sc=new Scanner(System.in);
String abc= sc.nextLine();
String sd[]=abc.split(" ");
int a=Integer.parseInt(sd[0]);
int b=Integer.parseInt(sd[1]);
int c=Integer.parseInt(sd[2]);
if (a<0||b<0||c<0){
System.out.println("输入错误");
System.exit(1);
}
else if (a+b<=c||a+c<=b||b+c<=a)
System.out.println("输入的三条边长度不符合要求");
else if (a==b&&b==c)
System.out.println("等边三角形");
else if (a!=b&&b!=c&&a!=c)
System.out.println("三角形三边都不相等");
else System.out.println("等腰三角形");
}
catch (Exception e){
System.out.println("输入错误");
System.out.println(e);
}
}
}