第2章基于需求的測試生成_第1頁
第2章基于需求的測試生成_第2頁
第2章基于需求的測試生成_第3頁
第2章基于需求的測試生成_第4頁
第2章基于需求的測試生成_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第2章基于需求的測試生成

講解人:林青霞引言設(shè)計測試輸入和相應(yīng)的預(yù)期輸出(即設(shè)計測試用例),是任何測試機構(gòu)最基本的技術(shù)活動之一。常用的測試設(shè)計策略有:基于需求的測試生成,基于模型的測試生成和基于代碼的測試生成等。軟件需求是設(shè)計測試的基本出發(fā)點,需求規(guī)范可以是非正式的規(guī)范、嚴格的規(guī)范或形式化的規(guī)范,也可以是這三種規(guī)范的混合體。需求規(guī)范的形式化程度越高,則越有機會進行自動化測試。軟件輸入域是測試設(shè)計的依據(jù),可從非正式的和嚴格的需求規(guī)范中提取出來。2.2測試用例選擇問題關(guān)鍵:如何構(gòu)造測試用例集合,使得該集合能夠盡可能多地發(fā)現(xiàn)軟件中存在的缺陷。軟件輸入域:指軟件在執(zhí)行過程中可能接收的全部合法輸入的集合。窮舉測試:指測試人員逐個地使用輸入域中的所有元素對軟件實施測試。例:1.y=x+3x∈Z,x∈[1,12]

2.y=x+3x∈[1,12]基于需求的測試用例選擇方法等價類劃分邊界值分析類別劃分法因果圖分析基于謂詞的測試生成2.3等價類劃分對輸入范圍進行劃分,把所有可能的輸入數(shù)據(jù),即程序輸入域劃分為若干個互不相交的子集,稱為等價類,然后從每個等價類中選取少數(shù)具有代表性的數(shù)據(jù)作為測試用例。一個軟件的全部輸入的集合至少分成兩個子集:一個包含所有正常和合法的輸入(E);另一個包含所有異常和非法輸入(U)。這兩個集合可進一步劃分為若干子集。概括:

(1)交集為空

(2)并集為全集

(3)分為有效等價類和無效等價類2.3.2關(guān)系與等價類的劃分關(guān)系:一個n元組的集合。例:方法addList計算并返回一個整數(shù)列表之和,其對應(yīng)的關(guān)系可定義為:addList:L—>Z其中,L是包含所有整數(shù)列表的集合,Z是整數(shù)集。在劃分輸入域時,常常采用下面的關(guān)系:R:I—>I,其中,I為輸入域,R為I上的關(guān)系,R定義了一個等價類,該等價類是I的子集。例2.3方法gprice以食品名稱作為輸入,查詢商品價格數(shù)據(jù)庫并返回相應(yīng)食品的單價(等價類pF);若無該食品,則返回錯誤信息(等價類pNF)。pF和pNF都是gprice輸入域I的子集,同時,二者形成了對輸入域I的一個劃分,有pFUpNF=I和pF∩pNF=?。2.3.2關(guān)系與等價類的劃分例2.3方法gprice以食品名稱作為輸入,查詢商品價格數(shù)據(jù)庫并返回相應(yīng)食品的單價(等價類pF);若無該食品,則返回錯誤信息(等價類pNF)。pF和pNF都是gprice輸入域I的子集,同時,二者形成了對輸入域I的一個劃分,有pFUpNF=I和pF∩pNF=?。商品單價milk2.99tomato0.99cola3.992.3.3變量的等價類類別等價類示例約束等價類代表取值范圍(range)一個取值范圍內(nèi)的等價類;兩個取值范圍外的等價類speed∈[60,90])age:int;0≤age≤120{{50}↓,{75}↑,{100}↓}{{-10}↓,{75}↑,{130}↓}字符串(string)合法字符串的類和非法字符串的類fname:string;{{ε}↓,{Sue}↑,{Sue2}↓,{TooLonganame}↓}枚舉(enumeration)每個取值對應(yīng)一個等價類auto_color∈{red,blue,green}up:boolen{{red}↑,{blue}↑,{green}↑}{{true}↑,{false}↑}數(shù)組(array)合法數(shù)組等價類,空數(shù)組等價類和大于期望長度數(shù)組的等價類Javaarray:int[]aName=newint[3]{{[]}↓,{[-10,20]}↑,{[-9,0,12,15]}↓}復(fù)合數(shù)據(jù)類型(compounddatatype):包含兩個或兩個以上相互獨立的屬性的輸入數(shù)據(jù)2.3.4一元劃分和多元劃分一元化分:每次只考慮一個輸入變量,每個輸入變量形成對輸入域的一個劃分。多元化分:將所有輸入變量的笛卡爾積視為程序的輸入域I,并定義I上的關(guān)系R。例假設(shè)某軟件的輸入為整型數(shù)據(jù)x和y,其取值范圍為3≤x≤7和5≤y≤9。采用一元化分,可產(chǎn)生6個等價類:

E1:x<3E2:3≤x≤7E3:x>7

E4:y<5E5:5≤y≤9E6:y>9

若將x和y的笛卡爾積視為軟件的輸入域,可產(chǎn)生9個等價類:

E1:x<3,y<5E2:x<3,5≤y≤9E3:x<3,y>9

E4:3≤x≤7,y<5E5:3≤x≤7,5≤y≤9E6:3≤x≤7,y>9

E7:x>7,y<5E8:x>7,5≤y≤9E9:x>7,y>9采用多元化分方法得到的測試用例,往往比采用一元化分方法得到的測試用例更能充分地測試被測軟件,但其等價類數(shù)量會隨輸入變量個數(shù)的增加而成指數(shù)增長。2.3.5等價類劃分的完整過程步驟1確定輸入域認真分析需求并確定所有輸入、輸出變量,以及變量類型和變量使用條件。步驟2等價類劃分將每個變量的取值集合劃分為互不相交的子集,則每個子集對應(yīng)一個等價類,所有等價類構(gòu)成了對輸入域的一個劃分。步驟3組合等價類可采用多元化分方法,將等價類組合起來。(也可忽略該步驟:直接根據(jù)那些為單個變量定義的等價類選擇測試用例,但可能無法獲得高效的測試用例。)步驟4確定不可測的等價類有些輸入數(shù)據(jù)組合在實際測試過程中是無法生成的,包含這種數(shù)據(jù)的等價類就是不可測等價類。2.3.6等價類劃分實例例NextDate(Y,M,D),Y[1900,2100]M[1,12]D[1,31](1)d++(2)m++,d=1(3)y++,m=1,d=1有效等價類y:{平年},{閏年}m:{2},{12},{1,3,5,7,8,10},{4,6,9,11}d:{1,2,……,27},{28},{29},{30},{31}無效等價類y:{y<1900},{y>2100},{小數(shù)}m:{m<1},{m>12},{小數(shù)}d:{d<1},{d>31},{小數(shù)}弱一般等價類測試強一般等價類測試弱健壯等價類測試強健壯等價類測試2.3.7GUI設(shè)計與等價類GUI(GraphicalUserInterface,圖形用戶接口)是指采用圖形方式顯示的計算機操作用戶界面。與早期計算機使用的命令行界面相比,圖形界面對于用戶來說在視覺上更易于接受,操作更加簡便。精心的GUI設(shè)計能實現(xiàn)對輸入域的限制,通常存在兩種GUI:一種能夠阻止所有的變量接受非法輸入;另一種允許部分變量接受非法輸入。設(shè)計測試用例時必須考慮GUI的具體實現(xiàn),合理的GUI設(shè)計可以大大降低測試用例的數(shù)量。2.4邊界值分析

邊界值分析是一種有效的測試用例選擇方法,可以發(fā)現(xiàn)位于等價類邊界處的軟件缺陷。通常在設(shè)計測試用例時,同時采用邊界值分析和等價類劃分兩種方法。其生成測試用例的主要步驟如下:步驟1使用一元劃分方法劃分輸入域。步驟2為每種劃分確定邊界,也可利用輸入變量之間的特定關(guān)系確定邊界。步驟3設(shè)計測試用例,確保每個邊界值至少出現(xiàn)在一個測試輸入數(shù)據(jù)中。注意:確定邊界時需要仔細考慮個輸入變量之間的關(guān)系,進而找出不明顯的邊界;使用單個變量等價類的笛卡爾積所構(gòu)成的輸入域劃分,將獲得更多的測試用例。(min-,min,min+,nom,max-,max,max+)2.5類別劃分法類別劃分法是一種從軟件需求生成測試用例的系統(tǒng)化方法,包含手工和自動完成的步驟。其步驟如下:步驟1分析功能規(guī)范確定所有能夠獨立測試的功能模塊,對于大的軟件系統(tǒng)而言,功能模塊可能對應(yīng)于可獨立測試的各個子系統(tǒng),而子系統(tǒng)又可以進一步分為可獨立測試的子模塊。步驟2確定類別對各被測模塊的功能規(guī)范進行分析,確定相應(yīng)的輸入、環(huán)境中的對象以及各個參數(shù)和環(huán)境對象的特征。2.5類別劃分法步驟3類別劃分根據(jù)每個類別中各不同情況,對功能模塊進行測試。步驟4確定約束條件對某功能模塊的測試,包括對該模塊各參數(shù)、環(huán)境對象所有選項的組合的測試。由于輸入?yún)?shù)間必須滿足某些約束條件,因此有一部分的選項組合是無法實現(xiàn)的。步驟5編(重)寫測試規(guī)范采用具有嚴格語法的測試規(guī)范語言編寫測試規(guī)范。步驟6處理測試規(guī)范對測試生成的若干個測試框架進行分析,找出框架中以相同方式測試被測軟件的冗余內(nèi)容。2.5類別劃分法步驟7評價生成器的輸出檢查步驟6所生成的各測試框架中是否包含冗余用例以及是否缺少某些用例,進而轉(zhuǎn)入步驟5。步驟8生成測試腳本從測試框架產(chǎn)生的測試用例要被組合成測試腳本(即一組測試用例),通常將環(huán)境設(shè)置相同的測試用例編為一組,這樣可以提高測試驅(qū)動器執(zhí)行測試用例的效率。2.6因果圖分析

等價類劃分法和邊界值分析方法都是著重考慮輸入條件,如果程序輸入之間沒有什么聯(lián)系,采用等價類劃分和邊界值分析是一種比較有效的方法。但如果輸入之間有關(guān)系,例如,約束關(guān)系、組合關(guān)系,這種關(guān)系用等價類劃分和邊界值分析是很難描述的,測試效果難以保障。因此必須考慮使用一種適合于描述對于多種條件的組合,產(chǎn)生多個相應(yīng)動作的測試方法,因果圖正是在此背景下提出的。2.6因果圖分析

因果圖也稱作依賴關(guān)系模型,主要用于描述軟件輸入條件(即“原因”)與軟件輸出條件(即“結(jié)果”)之間的依賴關(guān)系?!霸颉笔侵杠浖枨笾心苡绊戃浖敵龅娜我廨斎霔l件;“結(jié)果”是指軟件對某些輸入條件的組合所做出的響應(yīng)。

利用因果圖方法生成測試用例的一般過程為:1)仔細研讀軟件需求規(guī)范,確定原因和結(jié)果,并賦予唯一的標識。2)用因果圖描述原因與結(jié)果之間的依賴關(guān)系。3)將因果圖轉(zhuǎn)換為一個有限入口的判定表。4)根據(jù)判定表生成測試用例。2.6.1因果圖中的基本符號因果關(guān)系(實線原因在左,結(jié)果在右)c1e1恒等c1e1非~c1e1或c2c3∨c1e1與c2∧2.6.1因果圖中的基本符號原因之間的約束關(guān)系(虛線)ab互斥Eab包含Icab唯一ORab要求Mab屏蔽2.6.2創(chuàng)建因果圖創(chuàng)建因果圖的兩個步驟:1.確定哪些是原因,哪些是結(jié)果,明確因果關(guān)系和約束關(guān)系。2.構(gòu)造因果圖,表達提取到的依賴關(guān)系。例:某個軟件的規(guī)格說明中包含這樣的要求:“第一列字符必須是A或B,第二列字符必須是一個數(shù)字,在此情況下進行文件的修改。但如果第一列字符不正確,則給出信息L;如果第二列字符不是數(shù)字,則給出信息M。2.6.2因果圖實例例:某個軟件的規(guī)格說明中包含這樣的要求:“第一列字符必須是A或B,第二列字符必須是一個數(shù)字,在此情況下進行文件的修改。但如果第一列字符不正確,則給出信息L;如果第二列字符不是數(shù)字,則給出信息M。原因:

1--第一列字符是A;2--第一列字符是B;3--第二列字符是數(shù)字。結(jié)果:

21--修改文件;22--給出信息L;23--給出信息M。

1

2

11

3

23

21

22∨~∧~E2.6.3從因果圖生成判定表在所有的黑盒測試方法中,基于判定表的測試是最嚴格,最具有邏輯性的測試方法。判定表是把作為條件的所有輸入的各種組合值以及對應(yīng)輸出值都羅列出來而形成的表格。它能夠?qū)?fù)雜的問題按照各種可能的情況全部列舉出來,簡明并避免遺漏。因此,利用判定表能夠設(shè)計出完整的測試用例集合。2.6.3從因果圖生成判定表實例例:某個軟件的規(guī)格說明中包含這樣的要求:“第一列字符必須是A或B,第二列字符必須是一個數(shù)字,在此情況下進行文件的修改。但如果第一列字符不正確,則給出信息L;如果第二列字符不是數(shù)字,則給出信息M。樁123456781TTTTFFFF2TTFFTTFF3TFTFTFTF21--x

x

22--

xx23--

x

x

x2.6.3.1判定表組成判定表通常由4個部分組成:條件樁:列出了問題的所有條件。通常認為列出的條件的次序無關(guān)緊要。動作樁:列出了問題規(guī)定可能采取的操作。這些操作的排列順序,沒有約束。條件項:列出針對它左列條件的取值,在所有可能情況下的真假值。動作項:列出在條件項的各種取值情況下應(yīng)該采取的動作。規(guī)則:任何一個條件組合的特定取值及相應(yīng)要執(zhí)行的操作。在判定表中貫穿條件項和動作項的一列就是一條規(guī)則。2.6.3.2判定表的生成步驟(1)確定規(guī)則的個數(shù)。有n個條件的決策表有2n個規(guī)則(每個條件取真、假值)。(2)列出所有的條件樁和動作樁。(3)填入條件項。(4)填入動作項,得到初始判定表。(5)簡化判定表,合并相似規(guī)則。若表中有兩條以上規(guī)則具有相同的動作,并且在條件項之間存在極為相似的關(guān)系,便可以合并。合并后的條件項用符號“-”表示,說明執(zhí)行的動作與該條件的取值無關(guān),稱為無關(guān)條件。樁123456781TTTTFFFF2TTFFTTFF3TFTFTFTF21--x

x

22--

xx23--

x

x

x樁12345671TTTFFFF2TFFTTFF3-TFTFTF21-x

x

22-

xx23-

x

x

x2.7基于謂詞的測試生成

規(guī)則可以形式化地表示為謂詞。例如,考慮軟件需求“若打印機處于ON狀態(tài)且具備打印紙,則發(fā)送要打印的文件”。這句話包含一個條件和一個動作。下面的謂詞,記為pr,表示這句話的條件部分:謂詞pr包含兩個由布爾運算符“∧”連接的關(guān)系表達式。兩個關(guān)系表達式都使用了等于符號(=)。編程人員可能正確地為pr編碼,也可能沒有正確編碼,導(dǎo)致程序中存在缺陷。我們的目標是,根據(jù)謂詞產(chǎn)生測試用例,從而可以確保在測試中發(fā)現(xiàn)某種類型的所有缺陷。這種用于驗證謂詞實現(xiàn)是否正確的測試稱之為謂詞測試。2.7.1謂詞與布爾表達式設(shè)relop表示集合{<,>,≤,≥,=,≠}中的一個關(guān)系運算符。設(shè)bop表示集合{∧,∨,∨—,﹁}中的一個布爾運算符,其中∧,∨,∨—是二元布爾運算符,﹁是一元布爾運算符。布爾變量的取值集合為{true,false},對于給定的布爾變量a,﹁a和a都表示a的補。關(guān)系表達式是指形如e1relope2的表達式,其中e1和e2取值為有限或無限集合S??蓪中的元素進行排序,從而可以使用任意關(guān)系運算符對e2和e1進行比較。

一個條件可以表示成簡單謂詞或復(fù)合謂詞。簡單謂詞就是一個布爾變量或關(guān)系表達式,其中變量可以取非。復(fù)合謂詞可以是一簡單謂詞,或是由若干簡單謂詞或其補通過二元布爾運算符連接起來的一個表達式。謂詞當(dāng)中的圓括號表示布爾變量、關(guān)系表達式組合。2.7.1謂詞與布爾表達式2.7.1謂詞與布爾表達式布爾表達式可以表示為抽象語法樹,如圖2-17所示。將謂詞pr的抽象語法樹記為AST(pr)。AST(pr)的每個葉結(jié)點代表一個布爾變量或一個關(guān)系表達式;AST(pr)的內(nèi)部結(jié)點是布爾運算符,比如∧、∨、∨—、﹁,分別被稱作AND結(jié)點、OR結(jié)點、XOR結(jié)點、NOT結(jié)點。2.7.2謂詞測試中的故障模型本章論述的謂詞測試,重點關(guān)注三類故障:布爾運算符故障、關(guān)系運算符故障、算術(shù)表達式故障。引起布爾運算符故障的原因在于:1)使用了錯誤的布爾運算符;2)漏用或誤用非運算符;3)圓括號使用錯誤;4)布爾變量使用錯誤。當(dāng)錯誤地使用關(guān)系運算符時將導(dǎo)致關(guān)系運算符故障。當(dāng)算術(shù)表達式的結(jié)果值產(chǎn)生數(shù)量為ε的偏差時(off-by-ε)就會出現(xiàn)算術(shù)表達式故障。

給定謂詞pr和測試用例t,用縮寫p(t)表示謂詞pr針對t所取的真值。例如,若pr為a<b∧r>s且t為〈a=1,b=2,r=0,s=4〉,則p(t)=false。下面舉例說明上述的各種故障。2.7.2謂詞測試中的故障模型布爾運算符故障設(shè)軟件需求規(guī)范要求當(dāng)(a<b)∨(c>d)∧e為真時軟件執(zhí)行某動作。其中,a、b、c、d為整型變量,e為布爾變量。下面列出4個錯誤編碼,分別包含不同的布爾運算符故障:(a<b)∧(c>d)∧e布爾運算符錯誤(a<b)∨﹁(c>d)∧e非運算符錯誤(a<b)∧(c>d)∨e布爾運算符錯誤(a<b)∨(c>d)∧f布爾變量錯誤(使用了f,而不是e)關(guān)系運算符故障關(guān)系運算符故障示例如下:(a=b)∨(c>d)∧e關(guān)系運算符錯誤(使用了=,而不是<)(a=b)∨(c≤d)∧e關(guān)系運算符錯誤(同時包含兩個故障)(a=b)∨(c>d)∨e關(guān)系運算符錯誤與布爾運算符錯誤2.7.2謂詞測試中的故障模型算術(shù)表達式故障考慮三種算術(shù)表達式的off-by-ε故障,分別為:off-by-ε、off-by-ε*、off-by-ε+??紤]正確關(guān)系表達式Ec,其形式為e1

relop1

e2;考慮錯誤的關(guān)系表達式Ei,其形式e3relop2

e4;假設(shè)算術(shù)表達式e1、e2、e3、e4包含相同的變量集合。三種off-by-ε故障定義類型如下:Ei包含off-by-ε故障,如果對于任何測試用例e1=e2,有|e3-e4|=

ε。Ei包含off-by-ε*故障,如果對于任何測試用例e1=e2,有|e3-e4|≥

ε。Ei包含off-by-ε+故障,如果對于任何測試用例e1=e2,有|e3-e4|>ε。2.7.2謂詞測試中的故障模型算術(shù)表達式故障考慮三種算術(shù)表達式的off-by-ε故障,分別為:off-by-ε、off-by-ε*、off-by-ε+。例:假設(shè)正確的謂詞Ec為a<b+c,其中a、b為整型變量。設(shè)ε=1,則Ei的三種錯誤故障分別如下:a<b假設(shè)c=1,Ei包含off-by-1故障,因為對于任何測試用例a=b+c,有|a-b|=1。a<b+1假設(shè)c≥2,Ei包含off-by-1*故障,因為對于任何測試用例a=b+c,有|a-(b+1)|≥1。a<b-1假設(shè)c>0,Ei包含off-by-1+故障,因為對于任何測試用例a=b+c,有|a-(b+1)|>1。還存在另外兩類故障:缺失/冗余布爾變量故障2.7.3謂詞約束用BR表示符號集合{t,f,<,=,>,+ε,-ε}。“BR”是布爾和關(guān)系(BooleanandRelational)的縮寫。集合BR中的元素稱為BR符號。一個BR符號定義了針對某個布爾變量或關(guān)系表達式的約束。例如,用符號“+ε”約束表達式E′:e1<e2時,要滿足該約束就要求E′的某個測試用例確保0<e1-e2≤ε。同樣,符號“-ε”是對E′的另一個約束,要滿足該約束就要求E′的某個測試用例確保-ε≤e1-e2<0。對于pr中的變量,如果不存在滿足約束C的輸入取值,則稱約束C對謂詞pr是無效的(infeasible)。例如,對謂詞a>b∧b>d的約束(>,>),要求簡單謂詞a>b和b>d都為真。但是,如果d>a為真的話,則該約束無效。謂詞pr上的約束C可有效指導(dǎo)測試集的設(shè)計,為pr變量取值的選取提供清晰的線索。2.7.4謂詞測試準則我們最關(guān)心的是如何從給定的謂詞pr生成測試集T,使其滿足:(a)T是最小集合;(b)T保證能

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論