溫故知識
6 條確定等價類的原則:
① 在輸入條件規定了取值範圍或值的個數的情況下,可以確立一個有效等價類個兩個無效等價類。
② 在輸入條件規定了輸入值的集合或者規定“必須如何”的條件下,可以確立一個有效等價類和一個無效等價類。
③ 在輸入條件是一個布爾量的情況下,可以確定一個有效等價類和一個無效等價類。
④ 在規定了輸入數據的一組值(假定 n 個),並且程序要對每一個值分別處理的情況下,可確立 n 個有效等價類和一個無效等價類。
⑤ 在規定了輸入數據必須遵守的規則的情況下,可確立一個有效等價類(符合規則)和若干個無效等價類(不同角度違反規則)。
⑥ 在確知已劃分的等價類中,各元素在程序處理中的方式不同的情況下,則應再將該等價類進一步地劃分爲更小的等價類
對邊界值設計測試用例,應遵循以下幾條原則:
① 如果輸入條件規定了值的範圍,則應取剛達到這個範圍的邊界的值,以及剛剛超越這個範圍邊界的值作爲測試輸入數據。
② 如果輸入條件規定了值的個數,則用最大個數、最小個數、比最小個數少 1 、比最大個數多 1 的數作爲測試數據。
③ 根據規則說明的每個輸出條件,使用前面的原則 ①。
④ 根據規則說明的每個輸出條件,應用前面的原則 ②。
⑤ 如果程序的規格說明給出的輸入域是有序集合,則應選取集合的第一個元素和最後一個元素作爲測試用例。
⑥ 如果程序中使用了一個內部數據結構,則應當選擇這個內部數據結構邊界上的值作爲測試用例。
⑦ 分析規格說明,找出其他可能的邊界條件。
2014年下半年軟件評測師試題:
某商店爲購買不同數量商品的顧客報出不同的價格,其報價規則如表所示。
購買數量 | 單價(單位:元) |
頭10件(第1件到第10件) | 30 |
第2個10件(第11件到第20件) | 27 |
第3個10件(第21件到第30件) | 25 |
超過30件 | 22 |
如買 11 件需要支付 10×30+1×27=327 元,買 35 件需要支付 10×30+10×27+10×25+5×22=930 元。
現爲該商家開發一個軟件,輸入爲商品數 C (1 ≤ C ≤ 100),輸出爲應付的價錢P。
【問題 1】
請採用等價類劃分法爲該軟件設計測試用例(不考慮 C 爲非整數的情況)。
【問題 2】
請採用邊界值分析法爲該軟件設計測試用例(不考慮健壯性測試,即不考慮 C 不在 1 到 100直接或者是非整數的情況)。
試題分析
【問題 1】
根據等價類劃分法的知識,若規定了輸入數據的取值範圍,則劃分一個有效等價類和兩個無效等價類。
在本題中,輸入值 C 的取值範圍爲:1 ≤ C ≤ 100,則有效等價類爲:{ C | 1 ≤ C ≤ 100 },而兩個無效等價類分別爲{ C | C < 1 }、{ C | C > 100 }。
再根據表中對 C 的不同取值有不同的處理,因此有效的等價類還可以細分爲:{ C | 1 ≤ C ≤ 10 }、{ C | 11 ≤ C ≤ 20 }、{ C | 21 ≤ C ≤ 30 }、{ C | 31 ≤ C ≤ 100 }。
綜上,可得4個有效等價類和2個無效的等價類。
有效 | 無效 | |
頭10件 | { C | 1 ≤ C ≤ 10 } ③ | { C | C < 1 } ①、{ C | C > 100 } ② |
第2個10件 | { C | 11 ≤ C ≤ 20 } ④ | |
第3個10件 | { C | 21 ≤ C ≤ 30 } ⑤ | |
超過30件 | { C | 31 ≤ C ≤ 100 } ⑥ |
【問題 2】
邊界值分析法作爲等價類劃分法的一種補充,是把等價類上的邊界取值作爲測試用例的一種測試方法。題目中要求不考慮健壯性測試,也就是說不用考慮無效等價類的邊界取值,剩下 4 個等價類中有 1 、10 、11 、20 、21 、30 、31 、100 這 8 個邊界值,然後每個等價類中再取 1 個任意值,一共得到 12 個邊界值的測試用例。
參考答案
【問題 1】
序號 | 輸入 C | 輸出 P |
1 | 0 { C | C < 1 } | N/A |
2 | 101 { C | C > 100 } | N/A |
3 | 10 { C | 1 ≤ C ≤ 10 } | 300 |
4 | 15 { C | 11 ≤ C ≤ 20 } | 435 |
5 | 21 { C | 21 ≤ C ≤ 30 } | 595 |
6 | 40 { C | 31 ≤ C ≤ 100 } | 1040 |
【問題 2】
序號 | 輸入 C | 輸出 P |
1 | 1 | 30 |
2 | 5 | 150 |
3 | 10 | 300 |
4 | 11 | 327 |
5 | 15 | 435 |
6 | 20 | 570 |
7 | 21 | 595 |
8 | 25 | 695 |
9 | 30 | 820 |
10 | 31 | 842 |
11 | 35 | 930 |
12 | 100 | 2360 |
2015年下半年軟件評測師試題:
某商店的貨品價格(P)都不大於 20 元(且爲整數),假設各科每次付款爲20元且每次限購一件商品,現有一個人家能在每位顧客購物後給出找零錢的最佳組合(找給顧客貨幣張數最少)。
假定此商店的找零貨幣面值只包括:10 元(N10)、5 元(N5)、1 元(N1)3種。
【問題 1】
請採用等價類劃分法爲該軟件設計測試用例(不考慮 P 爲非整數的情況)並填入到下表中。(<<N1,2>>表示 2 張 1 元,若無輸出或輸入非法,則填 N/A)
序號 | 輸入(商品價格 P) | 輸出(找零錢的組合) |
1 | 20(P=20) | N/A |
2 | 18(任意 15 < P < 20) | <<N1,2>> |
3 | ||
4 | ||
5 | ||
6 | ||
7 | ||
8 | ||
9 | ||
10 |
【問題 2】
請採用邊界值分析法爲該軟件設計測試用例。
試題分析
【問題 1】
根據等價類劃分法的知識,若規定了輸入數據的取值範圍,則劃分一個有效等價類和兩個無效等價類。
在本題中,輸入值 P 的取值範圍爲:1 ≤ P ≤ 20,則有效等價類爲:{ P | 1 ≤ P ≤ 20 },而兩個無效等價類分別爲{ P | P > 20 }、{ P | P < 1 }。分析題目後,可將上述有效等價類{ P | 1 ≤ P ≤ 20 }細分爲8個有效的等價類,分別是:{ P | P = 20 }、{ P | 15 < P < 20 }、{ P | P = 15 }、{ P | 10 < P < 15 }、{ P | P = 10 }、{ P | 5 < P < 10 }、{ P | P = 5 }、{ P | 0 < P < 5 }。
【問題 2】
如果不考慮健壯性測試,也就是如果說不考慮無效等價類的邊界取值,8 個有效等價類中有 20,19,16,15,14,11,10,9,6,5,4,1 這 12 個邊界值,然後每個等價類中再取 1 個任意值,一共得到 16 個邊界值的測試用例({P | P = 20}、{P| P = 15}、{P| P = 10}、{P| P = 5}這 4 個等價類的任意值是 20,15,10,5,與邊界值有重複)。
參考答案
【問題 1】
序號 | 輸入(商品價格 P) | 輸出(找零錢的組合) |
1 | 20(P=20) | N/A |
2 | 18(任意 15 < P < 20) | <<N1,2>> |
3 | 15(P=15) | <<N5,1>> |
4 | 14(任意 10 < P < 15) | <<N5,1>>、<<N1,1>> |
5 | 10 | <<N10,1>> |
6 | 6 | <<N10,1>>、<<N1,4>> |
7 | 5 | <<N10,1>>、<<N5,1>> |
8 | 1 | <<N10,1>>、<<N5,1>>、<<N1,4>> |
9 | 30 | N/A |
10 | 0 | N/A |
【問題 2】
序號 | 輸入(商品價格 P) | 輸出(找零錢的組合) |
1 | 20 | N/A |
2 | 19 | <<N1,1>> |
3 | 18 | <<N1,2>> |
4 | 16 | <<N1,4>> |
5 | 15 | <<N5,1>> |
6 | 14 | <<N5,1>>、<<N1,1>> |
7 | 13 | <<N5,1>>、<<N1,2>> |
8 | 11 | <<N5,1>>、<<N1,4>> |
9 | 10 | <<N10,1>> |
10 | 9 | <<N10,1>>、<<N1,1>> |
11 | 8 | <<N10,1>>、<<N1,2>> |
12 | 6 | <<N10,1>>、<<N1,4>> |
13 | 5 | <<N10,1>>、<<N5,1>> |
14 | 4 | <<N10,1>>、<<N5,1>>、<<N1,1>> |
15 | 3 | <<N10,1>>、<<N5,1>>、<<N1,2>> |
16 | 1 | <<N10,1>>、<<N5,1>>、<<N1,4>> |
2016年下半年軟件評測師試題:
某航空公司的會員卡分爲普卡、銀卡、金卡和白金卡 4 個級別,會員每次搭乘該航空公司航班均可能獲得積分,積分規則如表 1 所示。此外,銀卡及以上級別會員有額外積分獎勵,獎勵規則如表 2 所示。
艙 位 | 艙位代碼 | 積分 |
頭等艙 | F | 200% * K |
Z | 150% * K | |
A | 125% * K | |
公務艙 | C | 150% * K |
D/I | 125% * K | |
R | 100% * K | |
經濟艙 | Y | 125% * K |
B/H/K/L/M/W | 100% * K | |
Q/X/U/E | 50% * K | |
P/S/G/O/J/V/N/T |
會員級別 | 普卡 | 銀卡 | 金卡 | 白金卡 |
級別代碼 | F | S | G | P |
額外積分獎勵 | 0% | 10% | 25% | 50% |
公司開發了一個程序來計算會員每次搭乘航班所累積的積分,程序的輸入包括會員級別 B 、艙位代碼 C 和飛行公里數 K ,程序的輸出爲本次積分 S 。其中,B 和 C 爲單個字母且大小寫不敏感,K 爲正整數,S 爲整數(小數部分四捨五入)。
【問題 1】
採用等價類劃分法對該程序進行測試,等價類表如表 3 所示,請補充空(1)~(7)。
輸入條件 | 有效等價類 | 編號 | 無效等價類 | 編號 |
會員級別 B | F | 1 | 非字母 | 12 |
S | 2 | 非單個字母 | 13 | |
G | 3 | ____(5)____ | 14 | |
____(1)____ | 4 | |||
艙位代碼 C | F | 5 | 非字母 | 15 |
____(2)____ | 6 | ____(6)____ | 16 | |
____(3)____ | 7 | |||
R/B/H/K/L/M/W | 8 | |||
Q/X/U/E | 9 | |||
P/S/G/O/J/V/N/T | 10 | |||
飛行公里數 K | ____(4)____ | 11 | 非整數 | 17 |
____(7)____ | 18 |
【問題 2】
根據以上等價類表設計的測試用例如表 4 所示,請補充空(1)~(13)。
編號 | 輸入 | 覆蓋等價類(編號) | 預期輸出 | ||
B | C | K | |||
1 | F | F | 500 | 1,5,11 | __(1)__ |
2 | S | Z | __(2)__ | 2,6,11 | 825 |
3 | G | A | 500 | __(3)__ | 781 |
4 | P | __(4)__ | 500 | 4,8,11 | 750 |
5 | __(5)__ | Q | 500 | 1,9,11 | 250 |
6 | F | P | 500 | 1,10,11 | __(6)__ |
7 | __(7)__ | P | 500 | 12,10,11 | N/A |
8 | __(8)__ | F | 500 | 13,5,11 | N/A |
9 | A | Z | 500 | 14,6,11 | N/A |
10 | S | __(9)__ | 500 | 2,15,11 | N/A |
11 | S | __(10)__ | 500 | 2,16,11 | N/A |
12 | S | Q | __(11)__ | 2,9,17 | __(12)__ |
13 | S | P | __(13)__ | 2,10,18 | N/A |
試題分析
【問題 1】
本問題考查等價類劃分法中等價類表的構造。
等價類劃分法的等價類表是把程序的輸入域按規則劃分爲若干子集。
本題中,B 和 C 由多個輸入值構成。並且需要對每個(或者每組)輸入值分別處理,按規則可以劃分爲 n 個有效等價類(每個或者每組值確定一個有效的等價類)和一個無效等價類(所有不允許輸入值的集合)。
對 B 來說,分成 4 個有效等價類(B 分別取 F、S、G、P)和一個無效等價類(其他情況),而這個無效等價類又可以進一步細分爲非字母、非單個字母以及除 F/S/G/P 之外的其他字母。
對 C 來說,根據額外積分 200%、150%、125%、100%、50%、0%可以分爲 6 個有效等價類和 1 個無效等價類,而這個無效等價類可以進一步細分爲非字母和非單個字母。(注意:這裏 26 個字母已經全部使用,不存在其他字母這個無效等價類)
本題中對 K 是規定了輸入值集合必須滿足的條件(即正整數),根據規則可以劃分爲 1 個有效等價類(K 爲正整數)和 1 個無效等價類(K 不是正整數)。
【問題 2】
考查等價類劃分法中根據等價類表編寫測試用例。
在編寫等價類劃分法的測試用例時,如果輸入全部都來自有效等價類,則從每個有效等價類選取一個代表元素作爲輸入,如果要考慮無效等價類,則每次只選取一個無效等價類,其餘輸入都從有效等價類中選取。
試題二參考答案
【問題 1】
(1)P (2)Z/C (3)A/D/I/Y
(4)任意正整數(5)除 F/S/G/P 外的單個字母(6)非單個字母
(7)非正整數
【問題 2】
(1)1000 (2)500 (3)3,7,11
(4)R/B/H/K/L/M/W (5)F (6)0
(7)任意非字母,如 0 (8)任意非單個字母,如 FF(9)任意非字母,如 0
(10)任意非單個字母,如 FF(11)任意非整數,如 A (12)N/A
(13)任意非正整數,如 0