第7章基于程序變異的測試充分性評價_第1頁
第7章基于程序變異的測試充分性評價_第2頁
第7章基于程序變異的測試充分性評價_第3頁
第7章基于程序變異的測試充分性評價_第4頁
第7章基于程序變異的測試充分性評價_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第七章基于程序變異的測試充分性評價7.1 導引 程序變異是一項用于評價測試優(yōu)良程度的有效技術,它為測試評價和測試增強提供了一套嚴格的準則。 當測試人員采用變異技術來評價測試集的充分性或增強測試集時,我們稱這種活動為變異測試。有時,使用變異技術對測試充分性進行評價也稱做變異分析。7.2 變異與變體 變異是一種變更程序的行為,哪怕只是輕微的變更。用P表示被測原始程序,M表示輕微變更P后得到的程序,那么M稱為P的變體,P是M的父體。假設P的語法正確,能順利通過編譯,那么M也必定是語法正確的。M表現(xiàn)出的行為可能P相同。例 程序P7.1 1 begin 2 intx,y; 3 input(x,y); 4

2、 if(xy) 5 output(x+y); 6 else 7 output(x*y); 8 end 程序P7.1的變體 變體 變體 1 begin begin 2 intx,y; intx,y; 3 input(x,y); input(x,y); 4 if(xy) 被變異的語句 if(xy) 5 output(x+y); output(x+y); 6 else else 7 output(x*y); output(x/y);被變異的語句 8 end end1M2M7.2.1 一階變體與高階變體 進行程序變異時,僅由1次變更所產生的變體稱作一階變體。二階變體則是進行了2次簡單的變更,依次類推。

3、對一個一階變體在進行一次一階變更就產生了一個二階變體,類似地,一個n階變體可以由一個(n-1)階變體進行一個一階變更來產生。程序P7.1 的變體 1 begin 2 intx,y; 3 input(x,y); 4 if(xy+1) 被變異的語句 5 output(x/y); 被變異的語句 6 else 7 output(x*y); 8 end3M高于一階的變體稱作高階變體。在實際使用中,一階變體用得最多。原因之一是,高階變體的數(shù)目遠遠大于一階變體的數(shù)目。7.2.2 變體的語法與語義 用 表示在程序P7.1中計算的函數(shù) = 用 , 分別表示在程序P7.1變體 中計算的函數(shù) = = ),(1 .

4、7yxfp),(1 . 7yxfpx+y 如果 xyx*y 其他),(1yxfM),(2yxfM21,MM),(1yxfMx+y 如果 xyx*y 其他),(2yxfMx+y 如果 xmaxTemp) 7 highCount=1 8 if (currentTemp1maxTemp) 9 highCount=highCount+1; 10 if (currentTemp2maxTemp) 11 highCount=highCount+1; 12 if(highCount=1) danger=moderate; 13 if(highCount=2) danger=high; 14 if(highC

5、ount=3) danger=veryHigh;子程序checkTemp比較3個溫度傳感器讀數(shù)是否超過允許的最大值。如果3個讀數(shù)都沒有超過最大值,則返回信號None.否則,當有一個、兩個或者三個讀數(shù)超過了允許的最大值時,相應地風別返回信號Moderate,High,veryHigh.程序P7.2的變體 1 enum dangerLevel none,moderate,high,veryHigh; 15 return(danger); 2 procedure checkTemp(currentTemp,maxTenp) 16 3 float currentTemp3, maxTemp; int

6、highCount=0; 4 enum dangerLevel danger; 5 danger=none; 6 if(currentTemp0maxTemp) 7 highCount=1 8 if (currentTemp1maxTemp) 9 highCount=highCount+1; 10 if (currentTemp2maxTemp) 11 highCount=highCount+1; 12 if(highCount=1) danger=moderate; 13 if(highCount=2) danger=high; 14 if(highCount=3) danger=none;

7、 被變異的語句1M注意,程序P7.2與其變體在行為表現(xiàn)上的差別。在同樣條件下三個讀數(shù)都超過最大值,原程序返回信號veryHigh,而變體則返回信號None。雖然對程序進行的語法變更只是微小的,但核反應堆關閉軟件的一次操作失誤可能引起一次生態(tài)災難。程序P7.2的變體 1 enum dangerLevel none,moderate,high,veryHigh; 15 return(danger); 2 procedure checkTemp(currentTemp,maxTenp) 16 3 float currentTemp3, maxTemp; int highCount=0; 4 enum

8、 dangerLevel danger; 5 danger=none; 6 if(currentTemp0maxTemp) 7 highCount=1 8 if (currentTemp1maxTemp) 9 highCount=highCount+1; 10 if (currentTemp2maxTemp) 11 highCount=highCount+1; 12 if(highCount1) danger=moderate; 被變異的語句 13 if(highCount=2) danger=high; 14 if(highCount=3) danger=veryHigh; 2M7.3 用變

9、異技術進行測試評價 利用變異技術評價測試集的問題可用下面這段話來表述: 假設P是將要測試的程序,T是P的測試集,R是P必須滿足的需求。假設用T中的每一個測試用例對P進行了測試,發(fā)現(xiàn)P在每個測試用例中針對需求R都是正確的。這時,我們想知道“T究竟好到何種程度?” 變異技術提供了一種回答上述問題的方法。給定程序P和測試集T,通過計算T的變異值可以獲得對T優(yōu)良程度的定量評價。變異值是一個介于0到1之間的數(shù)值。變異值為1表示測試集T針對變異準則是充分的,而變異值低于1則代表T是非充分的。一個非充分的測試集可以通過增加測試用例來增強,使其變異值得以提高。測試充分性評價的步驟: 利用變異技術對測試集進行充

10、分性評價的過程。實線指向一下處理步驟。虛線代表數(shù)據(jù)在數(shù)據(jù)庫和處理步驟之間的流動。L、D、E分別代表活躍變體、被區(qū)分出的變體、等價變體。 P(t)、M(t)分別代表程序、變體在執(zhí)行測試用例t時所表現(xiàn)出來的行為步驟1 執(zhí)行程序評價測試集T針對(P,R)充分性過程的第一步就是針對T中的每一個測試用例t執(zhí)行P。P(t)代表P執(zhí)行t時被觀察到的行為。無論如何,步驟1的最后結果都是一個對于所有tT的P(t)數(shù)據(jù)庫。假設對于所有的tT,P(t)均滿足其需求R。若發(fā)現(xiàn) P(t)是錯誤的,則必須修改程序P,然后重新執(zhí)行步驟1.當發(fā)現(xiàn)程序P針對測試集T是完全正確的之后,采用變異技術評價測試充分性的過程才真正開始例

11、P7.1),(yxfx+y 如果 xyx*y 其他2, 1:0, 1:1, 0:0, 0:4321yxtyxtyxtyxtTp測試用例(測試用例( t)預期輸出預期輸出f(x,y)實際輸出實際輸出P(t)001100221t2t3t4t步驟2 生成變體評價測試集T針對(P,R)充分性過程的第二步就是生成變體。假設以下變體是通過下面步驟由程序P變更而來的:(a)變更算術運算符,將所有的加發(fā)運算符(+)都替換成減法運算符(),將所有的乘法運算符(*)都替換為除法運算符(/); (b)變更整數(shù)變量,將整數(shù)變量v替換 v+1.步驟2 生成變體 采用上述方法,共得到程序P7.1的8個變體,分別標記為 至

12、 如下表所示。每次只用下表中的一條變體語句替換程序P7.1中的相應語句,就可得到一個類似于程序P7.1的典型變體。1M8M步驟3和4 選取下一個變體 在步驟3和步驟4中,選擇下一個將要考慮的變體,這個變體必須是以前沒有考慮過的。從此時開始,將循環(huán)選取L中的變體,直到每一個變體都被選取過為止。這個選取過程在步驟3中完成。如L中還有多個未被選取過的活躍變體,那么任意選取其中一個即可,將被選取的變體從L中剔除掉。 L= 8765432,MMMMMMM步驟5和6 選取下一個測試用例 選取變體M后,現(xiàn)在就要努力從測試集T中找到一個測試用例將M與其父體程序區(qū)分開。為此,需要針對T中的測試用例執(zhí)行變體M。這

13、樣就進入另一個循環(huán),即針對每個選取的測試用例執(zhí)行變體M。循環(huán)結束時,要么是所有的測試用例都執(zhí)行完了,要么是變體M被某個測試用例發(fā)現(xiàn)與父程序不同,無論哪種情況發(fā)生,循環(huán)終止。既然已經選取了 ,就要檢查能否采用測試集 中的測試用例將其與父體程序P區(qū)分開來。在步驟5和步驟6中,選取下一個測試用例。同上面情況類似,只要 中還有未被執(zhí)行過的測試用例,就選擇它。假設選取的事 :1MPTPT1M1t步驟7,8和9 變體的執(zhí)行和分類 已經選取出了變體M準備執(zhí)行測試用例t。在步驟7中,使用測試用例t 執(zhí)行變體M;在步驟8中,檢查針對測試用例t執(zhí)行M產出的結果和執(zhí)行P產生的結果是否相同。步驟7,8和9 變體的執(zhí)行

14、和分類U表示輸出結果未定義;NE表示變體未執(zhí)行;*表示第一個區(qū)分出此行變體的測試用例步驟10 活躍變體 當測試集T中,沒有測試用例能將變體M與其父體程序P區(qū)分開來時,M被放回到活躍變體集合L中。當然任何被放回活躍變體集合L的變體在步驟4中都不會再被選取,因為它已經被選取過一次。僅有變體 不能被測試集T中的測試用例區(qū)分出來。因此,步驟10中, 被放回到活躍變體集合中。 不會再被選取來測試,因為它已經被選取過一次2M2M2M步驟11 等價變體 在執(zhí)行完所有變體后,就要檢查是否還存在活躍變體,即檢查L集合是否非空。如果還存在活躍變體,就要測試其與父體程序的等價性。如果針對程序P輸入域的每個測試輸入,

15、觀察到變體M的行為均與P的行為一致,就稱變體M與其父體程序P等價。步驟11 等價變體 在本例中,假設 代表P計算的函數(shù), 計算的函數(shù),如下所示 : 暫且不管 是否等價于P而是尋找滿足f=g的條件 x=x1,y=y1,通過對這兩個函數(shù)的簡單分析發(fā)現(xiàn),為了使f=g 成立,以下兩個條件必須成立:),(yxfp2),(2MyxgM代表其他如果其他如果yxyxyxyxgyxyxyxyxfMP*1),(*),(22M1111211111)*( :) 1()( :yxyxCyxyxC步驟11 等價變體 為了同時滿足這兩個條件,必須有 。雖然測試用例 滿足第一個條件,但它不滿足第二個。然而,下面的測試用例t卻能滿足這兩個條件。 t: 通過計算可以知道P (t)=1,M(t)=2. 這就說明 至少可以通過一個測試用例區(qū)分出來。因此 與其父體程序P不等價。由于此時集合L中活躍變體只有一個,而這個變體已經過等價性檢查,因此步驟11結束。等價變體集合E仍然為空。011 yx1t2M2M步驟12 變異值的計算 這是評價測試集T針對(P,R)充分性過程的最后一步。給定集合L,D和E,用MS(T)表示測試集T的變異值(0-1),計算如下: 假定M代表步驟2中生成的變體總數(shù),也可以采用如下公式計算變異值:DLDTMS)(EMDTMS)(步驟12 變異值的計算

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論