版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第四章白盒測試概述邏輯覆蓋法路徑分析數(shù)據流測試程序插樁技術白盒測試只測試軟件產品的內部結構和處理過程,而不測試軟件產品的功能,用于糾正軟件系統(tǒng)在描述、表示和規(guī)格上的錯誤,是進一步測試的前提。
白盒子測試分靜態(tài)和動態(tài)兩種:(1)靜態(tài)白盒測試是在不執(zhí)行的條件下有條理地仔細審查軟件設計、體系結構和代碼,從而找出軟件缺陷的過程,有時也稱為結構分析。(2)動態(tài)白盒測試也稱結構化測試,通過查看并使用代碼的內部結構,設計和執(zhí)行測試。控制流圖對于一個程序,其程序控制流圖G=(V,E,I,O)是一個有向圖,其中V是結點的集合,E是邊的集合,I是唯一的源結點(入口結點),而O是唯一的匯結點(出口結點)?!窠Y點表示語句,以標有編號的圓圈表示?!襁叡硎菊Z句間可能的控制流向●I,O相應于程序的開始語句和結束語句。
三角形問題類C語言實現(xiàn)
main(){1 inta,b,c;2 booleanIsTraingle3 sacnf(“Enter3integerwhichissidesofatriangle.%d%d%d”,a,b,c);4 printf(“Sideais%d”,a);5 printf(“Sidebis%d”,b);6 printf(“Sidecis%d”,c);7 if((a<b+c)AND(b<a+c)AND(c<a+b))8 thenIsTraingle=True;9 elseIsTraingle=False;10 if(IsTraingle)11 thenif((a=b)AND(b=c))12 thenprintf(“Equilateral”)13 elseif(a!=b)AND(a!=c)AND(b!=c)14 thenprintf(“Scalene”)15 elseprintf(“Isosceles”)16 elseprintf(“NotaTriangle”)}程序控制流圖結點3到7是一個序列,結點7到10是一個if-then-else結構,結點11到16是一個嵌套的if-then-else結構。結點3和16是程序源結點和匯結點,對應于單入口、單出口準則。該程序沒有循環(huán),因此控制流圖是一個有向非循環(huán)圖。邏輯覆蓋
邏輯覆蓋是一種使用最廣泛的結構測試方法。邏輯覆蓋以程序內部的邏輯結構為基礎設計測試用例,要求對被測程序的邏輯結構有清楚的了解,甚至要能掌握源程序的所有細節(jié)。由于覆蓋測試的目標不同,邏輯覆蓋又可分為:語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋及路徑覆蓋。下面的一小段程序來討論。
if((age>25)AND(sex=M))thencommission=commission+150;endifif(age>=50OR(commission>2000.0))thencommission=commission-200;
endif3個變量為:年齡age、性別sex、傭金commission
a、b、c、d和e為控制流上程序點。
語句覆蓋要求設計若干個測試用例,運行被測程序,使程序中的每個可執(zhí)行語句至少被執(zhí)行一次。Test1:age=50,sex=M,comm=2500作為測試用例,則程序按路徑ace執(zhí)行。這樣該程序段的4個語句都得到執(zhí)行,從而作到了語句覆蓋。語句覆蓋
Test2:age=50,sex=F,comm=2500程序則按abe執(zhí)行,沒有達到語句覆蓋。
從程序中每個語句都得到執(zhí)行這一點來看,語句覆蓋的方法似乎能夠比較全面地檢驗被測程序的每一個語句。
假如這一程序段中兩個判斷的邏輯運算有問題,例如,第一個判斷的運算符“
”錯成運算符“
”或是第二個判斷中的運算符“
”錯成了運算符“
”仍使用上述前一個測試用例Test1,程序仍將按路徑ace執(zhí)行,不能發(fā)現(xiàn)判斷中邏輯運算的錯誤。
判定覆蓋判定覆蓋要求設計若干測試用例,運行被測程序,使得程序中每個判斷的取真分支和取假分支至少執(zhí)行一次,即判斷的真假值均要被檢測。判定覆蓋又稱為分支覆蓋。
若選用兩組測試用例:Test1:age=50,sex=M,comm.=2500Test3:age=20,sex=M,comm.=1500則分別執(zhí)行路徑ace和abd,從而使兩個判斷的4個分支c,e和b,d分別得到檢測。
若選用另外兩組測試用例:Test4age=40,sex=M,comm.=1500Test5age=50,sex=F,comm.=1900
則分別路徑acd及abe,同樣也可覆蓋4個分支.
上述兩組測試用例不僅滿足判定覆蓋,同時還滿足語句覆蓋。判定覆蓋比語句覆蓋更強一些。
如果在此程序段中第2個判斷條件comm>2000錯寫成comm<2000,使用上述測試用例Test5,age=50,sex=F,comm.=1900照樣能按原路徑執(zhí)行(abe),不影響結果。
條件覆蓋條件覆蓋要求設計若干測試用例,執(zhí)行被測程序,使得程序中每個判斷的每個條件的可能取值至少被執(zhí)行一次。
第一個判斷應考慮到:age>25取真值,記為T1age>25取假值,即age≤25,記為sex=M取真值,記為T2:sex=M取假值,即sex=F,記為第2個判斷應考慮到;Age>=50取真值,記為T3Age>=50取假值,即age<50,記為comm.>2000取真值,記為T4comm.>2000取假值,記為
3個測試用例覆蓋了4個條件的8種情況。覆蓋了兩個判斷的4個分支b、c、d和c。
測試用例
agesexcomm
所走路徑
覆蓋條件
Test1
Test3
Test550
M2500.0
20M1500.0
50F1900.0
ace
abd
abe
T1T2T3T4
1T
T23T
4T
T12T
T34T
測試用例
agesexcomm
所走路徑
覆蓋分支
覆蓋條件
Test6Test7
20M2100.0
50F1500.0
abe
abe
be
be
1T
T23T
T4
T12T
T34T
覆蓋了條件的測試用例不一定覆蓋了分支。事實上,它只覆蓋了4個分支中的兩個。
判定/條件覆蓋要求設計足夠的測試用例,執(zhí)行被測程序,(1)使得判斷中每個條件的所有可能取值至少被執(zhí)行一次,(2)同時每個判斷的所有可能判斷結果也至少被執(zhí)行一次。判定/條件覆蓋
兩個判斷各包含兩個條件,故,共有8種組合。1)age>25,sex=M,記為T1,T22)age>25,sex=F,記為T1,3)age≤25,sex=M,記為,T24)age≤25,sex=F,記為,5)age
50,comm>2000.0,記為T3,T46)age
50,comm≤2000.0記為T3,7)age<50,comm>2000.0,記為,T48)age<50,comm≤2000.0,記為條件組合覆蓋4個測試用例覆蓋了所有的條件組合,同時也覆蓋了4個分支。但只覆蓋了3條路徑,漏掉了路徑acd。
測試用例
agesexcomm
所走路徑
覆蓋組合
覆蓋條件
Test1
Test6
Test7
Test8
50M2500
20M2000.0
50F1500.0
20M1500
ace
abe
abe
abd
4)8)
T1,T2,T3,T4
1T
T23T
T4
T12T
T34T
1T
2T
3T
4T
3)7)1)5)2)6)路徑能否被全面覆蓋在軟件測試中是一個重要的問題,因為程序要取得正確的結果,就必須消除遇到的各種障礙,沿著特定的路徑順利執(zhí)行。如果程序中的每一條路徑都得到考驗,才能說程序受到了全面檢驗。路徑覆蓋
4條可能路徑:P1:aceP2:abdP3:abeP4:acd選擇如上的4個測試用例:Test1,test3,test4和test7。
討論路徑數(shù)目的計算方法,分析程序中到底有多少條路徑?有多少條線性獨立路徑數(shù)?如果程序中出現(xiàn)了多個判斷和多個循環(huán),可能的路徑數(shù)目將會急劇增長,以至實現(xiàn)路徑覆蓋不可能的。實際上我們可以做到的只是有選擇地測試程序中某些有代表的性路徑?;⌒蛄斜硎窘Y點序列表示進入循環(huán)次數(shù)abdhklabcfklabcfkmbcfklabcfkmbeiklI-A-B-D-F-G-OI-A-B-C-F-G-OI-A-B-C-F-G-A-B-C-F-G-OI-A-B-C-F-G-A-B-E-F-G-O0011
程序控制流圖是一個有向圖,如果圖中任何兩個結點之間都至少存在一條路徑,這樣的圖便是強連通圖。McCabe提出,如果程序控制流圖是一個強連通圖,其復雜度V(G)可按以下公式計算:
V(G)=e–n+1e為圖G中的邊數(shù),n為圖G中的結點數(shù)。
McCabe的程序獨立路徑數(shù)強連通圖的復雜度V(G)是線性獨立環(huán)路的數(shù)量。
V(G)其復雜度(G)=e–n+1=11-7+1=5表示的五條線性獨立路徑:p1=A,B,C,Gp2=A,B,C,B,C,Gp3=A,B,E,F(xiàn),Gp4=A,D,E,F(xiàn),Gp5=A,D,F(xiàn),GcAEBDCFGabdefghiejk獨立路徑是指從程序入口到出口的多次執(zhí)行中,每次至少有一個語句(包括運算、賦值、輸入、輸出或判斷)是新的,未被重復的。路徑p6=A、B、C、B、E、F、Gp7=A、B、C、B、B、C、G不是獨立路徑。cAEBDCFGabdefghiejk
很明顯,從測試角度來看,如果某一程序的每一獨立路徑都測試過了,那么可以認為程序中的每個語句都已檢驗過了。
但在實際測試中,要真正構造出程序的每條獨立路徑,并不是一件輕松的事。路徑測試考慮以下幾個方面:程序的控制流圖。程序環(huán)境復雜性。借助McCabe復雜性度量,可以從程序的環(huán)路復雜性導出程序路徑集合中的獨立路徑數(shù)。設計測試用例,確保獨立路徑集中的每一條路徑被執(zhí)行。
在路徑測試中,最關鍵的問題仍然是如何設計測試用例,使之既能夠避免測試的盲目性,又能有較高的測試效率。一般有三個途徑可得到測試用例:(1)通過非路徑分析得到測試用例(2)對未測試的路徑生成相應的測試用例(3)生成指定路徑的測試用例方法判定覆蓋條件覆蓋條件組合覆蓋基路徑測試優(yōu)點簡單、無須細分每個判定增加了對符號判定情況的測試對程序進行較徹底的測試,覆蓋面廣清晰、測試用例有效缺點往往大部分的判定語句是由多個邏輯條件組合而成(如包含AN'D、OR等的組合),若僅僅判斷其組合條件的結果,而忽略每個條件的取值情況,必然會遺漏部分測試場景達到條件覆蓋,需要足夠多的測試用例,但條件覆蓋還是不能保證判定覆蓋,這是由于AND和OR不同的組合效果造成的對所有可能條件進行測試,需要設計大量、復雜測試用例,工作量比較大基本路徑法,類似于分支的方法,不能覆蓋一些特定的條件,這些條件往往是容易出錯的地方數(shù)據流測試數(shù)據流測試分析常常集中于定義/引用異常的缺陷,用于如下三方面測試。(1)變量被定義,但是從來沒有使用(引用)(2)所使用的變量沒有被定義(3)變量在使用之前被定義兩次早期的數(shù)據流測試主要用于檢測程序編寫時出現(xiàn)的一些警告信息,如“所定義的變量未被使用等”問題,這些問題光靠簡單的語法分析器或者是語義分析器是無法檢測出來的。變量定義/引用分析1)DEF(v,n)變量v在結點n處定義,定義包括輸入語句,賦值語句(等號左側),過程調用都是定義結點的例子,如果執(zhí)行這些語句,變量的值往往會發(fā)生變化。2)USE(v,n)變量v在結點n處被使用,使用包括輸出語句、賦值語句(等號右側)、條件語句、循環(huán)語句、過程調用語句都是結點的使用語句,如果執(zhí)行這類語句,值不會被改變。3)P-use當且進當USE(v,n)是謂詞使用,比如a>=2,對于P-use的程序圖出度>=2變量定義/引用分析4)C-use當且僅當USE(v,n)是計算使用,對于C-use的程序圖入度<=15)定義使用路徑關于變量v的定義使用路徑(記做du-path),存在定義和使用結點DEF(v,m)和USE(v,n),使得m和n是該路徑的開始結點和結束結點。6)清除路徑當定義結點和清除結點中間沒有其他的定義結點的時候為清除路徑。56473281910結點被定義的變量被引用的變量1X,Y,Z2XW,X3X,Y4Y,Z5YV,Y6ZV,Z7VX8WY9ZV10Z語句2使用了變量W,而在此之前并未對其進行定義(賦值)。語句5,6使用了變量V,但在第一次執(zhí)行循環(huán)時也未對其定義過。語句6對變量Z的定義從未被使用過。語句8對變量W的定義從未被使用過。程序片一個重要概念——S(V,n)。S(V,n)表示結點n之前的所有對V中的變量值做出貢獻的所有語句片段的總和。很明顯的,做出貢獻的一定有USE(v,n),但是要注意的是這里的使用路徑包括直接和間接的。
舉個例子說明。比如說在結點n有個變量a=a+b+c,那么很明顯,影響a的值包括a、b、c,所以自然要將在結點n前影響到值a,b,c三個變量的所有結點都算進去,直
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 臨沂市公安機關2025年第四季度招錄警務輔助人員備考題庫完整答案詳解
- 湖北省重點高中智學聯(lián)盟2025-2026學年高二上學期12月月考歷史試題
- 吉林省水利水電勘測設計研究院2026年校園招聘29人備考題庫及一套答案詳解
- 2025年煙臺市檢察機關公開招聘聘用制書記員的備考題庫(24人)完整參考答案詳解
- 2025年及未來5年市場數(shù)據中國3D打印行業(yè)市場調研及行業(yè)投資策略研究報告
- 2026年及未來5年市場數(shù)據中國方解石行業(yè)市場運營現(xiàn)狀及投資規(guī)劃研究建議報告
- 2026年及未來5年市場數(shù)據中國砷化鎵行業(yè)發(fā)展趨勢預測及投資戰(zhàn)略咨詢報告
- 2025年及未來5年市場數(shù)據中國瀝青基碳纖維行業(yè)市場運營現(xiàn)狀及投資戰(zhàn)略咨詢報告
- 2026年及未來5年市場數(shù)據中國氫氧化鉀行業(yè)市場調查研究及投資戰(zhàn)略咨詢報告
- 材料力學失配應力遮擋效應應對策略
- 低年級小學生心理輔導中的主要問題及應對策略
- 光伏屋頂?shù)跹b施工方案
- 南水北調江蘇水源公司2026屆校園招聘備考考試題庫附答案解析
- 2025年新疆第師圖木舒克市公安招聘警務輔助人員公共基礎知識+寫作自測試題及答案解析
- 《藝術概論》考研真題及答案
- 2025版糧食倉庫安全操作規(guī)程
- 醫(yī)院檢驗科消防知識培訓課件
- 綠里奇跡課件
- 2025年科創(chuàng)板開戶測試題及答案
- 2025天津宏達投資控股有限公司及所屬企業(yè)招聘工作人員筆試備考試題及答案解析
- 合同能源管理課件
評論
0/150
提交評論