官术网_书友最值得收藏!

4.2.1 等價(jià)劃分

本書(shū)第2章將一個(gè)好的測(cè)試用例描述為具有相當(dāng)高的可能性發(fā)現(xiàn)某個(gè)錯(cuò)誤來(lái),此外還討論了對(duì)程序的窮舉輸入測(cè)試是無(wú)法實(shí)現(xiàn)的。因此,當(dāng)測(cè)試某個(gè)程序時(shí),我們就被限制在從所有可能的輸入中努力找出某個(gè)小的子集。理所當(dāng)然,我們要找的子集必須是正確的,并且是可能發(fā)現(xiàn)最多錯(cuò)誤的子集。

確定這個(gè)子集的一種方法,就是要意識(shí)到一個(gè)精心挑選的測(cè)試用例還應(yīng)具備另外兩個(gè)特性:

1.嚴(yán)格控制測(cè)試用例的增加,減少為達(dá)到“合理測(cè)試”的某些既定目標(biāo)而必須設(shè)計(jì)的其他測(cè)試用例的數(shù)量。

2.它覆蓋了大部分其他可能的測(cè)試用例。也就是說(shuō),它會(huì)告訴我們,使用或不使用這個(gè)特定的輸入集合,哪些錯(cuò)誤會(huì)被發(fā)現(xiàn),哪些會(huì)被遺漏掉。

雖然這兩個(gè)特性看起來(lái)很相似,但描述的卻是截然不同的兩種思想。第一個(gè)特性意味著,每個(gè)測(cè)試用例都必須體現(xiàn)盡可能多的不同的輸入情況,以使最大限度地減少測(cè)試所需的全部用例的數(shù)量。而第二個(gè)特性意味著應(yīng)該盡量將程序輸入范圍進(jìn)行劃分,將其劃分為有限數(shù)量的等價(jià)類(lèi),這樣就可以合理地假設(shè)(但是,顯然不能絕對(duì)肯定)測(cè)試每個(gè)等價(jià)類(lèi)的代表性數(shù)據(jù)等同于測(cè)試該類(lèi)的其他任何數(shù)據(jù)。也就是說(shuō),如果等價(jià)類(lèi)的某個(gè)測(cè)試用例發(fā)現(xiàn)了某個(gè)錯(cuò)誤,該等價(jià)類(lèi)的其他用例也應(yīng)該能發(fā)現(xiàn)同樣的錯(cuò)誤。相反,如果測(cè)試用例沒(méi)能發(fā)現(xiàn)錯(cuò)誤,那么我們可以預(yù)計(jì),該等價(jià)類(lèi)中的其他測(cè)試用例不會(huì)出現(xiàn)在其他等價(jià)類(lèi)中,因?yàn)榈葍r(jià)類(lèi)是相互交迭的。

這兩種思想形成了稱(chēng)為等價(jià)劃分的黑盒測(cè)試方法。第二種思想可以用來(lái)設(shè)計(jì)一個(gè)“令人感興趣的”輸入條件集合以供測(cè)試,而第一個(gè)思想可以隨后用來(lái)設(shè)計(jì)涵蓋這些狀態(tài)的一個(gè)最小測(cè)試用例集。

本書(shū)第1章中三角形程序的一個(gè)等價(jià)類(lèi)的例子是集合“三個(gè)值相等、都大于0的整型數(shù)據(jù)”。將此作為一個(gè)等價(jià)類(lèi)后,我們就可以說(shuō),如果對(duì)該集合中某個(gè)元素所進(jìn)行的測(cè)試沒(méi)有發(fā)現(xiàn)錯(cuò)誤的話,那么對(duì)該集合中其他元素所進(jìn)行的測(cè)試也不大可能會(huì)發(fā)現(xiàn)錯(cuò)誤。換言之,我們的測(cè)試時(shí)間最好花在其他地方(其他的等價(jià)類(lèi))。

使用等價(jià)劃分方法設(shè)計(jì)測(cè)試用例主要有兩個(gè)步驟:(1)確定等價(jià)類(lèi);(2)生成測(cè)試用例。

4.2.1.1 確定等價(jià)類(lèi)

確定等價(jià)類(lèi)是選取每一個(gè)輸入條件(通常是規(guī)格說(shuō)明中的一個(gè)句子或短語(yǔ))并將其劃分為兩個(gè)或更多的組。可以使用圖4-3中的表格來(lái)進(jìn)行劃分。注意,我們確定了兩類(lèi)等價(jià)類(lèi):有效等價(jià)類(lèi)代表對(duì)程序的有效輸入,而無(wú)效等價(jià)類(lèi)代表的則是其他任何可能的輸入條件(即不正確的輸入值)。這樣,我們遵循了本書(shū)第2章闡述的測(cè)試原則,即要注意無(wú)效和未預(yù)料到的輸入情況。

figure_0054_0029
圖 4-3 等價(jià)類(lèi)列舉表

在給定了輸入或外部條件之后,確定等價(jià)類(lèi)大體上是一個(gè)啟發(fā)式的過(guò)程。下面給出了一些指導(dǎo)原則:

1.如果輸入條件規(guī)定了一個(gè)取值范圍(例如,“數(shù)量可以是從1到999”),那么就應(yīng)確定出一個(gè)有效等價(jià)類(lèi)(1<數(shù)量<999),以及兩個(gè)無(wú)效等價(jià)類(lèi)(數(shù)量<1,數(shù)量>999)。

2.如果輸入條件規(guī)定了取值的個(gè)數(shù)(例如,“汽車(chē)可登記一至六名車(chē)主”),那么就應(yīng)確定出一個(gè)有效等價(jià)類(lèi)和兩個(gè)無(wú)效等價(jià)類(lèi)(沒(méi)有車(chē)主,或車(chē)主多于六個(gè))。

3.如果輸入條件規(guī)定了一個(gè)輸入值的集合,而且有理由認(rèn)為程序會(huì)對(duì)每個(gè)值進(jìn)行不同處理(例如,“交通工具的類(lèi)型必須是公共汽車(chē)、卡車(chē)、出租車(chē)、火車(chē)或摩托車(chē)”),那么就應(yīng)為每個(gè)輸入值確定一個(gè)有效等價(jià)類(lèi)和一個(gè)無(wú)效等價(jià)類(lèi)(例如,“拖車(chē)”)。

4.如果存在輸入條件規(guī)定了“必須是”的情況,例如“標(biāo)識(shí)符的第一個(gè)字符必須是字母”,那么就應(yīng)確定一個(gè)有效等價(jià)類(lèi)(首字符是字母)和一個(gè)無(wú)效等價(jià)類(lèi)(首字符不是字母)。

如果有任何理由可以認(rèn)為程序并未等同地處理等價(jià)類(lèi)中的元素,那么應(yīng)該將這個(gè)等價(jià)類(lèi)再劃分為小一些的等價(jià)類(lèi)。稍后我們將給出這個(gè)過(guò)程的例子。

4.2.1.2 生成測(cè)試用例

第二步是使用等價(jià)類(lèi)來(lái)生成測(cè)試用例,其過(guò)程如下:

1.為每個(gè)等價(jià)類(lèi)設(shè)置一個(gè)不同的編號(hào)。

2.編寫(xiě)新的測(cè)試用例,盡可能多地覆蓋那些尚未被涵蓋的有效等價(jià)類(lèi),直到所有的有效等價(jià)類(lèi)都被測(cè)試用例所覆蓋(包含進(jìn)去)。

3.編寫(xiě)新的用例,覆蓋一個(gè)且僅一個(gè)尚未被涵蓋的無(wú)效等價(jià)類(lèi),直到所有的無(wú)效等價(jià)類(lèi)都被測(cè)試用例所覆蓋。

用單個(gè)測(cè)試用例覆蓋無(wú)效等價(jià)類(lèi),是因?yàn)槟承┨囟ǖ妮斎脲e(cuò)誤檢查可能會(huì)屏蔽或取代其他輸入錯(cuò)誤檢查。舉例來(lái)說(shuō),如果規(guī)格說(shuō)明規(guī)定了“請(qǐng)輸入書(shū)籍類(lèi)型(硬皮、軟皮或活頁(yè))及數(shù)量(1~999)”,代表兩個(gè)錯(cuò)誤輸入(書(shū)籍類(lèi)型錯(cuò)誤,數(shù)量錯(cuò)誤)的測(cè)試用例“XYZ 0”,很可能不會(huì)執(zhí)行對(duì)數(shù)量的檢查,因?yàn)槌绦蛞苍S會(huì)提示“XYZ是未知的書(shū)籍類(lèi)型”,就不檢查輸入的其余部分了。

主站蜘蛛池模板: 金山区| 巴林左旗| 波密县| 奈曼旗| 依兰县| 怀仁县| 新源县| 石棉县| 枣庄市| 安国市| 陈巴尔虎旗| 黄石市| 仪征市| 任丘市| 名山县| 长春市| 凯里市| 齐河县| 镇巴县| 舒城县| 江安县| 永安市| 青浦区| 咸宁市| 利辛县| 建德市| 利川市| 名山县| 南部县| 博白县| 内江市| 玛曲县| 区。| 陵川县| 西昌市| 马关县| 大厂| 华安县| 神木县| 调兵山市| 绩溪县|