Ch4-程序分析技術(shù)_第1頁(yè)
Ch4-程序分析技術(shù)_第2頁(yè)
Ch4-程序分析技術(shù)_第3頁(yè)
Ch4-程序分析技術(shù)_第4頁(yè)
Ch4-程序分析技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

軟件測(cè)試

-Ch4程序分析技術(shù)MPail:zhaohui@趙輝主要內(nèi)容常用的程序分析技術(shù)文本視角句法視角控制流視角計(jì)算流視角功能視角

程序分析與測(cè)試的關(guān)系

程序分析:發(fā)現(xiàn)軟件特性的技術(shù)分析技術(shù)1分析技術(shù)n……測(cè)試技術(shù)n測(cè)試技術(shù)1……測(cè)試數(shù)據(jù)選擇程序執(zhí)行數(shù)據(jù)收集結(jié)果評(píng)價(jià)測(cè)試階段的分析視角:強(qiáng)調(diào)程序的不同特點(diǎn),并且確定不同程序的特點(diǎn)文本視角

程序=字符+記號(hào)的序列文本的規(guī)模

文本視角分析工具:文本編輯器文本的行數(shù)文本詞匯數(shù)文本詞匯頻度句法視角

程序……

語(yǔ)句1語(yǔ)句組1子程序1子程序2子程序n語(yǔ)句組n語(yǔ)句組2……

語(yǔ)句2

語(yǔ)句n……

符號(hào)1

符號(hào)2

符號(hào)n……元素之間的組合關(guān)系由語(yǔ)法決定工具:語(yǔ)法分析器、句法編輯器句法視角

語(yǔ)句計(jì)數(shù)分析程序特性程序插裝技術(shù):通過(guò)修改源程序或目標(biāo)代碼揭示程序內(nèi)部的工作原理。標(biāo)識(shí)符交叉引用程序調(diào)用變量的聲明與未聲明變量使用頻度程序插裝

程序插裝方法:借助向被測(cè)試程序中插入操作來(lái)實(shí)現(xiàn)測(cè)試的目的。程序插裝應(yīng)用類型:

測(cè)試覆蓋率和測(cè)試用例有效性度量斷言檢測(cè)數(shù)據(jù)流異常檢測(cè)路徑智能分解句法視角

測(cè)試覆蓋率度量類型:程序中每條語(yǔ)句至少被執(zhí)行一次流程圖中每個(gè)分支至少被執(zhí)行一次每個(gè)可能的路徑至少被執(zhí)行一次

方法:

在控制流中確定一個(gè)點(diǎn)集在程序中這些點(diǎn)上插入軟件計(jì)數(shù)器用一組測(cè)試用例測(cè)試這個(gè)程序檢查計(jì)數(shù)器的值,獲得覆蓋率的范圍1.應(yīng)用于測(cè)試覆蓋率和測(cè)試用例有效性度量的程序插裝句法視角

1.應(yīng)用于測(cè)試覆蓋率和測(cè)試用例有效性度量的程序插裝句法視角

1.應(yīng)用于測(cè)試覆蓋率和測(cè)試用例有效性度量的程序插裝

插裝程序考慮的問(wèn)題:

探測(cè)那些信息在程序什么部位設(shè)置探測(cè)點(diǎn)需要設(shè)置多少個(gè)探測(cè)點(diǎn)

探測(cè)點(diǎn)位置:

第一個(gè)可執(zhí)行語(yǔ)句之前

Entry語(yǔ)句前后有標(biāo)號(hào)的可執(zhí)行語(yǔ)句處循環(huán)語(yǔ)句及終端語(yǔ)句之后If、elseif、else及ENDif語(yǔ)句之后

logicalif語(yǔ)句之后輸入/輸出語(yǔ)句之后Call語(yǔ)句之后計(jì)算GoTo語(yǔ)句之后句法視角

1.應(yīng)用于測(cè)試覆蓋率和測(cè)試用例有效性度量的程序插裝

測(cè)試用例有效性:指該用例揭示程序錯(cuò)誤的能力程序格式:Exp1opExp2=Exp1句法視角

1.應(yīng)用于測(cè)試覆蓋率和測(cè)試用例有效性度量的程序插裝測(cè)試用例的單一指數(shù):在一次特定測(cè)試執(zhí)行期間,一個(gè)測(cè)試用例唯一關(guān)注于遇到的一個(gè)多重表達(dá)式的次數(shù)表達(dá)式:a×(c+(d/e))

關(guān)注因子:a,(c+(d/e)),dIf(a==0)si++;If((c+(d/e)==0)si++;If(d==0)si++;...a×(c+(d/e));單一指數(shù)越高測(cè)試有效性越低斷言:在程序的特定部位插入某些用以判斷變量特性的語(yǔ)句,使這些語(yǔ)句在程序執(zhí)行中得以證實(shí),從而使程序的運(yùn)行特性得以證實(shí),這些插入語(yǔ)句即為斷言。句法視角

2.應(yīng)用于斷言檢測(cè)的程序插裝困惑:在正確的位置插入正確的斷言.程序錯(cuò)誤?斷言錯(cuò)誤?句法視角

3.應(yīng)用于數(shù)據(jù)流異常檢測(cè)的程序插裝變量在程序執(zhí)行中的4種狀態(tài):U狀態(tài)(未定義狀態(tài));D狀態(tài)(定義未被引用狀態(tài))R狀態(tài)(定義且被引用狀態(tài));A狀態(tài)(異常狀態(tài))對(duì)變量執(zhí)行的動(dòng)作:d動(dòng)作(定義動(dòng)作)r動(dòng)作(引用動(dòng)作)u動(dòng)作(取消定義動(dòng)作)Sqq’aq’=f(q,a)f(U,d)=Df(D,d)=Af(R,d)=Df(A,d)=Af(U,r)=Af(D,r)=Rf(R,r)=Rf(A,r)=Af(U,u)=Uf(D,u)=Af(R,u)=Uf(A,u)=AX句法視角

控制流視角

控制流關(guān)系:敘述程序元素和它們的執(zhí)行次序之間的聯(lián)系。一個(gè)程序通常是一個(gè)條件、一個(gè)簡(jiǎn)單的語(yǔ)句或者一個(gè)語(yǔ)句塊如果元素B可以在元素A之后立即執(zhí)行,那么(A,B)在程序的控制流關(guān)系中,后繼的B的執(zhí)行獨(dú)立于A的執(zhí)行ifx<xthenwrite(x)A:x<xB:write(x)控制流視角

控制流的一條路徑對(duì)應(yīng)于一個(gè)潛在可執(zhí)行的程序元素序列。如果一個(gè)輸入引起一條路徑的執(zhí)行,那么這條路徑就被稱為可達(dá)的,否則為不可達(dá)。數(shù)據(jù)流視角

數(shù)據(jù)流關(guān)系:通過(guò)它們的數(shù)據(jù)訪問(wèn)行為關(guān)聯(lián)起來(lái)的程序的元素之間的關(guān)系。如果元素B使用一個(gè)數(shù)據(jù)對(duì)象,該數(shù)據(jù)對(duì)象潛在的在元素A處被定義,那么(A,B)就出現(xiàn)在程序的數(shù)據(jù)流關(guān)系中。數(shù)據(jù)流的信息可以被引用到代碼優(yōu)化、異常檢測(cè)以及測(cè)試數(shù)據(jù)生成中ABv數(shù)據(jù)流圖例:X:=X+Y-Z數(shù)據(jù)流視角

程序切片:通過(guò)在一個(gè)特定的位置消除那些不影響表達(dá)式計(jì)算的所有語(yǔ)句產(chǎn)生的程序片斷。BeginRead(x,y)Total:=0.0;Sum:=0.0;Ifx<=1thensum:=y;elsebeginread(z);total:=x×y;endwrite(total,sum)End1Begin2Read(x,y)5Ifx<=16then7elsebegin8read(z);10end12EndZ在語(yǔ)句12處切片1BeginRead(x,y)3Total:=0.0;5Ifx<=16then7elsebegin9total:=x×y;10end12Endtotal在語(yǔ)句12處切片用變量切片數(shù)據(jù)流視角

切片標(biāo)準(zhǔn):指獲得一個(gè)程序行為一個(gè)子集的規(guī)格,它包含程序中一個(gè)特定語(yǔ)句和一個(gè)變量的集合。

定義1:P是一個(gè)程序,并且假定其語(yǔ)句被連續(xù)標(biāo)號(hào),對(duì)于P中每一個(gè)語(yǔ)句n,定義兩個(gè)集合:REF(n)是所有在語(yǔ)句n處被引用的變量的集合;DEF(n)是語(yǔ)句在n處被定義的變量的集合。定義2:程序P的一個(gè)值的軌跡是一個(gè)有限的有序?qū)希?n1,v1)(n2,v2)…(nk,vk)ni表示語(yǔ)句,vi表示執(zhí)行前所有變量值的向量。數(shù)據(jù)流視角

定義3:程序P的一個(gè)切片標(biāo)準(zhǔn)是一個(gè)有序?qū)Γ╥,V),其中i是P中一個(gè)語(yǔ)句,V是P中變量的一個(gè)子集。

C1=(12,{Z})C2=(12,{total})定義4:給定一個(gè)切片標(biāo)準(zhǔn)C=(i,V)和一個(gè)值軌跡T,定義一個(gè)映射函數(shù)Proj(C,T),該函數(shù)刪除了在值軌跡中,左邊成分不是i的所有有序?qū)?,并且在剩余的有序?qū)χ袆h除其右邊向量中不在V中的成分。數(shù)據(jù)流視角

定義5:一個(gè)程序在一個(gè)切片標(biāo)準(zhǔn)C=(i,V)上的一個(gè)切片S(即S是使用切片標(biāo)準(zhǔn)C之后獲得的一個(gè)程序子集)是任何滿足下面兩個(gè)屬性的可執(zhí)行程序。屬性1:S可以從P中刪除零條和多條語(yǔ)句獲得屬性2:對(duì)于軌跡T,無(wú)論何時(shí)程序P在輸入I上阻塞,那么其切片S在軌跡T’上也會(huì)對(duì)輸入阻塞,并且Proj(C’,T’)=Proj(C,T),并且如果語(yǔ)句i在切片中,那么i’=i,或者i’是i最近的后繼語(yǔ)句。計(jì)算流視角

計(jì)算:當(dāng)程序在執(zhí)行特定的輸入時(shí)產(chǎn)生的數(shù)據(jù)狀態(tài)的軌跡。一個(gè)程序可以被看成一個(gè)有限的“計(jì)算集”表示。計(jì)算流分析的作用:估計(jì)代碼中遺留缺陷的數(shù)量;測(cè)試數(shù)據(jù)撲捉缺陷的能力;程序隱藏缺陷的可能性;計(jì)算流視角

原本錯(cuò)誤總數(shù)=(插入的錯(cuò)誤總數(shù)/發(fā)現(xiàn)的插入的錯(cuò)誤數(shù))×發(fā)現(xiàn)的原本錯(cuò)誤數(shù)殘留的錯(cuò)誤數(shù)=原本錯(cuò)誤總數(shù)-發(fā)現(xiàn)的原本錯(cuò)誤數(shù)目的:評(píng)價(jià)系統(tǒng)的危險(xiǎn)模塊,進(jìn)而評(píng)價(jià)系統(tǒng)的容錯(cuò)能力。驗(yàn)證測(cè)試用例的有效性。與其他測(cè)試不同點(diǎn):測(cè)試從系統(tǒng)的故障開(kāi)始,測(cè)試系統(tǒng)在發(fā)生故障時(shí)的容錯(cuò)能力。1.故障插入

計(jì)算流視角

含義:使用故障插入技術(shù)來(lái)分析測(cè)試數(shù)據(jù)的屬性,帶有插入錯(cuò)誤的程序成為一個(gè)變體或變異。執(zhí)行變體以確定它們的行為是否不同于原來(lái)程序的行為。變體分析的產(chǎn)物是關(guān)于測(cè)試數(shù)據(jù)殺死變體的程度。變體通過(guò)使用變體操作產(chǎn)生:

2.變體分析

表達(dá)式1表達(dá)式2變體操作計(jì)算流視角

2.變體分析

main(){inti;floate,sum,term,x;

scancf(“%f%f”x,e);

printf(“x=%10.6fe=%10.6f\n”x,e);term=x;for(i=3;i<=100&&term>e;i=i+2){term=term×X×X/(i×(i-1));if(i%2==0)sum=sum+term;elsesum=sum–term;}

printf(“sin(x)=%8.6f\n”sum);}變量設(shè)成常量main(){inti;floate,sum,term,x;

scancf(“%f%f”x,e);

printf(“x=%10.6fe=%10.6f\n”x,e);

term=0;for(i=3;i<=100&&term>e;i=i+2){term=term×X×X/(i×(i-1));if(i%2==0)sum=sum+term;elsesum=sum–term;}

printf(“sin(x)=%8.6f\n”sum);}<=變成>=main(){inti;floate,sum,term,x;

scancf(“%f%f”x,e);

printf(“x=%10.6fe=%10.6f\n”x,e);term=x;for(i=3;i>=100&&term>e;i=i+2){term=term×X×X/(i×(i-1));if(i%2==0)sum=sum+term;elsesum=sum–term;}

printf(“sin(x)=%8.6f\n”sum);}常量0換成1main(){inti;floate,sum,term,x;

scancf(“%f%f”x,e);

printf(“x=%10.6fe=%10.6f\n”x,e);term=X;for(i=3;i<=100&&term>e;i=i+2){term=term×X×X/(i×(i-1));if(i%2==1)sum=sum+term;elsesum=sum–term;}

printf(“sin(x)=%8.6f\n”sum);}計(jì)算流視角

變體操作:

常量變換:常量C變換成C+1,或C-1

標(biāo)量變換:標(biāo)量變量替換成另一個(gè),A=B-1,A=D-1

標(biāo)量替換常量:使用標(biāo)量變量替換常量,A=1,A=B

常量替換標(biāo)量:A=B,A=1

源常量進(jìn)行替換:把程序中一個(gè)常量替換成另一個(gè)常量。

A=1,A=11,其中11在程序其他語(yǔ)句中出現(xiàn)。

數(shù)組引用替換常量:A=2,A=B(2)。2.變體分析

計(jì)算流視角

變體操作:數(shù)組引用替換標(biāo)量:A=C+1,A=B(1)+1。

相似數(shù)組名字替換:A=B(2,4),A=D(2,4).

常量替換數(shù)組應(yīng)用:A=X(1),A=1

源常量進(jìn)行替換:把程序中一個(gè)常量替換成另一個(gè)常量。

A=1,A=11,其中11在程序其他語(yǔ)句中出現(xiàn)。

數(shù)組引用替換常量:A=2,A=B(2

溫馨提示

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

評(píng)論

0/150

提交評(píng)論