測(cè)試策略
一組合理的策略如下:
- 如果規(guī)格說明包含輸入條件組合的情況,應(yīng)首先使用因果圖分析法癞己。
- 任何情況下都應(yīng)使用邊界值分析法膀斋。邊界值分析法可以產(chǎn)生一系列補(bǔ)充的測(cè)試條件,多數(shù)甚至全部條件可以被整合到因果圖分析中末秃。
- 為輸入和輸出確定有效和無效等價(jià)類概页,在必要情況下對(duì)上面確認(rèn)的測(cè)試用例進(jìn)行補(bǔ)充。
- 使用錯(cuò)誤猜測(cè)增加更多的測(cè)試用例练慕。
- 針對(duì)上述測(cè)試用例惰匙,檢查程序的邏輯結(jié)構(gòu)技掏。如果覆蓋準(zhǔn)則未能被前四個(gè)步驟中確定的測(cè)試用例所滿足,并且滿足準(zhǔn)則也并非不可能项鬼,那么增加足夠數(shù)量的測(cè)試用例哑梳,以使覆蓋準(zhǔn)則得到滿足。
再一次聲明绘盟,使用上述策略并不能保證可以發(fā)現(xiàn)所有的錯(cuò)誤鸠真。但實(shí)踐證明這是一個(gè)合理折中的方案。同時(shí)龄毡,它也代表了客觀的艱巨工作量吠卷,雖然沒人說軟件測(cè)試是一件容易的事。
一沦零、等價(jià)類劃分
確定等價(jià)類
有效等價(jià)類代表對(duì)程序的有效輸入祭隔;無效等價(jià)類代表的是其他不正確的任何輸入。如果需要路操,我們還可以將一個(gè)等價(jià)類劃分為更小的一些等價(jià)類疾渴。
書籍?dāng)?shù)量
書籍類型
生成測(cè)試用例
- 為每個(gè)等價(jià)類設(shè)置編號(hào)屯仗。
輸入條件 | 有效等價(jià)類 | 無效等價(jià)類 |
---|---|---|
書籍?dāng)?shù)量 | ①1≤X≤99 | ②X<1③X>99 |
書籍類型 | ④硬皮⑤軟皮⑥活頁(yè) | ⑦其他 |
- 編寫測(cè)試用例搞坝,盡可能多的覆蓋尚未被覆蓋的有效等價(jià)類。直到所有的有效等價(jià)類都被測(cè)試用例覆蓋魁袜。
編號(hào) | 用例 | 覆蓋等價(jià)類 |
---|---|---|
1 | 50桩撮,硬皮 | 覆蓋①④ |
2 | 50,軟皮 | 覆蓋①⑤ |
3 | 50慌核,活頁(yè) | 覆蓋①⑥ |
- 編寫測(cè)試用例距境,覆蓋一個(gè)且僅一個(gè)尚未被覆蓋的無效等價(jià)類。直到所有的無效等價(jià)類都被測(cè)試用例所覆蓋垮卓。
編號(hào) | 用例 | 覆蓋無效等價(jià)類 |
---|---|---|
4 | -50垫桂,硬皮 | 覆蓋② |
5 | 199,軟皮 | 覆蓋③ |
6 | 50粟按,線裝 | 覆蓋⑦ |
用單個(gè)的測(cè)試用例覆蓋無效等價(jià)類诬滩,是因?yàn)橛行┹斎氲腻e(cuò)誤檢查可能會(huì)屏蔽或取代其他輸入的錯(cuò)誤檢查。比如
②⑦灭将,也許程序提示“非法的書籍?dāng)?shù)量”后疼鸟,就不會(huì)執(zhí)行對(duì)書籍類型的檢查了。
二庙曙、邊界值分析
所謂邊界條件空镜,是指輸入和輸出等價(jià)類中恰好處在邊界、或超過邊界、或在邊界以下的狀態(tài)吴攒≌懦考慮了邊界條件的測(cè)試用例具有更高的測(cè)試回報(bào)率。
上例中的書籍?dāng)?shù)量范圍是1~99洼怔,所以針對(duì)0署惯,1和99,100的情況分別設(shè)計(jì)測(cè)試用例镣隶。
從定義可以看出极谊,等價(jià)劃分只關(guān)注輸入空間(輸入等價(jià)類)的不同,邊界值分析還需要從輸出空間(輸出等價(jià)類)設(shè)計(jì)測(cè)試用例安岂。
例轻猖,某個(gè)程序按月計(jì)算個(gè)人所得稅的速算扣除數(shù),且最小金額是0域那,最大金額是13,505蜕依。使用邊界值分析法,應(yīng)該設(shè)計(jì)測(cè)試用例測(cè)試速算扣除數(shù)結(jié)果為0和13505的情況琉雳。此外,還應(yīng)觀察是否可能設(shè)計(jì)出導(dǎo)致速算扣除數(shù)為負(fù)數(shù)友瘤,或者超過13505的測(cè)試用例翠肘。
邊界值分析法和等價(jià)劃分重要的區(qū)別是,等價(jià)劃分是從等價(jià)類中挑選任意一個(gè)元素作為測(cè)試數(shù)據(jù)辫秧;邊界值分析法考察正處于等價(jià)劃分邊界或在邊界附近的狀態(tài)束倍。
三、因果圖
邊界值分析和等價(jià)劃分的缺點(diǎn)是盟戏,未對(duì)輸入條件的組合情況绪妹、輸入條件之間的相互制約關(guān)系進(jìn)行分析。
因果圖的基本關(guān)系
- 恒等(Identify):若a為1柿究,則b為1邮旷;否則b為0。
- 非(NOT):若a為1蝇摸,則b為0婶肩;否則b為1。
- 或(OR):若a或b或c為1貌夕,則d為1律歼;否則d為0。
- 與(AND):若a和b和c都為1啡专,則d為1险毁;否則d為0。
因果圖的約束條件
1、對(duì)于輸入條件
的約束有E畔况、I鲸鹦、O、R四種:
- 異(E):E必須總為真问窃,而a亥鬓、b最多只有一個(gè)為1。
- 或(I):I為真時(shí)域庇,a嵌戈、b和c中至少有一個(gè)必須為1。
- 唯一(O):a听皿、b中熟呛,有且僅有一個(gè)必須為1。
- 要求(R):如果a為1尉姨,b也必須為1庵朝。
2、對(duì)于輸出結(jié)果
的約束只有M一種:
屏蔽(M):如果結(jié)果a為0又厉,則b強(qiáng)制為0九府。
一、假設(shè)有一規(guī)格說明:“第一列中的字符必須是‘A’或‘B’覆致,第二列中的字符必須是一個(gè)數(shù)字拱镐。在這種情況下尖坤,對(duì)文件進(jìn)行更新塞耕。如果第一個(gè)字符不正確煤篙,產(chǎn)生提示信息X12。如果第二個(gè)字符不是數(shù)字璧诵,產(chǎn)生提示信息X13汰蜘。”
(1)將規(guī)格說明分解為可執(zhí)行的片段之宿,確定“因”和“果”族操,為每個(gè)“因”和“果”都賦予唯一的編號(hào)〕喝保“因”是條件坪创,是指一個(gè)明確的輸入條件等價(jià)類〗闵模“果”是動(dòng)作莱预,是指一個(gè)輸出或系統(tǒng)轉(zhuǎn)換(輸入對(duì)程序或系統(tǒng)狀態(tài)的延續(xù)影響)。
“因” | “果” |
---|---|
1 —— 第一列的字符是“A” | 70 —— 對(duì)文件做了更新 |
2 —— 第一列的字符是“B” | 71 —— 產(chǎn)生提示信息X12 |
3 —— 第二列的字符是一個(gè)數(shù)字 | 72 —— 產(chǎn)生提示信息X13 |
(2)分析規(guī)格說明的語(yǔ)義项滑,轉(zhuǎn)換為因果圖依沮。原因①和原因②不可能同時(shí)成立,為因果圖添加對(duì)應(yīng)的約束條件,得到右圖危喉。
(3)將因果圖轉(zhuǎn)換為判定表宋渔,每一列代表一個(gè)測(cè)試用例。
(4)將判定表中的列轉(zhuǎn)換為測(cè)試用例辜限。
編號(hào) | 用例 | 輸出 | 編號(hào) | 用例 | 輸出 |
---|---|---|---|---|---|
1 | A皇拣,1 | 對(duì)文件做了更新 | 4 | 1,A | 產(chǎn)生提示信息X12薄嫡,X13 |
2 | B氧急,1 | 對(duì)文件做了更新 | 5 | A,A | 產(chǎn)生提示信息X13 |
3 | 1毫深,1 | 產(chǎn)生提示信息X12 | 6 | B吩坝,B | 產(chǎn)生提示信息X13 |
二、將因果圖轉(zhuǎn)換為判定表的思路(以上述的例子來說明)
- 選擇一個(gè)“果”作為當(dāng)前狀態(tài)哑蔫。例:71钉寝。
- 對(duì)因果圖回溯,找出導(dǎo)致該“果”為1的所有因的組合(需要考慮到約束條件)闸迷。例:001嵌纲,000。
- 在判定表中為每個(gè)“因”的組合生成一列腥沽。例:(列3)和(列4)疹瘦。
- 對(duì)于每種“因”的組合,判斷所有其他“果”的狀態(tài)巡球,并放置在對(duì)應(yīng)的每一列中。例:已得在001邓嘹,000兩種組合下結(jié)點(diǎn)71的結(jié)果為1酣栈。判斷在“因”為001的組合下,得到70和72的結(jié)果為0汹押。判斷在“因”為000的組合下矿筝,得到70的結(jié)果為0,72的結(jié)果為1棚贾。將“果”的狀態(tài)填入其對(duì)應(yīng)的列窖维。
對(duì)因果圖進(jìn)行回溯時(shí),需要做到以下考慮:
a) 當(dāng)回溯經(jīng)過一個(gè)結(jié)果為1的OR結(jié)點(diǎn)時(shí)妙痹,不要將OR結(jié)點(diǎn)的1個(gè)以上的輸入同時(shí)設(shè)為1铸史。
b) 當(dāng)回溯經(jīng)過一個(gè)結(jié)果為0的AND結(jié)點(diǎn)時(shí),應(yīng)列舉出導(dǎo)致該結(jié)果為0的所有輸入情況的組合怯伊。然而琳轿,當(dāng)該AND結(jié)點(diǎn)的一個(gè)輸入條件為0時(shí),其他輸入有一個(gè)或更多的1,則不必考慮其他輸入為1的所有情況崭篡。
c) 當(dāng)回溯經(jīng)過一個(gè)結(jié)果為0的AND結(jié)點(diǎn)時(shí)挪哄,所有輸入皆為0的這一種情況應(yīng)當(dāng)列舉出來。
(1) 根據(jù)上述第c)條思路迹炼,我們只需列出使得結(jié)點(diǎn)⑤和結(jié)點(diǎn)⑥皆為0的情況。結(jié)點(diǎn)①②③④的取值狀態(tài)為:
0颠毙,0斯入,0,0 (5=0吟秩,6=0)
(2) 根據(jù)第b)條思路咱扣,對(duì)于結(jié)點(diǎn)⑤為1而結(jié)點(diǎn)⑥為0的情況,應(yīng)該列出導(dǎo)致⑥為0的所有輸入情況組合涵防。同時(shí)闹伪,只需列出一種使得⑤為1的情況即可,不需要列出⑤為1時(shí)的所有輸入情況組合壮池。又根據(jù)第a)條思路偏瓤,當(dāng)結(jié)點(diǎn)⑤為1時(shí),我們不應(yīng)將結(jié)點(diǎn)①和②同時(shí)設(shè)為1椰憋。于是厅克,得到結(jié)點(diǎn)①②③④的取值狀態(tài):
1,0橙依,0证舟,0 (5=1,6=0)
1窗骑,0女责,0,1 (5=1创译,6=0)
1抵知,0,1软族,0 (5=1刷喜,6=0)
同樣的,對(duì)于⑤為0而⑥為1的情況立砸,也只需要列出⑥為1的一種情況即可(盡管在本例中也只有這一種)掖疮。
0,0颗祝,1氮墨,1 (5=0纺蛆,6=1)
因果圖有助于用一個(gè)系統(tǒng)的方法選擇出高效的測(cè)試用例集。它還有一個(gè)額外的好處规揪,就是可以指出規(guī)格說明的不完整性和二義性桥氏。但通常它不能生成全部應(yīng)該被確定的有效測(cè)試用例。
注意:因果圖方法沒有充分考慮邊界條件猛铅。建議字支,最好是單獨(dú)考慮邊界值分析。這不意味著我們要為此增加相應(yīng)多的測(cè)試用例奸忽,而是在由因果圖生成測(cè)試用例時(shí)堕伪,可以將邊界條件分析一并考慮進(jìn)去。最好的結(jié)果是既滿足了兩方面的目標(biāo)栗菜,又不需要增加新的測(cè)試用例欠雌。
四、錯(cuò)誤推測(cè)
錯(cuò)誤猜測(cè)是一項(xiàng)依賴于直覺的非正規(guī)的過程疙筹,其基本思想是人們利用直覺和經(jīng)驗(yàn)猜測(cè)可能犯得錯(cuò)誤或錯(cuò)誤易發(fā)情況的清單富俄,然后編寫測(cè)試用例來暴露這些錯(cuò)誤。
例如而咆,程序輸入中出現(xiàn)0這個(gè)值霍比,就是一種錯(cuò)誤易發(fā)情況。因此可以編寫測(cè)試用例檢查特定的輸入值中有0暴备,或特定的輸出值被強(qiáng)制為0的情況悠瞬。
同樣,在出現(xiàn)輸入或輸出數(shù)目不定的地方涯捻,如浅妆,對(duì)某個(gè)列表進(jìn)行搜索,結(jié)果為“空列表”或“只包含一個(gè)”條目的列表障癌,也是錯(cuò)誤容易發(fā)生的情況狂打。
另一個(gè)思想是,在閱讀規(guī)格說明時(shí)混弥,聯(lián)系程序員可能做的假設(shè)來確定測(cè)試用例。如規(guī)格說明中被忽略的一些內(nèi)容对省,要么是由于偶然因素蝗拿,要么是程序員認(rèn)為其顯而易見。