軟件測試
題目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);
}
}
}