白盒測試方法_第1頁
白盒測試方法_第2頁
白盒測試方法_第3頁
白盒測試方法_第4頁
白盒測試方法_第5頁
已閱讀5頁,還剩110頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、4. 白盒測試方法 l程序結(jié)構(gòu)分析l邏輯覆蓋l路徑分析l程序插裝14.1程序結(jié)構(gòu)分析程序的結(jié)構(gòu)形式是白盒測試的主要依據(jù)。程序的結(jié)構(gòu)形式是白盒測試的主要依據(jù)。l控制流分析控制流分析l數(shù)據(jù)流分析數(shù)據(jù)流分析l信息流分析信息流分析程序結(jié)構(gòu)分析的目的程序結(jié)構(gòu)分析的目的就是要找到就是要找到程序中隱藏的各種錯誤。程序中隱藏的各種錯誤。 24.1程序結(jié)構(gòu)分析 一、控制流分析一、控制流分析l非結(jié)構(gòu)化程序會給測試、排錯和程序的維護帶來許多不必要的困難.l70年代以來,結(jié)構(gòu)化程序的概念逐漸為人們普遍接受。體現(xiàn)這一要求對于若干新的語言,如Pascal、C等并不困難,因為它們都具有反映基本控制結(jié)構(gòu)的相應(yīng)控制語句。l要求

2、寫出的程序是結(jié)構(gòu)良好的。3 一、控制流分析1.1.控制流圖控制流圖程序流程圖程序流程圖(flowchart):是人們一種程序控制結(jié)構(gòu)的圖形表示方式。在程序流程圖上的框內(nèi)常常標明了處理要求或條件,這些在做路徑分析時是不重要的。4一、控制流分析1.1.控制流圖控制流圖為了更加突出控制流的結(jié)構(gòu),需要對程序流程圖做些簡化,我們稱這種簡化了的流程圖為控制流圖。5一、控制流分析1.1.控制流圖控制流圖控制流圖中的符號:控制流圖中的符號:節(jié)點:節(jié)點:以標有編號的圓圈表示。代表流程圖中矩形表示的處理、菱形表示的判斷以及兩至多條控制流線的交匯點。控制流線:控制流線:以帶箭頭的直線或弧線表示。它與流程圖中的流線是

3、一致的,標明了控制的順序??刂屏骶€通常標有名字,如圖中所標的a、b、c等。6一、控制流分析1.1.控制流圖控制流圖控制流圖矩陣控制流圖矩陣: :為便于在機器上表示和處理控制流圖,我們可以把控制流圖表示成矩陣的形式,稱為控制流圖矩陣。如圖表示的控制流圖5x5矩陣,是由該控制流圖中含有5個節(jié)點決定的。7一、控制流分析2對程序結(jié)構(gòu)的基本要求對程序結(jié)構(gòu)的基本要求對于程序結(jié)構(gòu)提出以下4點基本要求,這些要求是,寫出的程序不應(yīng)包含:轉(zhuǎn)向并不存在的標號; 沒有用的語句標號; 從程序入口進入后無法達到的語句; 不能達到停機語句的語句。 8一、控制流分析2程序結(jié)構(gòu)的基本要求程序結(jié)構(gòu)的基本要求如何對程序進行檢測,把

4、以上如何對程序進行檢測,把以上4種問題從程種問題從程序中找出來序中找出來? 轉(zhuǎn)向并不存在的標號; 沒有用的語句標號;這兩種情況是很容易發(fā)現(xiàn)的,在此我們不再討論。9一、控制流分析2程序結(jié)構(gòu)的基本要求程序結(jié)構(gòu)的基本要求從程序入口進入后無法達到的語句;這種情況可以利用檢驗不可達代碼算法加以檢驗,凡未作標記的節(jié)點均為不可達代碼。 。10一、控制流分析2程序結(jié)構(gòu)的基本要求程序結(jié)構(gòu)的基本要求 不能達到停機語句的語句這種情況也可用相似的方法找出,在上述算法中,只需把“入口節(jié)點”改為“出口節(jié)點,“后繼”改為“前趨”即可。 11一、控制流分析3 3程序結(jié)構(gòu)分析程序結(jié)構(gòu)分析 結(jié)構(gòu)化流程圖 :12一、控制流分析3

5、3程序結(jié)構(gòu)分析程序結(jié)構(gòu)分析 結(jié)構(gòu)化流程圖 :13一、控制流分析3 3程序結(jié)構(gòu)分析程序結(jié)構(gòu)分析 結(jié)構(gòu)化流程圖 :14一、控制流分析3 3程序結(jié)構(gòu)分析程序結(jié)構(gòu)分析 l通過利用流程圖語法的產(chǎn)生式規(guī)則進行流程圖的自底向上分析,能夠驗證上述結(jié)構(gòu)規(guī)則在程序編寫中是否得到遵循,如果確已遵循,便可得到有關(guān)其構(gòu)成成分的語法樹。l此外,利用流程圖語法還能揭示控制結(jié)構(gòu)的缺限。15一、控制流分析3 3程序結(jié)構(gòu)分析程序結(jié)構(gòu)分析 l我們給出的結(jié)構(gòu)程序規(guī)則是很有限的,通常還可作進一步擴充。例如,可以允許使用具有多出口的循環(huán)構(gòu)造,提高程序的清晰性,也不會使程序正確性證明的工作更加困難。l盡管允許這樣的結(jié)構(gòu)會使檢查流程圖結(jié)構(gòu)是

6、否良好更為復雜,但作其它的流程分析還是可行的。16二、數(shù)據(jù)流分析什么是數(shù)據(jù)流分析?什么是數(shù)據(jù)流分析?l數(shù)據(jù)流分析最初是隨著編譯系統(tǒng)要生成有效的目標碼而出現(xiàn)的,這類方法主要用于代碼優(yōu)化。l數(shù)據(jù)流分析方法在確認系統(tǒng)中也得到成功的運用,用以查找如引用未定義變量等程序錯誤,以及用來查找對未曾使用的變量再次賦值等數(shù)據(jù)流異常的情況。17二、數(shù)據(jù)流分析數(shù)據(jù)流分析重要性:數(shù)據(jù)流分析重要性:在程序測試中,找出這些錯誤是很重要的。因為這常常以一些常見程序錯誤為表現(xiàn)形式,如錯拼名字、名字混淆或是丟失了語句。18二、數(shù)據(jù)流分析(1 1)數(shù)據(jù)流問題)數(shù)據(jù)流問題l如果程序中某一語句執(zhí)行時能改變某個程序變量V的值,則稱V是

7、被該語句定義的。l如果一語句的執(zhí)行引用了內(nèi)存中變量V的值,則說該語句引用變量V。 19二、數(shù)據(jù)流分析(1 1)數(shù)據(jù)流問題)數(shù)據(jù)流問題20例如例如:1.語句 X:Y十Z定義了X,引用了Y和Z;2.語句 if YZ then goto exit引用了Y和Z。3. 輸入語句 READ X定義了X。4. 輸出語句 WRITE X 引用了X。 二、數(shù)據(jù)流分析這是一個程序控制流圖,同時給出了每一語句定義和這是一個程序控制流圖,同時給出了每一語句定義和引用的變量的列表。引用的變量的列表。21二、數(shù)據(jù)流分析 該程序中合有兩個錯誤:該程序中合有兩個錯誤: 語句2使用了變量W,而在此之前并末對其定義。 語句5、6

8、使用變量V,這在第一次執(zhí)行循環(huán)時也未對其定義過。 此外,該程序還包含兩個異常:此外,該程序還包含兩個異常: (3)語句6對Z的定義與使用有誤。 (4)語句8對W的定義也從未使用過。 22二、數(shù)據(jù)流分析l程序中包含有些異常,如、也許不會引起執(zhí)行的錯誤。l但是這一情況表明,也許程序中含有錯誤;l另外,我們也許可以把程序?qū)懙酶菀桌斫猓鼉?yōu)化,從而能夠簡化驗證工作,以及隨后的維護工作。23二、數(shù)據(jù)流分析(2)可達性定義)可達性定義l變量V的定義是修改V值的一個程序語句。l如果語句i是V的一個定義,我們可以用Vi來表示這一定義。24二、數(shù)據(jù)流分析(2)可達性定義)可達性定義l如果從節(jié)點i到節(jié)點j的入口

9、(或出口)變量V有一明確定義路徑,定義Vi便說成是達到了節(jié)點j的入口(或出口)。如果控制流圖中一路徑并未對變量如果控制流圖中一路徑并未對變量V定定義,那么該路徑就是變量義,那么該路徑就是變量V的明確定義。的明確定義。l定義Vi被說成是“殺掉”了那些達到節(jié)點i的變量V的所有其它定義(但保留了其它變量的所有定義)。25二、數(shù)據(jù)流分析(2)可達性定義)可達性定義現(xiàn)在讓我們來看哪些定義達到了程序的每一節(jié)點。l對于任一節(jié)點,我們用Si和ti分別表示達到i的入口和出口的定義集合。l設(shè) pi是節(jié)點i保存的所有定義的集合,Ci是節(jié)點i中生成的定義集合。則對于每個節(jié)點i,這些集合滿足關(guān)系:ti=(SiPi)Ci

10、26二、數(shù)據(jù)流分析(2)可達性定義)可達性定義很明顯,達到節(jié)點i頂點的定義集合是達到其前趨出口的定義集合的并。l若用xi表示節(jié)點i前趨的集合,則可將此條件表示為:Si=(SiPi)di)j Xi 其中,其中,di=Cij Xi27二、數(shù)據(jù)流分析(2)可達性定義)可達性定義l若是一個具有n個節(jié)點的圖,我們便有這樣的一個聯(lián)立方程組(i取值1,2,n)。l這樣的方程組不只有一組解。但總有一個最小解,它給出要求達到的定義。l這一方程組可用循環(huán)迭代算法求解。28二、數(shù)據(jù)流分析(2)可達性定義)可達性定義在該算法中,一開始規(guī)定Si=d;(i=1,2,n)。然后依次對Sl,S2,Sn求解方程Si=(SiPi

11、)di)j Xi每次令等號左端的Si總?cè)⌒轮?,當Si的值不再改變時,就得到了所求的解。29二、數(shù)據(jù)流分析30程序每一個節(jié)點的可達定義表:程序每一個節(jié)點的可達定義表:二、數(shù)據(jù)流分析(3)引用未定義變量)引用未定義變量根據(jù)可達定義表,可按下述方法找出對未定義變量的引用。l對每一節(jié)點i,依次考慮語句i引用的每一變量;l如果對任何這樣的變量V,并沒有V的定義達到i,那么程序含有一個錯誤。 31二、數(shù)據(jù)流分析(3)引用未定義變量)引用未定義變量l在上面的例子中,考慮節(jié)點2,根據(jù)引用變量表看出,這個語句引用變量W。l從可達定義表發(fā)現(xiàn),W的定義不可能達到節(jié)點2。l因而程序中必定含有一個錯誤。這屬于前述第一類

12、錯誤(轉(zhuǎn)向并不存在的標號)。32二、數(shù)據(jù)流分析33(4)未曾使用的定義)未曾使用的定義l可以用下面的方法找出未曾使用的定義。l對于每一變量定義Vi,依次考慮由Vi達到的每個程序節(jié)點I;l如果沒有引用變量V的相應(yīng)語句,則程序中含有一個異常。二、數(shù)據(jù)流分析(4)未曾使用的定義)未曾使用的定義l例如,在上例中,考慮定義Z6時,根據(jù)可達定義表發(fā)現(xiàn),這一定義達到節(jié)點7,8和9。l然而,由引用變量表我們看出,并沒有對應(yīng)的語句引用變量Z,這屬于第三類錯誤-從程序入口進入后無法達到的語句。344.2邏輯覆蓋邏輯覆蓋 結(jié)構(gòu)測試是依據(jù)被測程序的邏輯結(jié)構(gòu)設(shè)計測試用例,驅(qū)動被測程序運行完成的測試。結(jié)構(gòu)測試中的一個重要

13、問題是,測試進行到什么程度就達到要求,可以結(jié)束測試了,這也就是說我們需要給出結(jié)構(gòu)測試的覆蓋準則。354.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 36w 1.語句覆蓋 w 2.判定覆蓋w 3.條件覆蓋w 4.判定-條件覆蓋w 5.路徑覆蓋4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 37w 1.語句覆蓋 程序例子:IF(A1)AND(BO)IHEN XXAIF(A2)OR(X1)THEN xx十14.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 38w 1.語句覆蓋 什么是語句覆蓋?什么是語句覆蓋?w 在測試時,首先設(shè)計若干個測試用例。w 然后運行被測程序,使程序中的每個可

14、執(zhí)行語句至少執(zhí)行一次。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 39w 1.語句覆蓋 如果選用的測試用例是: A2 B0 CASEl X3則程序按路徑ace執(zhí)行。這樣該程序段的4個語句均得到執(zhí)行,從而做到了語句覆蓋。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 40w 1.語句覆蓋 如果選用的測試用例是: A2 B1 CASE2 X3則程序按路徑bce執(zhí)行。此時該程序段只執(zhí)行了其中的3個語句,所以未達到語句覆蓋。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 41w 1.語句覆蓋 w 從程序中每個語句都得到執(zhí)行這一點來看,語句覆蓋的方法似乎能夠比較全面地檢驗每一個語句

15、。w 但即使程序中每個語句都得到執(zhí)行,也不能保證程序完全正確。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 42w 1.語句覆蓋 假如這一程序段中兩個判斷的邏輯運算有問題:(1)第一個判斷的運算符“AND”錯成運算符“OR”(2)或是第二個判斷中的運算符“OR”錯成了運算符 “AND”。 這時仍使用測試用例CASEl,程序仍將按路徑ace執(zhí)行。這時雖然也作到了語句覆蓋,卻發(fā)現(xiàn)不了判斷中邏輯運算的錯誤。 4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 43w 1.語句覆蓋 w 與其它幾種邏輯覆蓋比較起來,語句覆蓋是比較弱的覆蓋原則。w 作到了語句覆蓋可能給人門一種心理的滿足,以為每

16、個語句都經(jīng)歷過,似乎可以放心了。其實這仍然是不十分可靠的。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 44w 1.語句覆蓋 w 語句覆蓋在測試被測程序中,除去對檢查不可執(zhí)行語句有一定作用外,并沒有排除被測程序包含錯誤的風險。w 其原因是,被測程序并非語句的無序堆積,語句之間存在著許多有機的聯(lián)系。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 45w 2.判定覆蓋什么是判定覆蓋?什么是判定覆蓋?w 按判定覆蓋準則進行測試是指,設(shè)計若干測試用例,運行被測程序,使得程序中每個判斷的取真分支和取假分支的情況至少經(jīng)歷一次,即判斷的真假值均曾被滿足。w 所以,判定覆蓋又稱為分支覆蓋。4.2

17、邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 46w 2.判定覆蓋仍以上述程序段為例,若選用的兩組測試用例是:CASEl: CASE3 A2 A1 B0 B0 X3 X1則可分別執(zhí)行路徑ace和abd。從而使兩個判斷的4個分支c、e和b、d分別得到覆蓋。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 47w 2.判定覆蓋若選用另外兩組測試用例:CASE4: CASE5 A3 A2 B0 B1 X3 X1則可分別執(zhí)行路徑acd和abe。同樣使兩個判斷的4個分支c、e和b、d分別得到覆蓋。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 48w 2.判定覆蓋w 上述兩組測試用例不僅滿足

18、了判定覆蓋,同時還做到了語句覆蓋。w 但是,在此程序段中的第2個判斷條件x1如果錯寫成x1,使用上述測試用例CASE5,照樣能按原路徑執(zhí)行(abe),而不影響結(jié)果。w 所以,判定覆蓋只能作到判定覆蓋仍無法確定判斷內(nèi)部條件的錯誤。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 49w 3.條件覆蓋w 什么是條件覆蓋?條件覆蓋是指,設(shè)計若干測試用例,執(zhí)行被測程序以后,要使每個判斷中每個條件的可能取值至少滿足一次。 4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 504.2邏輯覆蓋邏輯覆蓋514.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 52w 4.判定-條件覆蓋w 什么是判定-

19、條件覆蓋? 判定條件覆蓋要求設(shè)計足夠的測試用例,使得判斷中每個條件的所有可能至少出現(xiàn)一次,并且每個判斷本身的判定結(jié)果也至少出現(xiàn)一次。 4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 53w 4.判定-條件覆蓋4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 54w 4.判定-條件覆蓋4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 55w 4.路徑覆蓋w 什么是路徑覆蓋?按路徑覆蓋要求進行測試是指,設(shè)計足夠多的測試用例,要求覆蓋程序中所有可能的路徑。 4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 56w 5.路徑覆蓋針對例中的4條可能路徑 ace記為L1 abd記為L2

20、abe記為L3 acd記為L44.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 57w 5.路徑覆蓋4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 58w 5.路徑覆蓋4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 59w 5.路徑覆蓋這里所用的程序段非常簡短。也只有4條路徑。在實際問題中。一個不太復雜的程序,其路徑數(shù)都是一個龐大的數(shù)字,要在測試中覆蓋這樣多的路徑是無法實現(xiàn)的。為解決這一難題只得把覆蓋的路徑數(shù)壓縮到一定限度內(nèi),例如,程序中的循環(huán)體只執(zhí)行了一次。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 60w 5.路徑覆蓋其實,即使對于路徑數(shù)很有限的程序已經(jīng)作到了路徑

21、覆蓋,仍然不能保證被測程序的正確性。例如,在上述語句覆蓋一段最后給出的程序段中出現(xiàn)的錯誤也不是路徑覆蓋可以發(fā)現(xiàn)的(“or”與“and”的錯寫)。 由此看出,各種結(jié)構(gòu)測試方法都不能保證程序的正確性。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測試方法 61w 5.路徑覆蓋測試的目的并非要證明程序的正確性,而是要盡可能找出程序中的錯誤。確實并不存在一種十全十美的測試方法,能夠發(fā)現(xiàn)所有的錯誤。想要在有限的時間內(nèi)用有限的方法來發(fā)現(xiàn)所有的程序錯誤做不到的,這又涉及到了有關(guān)軟件測試局限性的問題。 4.2邏輯覆蓋邏輯覆蓋二.最少測試用例數(shù)計算 62為實現(xiàn)測試的邏輯覆蓋。必須設(shè)計足夠多的測試用例,并使用這些測

22、試用例執(zhí)行被測程序,實施測試。我們關(guān)心的是,對某個具體程序來說,至少要設(shè)計多少測試用例。這里提供一種估算最少測試用例數(shù)的方法。 4.2邏輯覆蓋邏輯覆蓋二.最少測試用例數(shù)計算 63結(jié)構(gòu)化程序是由3種基本控制結(jié)構(gòu)組成:順序型構(gòu)成串行操作;選擇型構(gòu)成分支操作;重復型構(gòu)成循環(huán)操作。為了把問題簡化,避免出現(xiàn)測試用例極多的組合爆炸,把構(gòu)成循環(huán)操作的重復型結(jié)構(gòu)用選擇結(jié)構(gòu)代替。4.2邏輯覆蓋邏輯覆蓋二.最少測試用例數(shù)計算 64例如,圖512表達了兩個順序執(zhí)行的分支結(jié)構(gòu)。兩個分支謂詞P1和P2取不同值時,將分別執(zhí)行a或b及c或d操作。顯然,要測試這個小程序,需要至少提供4個測試用例才能作到邏輯覆蓋,使得ac、a

23、d、bc及bd操作均得到檢驗。4.2邏輯覆蓋邏輯覆蓋二.最少測試用例數(shù)計算 65這里的4是圖中第1個分支謂詞引出的兩個操作,及第2個分支謂詞引出的兩個操作組合起來而得到的,即224。其中的2是由于兩個并列的操作,1十12而得到的。 4.2邏輯覆蓋邏輯覆蓋二.最少測試用例數(shù)計算 66對于一般的、更為復雜的問題,估算最少測試用例數(shù)的原則也是同樣的。該程序中共有9個分支謂詞。 4.2邏輯覆蓋邏輯覆蓋二.最少測試用例數(shù)計算 67盡管這些分支結(jié)構(gòu)交錯起來似乎十分復雜,很難一眼看出應(yīng)至少需要多少個測試用例,但如果仍用上面的方法,也是很容易解決的。注意到該圖可分上下兩層:分支謂詞1的操作域是上層;分支謂詞8

24、的操作域是下層。4.2邏輯覆蓋邏輯覆蓋二.最少測試用例數(shù)計算 68這兩層正像前面簡單例中的P1和P2的關(guān)系一樣。只要分別得到兩層的測試用例個數(shù),再將其相乘即得總的測試用例數(shù)。4.2邏輯覆蓋邏輯覆蓋二.最少測試用例數(shù)計算 69(a)所需測試用例個數(shù)分別為1十1十1十1十15(b)所需測試用例個數(shù)分別為及1十1十13。因而兩層組合,得到5315。整個程序的上層所需測試用例數(shù)為l十1516。而下層十分顯然為3。故最后得到整個程序所需測試用例數(shù)至少為16348。4.2邏輯覆蓋邏輯覆蓋二.最少測試用例數(shù)計算 70這里需要首先考慮較為復雜的上層結(jié)構(gòu)。當謂詞l不滿足時要作的操作又可進一步分解為兩層(a),(

25、b)。4.2邏輯覆蓋邏輯覆蓋二.最少測試用例數(shù)計算 71整個程序的下層所需測試用例數(shù)為3。所以最后得到整個程序所需測試用例數(shù)至少為16348。4.2邏輯覆蓋邏輯覆蓋三.測試覆蓋準則72前面介紹的邏輯覆蓋其出發(fā)點似乎是合理的。所謂“覆蓋”,就是想要作到全面,而無遺漏。但事實表明,它并不能真的作到無遺漏。甚至右圖程序段這樣的小問題都無能為力。出現(xiàn)這一情況的原因在于,錯誤區(qū)域僅僅在I0這個點上,即僅當I取0時,測試才能發(fā)現(xiàn)錯誤。 4.2邏輯覆蓋邏輯覆蓋三.測試覆蓋準則73KAFoster從測試工作實踐的教訓出發(fā),吸收了計算機硬件的測試原理,提出了一種經(jīng)驗型的測試覆蓋準則,較好地解決了上述問題。Fos

26、rer的經(jīng)驗型覆蓋準則是從硬件的早期測試方法中得到啟發(fā)的。我們知道,硬件測試中,對每一個門電路的輸入、輸出測試都是有額定標準的。通常,電路中一個門的錯誤常常是“輸出總是0”,或是“輸出總是1”。4.2邏輯覆蓋邏輯覆蓋三.測試覆蓋準則74與硬件測試中的這一情況類似,我們常常要重視程序中謂詞的取值,但實際上它可能比硬件測試更加復雜。Foster通過大量的實驗確定了程序中謂詞最容易出錯的部分,得出了一套錯誤敏感測試用例分析ESTCA(ErrorSensitiveTestCasesAnalysis)規(guī)則。4.2邏輯覆蓋邏輯覆蓋三.測試覆蓋準則75規(guī)則1對于A rel B(rel可以是,和)型的分支謂詞

27、,應(yīng)適當?shù)剡x擇A與B的值,使得測試執(zhí)行到該分支語句時,AB,AB和AB的情況分別出現(xiàn)一次。4.2邏輯覆蓋邏輯覆蓋三.測試覆蓋準則76規(guī)則2對于A rel1 C(rel1可以是或是,A是變量,C是常量)型的分支謂詞,當rel1為時,應(yīng)適當?shù)剡x擇A的值,使: ACM(M是距C最小的機器容許正數(shù),若A和C均為整型時,M=1)。同樣,當rel1為時,應(yīng)適當?shù)剡x擇A,使: AC十M 4.2邏輯覆蓋邏輯覆蓋三.測試覆蓋準則77規(guī)則3對外部輸入變量賦值,使其在每一測試用例中均有不同的值與符號,并與同一組測試用例中其它變量的值與符號不一致。 4.2邏輯覆蓋邏輯覆蓋三.測試覆蓋準則78顯然,上述規(guī)則1是為了檢測

28、rel的錯誤;規(guī)則2是為了檢測“差一”之類的錯誤(如本應(yīng)是“IF A1”而錯成“IF A0”);規(guī)則3則是為了檢測程序語句中的錯誤(如應(yīng)引用一變量而錯成引用一常量)。 4.2邏輯覆蓋邏輯覆蓋三.測試覆蓋準則79上述三規(guī)則并不是完備的,但在普通程序的測試中確是有效的。原因在于規(guī)則本身針對著程序編寫人員容易發(fā)生的錯誤,或是圍繞著發(fā)生錯誤的頻繁區(qū)域,從而提高了發(fā)現(xiàn)錯誤的命中率。 4.3路徑分析路徑分析 l什么是路徑分析什么是路徑分析?分析程序中的路徑是指:檢驗程序從入口開始,執(zhí)行過程中經(jīng)歷的各個語句,直到出口。804.3路徑分析路徑分析 l路徑分析是白盒測試最為典型的問題。l著眼于路徑分析的測試可稱

29、為路徑測試。l完成路徑測試的理想情況是做到路徑覆蓋。814.3路徑分析路徑分析 l從上節(jié)的討論中我們已經(jīng)看出,對于比較簡單的小程序?qū)崿F(xiàn)路徑覆蓋是可能做到的。l但如果程序中出現(xiàn)多個判斷和多個循環(huán),可能的路徑數(shù)目將會急劇增長,以至實現(xiàn)路徑覆蓋不可能做到。824.3路徑分析路徑分析 一、程序路徑表達式1路徑的弧序列表示及節(jié)點序列表示l如果圖51(b)中的1號節(jié)點為程序入口,5號節(jié)點為程序出口,這一程序中可能的路徑就有許多個。834.3路徑分析路徑分析 1路徑的弧序列表示及節(jié)點序列表示l在此列舉4條路徑,分別以弧序列表示及節(jié)點序列表示。844.3路徑分析路徑分析 2路徑表達式(pathexpressi

30、on)l路徑表達式作為一種表達式,其運算對象指的是控制流圖中的弧。路徑表達式中引入兩個運算:l乘運算l加運算854.3路徑分析路徑分析 2路徑表達式(pathexpression)乘運算乘運算l弧a和弧b相乘,所得的乘積為ab,它表示先沿弧a,再沿弧b所經(jīng)歷的路段。l例如,acde是四個弧的乘積,它表示沿著a、c、d和e的順序所經(jīng)歷的路段。864.3路徑分析路徑分析 2路徑表達式(pathexpression) 加運算加運算l弧a與弧b相加,其和a+b表示兩弧是或的關(guān)系。l如圖中節(jié)點2至節(jié)點3有兩個弧相聯(lián),是并行的路段。874.3路徑分析路徑分析 2路徑表達式(pathexpression)l

31、 可以看出在圖所表示的控制流中,共有可以看出在圖所表示的控制流中,共有4條路徑:條路徑:eacf,eadf,ebcf和和ebdf。l這這4條路徑是并行的或的關(guān)系,可以用加運條路徑是并行的或的關(guān)系,可以用加運算聯(lián)接它們,從而得到完整的路徑表達式:算聯(lián)接它們,從而得到完整的路徑表達式: eacf+ +eadf+ +ebcf+ +ebdf 884.3路徑分析路徑分析 2路徑表達式(pathexpression)l還可直接從圖中看出,既然弧還可直接從圖中看出,既然弧a和弧和弧b是并是并行的,弧行的,弧c和弧和弧d也是并行的。它們的頭尾也是并行的。它們的頭尾又分別與弧又分別與弧e和弧和弧f相聯(lián)。相聯(lián)。l

32、按上述兩種運算的定義可寫出路徑表達式:按上述兩種運算的定義可寫出路徑表達式: e(a+ +b)(c十十d)f 894.3路徑分析路徑分析 2路徑表達式(pathexpression)l不難發(fā)現(xiàn),這一表達式正是前面不難發(fā)現(xiàn),這一表達式正是前面4項之和表達式的因子提出形式。項之和表達式的因子提出形式。Eacf+ +eadf+ +ebcf+ +ebdfe(a+ +b)(c十十d)f 904.3路徑分析路徑分析 2路徑表達式(pathexpression)914.3路徑分析路徑分析 2路徑表達式(pathexpression)924.3路徑分析路徑分析 二、程序中路徑數(shù)的計算程序中到底有多少路徑程序中

33、到底有多少路徑?l這個問題表面上看似乎容易回答,其實不然。程序中所表示的程序路徑數(shù)與循環(huán)的次數(shù)有關(guān)。934.3路徑分析路徑分析 二、程序中路徑數(shù)的計算l右圖如果循環(huán)體最多執(zhí)行三次,那么路徑數(shù)為3。然而,當程序中既有循環(huán)又有分支出現(xiàn)時,其路徑數(shù)并不容易直覺地從控制流圖中看出。944.3路徑分析路徑分析 二、程序中路徑數(shù)的計算l1.路徑表達式計算假定所討論的程序已經(jīng)得到了它的路徑表達式,則可把其中的所有弧均代以數(shù)值“1”,然后依表達式的乘法和加法運算,所得數(shù)值即為該程序的路徑數(shù)。954.3路徑分析路徑分析 二、程序中路徑數(shù)的計算l1.路徑表達式計算l例如,圖所給的程序,其路徑表達式為e(a十b)(

34、c十d)f。l把弧a,b,e,d,e,f均代人數(shù)值1,計算表達式的值即為路徑數(shù):N1(1十1)(1十1)1=4964.3路徑分析路徑分析 二、程序中路徑數(shù)的計算l1.路徑表達式計算l再以右圖為例,如果暫不考慮循環(huán),那么從節(jié)點1到節(jié)點4只有兩條路徑,L=a(b十cd)el代入數(shù)值“1”,得到:Ll(1十l1)1=2974.3路徑分析路徑分析 二、程序中路徑數(shù)的計算l1.路徑表達式計算l再看循環(huán),假定只考慮循環(huán)次數(shù)小于3的情況。l路徑表達式為:L+LfL十LfLfLL(1十fL十(fL)2)其中L表示循環(huán)體。984.3路徑分析路徑分析 二、程序中路徑數(shù)的計算l1.路徑表達式計算l此式中f代人“1”

35、,L代入“2”,則計算出路徑數(shù)為:2(1十12十(12)2)14994.3路徑分析路徑分析 二、程序中路徑數(shù)的計算l2.程序復雜度計算l我們知道,程序中含有的路徑數(shù)和程序的復雜性有著直接的關(guān)系。l程序越復雜,它的路徑數(shù)越多。1004.3路徑分析路徑分析 二、程序中路徑數(shù)的計算l2.程序復雜度計算如何度量程序復雜性?l假定不考慮程序控制流圖中,聯(lián)結(jié)各節(jié)點之間弧的方向,控制流圖便成為由節(jié)點和邊構(gòu)成的無向圖。我們把無向圖中任何兩個節(jié)點之間至少存在一條通路的圖稱為連通圖(connectedgraph)。1014.3路徑分析路徑分析 二、程序中路徑數(shù)的計算l2.程序復雜度計算如何度量程序復雜性?lMcCabe給出了程序結(jié)構(gòu)復雜性計算公式。lMcCabe提出,對程序控制流圖的連通圖G,其復雜度V(G)可按以下公式計算:V(G)=En+2其中,E為圖G中的邊數(shù),n為圖G中的節(jié)點數(shù)。1024.3路徑分析路徑分析 二、程序中路徑數(shù)的計算l2.程序復雜度計算l程序結(jié)構(gòu)復雜性計算公式。V(G)=En+21034.4 程序插裝程序插裝 程序插裝(ProgramInstrumentation)是一種基本的測試手

溫馨提示

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

評論

0/150

提交評論