版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(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è)計測試的基本出發(fā)點。軟件的需求可能是簡單的,非形式化的;也可以是通過建模工具獲得嚴(yán)格的需求;更進(jìn)一步,利用形式化的工具,可以將嚴(yán)格的軟件需求進(jìn)一步轉(zhuǎn)化為形式化的需求。商用軟件的需求規(guī)范通常是三者并存的方式。Aditya P. Mathur 2009軟件需求與測試設(shè)計軟件需求形式化程度越高,越有機會進(jìn)行自動化測試。本章重點討論根據(jù)非正式的需求規(guī)范和嚴(yán)格的需求規(guī)范來設(shè)計測試。基于軟件需求的測試設(shè)計技術(shù)2.2測試用例選擇問題Aditya P. Mathur 2009Aditya P. Mathur 2009測試用例選擇問題設(shè)D為軟件P的輸入域。 測
3、試選擇問題是指:從D中選擇一個子集T,以T中各元素作為輸入執(zhí)行P,執(zhí)行過程中將發(fā)現(xiàn)P中的所有缺陷。一般來說不存在任何構(gòu)造這樣的測試集的算法。但是,也有啟發(fā)式和基于模型的方法可以用來產(chǎn)生測試用例集合,能夠有效暴露某些類型的故障。Aditya P. Mathur 2009測試用例選擇問題(續(xù))測試用例選擇問題的關(guān)鍵在于:構(gòu)造一個測試用例集合TD,使得T能夠盡可能多地發(fā)現(xiàn)P中缺陷。測試用例選擇的問題是非常困難的,主要困難在于P的輸入域的大小和復(fù)雜性。Aditya P. Mathur 2009軟件輸入域軟件輸入域是指:軟件在執(zhí)行過程中可能接受的全部合法輸入的集合。軟件的合法輸入集合是由軟件需求決定的。
4、在許多實際問題中,軟件輸入域非常龐大,可能包含很多元素。同時也很復(fù)雜,這些元素又具有很多類型。Aditya P. Mathur 2009窮舉測試輸入域規(guī)模過大使得不可能通過窮舉測試,即執(zhí)行的輸入域中所有的元素,以發(fā)現(xiàn)所有的錯誤。輸入域的復(fù)雜性使得選擇輸入域中每一個單獨的測試用例都很困難。Aditya P. Mathur 2009規(guī)模龐大的輸入域例1:考慮一個將整數(shù)序列排序為升序排列的程序P。若設(shè)P將運行在的一臺機器的整數(shù)范圍是從-32768到32767,那么P的輸入域是-32768,32767的所有可能的序列。如果該程序能夠被輸入的序列大小沒有限制,則P的輸入域是無限大并且P不能被窮盡測試。如
5、果輸入序列的大小是有限的,比如說Nmax1,則輸入域的大小取決于N的值。請計算一下上述輸入域的大小。Aditya P. Mathur 2009輸入域的復(fù)雜性例2:考慮一個工資單處理系統(tǒng)上的程序P,它以雇員記錄作為輸入計算周薪。為簡單起見,假定雇員記錄由以下條目的類型和約束構(gòu)成:請計算一下上述輸入域的大小。ID是一個從001到999的3位數(shù)的數(shù)字name是20個字符組成的字符串,每個字符屬于26個字母和空格中的一個rate的取值范圍是510美元/小時,以0.25美元的倍數(shù)遞增hoursWorked的取值范圍是060999種可能取種可能取值值27的的20次方個可能取次方個可能取值值可能取可能取值值
6、有有21個個可能取可能取值值有有61個個Aditya P. Mathur 2009測試用例選擇方法各種測試用例選擇方法應(yīng)運而生,測試人員使用這些方法從輸入域中選擇一個盡可能小的子集,以便達(dá)到測試軟件的目的。2.3 等價類劃分Aditya P. Mathur 2009Aditya P. Mathur 2009等價類劃分采用等價類劃分測試方法選擇測試用例時,要求測試人員把輸入域進(jìn)行細(xì)分,成為多個(比如說N1)子域,每一子域的輸入元素數(shù)量更少。如圖所示(下一張幻燈片(a)條)。從嚴(yán)格的數(shù)學(xué)定義來說,子域是不相交的。(a)中所示的四個子集構(gòu)成了輸入域的一個劃分,而(b)中的子集沒有。每個子集被稱為一個
7、等價類。Aditya P. Mathur 2009子域Aditya P. Mathur 2009程序行為和等價類等價類劃分,實際上假設(shè)被測程序在劃分的每一子集中的所有元素的程序行為(也就是測試)是相同的。這種假設(shè)允許測試人員從每個等價類只選擇一個測試用例,從而從N個子集中構(gòu)成一個具有N個測試用例的測試套件(test suite)。Aditya P. Mathur 2009等價類劃分與測試套件對同一輸入域進(jìn)行等價類劃分,可能會得到不同的劃分結(jié)果。即使等價類劃分結(jié)果相同,由于選擇的用例不同,產(chǎn)生的測試用例集合也不同。各種因素影響測試用例集合的故障檢測效率:測試設(shè)計經(jīng)驗;需求熟悉程度;是否有源代碼;
8、對代碼的熟悉程度等。Aditya P. Mathur 2009缺陷定位任何軟件的輸入集合都可以至少分成兩個子集:一個包含所有希望的(或合法的)輸入(E),以及其他包含所有不希望的(或非法的)輸入(U)。 兩個子集中任意一個,都可以進(jìn)一步細(xì)分為多個子集,使得應(yīng)用程序在這些子集上的行為會不一樣(例如,E1,E2,E3和U1,U2)。Aditya P. Mathur 2009例2.1設(shè)軟件A需要輸入一個整數(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ì)分為兩個區(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中選擇的那個測試用例將觸發(fā)相對于R1的任何故障。同樣,從范圍62. 120中選擇的測試用例,就會發(fā)現(xiàn)相對
10、于R2的任何故障。類似的期望也適用于無效輸入的那兩個區(qū)域。使用等價類劃分技術(shù)選出的測試用例,代表著四個輸入域(即連個包含有效輸入的輸入域和兩個包含無效的輸入的輸入域)中的輸入,來測試被測應(yīng)用程序是否存在錯誤。Aditya P. Mathur 2009測試用例的效率使用等價類劃分生成測試用例來測試應(yīng)用程序A的效率,是使用該測試用例集合所發(fā)現(xiàn)的錯誤的數(shù)目和A中所有錯誤的數(shù)目的比率來定義的。和其他所有軟件測試的測試用例選擇技術(shù)的情況一樣,對絕大多數(shù)的實際應(yīng)用程序,使用等價類劃分的測試用例生成方法的效率少于1。通過一個無二義性且完整的需求說明,并進(jìn)行根據(jù)后續(xù)章節(jié)的內(nèi)容精心構(gòu)造等價類,選擇測試用例,將有
11、助于效率的提高。關(guān)系與等價類劃分n集合論中,關(guān)系的是指一個n元組的集合。dn軟件測試中,通過等價類劃分輸入域時,通常測試人員將采用(構(gòu)造)如下關(guān)系:R:IIn其中I為輸入域,R為I上的關(guān)系,R定義了一個等價類。例2.3n方法gPrice以食品雜貨店的食品名稱作為輸入,查詢商品價格數(shù)據(jù)庫并返回相應(yīng)食品單價。如果數(shù)據(jù)庫中沒有該食品,則返回錯誤。n在輸入域上定義關(guān)系pFound:II。其中如果軟件為元素t1,t2都返回單價,則pFound將關(guān)聯(lián)t1, t2;或者軟件為元素t3,t4都返回錯誤,則pFound也將關(guān)聯(lián)t3, t4例2.3(續(xù))n存在于數(shù)據(jù)庫中任意食品構(gòu)成一個等價類pF。而不是數(shù)據(jù)庫中的
12、食品名稱的字符串都屬于pFound所定義的另一個等價類pNF。n有:pFpNF=I 和 pFpNF=例2.4n打印機測試軟件pTest,輸入品牌和型號,選擇測試腳本進(jìn)行測試。需要驗證腳本選擇過程是否正確。npTest的輸入域I由表示品牌、型號的字符串構(gòu)成。對測試而言I可能不一樣:鍵盤輸入和GUI下拉列表。n假定有三種腳本選擇方式:彩色噴墨打印機ci,彩色激光打印機cl,彩色多功能打印機cm。此外,數(shù)據(jù)庫中不存在的數(shù)據(jù)都是無效數(shù)據(jù)。例2.4n可以在輸入域I上定義4個關(guān)系:nci:IIncl:IIncm:IIninvP:IIn上述關(guān)系分別定義了一個等價類劃分。Aditya P. Mathur 20
13、09例2.5設(shè)wordCount方法以單詞w和文件名f作為輸入,并返回單詞w在文件f包含的文本中出現(xiàn)的次數(shù);f不存在,則產(chǎn)生一個異常。這個例子描述了基于軟件需求和軟件源代碼來進(jìn)行等價類劃分的方法。根據(jù)上述描述,可以得到兩個等價類: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的源代碼如下。我們就可以得到如下一頁所示的等價類劃分。Aditya P. Mathur 2009例2.5(續(xù))等價類wfE1非空串存在,非空文件E2非空串不存在E3非空串存在,空文件E4空串存在,非空文件E5空串不存在E6空串存在,空文件Aditya P. Mathur 2009例2.5(續(xù))注意,無程序代碼的任何知識的話,等價類的數(shù)量是2,而有來自代碼的部分知識,則等價類的數(shù)目為6。當(dāng)然,有經(jīng)驗的測試人員在代碼可用之前,可能就會得出上述六個等價類,甚至更多。Aditya P. Mathur 2009根據(jù)
15、程序輸出劃分的等價類在某些情況下,等價類可以基于程序的輸出來生成。例如,假設(shè)一個程序的輸出是整數(shù)。 那么值得一問:“方案是否曾經(jīng)產(chǎn)生一個0?什么是輸出的最大和最小可能的值?”這兩個問題導(dǎo)致下列兩個基于輸出的等價類:Aditya P. Mathur 2009根據(jù)程序輸出劃分的等價類(續(xù))E1:輸出值v為0。 E2:輸出值v是最大值。 E3:輸出值v是最小值。 E4:其他所有的輸出值?;谳敵龅葍r類,可以進(jìn)一步得到與之對應(yīng)的輸入等價類。對于上面給出的所有四個等價類,可以形成與之相對應(yīng)的輸入等價類。Aditya P. Mathur 2009變量取值范圍的等價類等價類示例一個類包含一個范圍內(nèi)的值和兩個
16、范圍外的值speed 60.9050, 75, 92area: floatarea0.0-1.0, 15.52age: int0=age=120-1, 56, 132letter:charJ, 3約束等價類代表Aditya P. Mathur 2009字符串變量的等價類等價類示例至少分為一個包含所有合法字符串的類和一個包含所有非法字符串的類。合法性由字符串長度及其他語義特性所決定firstname: string, Sue, Loooong Name約束等價類代表Aditya P. Mathur 2009枚舉變量的等價類等價類示例每個取值對應(yīng)一個等價類autocolor:red, blue,
17、greenred, blue, greenup:booleantrue, false約束等價類代表Aditya P. Mathur 2009數(shù)組的等價類等價類示例一個包含所有合法數(shù)組的等價類,一個空數(shù)組等價類,以及一個包含所有大于期望長度數(shù)組的等價類int aName: new int3; , -10, 20, -9, 0, 12, 15約束等價類代表Aditya P. Mathur 2009復(fù)合數(shù)據(jù)類型的等價類Java中的數(shù)組,C+中的記錄、結(jié)構(gòu)都是復(fù)合數(shù)據(jù)類型。這些輸入類型會在測試應(yīng)用程序的組件,如函數(shù)或?qū)ο髸r遇到。對這種數(shù)據(jù)類型進(jìn)行等價類劃分時,需要考慮輸入數(shù)據(jù)的每一個屬性的合法和非法取
18、值。下一個例子說明了針對復(fù)合數(shù)據(jù)類型的輸入變量的等價類的劃分方法。Aditya P. Mathur 2009復(fù)合數(shù)據(jù)類型的等價類(例)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中得到每一個元素的等價類劃分,并將它們組合起來!Aditya P. Mathur 2009一元劃分與多元劃分一種
19、劃分輸入域的方法是一次只考慮一個變量。這樣,每一個輸入變量形成了對輸入域的一個劃分。我們成這種劃分為一元等價類劃分,簡稱一元劃分。這種類型的劃分是很常用的。Aditya P. Mathur 2009多元劃分另一種劃分方法是把所有輸入變量的笛卡爾積視為程序的輸入域I,并定義I上的關(guān)系R。該方法只產(chǎn)生一個劃分,劃分包含多個等價類。我們稱這種劃分為多元等價類劃分,簡稱多元劃分。多元劃分將產(chǎn)生大量的等價類,因而難以手工管理。并且許多等價類可能不可用。不過,正如下一節(jié)所說的,這些等價類可以提供更多的測試用例。Aditya P. Mathur 2009劃分的例子設(shè)某應(yīng)用程序的輸入是兩個整數(shù)x和y。其預(yù)期輸
20、入范圍是:3=x=7和5=9。對于一元劃分,我們根據(jù)x和y分別分區(qū)。從而得到了以下6個等價類。Aditya P. Mathur 2009劃分的例子(續(xù))E1: x7忽略了y .E4: y9忽略了x .對于多元劃分,我們考慮輸入域是笛卡爾積X Y。從而得到了以下9個等價類。Aditya P. Mathur 2009劃分的例子(續(xù))E1: x3, y5 E2: x3, 5y9E3: x9E4: 3x7, y9E7: 7, y7, 5y9E9: x7, y9Aditya P. Mathur 2009劃分的例子(續(xù))6 個等價類:9 個等價類:E1: x3, y5 E2: x3, 5y9E3: x9E
21、4: 3x7, y9E7: x7, y7, 5y9E9: x7, y9等價類劃分的完整過程n不管輸入域大小,都可以用等價類劃分選擇測試用例。n使用等價類劃分生成測試用例的步驟:n步驟一:確定輸入域;n步驟二:等價類劃分;n步驟三:組合等價類;n步驟四:確定不可測的等價類;步驟一:確定輸入域n分析需求:n確定所有輸入、輸出變量;n確定變量類型和變量使用條件;n確定環(huán)境變量(也是輸入域變量);n確定每個變量的取值集合。n上述變量的笛卡爾積就是輸入域。n一般只能以手工方式完成。步驟二:等價類劃分n將每個變量的取值集合劃分成為互不相交的子集,則每個子集對應(yīng)于一個等價類。所有等價類構(gòu)成了輸入域的一個劃分
22、。n軟件將以相同方式處理每一等價類里的輸入。步驟三:組合等價類n將上述步驟中得到的單個變量的等價類,以2.3.4小節(jié)中的多元劃分方法,將等價類組合起來。n有時會省略這一步驟;n這一步驟將產(chǎn)生大量的等價類,數(shù)量多到難以管理,應(yīng)盡量避免。步驟四:確定不可測的等價類n有的輸入數(shù)據(jù)組合在實際測試中無法生成,包含這些數(shù)據(jù)的等價類就是不可測等價類。n我們需要在這一步驟中剔除不可測等價類。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一個熱水器控制系統(tǒng)BCS,其溫控軟件為CS,它提供若干選項。供操作員使用的控制選項C包括3個控制命令(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)操作員選擇控制項C時,BCS將對V進(jìn)行檢查,若V為GUI則操作員通過GUI輸入命令之一進(jìn)行操作;若V為file,則通過命令文件獲取命令進(jìn)行操作。例2.8(續(xù))n命令文件包含一條控制命令,當(dāng)命令為temp時,命令文
24、件還包含溫度調(diào)節(jié)數(shù)值。n變量F表示命令文件名,BCS中另一特定模塊負(fù)責(zé)V和F取值的選取。n溫度控制軟件依據(jù)temp、shut命令,產(chǎn)生控制信號發(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)這個也屬于輸入域么?Aditya P. Mathur 2009等價類劃分變量等價類VGUI, file, undefinedFfvalid, finvalidcmdtemp, cancel, shut, cinvalidtempchtvalid, tinvalid注意:invalid, tvalid, finvalid和 fvalid 都是值的集合.而 “undefined” 僅表示V未定義
26、.Aditya P. Mathur 2009組合等價類共有 3425=120 個等價類。等價類的例子: (GUI, fvalid, temp, -10)注意:每一個等價類都代表溫控軟件的無限多組輸入. 例如, 對(GUI, fvalid, temp, -10) 其中fvalid可以取任意有效的文件名,進(jìn)而形成一個無限集合.等價類中每一個值都是溫控軟件的潛在輸入.Aditya P. Mathur 2009消除不可測等價類(V, F, cancel, shut, cinvalid, tvalid tinvalid)注意:只有操作員選擇了temp命令(即cmd為temp),才能實現(xiàn)溫度調(diào)節(jié),因此下列
27、等價類都是不可測的。 cmd 和 tempch 之間存在的“父子”約束關(guān)系,使得共有3235=90 個等價類不可測. Exercise: 一共有多少個等價類是不可測的?一共有多少個等價類是不可測的? 基于等價類的測試用例設(shè)計n完成了等價類劃分之后,可以直接設(shè)計測試用例。由于不可測輸入和無關(guān)值數(shù)據(jù)的存在,增加了難度。n一般情況下,簡單地從每個等價類中選取一個測試用例作為代表即可。例2.4中的測試用例實例n從三個有效等價類中各選一個用例,從無效等價類中再選一個。nT=HP cp1700, Canon Laser Shot LBP3200, Epson Styus Photo Rx600, My P
28、rinter例2.5中的測試用例實例nT包含6個形如(w,f)的測試用例,w表示單詞,f表示文件。nT=(love, my_dict), (Hello, does-not-exist), (Bye, empty file), (, my_dict), (, does-not-exist), (, empty file)例2.8中的測試用例實例n由于存在不可測數(shù)據(jù)和無關(guān)值,測試用例的設(shè)計較為棘手。n由于存在大量的不可測等價類(120個),我們需要從只包含可測等價類的集合中去設(shè)計測試用例。例2.8中的測試用例(續(xù))ID等價類測試用例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等價類測試用例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)慎。雖然需求將某個變量在某種情況下定義為無關(guān)值,當(dāng)無關(guān)值依然可能被使用。(源于不正確或不清晰的需求)。n覆蓋等價類時,需要考慮不同變量之間的語義關(guān)系。n當(dāng)?shù)葍r類之間存在重疊的情況時,可以定義一個較小的測試用例集合來覆蓋所有的等價類。GUI設(shè)計與等價類n對一個使用鍵盤輸入的軟件,需要考慮所有的輸入數(shù)據(jù)。GUI設(shè)計對輸入數(shù)據(jù)有相當(dāng)?shù)南拗疲蚨跍y試用例設(shè)計時,需要考慮
33、這個影響,從而可以確定一些不可測等價類。n測試人員可以把GUI與軟件內(nèi)核剝離開進(jìn)行測試。n注意:確定GUI中不可測等價類,進(jìn)而減少測試用例數(shù)目是建立在GUI正確實現(xiàn),并能阻止非法輸入的前提上的。Aditya P. Mathur 2009GUI與軟件內(nèi)核2.4 邊界值分析Aditya P. Mathur 2009邊界值分析n經(jīng)驗告訴我們,程序員通常會在處理等價類邊界或邊界附近的取值時出錯。n邊界值分析是一種有效的測試用例選擇方法,可以發(fā)現(xiàn)位于等價類邊界處的軟件缺陷。等價類方法從等價類中選擇測試用例,而邊界值分析法從等價類邊界或邊界附近選取測試用例。因而它們生成的測試用例之間可能存在重疊。邊界值分
34、析方法的步驟n步驟一:使用一元劃分方法劃分輸入域,此時有多少個輸入域變量就形成多少種劃分,若采用多元劃分方法,就只能形成輸入域的一種劃分。n步驟二:為每個劃分確定邊界。也可以用輸入變量之間的特定關(guān)系確定邊界。n步驟三:設(shè)計測試用例,確保每個邊界值至少出現(xiàn)在一個測試輸入數(shù)據(jù)中。例2.11n設(shè)函數(shù)findprice,簡記為fp。它有兩個整型輸入變量code和qty。code為商品編碼,qty為采購數(shù)量。fp訪問數(shù)據(jù)庫,查詢并顯示code編碼對應(yīng)產(chǎn)品的相關(guān)信息。當(dāng)code及qty任一非法時,顯示錯誤信息。ncode有效輸入?yún)^(qū)間為99, 999,qty有效輸入?yún)^(qū)間為1, 100。例2.11(續(xù))n首先
35、為fp的兩個輸入變量建立等價類。ncode的等價類nE1:小于99;nE2:有效取值區(qū)間;nE3:大于999。nqty的等價類nE4:小于1;nE5:有效取值區(qū)間;nE6:大于100。例2.11(續(xù))E1E2E398100998100099999xx*E4E5E602991011100 xx*圖2.7 變量code及qty的等價類劃分及其邊界例2.11(續(xù))n根據(jù)上述等價類劃分和邊界分析結(jié)果設(shè)計測試用例。注意:要求包含各變量的所有邊界值及邊界的附近的值。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所有邊界值及邊界附近值的最小測試集。但就檢測錯誤能力而言,它不是最好的。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)這個缺陷(沒有檢測qty的有效性)。n原因在于含有qty非法輸入的
37、測試用例(t1,t6)也同時包含了code的非法值,執(zhí)行時將發(fā)現(xiàn)fp正確處理了當(dāng)code是非法值的情況。而T的其他用例沒有包含qty的非法輸入,將不能觸發(fā)失效。例2.11(續(xù))n使用下面4個用例替代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個等價類如下:ns的等價類 E1:空串;E2:非空串;ntxt的等價類 E3:空串;E4:非空串;n對上述等價類,基于邊界值分析方法得到的用例和它一致。例2.12(續(xù))n對textSearch的輸出空間劃分等價類,可以得到x的等價類空間:nx的等價類 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可以驗證:t1、t2、t3覆蓋了E1E6。但為覆蓋E5和E6的邊界值,我們還必須生成t4。n此外,我們可以追加一個用例t4:(s=heart.,txt=laugher is good for the hear
40、t.)以覆蓋s位于txt結(jié)尾的情況。例2.12(續(xù))n可以繼續(xù)追加測試用例以滿足測試輸入在邊界值附近的情況。ns起始于txt的第二個字符,期望輸出為:p=1;ns結(jié)束于txt的倒數(shù)第二個字符,期望輸出為:p=k;ns的第二個字符位于txt的起始位置,期望輸出為:p=-1;ns的倒數(shù)第二個字符位于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個測試用例有6個是基于邊界值分析而生成的。這些測試用例以及邊界的分布如圖2.8所示。圖2.8 變量txt及s的等價類劃分及其邊界例2.12(續(xù))n接下來,通過將s和txt的等價類組合起來,從而產(chǎn)生另外的測試用例。ntextSearch的輸入域可以劃分為4個等價類:nE1E3,E1E4,E2E3,E2E4n需要增加測試用例:t10:(s=,txt=)例2.12(續(xù))n確定輸入域邊界時需要仔細(xì)考慮輸入變量之間的關(guān)系,
42、進(jìn)而獲得那些不明顯的邊界。n使用單個變量等價類的笛卡爾積所構(gòu)成的輸入域劃分,將得到更多的測試用例。2.5 類別劃分法Aditya P. Mathur 2009類別劃分法n類別劃分法是一種從軟件需求生成測試用例的系統(tǒng)化的方法。該方法同時包含了手工和自動完成的步驟。n類別劃分法包含了8個步驟,如圖2.9所示。n類別劃分法本質(zhì)上是測試人員吧軟件需求轉(zhuǎn)化成為相應(yīng)的測試規(guī)范,然后用計算機軟件自動完成從測試規(guī)范到測試腳本的轉(zhuǎn)化過程。n測試規(guī)范由對應(yīng)于軟件輸入變量和環(huán)境對象的各種類別構(gòu)成。類別劃分法的主要步驟圖2.9 類別劃分法主要步驟例2.11的擴展版本n函數(shù):findpricen語法:fp(code,q
43、ty,weight)n功能:findprice有3個輸入變量: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任一非法時,顯示錯誤信息。例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時,qty表示采購商品數(shù)量的整數(shù),此時wight無效。n當(dāng)code最左邊數(shù)字為2時,wight表示采購商品的重量,此時qty無效。n當(dāng)code最左邊數(shù)字為5時,qty表示采購商品的折扣,此時wight無效。code左邊第2位數(shù)字表示“元”,第3位第4位數(shù)字表示分。n我們假設(shè)忽略code最左數(shù)字為1或69的情況。步驟1:分析功能規(guī)范n測試人員要確定所有能夠獨立測試的功能模塊。n對大的軟件系統(tǒng)而言,功能模塊可能對應(yīng)于可獨立測試的子系統(tǒng),而子系統(tǒng)又可以進(jìn)一步分解為可獨立測試的子模塊。n在例2.13中,fp就是一個可獨
45、立測試的子模塊。步驟2:確定類別n對各被測模塊的功能規(guī)范進(jìn)行分析,確定相應(yīng)的輸入,同時還要確定環(huán)境中的對象。n確定各個參數(shù)和環(huán)境變量的特征(類別)。參數(shù)參數(shù)特征特征codeqtyweightdatabaselength(長度)、leftmost digit(最左數(shù)字)、remaining digits(剩余數(shù)字);integer quantity(整數(shù)值);float quantity(浮點數(shù)值);contents(內(nèi)容)。步驟3:類別劃分n測試人員要根據(jù)每個類別中的不同情況,對功能模塊進(jìn)行測試。一種情況就是一個選項。每個類別將包含一個或多個情況。每個類別都至少可以被劃分成兩個子集,一個是所有
46、正確的取值,一個是所有錯誤的取值。n對例2.13的類別劃分:ncode: (1) length: valid(8個數(shù)字), invalid(少于或多于8個數(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對功能模塊的測試,需要包含所有選項的組合測試,由于輸入?yún)?shù)間必須滿足某些約束關(guān)系,因此某些組合是無法實現(xiàn)的。n本步驟將確定各選項之間的約束關(guān)系。步驟6中,將依據(jù)這些約束關(guān)系,只生產(chǎn)有效的測試框架。n約束關(guān)系可以表示成屬性列表或選擇表達(dá)式。n屬性表達(dá)式形式為:property P1, P2。其中property是關(guān)鍵字,P1,P2表示各屬性的名稱。可為每個選項分配一個屬性。n選擇表達(dá)式是屬性列表中那些已定義屬性的連接,形式為:if P1 if P1 and P2 and .n屬性列表和選擇表達(dá)式一
48、般放在各選項的后面。當(dāng)某選項后面的屬性列表為error時,表示該選項是錯誤狀態(tài);若為single,則該選項不能和其他選項進(jìn)行組合。例2.13部分選項的約束條件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為每個選項分配了屬
49、性列表和選擇表達(dá)式后,測試人員就可以編寫完整的測試規(guī)范了。n測試規(guī)范編寫采用測試規(guī)范語言TSL(test specification language)。n步驟7中,將評價測試框架,如果不滿意或有冗余框架則可多次重復(fù)步驟5.n冗余框架:由不切實際或在實際使用中不可能發(fā)生的選項組合而成的測試框架。例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由一個自動測試框架生成器處理步驟5生成的測試規(guī)范,生成若干個測試框架。n測試
51、人員可以對這些框架進(jìn)行分析,找出冗余內(nèi)容。n例2.13中的測試框架實例: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測試用例的序號用例標(biāo)識測試用例。n測試框架并非測試用例,從測試框架很容易得到包含特定輸入及期望輸出的測試用例。此外,測試框架還包含環(huán)境變量,有利于測試。n測試框架是各選項根據(jù)約束關(guān)系組合而成的,error選項和sin
52、gle選項只能產(chǎn)生一個測試用例。步驟7:評價生成器輸出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é)果可以是屏幕顯示的錯誤信息;也可以是新窗口;也可以是數(shù)據(jù)庫的一次更新。n結(jié)果對用戶并不總是可見的輸出;n結(jié)果可能是軟件當(dāng)中的一個內(nèi)部測試點。因果圖分析法步驟n1)研讀需求,確定哪些是原因,哪些是結(jié)果,并為每一個原因和結(jié)果賦以唯一的標(biāo)識。n2)用因果圖描述原因和結(jié)果之間的依賴關(guān)系。n3)將因果圖轉(zhuǎn)換為一個有限入口的判定表。n4)根據(jù)判定表生成測試用例。因果圖中的基本符號原因之間的約束關(guān)系原因之間的約束關(guān)系 E(互斥):(互斥):表示a、b兩個原因不同時為成立,最多只有一個可能成立,即a、b中至多
54、只有一個1。 I(包含):(包含):表示a、b、d三個原因中至少有一個必須成立,即a、b、d中不可全部為0。 O(唯一):(唯一):表示a、b中必須只有一個成立,即a、b中有且只有一個1。 R(要求):(要求):表示當(dāng)a出現(xiàn)時,b也要必須出現(xiàn),即如果a=1,b必須為1。 M(屏蔽):(屏蔽):這個約束條件最為特殊,不同于以上是對輸入原因的約束,而是從輸出結(jié)果考慮,當(dāng)a是1時,b必須是0;當(dāng)a是0時,則b的值不定。創(chuàng)建因果圖n第一步:1)通過對軟件需求的分析,確定哪些是原因,哪些是結(jié)果。2)同時明確原因和結(jié)果之間的因果關(guān)系,以及原因之間,結(jié)果之間的約束關(guān)系。3)為每一原因和結(jié)果賦予唯一的標(biāo)識,便于在因果圖中引用。n構(gòu)造因果圖,以表達(dá)上述依賴關(guān)系。當(dāng)原因結(jié)果數(shù)量較多時,采用增量方法比較合適。例2.19n某互聯(lián)網(wǎng)公司經(jīng)銷計算機硬件,其銷售訂單配置包含CPU、打印機(PR)、顯示器(M)、內(nèi)存(RAM)中的14種商品(如圖2-13顯示)。n生成訂單時,用戶可以分別從三種CPU、兩種打印機、三種顯示器中進(jìn)行選擇,而內(nèi)存只在升級時使用。n對于這些商品,分別在不同的窗口
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 3-2 《縣委書記的榜樣-焦裕祿》說課稿 2024-2025學(xué)年統(tǒng)編版高中語文選擇性必修上冊
- 6 《傳統(tǒng)游戲我會玩》第二課時 說課稿-2023-2024學(xué)年道德與法治二年級下冊統(tǒng)編版
- 2024景區(qū)游客服務(wù)中心運營合同
- 立秋營銷活動總結(jié)
- 理解世界的地理密碼
- 2024年離婚房產(chǎn)分配及貸款承擔(dān)約定
- 個人家教輔導(dǎo)服務(wù)合同(2024版)2篇
- 房地產(chǎn)評估合同范文
- 專業(yè)魚類采購協(xié)議格式版B版
- 薦采購的合同
- 初中寒假安全教育主題班會
- 2025年觀看反腐倡廉警示教育片心得體會范文
- 2025年中國煙草總公司湖北省公司校園招聘227人高頻重點提升(共500題)附帶答案詳解
- 居家辦公培訓(xùn)課件
- 部隊行車安全課件
- (規(guī)劃設(shè)計)家具產(chǎn)業(yè)園項目可行性研究報告
- 2025康復(fù)科年度工作計劃
- 拼圖行業(yè)未來五年前景展望
- 廣西玉林市(2024年-2025年小學(xué)六年級語文)統(tǒng)編版質(zhì)量測試(上學(xué)期)試卷及答案
- 醫(yī)院醫(yī)??乒ぷ骺偨Y(jié)
- 2024-2025學(xué)年譯林版八年級英語上學(xué)期重點詞匯短語句子歸納【考點清單】
評論
0/150
提交評論