版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、軟件測試基礎(chǔ) 第二章第二章: 基于需求的測試生成基于需求的測試生成Last update: December 23, 2009These slides are copyrighted. They are for use with the Foundations of Software Testing book by Aditya Mathur. Please use the slides but do not remove the copyright notice.Aditya P. MathurPurdue University2.1引言Aditya P. Mathur 2009Aditya
2、 P. Mathur 2009軟件的需求軟件需求是設(shè)計(jì)測試的基本出發(fā)點(diǎn)。軟件的需求可能是簡單的,非形式化的;也可以是通過建模工具獲得嚴(yán)格的需求;更進(jìn)一步,利用形式化的工具,可以將嚴(yán)格的軟件需求進(jìn)一步轉(zhuǎn)化為形式化的需求。商用軟件的需求規(guī)范通常是三者并存的方式。Aditya P. Mathur 2009軟件需求與測試設(shè)計(jì)軟件需求形式化程度越高,越有機(jī)會(huì)進(jìn)行自動(dòng)化測試。本章重點(diǎn)討論根據(jù)非正式的需求規(guī)范和嚴(yán)格的需求規(guī)范來設(shè)計(jì)測試?;谲浖枨蟮臏y試設(shè)計(jì)技術(shù)2.2測試用例選擇問題Aditya P. Mathur 2009Aditya P. Mathur 2009測試用例選擇問題設(shè)D為軟件P的輸入域。 測
3、試選擇問題是指:從D中選擇一個(gè)子集T,以T中各元素作為輸入執(zhí)行P,執(zhí)行過程中將發(fā)現(xiàn)P中的所有缺陷。一般來說不存在任何構(gòu)造這樣的測試集的算法。但是,也有啟發(fā)式和基于模型的方法可以用來產(chǎn)生測試用例集合,能夠有效暴露某些類型的故障。Aditya P. Mathur 2009測試用例選擇問題(續(xù))測試用例選擇問題的關(guān)鍵在于:構(gòu)造一個(gè)測試用例集合TD,使得T能夠盡可能多地發(fā)現(xiàn)P中缺陷。測試用例選擇的問題是非常困難的,主要困難在于P的輸入域的大小和復(fù)雜性。Aditya P. Mathur 2009軟件輸入域軟件輸入域是指:軟件在執(zhí)行過程中可能接受的全部合法輸入的集合。軟件的合法輸入集合是由軟件需求決定的。
4、在許多實(shí)際問題中,軟件輸入域非常龐大,可能包含很多元素。同時(shí)也很復(fù)雜,這些元素又具有很多類型。Aditya P. Mathur 2009窮舉測試輸入域規(guī)模過大使得不可能通過窮舉測試,即執(zhí)行的輸入域中所有的元素,以發(fā)現(xiàn)所有的錯(cuò)誤。輸入域的復(fù)雜性使得選擇輸入域中每一個(gè)單獨(dú)的測試用例都很困難。Aditya P. Mathur 2009規(guī)模龐大的輸入域例1:考慮一個(gè)將整數(shù)序列排序?yàn)樯蚺帕械某绦騊。若設(shè)P將運(yùn)行在的一臺(tái)機(jī)器的整數(shù)范圍是從-32768到32767,那么P的輸入域是-32768,32767的所有可能的序列。如果該程序能夠被輸入的序列大小沒有限制,則P的輸入域是無限大并且P不能被窮盡測試。如
5、果輸入序列的大小是有限的,比如說Nmax1,則輸入域的大小取決于N的值。請計(jì)算一下上述輸入域的大小。Aditya P. Mathur 2009輸入域的復(fù)雜性例2:考慮一個(gè)工資單處理系統(tǒng)上的程序P,它以雇員記錄作為輸入計(jì)算周薪。為簡單起見,假定雇員記錄由以下條目的類型和約束構(gòu)成:請計(jì)算一下上述輸入域的大小。ID是一個(gè)從001到999的3位數(shù)的數(shù)字name是20個(gè)字符組成的字符串,每個(gè)字符屬于26個(gè)字母和空格中的一個(gè)rate的取值范圍是510美元/小時(shí),以0.25美元的倍數(shù)遞增hoursWorked的取值范圍是060999種可能取種可能取值值27的的20次方個(gè)可能取次方個(gè)可能取值值可能取可能取值值
6、有有21個(gè)個(gè)可能取可能取值值有有61個(gè)個(gè)Aditya P. Mathur 2009測試用例選擇方法各種測試用例選擇方法應(yīng)運(yùn)而生,測試人員使用這些方法從輸入域中選擇一個(gè)盡可能小的子集,以便達(dá)到測試軟件的目的。2.3 等價(jià)類劃分Aditya P. Mathur 2009Aditya P. Mathur 2009等價(jià)類劃分采用等價(jià)類劃分測試方法選擇測試用例時(shí),要求測試人員把輸入域進(jìn)行細(xì)分,成為多個(gè)(比如說N1)子域,每一子域的輸入元素?cái)?shù)量更少。如圖所示(下一張幻燈片(a)條)。從嚴(yán)格的數(shù)學(xué)定義來說,子域是不相交的。(a)中所示的四個(gè)子集構(gòu)成了輸入域的一個(gè)劃分,而(b)中的子集沒有。每個(gè)子集被稱為一個(gè)
7、等價(jià)類。Aditya P. Mathur 2009子域Aditya P. Mathur 2009程序行為和等價(jià)類等價(jià)類劃分,實(shí)際上假設(shè)被測程序在劃分的每一子集中的所有元素的程序行為(也就是測試)是相同的。這種假設(shè)允許測試人員從每個(gè)等價(jià)類只選擇一個(gè)測試用例,從而從N個(gè)子集中構(gòu)成一個(gè)具有N個(gè)測試用例的測試套件(test suite)。Aditya P. Mathur 2009等價(jià)類劃分與測試套件對同一輸入域進(jìn)行等價(jià)類劃分,可能會(huì)得到不同的劃分結(jié)果。即使等價(jià)類劃分結(jié)果相同,由于選擇的用例不同,產(chǎn)生的測試用例集合也不同。各種因素影響測試用例集合的故障檢測效率:測試設(shè)計(jì)經(jīng)驗(yàn);需求熟悉程度;是否有源代碼;
8、對代碼的熟悉程度等。Aditya P. Mathur 2009缺陷定位任何軟件的輸入集合都可以至少分成兩個(gè)子集:一個(gè)包含所有希望的(或合法的)輸入(E),以及其他包含所有不希望的(或非法的)輸入(U)。 兩個(gè)子集中任意一個(gè),都可以進(jìn)一步細(xì)分為多個(gè)子集,使得應(yīng)用程序在這些子集上的行為會(huì)不一樣(例如,E1,E2,E3和U1,U2)。Aditya P. Mathur 2009例2.1設(shè)軟件A需要輸入一個(gè)整數(shù)作為年齡。假設(shè)年齡的合法值的范圍是1 .120。那么該程序的輸入集合可以分為包含在范圍1 .120內(nèi)整數(shù)集合E,和包含剩余的所有整數(shù)的集合U。所有整數(shù)1.120其他整數(shù)Aditya P. Math
9、ur 2009例2.1 (續(xù))此外,假定程序需要根據(jù)需求R1來處理1 .61范圍內(nèi)的值,而要根據(jù)需求R2來處理62. 120范圍的值。 因此,根據(jù)預(yù)期的程序行為,E被進(jìn)一步細(xì)分為兩個(gè)區(qū)域。同樣地,對無效輸入,所有小于或等于1的整數(shù)用一種方式進(jìn)行處理,而所有大于120的要用另一種方式處理。這導(dǎo)致了U細(xì)分為兩類。Aditya P. Mathur 2009例2.1 (續(xù))所有整數(shù)62-1201.61120Aditya P. Mathur 2009例2.1 (續(xù))測試中,我們期望任何從范圍1 .61中選擇的那個(gè)測試用例將觸發(fā)相對于R1的任何故障。同樣,從范圍62. 120中選擇的測試用例,就會(huì)發(fā)現(xiàn)相對
10、于R2的任何故障。類似的期望也適用于無效輸入的那兩個(gè)區(qū)域。使用等價(jià)類劃分技術(shù)選出的測試用例,代表著四個(gè)輸入域(即連個(gè)包含有效輸入的輸入域和兩個(gè)包含無效的輸入的輸入域)中的輸入,來測試被測應(yīng)用程序是否存在錯(cuò)誤。Aditya P. Mathur 2009測試用例的效率使用等價(jià)類劃分生成測試用例來測試應(yīng)用程序A的效率,是使用該測試用例集合所發(fā)現(xiàn)的錯(cuò)誤的數(shù)目和A中所有錯(cuò)誤的數(shù)目的比率來定義的。和其他所有軟件測試的測試用例選擇技術(shù)的情況一樣,對絕大多數(shù)的實(shí)際應(yīng)用程序,使用等價(jià)類劃分的測試用例生成方法的效率少于1。通過一個(gè)無二義性且完整的需求說明,并進(jìn)行根據(jù)后續(xù)章節(jié)的內(nèi)容精心構(gòu)造等價(jià)類,選擇測試用例,將有
11、助于效率的提高。關(guān)系與等價(jià)類劃分n集合論中,關(guān)系的是指一個(gè)n元組的集合。dn軟件測試中,通過等價(jià)類劃分輸入域時(shí),通常測試人員將采用(構(gòu)造)如下關(guān)系:R:IIn其中I為輸入域,R為I上的關(guān)系,R定義了一個(gè)等價(jià)類。例2.3n方法gPrice以食品雜貨店的食品名稱作為輸入,查詢商品價(jià)格數(shù)據(jù)庫并返回相應(yīng)食品單價(jià)。如果數(shù)據(jù)庫中沒有該食品,則返回錯(cuò)誤。n在輸入域上定義關(guān)系pFound:II。其中如果軟件為元素t1,t2都返回單價(jià),則pFound將關(guān)聯(lián)t1, t2;或者軟件為元素t3,t4都返回錯(cuò)誤,則pFound也將關(guān)聯(lián)t3, t4例2.3(續(xù))n存在于數(shù)據(jù)庫中任意食品構(gòu)成一個(gè)等價(jià)類pF。而不是數(shù)據(jù)庫中的
12、食品名稱的字符串都屬于pFound所定義的另一個(gè)等價(jià)類pNF。n有:pFpNF=I 和 pFpNF=例2.4n打印機(jī)測試軟件pTest,輸入品牌和型號(hào),選擇測試腳本進(jìn)行測試。需要驗(yàn)證腳本選擇過程是否正確。npTest的輸入域I由表示品牌、型號(hào)的字符串構(gòu)成。對測試而言I可能不一樣:鍵盤輸入和GUI下拉列表。n假定有三種腳本選擇方式:彩色噴墨打印機(jī)ci,彩色激光打印機(jī)cl,彩色多功能打印機(jī)cm。此外,數(shù)據(jù)庫中不存在的數(shù)據(jù)都是無效數(shù)據(jù)。例2.4n可以在輸入域I上定義4個(gè)關(guān)系:nci:IIncl:IIncm:IIninvP:IIn上述關(guān)系分別定義了一個(gè)等價(jià)類劃分。Aditya P. Mathur 20
13、09例2.5設(shè)wordCount方法以單詞w和文件名f作為輸入,并返回單詞w在文件f包含的文本中出現(xiàn)的次數(shù);f不存在,則產(chǎn)生一個(gè)異常。這個(gè)例子描述了基于軟件需求和軟件源代碼來進(jìn)行等價(jià)類劃分的方法。根據(jù)上述描述,可以得到兩個(gè)等價(jià)類:E1:(w,f)其中w為字符串,f為有效文件名;E1:(w,f)其中w為字符串,f為無效文件名。Aditya P. Mathur 2009例2.5(續(xù))beginString w, fInput w, fif (not exists(f) raise exception; return(0);if(length(w)=0)return(0);if(empty(f)re
14、turn(0);return(getCount(w,f);end假定方法wordcount的源代碼如下。我們就可以得到如下一頁所示的等價(jià)類劃分。Aditya P. Mathur 2009例2.5(續(xù))等價(jià)類wfE1非空串存在,非空文件E2非空串不存在E3非空串存在,空文件E4空串存在,非空文件E5空串不存在E6空串存在,空文件Aditya P. Mathur 2009例2.5(續(xù))注意,無程序代碼的任何知識(shí)的話,等價(jià)類的數(shù)量是2,而有來自代碼的部分知識(shí),則等價(jià)類的數(shù)目為6。當(dāng)然,有經(jīng)驗(yàn)的測試人員在代碼可用之前,可能就會(huì)得出上述六個(gè)等價(jià)類,甚至更多。Aditya P. Mathur 2009根據(jù)
15、程序輸出劃分的等價(jià)類在某些情況下,等價(jià)類可以基于程序的輸出來生成。例如,假設(shè)一個(gè)程序的輸出是整數(shù)。 那么值得一問:“方案是否曾經(jīng)產(chǎn)生一個(gè)0?什么是輸出的最大和最小可能的值?”這兩個(gè)問題導(dǎo)致下列兩個(gè)基于輸出的等價(jià)類:Aditya P. Mathur 2009根據(jù)程序輸出劃分的等價(jià)類(續(xù))E1:輸出值v為0。 E2:輸出值v是最大值。 E3:輸出值v是最小值。 E4:其他所有的輸出值?;谳敵龅葍r(jià)類,可以進(jìn)一步得到與之對應(yīng)的輸入等價(jià)類。對于上面給出的所有四個(gè)等價(jià)類,可以形成與之相對應(yīng)的輸入等價(jià)類。Aditya P. Mathur 2009變量取值范圍的等價(jià)類等價(jià)類示例一個(gè)類包含一個(gè)范圍內(nèi)的值和兩個(gè)
16、范圍外的值speed 60.9050, 75, 92area: floatarea0.0-1.0, 15.52age: int0=age=120-1, 56, 132letter:charJ, 3約束等價(jià)類代表Aditya P. Mathur 2009字符串變量的等價(jià)類等價(jià)類示例至少分為一個(gè)包含所有合法字符串的類和一個(gè)包含所有非法字符串的類。合法性由字符串長度及其他語義特性所決定firstname: string, Sue, Loooong Name約束等價(jià)類代表Aditya P. Mathur 2009枚舉變量的等價(jià)類等價(jià)類示例每個(gè)取值對應(yīng)一個(gè)等價(jià)類autocolor:red, blue,
17、greenred, blue, greenup:booleantrue, false約束等價(jià)類代表Aditya P. Mathur 2009數(shù)組的等價(jià)類等價(jià)類示例一個(gè)包含所有合法數(shù)組的等價(jià)類,一個(gè)空數(shù)組等價(jià)類,以及一個(gè)包含所有大于期望長度數(shù)組的等價(jià)類int aName: new int3; , -10, 20, -9, 0, 12, 15約束等價(jià)類代表Aditya P. Mathur 2009復(fù)合數(shù)據(jù)類型的等價(jià)類Java中的數(shù)組,C+中的記錄、結(jié)構(gòu)都是復(fù)合數(shù)據(jù)類型。這些輸入類型會(huì)在測試應(yīng)用程序的組件,如函數(shù)或?qū)ο髸r(shí)遇到。對這種數(shù)據(jù)類型進(jìn)行等價(jià)類劃分時(shí),需要考慮輸入數(shù)據(jù)的每一個(gè)屬性的合法和非法取
18、值。下一個(gè)例子說明了針對復(fù)合數(shù)據(jù)類型的輸入變量的等價(jià)類的劃分方法。Aditya P. Mathur 2009復(fù)合數(shù)據(jù)類型的等價(jià)類(例)struct transcriptstring fName; / First name.string lName; / Last name.string cTitle 200; / Course titles.char grades 200; / Letter grades corresponding to course titles.課堂練習(xí): 從R中得到每一個(gè)元素的等價(jià)類劃分,并將它們組合起來!Aditya P. Mathur 2009一元?jiǎng)澐峙c多元?jiǎng)澐忠环N
19、劃分輸入域的方法是一次只考慮一個(gè)變量。這樣,每一個(gè)輸入變量形成了對輸入域的一個(gè)劃分。我們成這種劃分為一元等價(jià)類劃分,簡稱一元?jiǎng)澐?。這種類型的劃分是很常用的。Aditya P. Mathur 2009多元?jiǎng)澐至硪环N劃分方法是把所有輸入變量的笛卡爾積視為程序的輸入域I,并定義I上的關(guān)系R。該方法只產(chǎn)生一個(gè)劃分,劃分包含多個(gè)等價(jià)類。我們稱這種劃分為多元等價(jià)類劃分,簡稱多元?jiǎng)澐帧6嘣獎(jiǎng)澐謱a(chǎn)生大量的等價(jià)類,因而難以手工管理。并且許多等價(jià)類可能不可用。不過,正如下一節(jié)所說的,這些等價(jià)類可以提供更多的測試用例。Aditya P. Mathur 2009劃分的例子設(shè)某應(yīng)用程序的輸入是兩個(gè)整數(shù)x和y。其預(yù)期輸
20、入范圍是:3=x=7和5=9。對于一元?jiǎng)澐郑覀兏鶕?jù)x和y分別分區(qū)。從而得到了以下6個(gè)等價(jià)類。Aditya P. Mathur 2009劃分的例子(續(xù))E1: x7忽略了y .E4: y9忽略了x .對于多元?jiǎng)澐?,我們考慮輸入域是笛卡爾積X Y。從而得到了以下9個(gè)等價(jià)類。Aditya P. Mathur 2009劃分的例子(續(xù))E1: x3, y5 E2: x3, 5y9E3: x9E4: 3x7, y9E7: 7, y7, 5y9E9: x7, y9Aditya P. Mathur 2009劃分的例子(續(xù))6 個(gè)等價(jià)類:9 個(gè)等價(jià)類:E1: x3, y5 E2: x3, 5y9E3: x9E
21、4: 3x7, y9E7: x7, y7, 5y9E9: x7, y9等價(jià)類劃分的完整過程n不管輸入域大小,都可以用等價(jià)類劃分選擇測試用例。n使用等價(jià)類劃分生成測試用例的步驟:n步驟一:確定輸入域;n步驟二:等價(jià)類劃分;n步驟三:組合等價(jià)類;n步驟四:確定不可測的等價(jià)類;步驟一:確定輸入域n分析需求:n確定所有輸入、輸出變量;n確定變量類型和變量使用條件;n確定環(huán)境變量(也是輸入域變量);n確定每個(gè)變量的取值集合。n上述變量的笛卡爾積就是輸入域。n一般只能以手工方式完成。步驟二:等價(jià)類劃分n將每個(gè)變量的取值集合劃分成為互不相交的子集,則每個(gè)子集對應(yīng)于一個(gè)等價(jià)類。所有等價(jià)類構(gòu)成了輸入域的一個(gè)劃分
22、。n軟件將以相同方式處理每一等價(jià)類里的輸入。步驟三:組合等價(jià)類n將上述步驟中得到的單個(gè)變量的等價(jià)類,以2.3.4小節(jié)中的多元?jiǎng)澐址椒?,將等價(jià)類組合起來。n有時(shí)會(huì)省略這一步驟;n這一步驟將產(chǎn)生大量的等價(jià)類,數(shù)量多到難以管理,應(yīng)盡量避免。步驟四:確定不可測的等價(jià)類n有的輸入數(shù)據(jù)組合在實(shí)際測試中無法生成,包含這些數(shù)據(jù)的等價(jià)類就是不可測等價(jià)類。n我們需要在這一步驟中剔除不可測等價(jià)類。Aditya P. Mathur 2009例2.8溫度控制軟件溫控軟件(CS)GUIdatafilecmdtempchVFcmd:命令(temp, shut, cancel)tempch: 溫度調(diào)節(jié)數(shù)值(-10.10)V,
23、 F: 環(huán)境變量V GUI, file F: 如果V為 “file.”則F表示文件名C例2.8(續(xù))n一個(gè)熱水器控制系統(tǒng)BCS,其溫控軟件為CS,它提供若干選項(xiàng)。供操作員使用的控制選項(xiàng)C包括3個(gè)控制命令(cmd):溫度控制命令temp,系統(tǒng)關(guān)閉命令shut,取消命令Cancel。ntemp需要輸入溫度調(diào)節(jié)數(shù)值tempch,范圍為-10,10,以5攝氏度遞增,且溫度調(diào)節(jié)數(shù)值不能為0。n當(dāng)操作員選擇控制項(xiàng)C時(shí),BCS將對V進(jìn)行檢查,若V為GUI則操作員通過GUI輸入命令之一進(jìn)行操作;若V為file,則通過命令文件獲取命令進(jìn)行操作。例2.8(續(xù))n命令文件包含一條控制命令,當(dāng)命令為temp時(shí),命令文
24、件還包含溫度調(diào)節(jié)數(shù)值。n變量F表示命令文件名,BCS中另一特定模塊負(fù)責(zé)V和F取值的選取。n溫度控制軟件依據(jù)temp、shut命令,產(chǎn)生控制信號(hào)發(fā)送到熱水器。n在仿真環(huán)境下對該軟件進(jìn)行測試,若通過GUI與CS進(jìn)行交互,則GUI使得測試人員只能從規(guī)定的取值集合中選取。Aditya P. Mathur 2009確定輸入域:變量、類型、取值變量種類類型取值V環(huán)境變量枚舉File, GUIF環(huán)境變量字符串文件名cmdGUI/文件方式輸入枚舉temp, cancel, shuttempchGUI/文件方式輸入枚舉-10, -5, 5, 10Aditya P. Mathur 2009確定輸入域Input d
25、omainS=VFcmdtempch 輸入域的一些例子(-: 無關(guān)值):(GUI, -, shut, -), (file, cmdfile, shut, -)(file, cmdfile, temp, 0)這個(gè)也屬于輸入域么?Aditya P. Mathur 2009等價(jià)類劃分變量等價(jià)類VGUI, file, undefinedFfvalid, finvalidcmdtemp, cancel, shut, cinvalidtempchtvalid, tinvalid注意:invalid, tvalid, finvalid和 fvalid 都是值的集合.而 “undefined” 僅表示V未定義
26、.Aditya P. Mathur 2009組合等價(jià)類共有 3425=120 個(gè)等價(jià)類。等價(jià)類的例子: (GUI, fvalid, temp, -10)注意:每一個(gè)等價(jià)類都代表溫控軟件的無限多組輸入. 例如, 對(GUI, fvalid, temp, -10) 其中fvalid可以取任意有效的文件名,進(jìn)而形成一個(gè)無限集合.等價(jià)類中每一個(gè)值都是溫控軟件的潛在輸入.Aditya P. Mathur 2009消除不可測等價(jià)類(V, F, cancel, shut, cinvalid, tvalid tinvalid)注意:只有操作員選擇了temp命令(即cmd為temp),才能實(shí)現(xiàn)溫度調(diào)節(jié),因此下列
27、等價(jià)類都是不可測的。 cmd 和 tempch 之間存在的“父子”約束關(guān)系,使得共有3235=90 個(gè)等價(jià)類不可測. Exercise: 一共有多少個(gè)等價(jià)類是不可測的?一共有多少個(gè)等價(jià)類是不可測的? 基于等價(jià)類的測試用例設(shè)計(jì)n完成了等價(jià)類劃分之后,可以直接設(shè)計(jì)測試用例。由于不可測輸入和無關(guān)值數(shù)據(jù)的存在,增加了難度。n一般情況下,簡單地從每個(gè)等價(jià)類中選取一個(gè)測試用例作為代表即可。例2.4中的測試用例實(shí)例n從三個(gè)有效等價(jià)類中各選一個(gè)用例,從無效等價(jià)類中再選一個(gè)。nT=HP cp1700, Canon Laser Shot LBP3200, Epson Styus Photo Rx600, My P
28、rinter例2.5中的測試用例實(shí)例nT包含6個(gè)形如(w,f)的測試用例,w表示單詞,f表示文件。nT=(love, my_dict), (Hello, does-not-exist), (Bye, empty file), (, my_dict), (, does-not-exist), (, empty file)例2.8中的測試用例實(shí)例n由于存在不可測數(shù)據(jù)和無關(guān)值,測試用例的設(shè)計(jì)較為棘手。n由于存在大量的不可測等價(jià)類(120個(gè)),我們需要從只包含可測等價(jià)類的集合中去設(shè)計(jì)測試用例。例2.8中的測試用例(續(xù))ID等價(jià)類測試用例E1E2E3E4GUI,f_valid,temp,t_validG
29、UI,f_valid,temp,t_validGUI,f_valid,temp,t_validGUI,f_valid,temp,t_valid(GUI,a_file, temp, -10)(GUI,a_file, temp, -5)(GUI,a_file, temp, 5)(GUI,a_file, temp, 10)E5E6E7E8GUI,f_invalid,temp,t_validGUI,f_invalid,temp,t_validGUI,f_invalid,temp,t_validGUI,f_invalid,temp,t_valid(GUI,no_file, temp, -10)(GUI,
30、no_file, temp, -5)(GUI,no_file, temp, 5)(GUI,no_file, temp, 10)E9E10GUI, _, cancel, NAGUI, _, shut, NA(GUI, a_file, cancel, -5)(GUI, no_file, shut, -5)例2.8中的測試用例(續(xù))ID等價(jià)類測試用例E11E12E13E14E15file,f_valid,temp,t_validfile,f_valid,temp,t_validfile,f_valid,temp,t_validfile,f_valid,temp,t_validfile,f_valid
31、,temp,t_invalid(file,a_file, temp, -10)(file,a_file, temp, -5)(file,a_file, temp, 5)(file,a_file, temp, 10)(file,a_file, temp, 25)E16E16E16file, f_valid, shut, NAfile, f_valid, cancel, NAfile, f_valid, c_invalid, NA(file,a_file, shut, 10)(file,a_file, cancel, 10)(file,a_file, c_invalid, 10)E17file,
32、f_invalid, NA, NA(file, no_file, shut, 10)E18undefined, _, NA, NA(undefine, no_file, shut, 10)例2.8中的測試用例(續(xù))n無關(guān)值的選取必須謹(jǐn)慎。雖然需求將某個(gè)變量在某種情況下定義為無關(guān)值,當(dāng)無關(guān)值依然可能被使用。(源于不正確或不清晰的需求)。n覆蓋等價(jià)類時(shí),需要考慮不同變量之間的語義關(guān)系。n當(dāng)?shù)葍r(jià)類之間存在重疊的情況時(shí),可以定義一個(gè)較小的測試用例集合來覆蓋所有的等價(jià)類。GUI設(shè)計(jì)與等價(jià)類n對一個(gè)使用鍵盤輸入的軟件,需要考慮所有的輸入數(shù)據(jù)。GUI設(shè)計(jì)對輸入數(shù)據(jù)有相當(dāng)?shù)南拗?,因而在測試用例設(shè)計(jì)時(shí),需要考慮
33、這個(gè)影響,從而可以確定一些不可測等價(jià)類。n測試人員可以把GUI與軟件內(nèi)核剝離開進(jìn)行測試。n注意:確定GUI中不可測等價(jià)類,進(jìn)而減少測試用例數(shù)目是建立在GUI正確實(shí)現(xiàn),并能阻止非法輸入的前提上的。Aditya P. Mathur 2009GUI與軟件內(nèi)核2.4 邊界值分析Aditya P. Mathur 2009邊界值分析n經(jīng)驗(yàn)告訴我們,程序員通常會(huì)在處理等價(jià)類邊界或邊界附近的取值時(shí)出錯(cuò)。n邊界值分析是一種有效的測試用例選擇方法,可以發(fā)現(xiàn)位于等價(jià)類邊界處的軟件缺陷。等價(jià)類方法從等價(jià)類中選擇測試用例,而邊界值分析法從等價(jià)類邊界或邊界附近選取測試用例。因而它們生成的測試用例之間可能存在重疊。邊界值分
34、析方法的步驟n步驟一:使用一元?jiǎng)澐址椒▌澐州斎胗?,此時(shí)有多少個(gè)輸入域變量就形成多少種劃分,若采用多元?jiǎng)澐址椒ǎ椭荒苄纬奢斎胗虻囊环N劃分。n步驟二:為每個(gè)劃分確定邊界。也可以用輸入變量之間的特定關(guān)系確定邊界。n步驟三:設(shè)計(jì)測試用例,確保每個(gè)邊界值至少出現(xiàn)在一個(gè)測試輸入數(shù)據(jù)中。例2.11n設(shè)函數(shù)findprice,簡記為fp。它有兩個(gè)整型輸入變量code和qty。code為商品編碼,qty為采購數(shù)量。fp訪問數(shù)據(jù)庫,查詢并顯示code編碼對應(yīng)產(chǎn)品的相關(guān)信息。當(dāng)code及qty任一非法時(shí),顯示錯(cuò)誤信息。ncode有效輸入?yún)^(qū)間為99, 999,qty有效輸入?yún)^(qū)間為1, 100。例2.11(續(xù))n首先
35、為fp的兩個(gè)輸入變量建立等價(jià)類。ncode的等價(jià)類nE1:小于99;nE2:有效取值區(qū)間;nE3:大于999。nqty的等價(jià)類nE4:小于1;nE5:有效取值區(qū)間;nE6:大于100。例2.11(續(xù))E1E2E398100998100099999xx*E4E5E602991011100 xx*圖2.7 變量code及qty的等價(jià)類劃分及其邊界例2.11(續(xù))n根據(jù)上述等價(jià)類劃分和邊界分析結(jié)果設(shè)計(jì)測試用例。注意:要求包含各變量的所有邊界值及邊界的附近的值。n測試集例子:T=t1=(code=98,qty=0), t2=(code=99,qty=1), t3=(code=100,qty=2), t
36、4=(code=998,qty=99), t5=(code=999,qty=100), t6=(code=1000,qty=101)例2.11(續(xù))n上述T覆蓋了各變量的各種邊界取值,共6種。是包含code和qty所有邊界值及邊界附近值的最小測試集。但就檢測錯(cuò)誤能力而言,它不是最好的。n對如下fp函數(shù)缺陷代碼:nnif(code999)n display_error(Invalid code);return;n/下面的代碼沒有檢測qty的有效性。n/開始處理code和qty。n例2.11(續(xù))n那么前面的測試用例集合T將不能發(fā)現(xiàn)這個(gè)缺陷(沒有檢測qty的有效性)。n原因在于含有qty非法輸入的
37、測試用例(t1,t6)也同時(shí)包含了code的非法值,執(zhí)行時(shí)將發(fā)現(xiàn)fp正確處理了當(dāng)code是非法值的情況。而T的其他用例沒有包含qty的非法輸入,將不能觸發(fā)失效。例2.11(續(xù))n使用下面4個(gè)用例替代t1,t6,將防止上述問題的發(fā)生。nt7=(code=98,qty=45), nt8=(code=1000,qty=45), nt9=(code=250,qty=0), nt10=(code=250,qty=101)例2.12n方法textSearch,在文本文件txt(字符串)中查找非空字符串s。在txt中,字符位置從0開始。txt和s都是textSearch的輸入?yún)?shù)。textSearch將返回
38、整數(shù)值x;如果x=0指針p指向字符串在txt的起始位置;如果x0,則表示沒有在txt中找到字符串s。n分析s和txt的4個(gè)等價(jià)類如下:ns的等價(jià)類 E1:空串;E2:非空串;ntxt的等價(jià)類 E3:空串;E4:非空串;n對上述等價(jià)類,基于邊界值分析方法得到的用例和它一致。例2.12(續(xù))n對textSearch的輸出空間劃分等價(jià)類,可以得到x的等價(jià)類空間:nx的等價(jià)類 E5:x=0;n要獲得E5的輸出結(jié)果,則txt中不能包含字符串s。同樣,要獲得E6的輸出結(jié)果,則txt中必須包含字符串s。nE5和E6的邊界是x=0;而要獲得x=0的測試輸入,必須滿足下列條件:ns在txt中;ns在txt的起始
39、位置。例2.12(續(xù))n生成測試用例集合T:nT=t1:(s=,txt=laugher is good for the heart.), t2:(s=laughter,txt=), t3:(s=good for, txt=laugher is good for the heart.), t4:(s=laughter,txt=laugher is good for the heart.),n可以驗(yàn)證:t1、t2、t3覆蓋了E1E6。但為覆蓋E5和E6的邊界值,我們還必須生成t4。n此外,我們可以追加一個(gè)用例t4:(s=heart.,txt=laugher is good for the hear
40、t.)以覆蓋s位于txt結(jié)尾的情況。例2.12(續(xù))n可以繼續(xù)追加測試用例以滿足測試輸入在邊界值附近的情況。ns起始于txt的第二個(gè)字符,期望輸出為:p=1;ns結(jié)束于txt的倒數(shù)第二個(gè)字符,期望輸出為:p=k;ns的第二個(gè)字符位于txt的起始位置,期望輸出為:p=-1;ns的倒數(shù)第二個(gè)字符位于txt的結(jié)束位置,期望輸出為:p=-1;n增加測試用例:t6:(s=aughter,txt=laugher is good for the heart.), t7:(s=heart,txt=laugher is good for the heart., t8:(s=glaughter,txt=laugh
41、er is good for the heart., t9:(s=heart.d,txt=laugher is good for the heart.,例2.12(續(xù))n我們所得到的9個(gè)測試用例有6個(gè)是基于邊界值分析而生成的。這些測試用例以及邊界的分布如圖2.8所示。圖2.8 變量txt及s的等價(jià)類劃分及其邊界例2.12(續(xù))n接下來,通過將s和txt的等價(jià)類組合起來,從而產(chǎn)生另外的測試用例。ntextSearch的輸入域可以劃分為4個(gè)等價(jià)類:nE1E3,E1E4,E2E3,E2E4n需要增加測試用例:t10:(s=,txt=)例2.12(續(xù))n確定輸入域邊界時(shí)需要仔細(xì)考慮輸入變量之間的關(guān)系,
42、進(jìn)而獲得那些不明顯的邊界。n使用單個(gè)變量等價(jià)類的笛卡爾積所構(gòu)成的輸入域劃分,將得到更多的測試用例。2.5 類別劃分法Aditya P. Mathur 2009類別劃分法n類別劃分法是一種從軟件需求生成測試用例的系統(tǒng)化的方法。該方法同時(shí)包含了手工和自動(dòng)完成的步驟。n類別劃分法包含了8個(gè)步驟,如圖2.9所示。n類別劃分法本質(zhì)上是測試人員吧軟件需求轉(zhuǎn)化成為相應(yīng)的測試規(guī)范,然后用計(jì)算機(jī)軟件自動(dòng)完成從測試規(guī)范到測試腳本的轉(zhuǎn)化過程。n測試規(guī)范由對應(yīng)于軟件輸入變量和環(huán)境對象的各種類別構(gòu)成。類別劃分法的主要步驟圖2.9 類別劃分法主要步驟例2.11的擴(kuò)展版本n函數(shù):findpricen語法:fp(code,q
43、ty,weight)n功能:findprice有3個(gè)輸入變量:code,qty,weight。code由8位數(shù)字構(gòu)成的商品編碼,qty為采購數(shù)量,weight為采購商品的重量。nfp訪問數(shù)據(jù)庫,查詢并顯示code編碼對應(yīng)產(chǎn)品的相關(guān)信息。當(dāng)code、qty、weight任一非法時(shí),顯示錯(cuò)誤信息。例2.13(續(xù))最左邊的數(shù)字解釋02351,69一般百貨商品,如面包、雜志、肥皂等;重量相關(guān)商品,如肉、水果、蔬菜等;健康相關(guān)商品,如止疼藥等;優(yōu)惠,折扣:左邊第二位數(shù)字表示“元”;第三位第四位數(shù)字表示分;未使用ncode是表示商品類別的8為數(shù)字串,下表給出了code最左邊數(shù)字的解釋。例2.13(續(xù))n參
44、數(shù)qty和wight的使用依賴于code的最左邊數(shù)字。n當(dāng)code最左邊數(shù)字為0或3時(shí),qty表示采購商品數(shù)量的整數(shù),此時(shí)wight無效。n當(dāng)code最左邊數(shù)字為2時(shí),wight表示采購商品的重量,此時(shí)qty無效。n當(dāng)code最左邊數(shù)字為5時(shí),qty表示采購商品的折扣,此時(shí)wight無效。code左邊第2位數(shù)字表示“元”,第3位第4位數(shù)字表示分。n我們假設(shè)忽略code最左數(shù)字為1或69的情況。步驟1:分析功能規(guī)范n測試人員要確定所有能夠獨(dú)立測試的功能模塊。n對大的軟件系統(tǒng)而言,功能模塊可能對應(yīng)于可獨(dú)立測試的子系統(tǒng),而子系統(tǒng)又可以進(jìn)一步分解為可獨(dú)立測試的子模塊。n在例2.13中,fp就是一個(gè)可獨(dú)
45、立測試的子模塊。步驟2:確定類別n對各被測模塊的功能規(guī)范進(jìn)行分析,確定相應(yīng)的輸入,同時(shí)還要確定環(huán)境中的對象。n確定各個(gè)參數(shù)和環(huán)境變量的特征(類別)。參數(shù)參數(shù)特征特征codeqtyweightdatabaselength(長度)、leftmost digit(最左數(shù)字)、remaining digits(剩余數(shù)字);integer quantity(整數(shù)值);float quantity(浮點(diǎn)數(shù)值);contents(內(nèi)容)。步驟3:類別劃分n測試人員要根據(jù)每個(gè)類別中的不同情況,對功能模塊進(jìn)行測試。一種情況就是一個(gè)選項(xiàng)。每個(gè)類別將包含一個(gè)或多個(gè)情況。每個(gè)類別都至少可以被劃分成兩個(gè)子集,一個(gè)是所有
46、正確的取值,一個(gè)是所有錯(cuò)誤的取值。n對例2.13的類別劃分:ncode: (1) length: valid(8個(gè)數(shù)字), invalid(少于或多于8個(gè)數(shù)字); (2) leftmost digit: 0,2,3,5,其他; (3)remaining digits: valid string; invalid string;nqty: (1)integer quantity: valid integer ; invalid integer ;nweight: (1)float quantity: valid weight; invalid weight;ndatabase: (1)conte
47、nts : item exists; item does not exist;步驟4:確定約束條件n對功能模塊的測試,需要包含所有選項(xiàng)的組合測試,由于輸入?yún)?shù)間必須滿足某些約束關(guān)系,因此某些組合是無法實(shí)現(xiàn)的。n本步驟將確定各選項(xiàng)之間的約束關(guān)系。步驟6中,將依據(jù)這些約束關(guān)系,只生產(chǎn)有效的測試框架。n約束關(guān)系可以表示成屬性列表或選擇表達(dá)式。n屬性表達(dá)式形式為:property P1, P2。其中property是關(guān)鍵字,P1,P2表示各屬性的名稱??蔀槊總€(gè)選項(xiàng)分配一個(gè)屬性。n選擇表達(dá)式是屬性列表中那些已定義屬性的連接,形式為:if P1 if P1 and P2 and .n屬性列表和選擇表達(dá)式一
48、般放在各選項(xiàng)的后面。當(dāng)某選項(xiàng)后面的屬性列表為error時(shí),表示該選項(xiàng)是錯(cuò)誤狀態(tài);若為single,則該選項(xiàng)不能和其他選項(xiàng)進(jìn)行組合。例2.13部分選項(xiàng)的約束條件n#leftmost digit of coden0 property 一般百貨商品n2 property 重量相關(guān)商品n#Remaining digits of codenvalid string singlen#valid value of qtynvalid quantity if 一般百貨商品n#incorrect value of qtyninvalid quantity error步驟5:編(重)寫測試規(guī)范n為每個(gè)選項(xiàng)分配了屬
49、性列表和選擇表達(dá)式后,測試人員就可以編寫完整的測試規(guī)范了。n測試規(guī)范編寫采用測試規(guī)范語言TSL(test specification language)。n步驟7中,將評(píng)價(jià)測試框架,如果不滿意或有冗余框架則可多次重復(fù)步驟5.n冗余框架:由不切實(shí)際或在實(shí)際使用中不可能發(fā)生的選項(xiàng)組合而成的測試框架。例2.13的完整測試規(guī)范ncode: nlength nvalidninvalid errornleftmost digitn0 property 一般百貨商品n2 property 重量相關(guān)商品n3 property 健康相關(guān)商品n5 property 優(yōu)惠商品nremaining digitsnva
50、lid string singleninvalid stirng error例2.13的完整測試規(guī)范(續(xù))nqty: ninteger quantitynvalid quantity if 一般百貨商品ninvalid quantity errornweightnfloat quantitynvalid weight if 重量相關(guān)商品ninvalid weight errorn環(huán)境變量ndatabasencontentsnitem existsnitem does not exist error步驟6:處理測試規(guī)范n由一個(gè)自動(dòng)測試框架生成器處理步驟5生成的測試規(guī)范,生成若干個(gè)測試框架。n測試
51、人員可以對這些框架進(jìn)行分析,找出冗余內(nèi)容。n例2.13中的測試框架實(shí)例:ntest case 2:(key = 1.2.1.0.1.1)nlength: validnleftmost digit: 2nremaining digits: valid stringnqty: ignorednweight: 3.19ndatabase: item exist步驟6:處理測試規(guī)范(續(xù))n測試用例的序號(hào)用例標(biāo)識(shí)測試用例。n測試框架并非測試用例,從測試框架很容易得到包含特定輸入及期望輸出的測試用例。此外,測試框架還包含環(huán)境變量,有利于測試。n測試框架是各選項(xiàng)根據(jù)約束關(guān)系組合而成的,error選項(xiàng)和sin
52、gle選項(xiàng)只能產(chǎn)生一個(gè)測試用例。步驟7:評(píng)價(jià)生成器輸出n檢查步驟6生產(chǎn)的測試框架中是否包含冗余用例或是否缺少某些用例。步驟8:生成測試腳本n從測試框架產(chǎn)生的測試用例要被組合產(chǎn)生測試腳本。n所謂測試腳本是一組測試用例。通常把環(huán)境設(shè)置相同的測試用例變?yōu)橥唤M。2.6 因果圖分析Aditya P. Mathur 2009因果圖n因果圖,也稱依賴關(guān)系模型,主要用于描述軟件輸入條件(即“原因”)與軟件輸出結(jié)果(即“結(jié)果”)之間的依賴關(guān)系。n因果圖可以直觀地描述各種依賴關(guān)系,是輸入輸出邏輯關(guān)系的圖形化表示。邏輯關(guān)系也可表達(dá)為布爾表達(dá)式。n測試人員可以從因果圖中選擇不同的輸入組合作為測試用例。原因和結(jié)果n“
53、原因”指軟件需求中能影響軟件輸出的任意輸入條件。n“結(jié)果”指軟件對某些輸入條件的組合所作出的相應(yīng)。n結(jié)果可以是屏幕顯示的錯(cuò)誤信息;也可以是新窗口;也可以是數(shù)據(jù)庫的一次更新。n結(jié)果對用戶并不總是可見的輸出;n結(jié)果可能是軟件當(dāng)中的一個(gè)內(nèi)部測試點(diǎn)。因果圖分析法步驟n1)研讀需求,確定哪些是原因,哪些是結(jié)果,并為每一個(gè)原因和結(jié)果賦以唯一的標(biāo)識(shí)。n2)用因果圖描述原因和結(jié)果之間的依賴關(guān)系。n3)將因果圖轉(zhuǎn)換為一個(gè)有限入口的判定表。n4)根據(jù)判定表生成測試用例。因果圖中的基本符號(hào)原因之間的約束關(guān)系原因之間的約束關(guān)系 E(互斥):(互斥):表示a、b兩個(gè)原因不同時(shí)為成立,最多只有一個(gè)可能成立,即a、b中至多
54、只有一個(gè)1。 I(包含):(包含):表示a、b、d三個(gè)原因中至少有一個(gè)必須成立,即a、b、d中不可全部為0。 O(唯一):(唯一):表示a、b中必須只有一個(gè)成立,即a、b中有且只有一個(gè)1。 R(要求):(要求):表示當(dāng)a出現(xiàn)時(shí),b也要必須出現(xiàn),即如果a=1,b必須為1。 M(屏蔽):(屏蔽):這個(gè)約束條件最為特殊,不同于以上是對輸入原因的約束,而是從輸出結(jié)果考慮,當(dāng)a是1時(shí),b必須是0;當(dāng)a是0時(shí),則b的值不定。創(chuàng)建因果圖n第一步:1)通過對軟件需求的分析,確定哪些是原因,哪些是結(jié)果。2)同時(shí)明確原因和結(jié)果之間的因果關(guān)系,以及原因之間,結(jié)果之間的約束關(guān)系。3)為每一原因和結(jié)果賦予唯一的標(biāo)識(shí),便于在因果圖中引用。n構(gòu)造因果圖,以表達(dá)上述依賴關(guān)系。當(dāng)原因結(jié)果數(shù)量較多時(shí),采用增量方法比較合適。例2.19n某互聯(lián)網(wǎng)公司經(jīng)銷計(jì)算機(jī)硬件,其銷售訂單配置包含CPU、打印機(jī)(PR)、顯示器(M)、內(nèi)存(RAM)中的14種商品(如圖2-13顯示)。n生成訂單時(shí),用戶可以分別從三種CPU、兩種打印機(jī)、三種顯示器中進(jìn)行選擇,而內(nèi)存只在升級(jí)時(shí)使用。n對于這些商品,分別在不同的窗口
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 法院土地征收合同范例
- 農(nóng)資化肥銷售合同范例
- 新舊油罐銷售合同范例
- 借用建筑合同范例
- 與員工合作合同范例
- 2025年朝陽貨運(yùn)從業(yè)資格證怎么考
- 宅基地多次轉(zhuǎn)讓合同范例
- 瓜蔬銷售合同范例
- 出售水果大棚合同范例
- 物質(zhì)檢測合同范例
- 2024美的在線測評(píng)題庫答案
- 果品類原料的烹調(diào)應(yīng)用課件
- 五年級(jí)上冊小數(shù)乘除練習(xí)300道及答案
- 24節(jié)氣中的傳統(tǒng)服飾與飾品
- 年產(chǎn)10萬噸乙腈法生產(chǎn)丁二烯的工藝設(shè)計(jì)
- 地彈簧行業(yè)分析
- 不動(dòng)產(chǎn)抵押登記手續(xù)
- 公安機(jī)關(guān)執(zhí)法執(zhí)勤規(guī)范用語
- 無人機(jī)技術(shù)在消防救援中的作用與局限
- 如何發(fā)揮采購在公司高質(zhì)量發(fā)展中作用
- 2023-2024學(xué)年湖南省長沙市雨花區(qū)外研版(三起)五年級(jí)上冊期末質(zhì)量檢測英語試卷
評(píng)論
0/150
提交評(píng)論