




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、4. 白盒測(cè)試方法 l程序結(jié)構(gòu)分析l邏輯覆蓋l路徑分析l程序插裝14.1程序結(jié)構(gòu)分析程序的結(jié)構(gòu)形式是白盒測(cè)試的主要依據(jù)。程序的結(jié)構(gòu)形式是白盒測(cè)試的主要依據(jù)。l控制流分析控制流分析l數(shù)據(jù)流分析數(shù)據(jù)流分析l信息流分析信息流分析程序結(jié)構(gòu)分析的目的程序結(jié)構(gòu)分析的目的就是要找到就是要找到程序中隱藏的各種錯(cuò)誤。程序中隱藏的各種錯(cuò)誤。 24.1程序結(jié)構(gòu)分析 一、控制流分析一、控制流分析l非結(jié)構(gòu)化程序會(huì)給測(cè)試、排錯(cuò)和程序的維護(hù)帶來(lái)許多不必要的困難.l70年代以來(lái),結(jié)構(gòu)化程序的概念逐漸為人們普遍接受。體現(xiàn)這一要求對(duì)于若干新的語(yǔ)言,如Pascal、C等并不困難,因?yàn)樗鼈兌季哂蟹从郴究刂平Y(jié)構(gòu)的相應(yīng)控制語(yǔ)句。l要求
2、寫(xiě)出的程序是結(jié)構(gòu)良好的。3 一、控制流分析1.1.控制流圖控制流圖程序流程圖程序流程圖(flowchart):是人們一種程序控制結(jié)構(gòu)的圖形表示方式。在程序流程圖上的框內(nèi)常常標(biāo)明了處理要求或條件,這些在做路徑分析時(shí)是不重要的。4一、控制流分析1.1.控制流圖控制流圖為了更加突出控制流的結(jié)構(gòu),需要對(duì)程序流程圖做些簡(jiǎn)化,我們稱(chēng)這種簡(jiǎn)化了的流程圖為控制流圖。5一、控制流分析1.1.控制流圖控制流圖控制流圖中的符號(hào):控制流圖中的符號(hào):節(jié)點(diǎn):節(jié)點(diǎn):以標(biāo)有編號(hào)的圓圈表示。代表流程圖中矩形表示的處理、菱形表示的判斷以及兩至多條控制流線(xiàn)的交匯點(diǎn)??刂屏骶€(xiàn):控制流線(xiàn):以帶箭頭的直線(xiàn)或弧線(xiàn)表示。它與流程圖中的流線(xiàn)是
3、一致的,標(biāo)明了控制的順序??刂屏骶€(xiàn)通常標(biāo)有名字,如圖中所標(biāo)的a、b、c等。6一、控制流分析1.1.控制流圖控制流圖控制流圖矩陣控制流圖矩陣: :為便于在機(jī)器上表示和處理控制流圖,我們可以把控制流圖表示成矩陣的形式,稱(chēng)為控制流圖矩陣。如圖表示的控制流圖5x5矩陣,是由該控制流圖中含有5個(gè)節(jié)點(diǎn)決定的。7一、控制流分析2對(duì)程序結(jié)構(gòu)的基本要求對(duì)程序結(jié)構(gòu)的基本要求對(duì)于程序結(jié)構(gòu)提出以下4點(diǎn)基本要求,這些要求是,寫(xiě)出的程序不應(yīng)包含:轉(zhuǎn)向并不存在的標(biāo)號(hào); 沒(méi)有用的語(yǔ)句標(biāo)號(hào); 從程序入口進(jìn)入后無(wú)法達(dá)到的語(yǔ)句; 不能達(dá)到停機(jī)語(yǔ)句的語(yǔ)句。 8一、控制流分析2程序結(jié)構(gòu)的基本要求程序結(jié)構(gòu)的基本要求如何對(duì)程序進(jìn)行檢測(cè),把
4、以上如何對(duì)程序進(jìn)行檢測(cè),把以上4種問(wèn)題從程種問(wèn)題從程序中找出來(lái)序中找出來(lái)? 轉(zhuǎn)向并不存在的標(biāo)號(hào); 沒(méi)有用的語(yǔ)句標(biāo)號(hào);這兩種情況是很容易發(fā)現(xiàn)的,在此我們不再討論。9一、控制流分析2程序結(jié)構(gòu)的基本要求程序結(jié)構(gòu)的基本要求從程序入口進(jìn)入后無(wú)法達(dá)到的語(yǔ)句;這種情況可以利用檢驗(yàn)不可達(dá)代碼算法加以檢驗(yàn),凡未作標(biāo)記的節(jié)點(diǎn)均為不可達(dá)代碼。 。10一、控制流分析2程序結(jié)構(gòu)的基本要求程序結(jié)構(gòu)的基本要求 不能達(dá)到停機(jī)語(yǔ)句的語(yǔ)句這種情況也可用相似的方法找出,在上述算法中,只需把“入口節(jié)點(diǎn)”改為“出口節(jié)點(diǎn),“后繼”改為“前趨”即可。 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通過(guò)利用流程圖語(yǔ)法的產(chǎn)生式規(guī)則進(jìn)行流程圖的自底向上分析,能夠驗(yàn)證上述結(jié)構(gòu)規(guī)則在程序編寫(xiě)中是否得到遵循,如果確已遵循,便可得到有關(guān)其構(gòu)成成分的語(yǔ)法樹(shù)。l此外,利用流程圖語(yǔ)法還能揭示控制結(jié)構(gòu)的缺限。15一、控制流分析3 3程序結(jié)構(gòu)分析程序結(jié)構(gòu)分析 l我們給出的結(jié)構(gòu)程序規(guī)則是很有限的,通常還可作進(jìn)一步擴(kuò)充。例如,可以允許使用具有多出口的循環(huán)構(gòu)造,提高程序的清晰性,也不會(huì)使程序正確性證明的工作更加困難。l盡管允許這樣的結(jié)構(gòu)會(huì)使檢查流程圖結(jié)構(gòu)是
6、否良好更為復(fù)雜,但作其它的流程分析還是可行的。16二、數(shù)據(jù)流分析什么是數(shù)據(jù)流分析?什么是數(shù)據(jù)流分析?l數(shù)據(jù)流分析最初是隨著編譯系統(tǒng)要生成有效的目標(biāo)碼而出現(xiàn)的,這類(lèi)方法主要用于代碼優(yōu)化。l數(shù)據(jù)流分析方法在確認(rèn)系統(tǒng)中也得到成功的運(yùn)用,用以查找如引用未定義變量等程序錯(cuò)誤,以及用來(lái)查找對(duì)未曾使用的變量再次賦值等數(shù)據(jù)流異常的情況。17二、數(shù)據(jù)流分析數(shù)據(jù)流分析重要性:數(shù)據(jù)流分析重要性:在程序測(cè)試中,找出這些錯(cuò)誤是很重要的。因?yàn)檫@常常以一些常見(jiàn)程序錯(cuò)誤為表現(xiàn)形式,如錯(cuò)拼名字、名字混淆或是丟失了語(yǔ)句。18二、數(shù)據(jù)流分析(1 1)數(shù)據(jù)流問(wèn)題)數(shù)據(jù)流問(wèn)題l如果程序中某一語(yǔ)句執(zhí)行時(shí)能改變某個(gè)程序變量V的值,則稱(chēng)V是
7、被該語(yǔ)句定義的。l如果一語(yǔ)句的執(zhí)行引用了內(nèi)存中變量V的值,則說(shuō)該語(yǔ)句引用變量V。 19二、數(shù)據(jù)流分析(1 1)數(shù)據(jù)流問(wèn)題)數(shù)據(jù)流問(wèn)題20例如例如:1.語(yǔ)句 X:Y十Z定義了X,引用了Y和Z;2.語(yǔ)句 if YZ then goto exit引用了Y和Z。3. 輸入語(yǔ)句 READ X定義了X。4. 輸出語(yǔ)句 WRITE X 引用了X。 二、數(shù)據(jù)流分析這是一個(gè)程序控制流圖,同時(shí)給出了每一語(yǔ)句定義和這是一個(gè)程序控制流圖,同時(shí)給出了每一語(yǔ)句定義和引用的變量的列表。引用的變量的列表。21二、數(shù)據(jù)流分析 該程序中合有兩個(gè)錯(cuò)誤:該程序中合有兩個(gè)錯(cuò)誤: 語(yǔ)句2使用了變量W,而在此之前并末對(duì)其定義。 語(yǔ)句5、6
8、使用變量V,這在第一次執(zhí)行循環(huán)時(shí)也未對(duì)其定義過(guò)。 此外,該程序還包含兩個(gè)異常:此外,該程序還包含兩個(gè)異常: (3)語(yǔ)句6對(duì)Z的定義與使用有誤。 (4)語(yǔ)句8對(duì)W的定義也從未使用過(guò)。 22二、數(shù)據(jù)流分析l程序中包含有些異常,如、也許不會(huì)引起執(zhí)行的錯(cuò)誤。l但是這一情況表明,也許程序中含有錯(cuò)誤;l另外,我們也許可以把程序?qū)懙酶菀桌斫?,更?yōu)化,從而能夠簡(jiǎn)化驗(yàn)證工作,以及隨后的維護(hù)工作。23二、數(shù)據(jù)流分析(2)可達(dá)性定義)可達(dá)性定義l變量V的定義是修改V值的一個(gè)程序語(yǔ)句。l如果語(yǔ)句i是V的一個(gè)定義,我們可以用Vi來(lái)表示這一定義。24二、數(shù)據(jù)流分析(2)可達(dá)性定義)可達(dá)性定義l如果從節(jié)點(diǎn)i到節(jié)點(diǎn)j的入口
9、(或出口)變量V有一明確定義路徑,定義Vi便說(shuō)成是達(dá)到了節(jié)點(diǎn)j的入口(或出口)。如果控制流圖中一路徑并未對(duì)變量如果控制流圖中一路徑并未對(duì)變量V定定義,那么該路徑就是變量義,那么該路徑就是變量V的明確定義。的明確定義。l定義Vi被說(shuō)成是“殺掉”了那些達(dá)到節(jié)點(diǎn)i的變量V的所有其它定義(但保留了其它變量的所有定義)。25二、數(shù)據(jù)流分析(2)可達(dá)性定義)可達(dá)性定義現(xiàn)在讓我們來(lái)看哪些定義達(dá)到了程序的每一節(jié)點(diǎn)。l對(duì)于任一節(jié)點(diǎn),我們用Si和ti分別表示達(dá)到i的入口和出口的定義集合。l設(shè) pi是節(jié)點(diǎn)i保存的所有定義的集合,Ci是節(jié)點(diǎn)i中生成的定義集合。則對(duì)于每個(gè)節(jié)點(diǎn)i,這些集合滿(mǎn)足關(guān)系:ti=(SiPi)Ci
10、26二、數(shù)據(jù)流分析(2)可達(dá)性定義)可達(dá)性定義很明顯,達(dá)到節(jié)點(diǎn)i頂點(diǎn)的定義集合是達(dá)到其前趨出口的定義集合的并。l若用xi表示節(jié)點(diǎn)i前趨的集合,則可將此條件表示為:Si=(SiPi)di)j Xi 其中,其中,di=Cij Xi27二、數(shù)據(jù)流分析(2)可達(dá)性定義)可達(dá)性定義l若是一個(gè)具有n個(gè)節(jié)點(diǎn)的圖,我們便有這樣的一個(gè)聯(lián)立方程組(i取值1,2,n)。l這樣的方程組不只有一組解。但總有一個(gè)最小解,它給出要求達(dá)到的定義。l這一方程組可用循環(huán)迭代算法求解。28二、數(shù)據(jù)流分析(2)可達(dá)性定義)可達(dá)性定義在該算法中,一開(kāi)始規(guī)定Si=d;(i=1,2,n)。然后依次對(duì)Sl,S2,Sn求解方程Si=(SiPi
11、)di)j Xi每次令等號(hào)左端的Si總?cè)⌒轮?,?dāng)Si的值不再改變時(shí),就得到了所求的解。29二、數(shù)據(jù)流分析30程序每一個(gè)節(jié)點(diǎn)的可達(dá)定義表:程序每一個(gè)節(jié)點(diǎn)的可達(dá)定義表:二、數(shù)據(jù)流分析(3)引用未定義變量)引用未定義變量根據(jù)可達(dá)定義表,可按下述方法找出對(duì)未定義變量的引用。l對(duì)每一節(jié)點(diǎn)i,依次考慮語(yǔ)句i引用的每一變量;l如果對(duì)任何這樣的變量V,并沒(méi)有V的定義達(dá)到i,那么程序含有一個(gè)錯(cuò)誤。 31二、數(shù)據(jù)流分析(3)引用未定義變量)引用未定義變量l在上面的例子中,考慮節(jié)點(diǎn)2,根據(jù)引用變量表看出,這個(gè)語(yǔ)句引用變量W。l從可達(dá)定義表發(fā)現(xiàn),W的定義不可能達(dá)到節(jié)點(diǎn)2。l因而程序中必定含有一個(gè)錯(cuò)誤。這屬于前述第一類(lèi)
12、錯(cuò)誤(轉(zhuǎn)向并不存在的標(biāo)號(hào))。32二、數(shù)據(jù)流分析33(4)未曾使用的定義)未曾使用的定義l可以用下面的方法找出未曾使用的定義。l對(duì)于每一變量定義Vi,依次考慮由Vi達(dá)到的每個(gè)程序節(jié)點(diǎn)I;l如果沒(méi)有引用變量V的相應(yīng)語(yǔ)句,則程序中含有一個(gè)異常。二、數(shù)據(jù)流分析(4)未曾使用的定義)未曾使用的定義l例如,在上例中,考慮定義Z6時(shí),根據(jù)可達(dá)定義表發(fā)現(xiàn),這一定義達(dá)到節(jié)點(diǎn)7,8和9。l然而,由引用變量表我們看出,并沒(méi)有對(duì)應(yīng)的語(yǔ)句引用變量Z,這屬于第三類(lèi)錯(cuò)誤-從程序入口進(jìn)入后無(wú)法達(dá)到的語(yǔ)句。344.2邏輯覆蓋邏輯覆蓋 結(jié)構(gòu)測(cè)試是依據(jù)被測(cè)程序的邏輯結(jié)構(gòu)設(shè)計(jì)測(cè)試用例,驅(qū)動(dòng)被測(cè)程序運(yùn)行完成的測(cè)試。結(jié)構(gòu)測(cè)試中的一個(gè)重要
13、問(wèn)題是,測(cè)試進(jìn)行到什么程度就達(dá)到要求,可以結(jié)束測(cè)試了,這也就是說(shuō)我們需要給出結(jié)構(gòu)測(cè)試的覆蓋準(zhǔn)則。354.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 36w 1.語(yǔ)句覆蓋 w 2.判定覆蓋w 3.條件覆蓋w 4.判定-條件覆蓋w 5.路徑覆蓋4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 37w 1.語(yǔ)句覆蓋 程序例子:IF(A1)AND(BO)IHEN XXAIF(A2)OR(X1)THEN xx十14.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 38w 1.語(yǔ)句覆蓋 什么是語(yǔ)句覆蓋?什么是語(yǔ)句覆蓋?w 在測(cè)試時(shí),首先設(shè)計(jì)若干個(gè)測(cè)試用例。w 然后運(yùn)行被測(cè)程序,使程序中的每個(gè)可
14、執(zhí)行語(yǔ)句至少執(zhí)行一次。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 39w 1.語(yǔ)句覆蓋 如果選用的測(cè)試用例是: A2 B0 CASEl X3則程序按路徑ace執(zhí)行。這樣該程序段的4個(gè)語(yǔ)句均得到執(zhí)行,從而做到了語(yǔ)句覆蓋。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 40w 1.語(yǔ)句覆蓋 如果選用的測(cè)試用例是: A2 B1 CASE2 X3則程序按路徑bce執(zhí)行。此時(shí)該程序段只執(zhí)行了其中的3個(gè)語(yǔ)句,所以未達(dá)到語(yǔ)句覆蓋。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 41w 1.語(yǔ)句覆蓋 w 從程序中每個(gè)語(yǔ)句都得到執(zhí)行這一點(diǎn)來(lái)看,語(yǔ)句覆蓋的方法似乎能夠比較全面地檢驗(yàn)每一個(gè)語(yǔ)句
15、。w 但即使程序中每個(gè)語(yǔ)句都得到執(zhí)行,也不能保證程序完全正確。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 42w 1.語(yǔ)句覆蓋 假如這一程序段中兩個(gè)判斷的邏輯運(yùn)算有問(wèn)題:(1)第一個(gè)判斷的運(yùn)算符“AND”錯(cuò)成運(yùn)算符“OR”(2)或是第二個(gè)判斷中的運(yùn)算符“OR”錯(cuò)成了運(yùn)算符 “AND”。 這時(shí)仍使用測(cè)試用例CASEl,程序仍將按路徑ace執(zhí)行。這時(shí)雖然也作到了語(yǔ)句覆蓋,卻發(fā)現(xiàn)不了判斷中邏輯運(yùn)算的錯(cuò)誤。 4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 43w 1.語(yǔ)句覆蓋 w 與其它幾種邏輯覆蓋比較起來(lái),語(yǔ)句覆蓋是比較弱的覆蓋原則。w 作到了語(yǔ)句覆蓋可能給人門(mén)一種心理的滿(mǎn)足,以為每
16、個(gè)語(yǔ)句都經(jīng)歷過(guò),似乎可以放心了。其實(shí)這仍然是不十分可靠的。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 44w 1.語(yǔ)句覆蓋 w 語(yǔ)句覆蓋在測(cè)試被測(cè)程序中,除去對(duì)檢查不可執(zhí)行語(yǔ)句有一定作用外,并沒(méi)有排除被測(cè)程序包含錯(cuò)誤的風(fēng)險(xiǎn)。w 其原因是,被測(cè)程序并非語(yǔ)句的無(wú)序堆積,語(yǔ)句之間存在著許多有機(jī)的聯(lián)系。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 45w 2.判定覆蓋什么是判定覆蓋?什么是判定覆蓋?w 按判定覆蓋準(zhǔn)則進(jìn)行測(cè)試是指,設(shè)計(jì)若干測(cè)試用例,運(yùn)行被測(cè)程序,使得程序中每個(gè)判斷的取真分支和取假分支的情況至少經(jīng)歷一次,即判斷的真假值均曾被滿(mǎn)足。w 所以,判定覆蓋又稱(chēng)為分支覆蓋。4.2
17、邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 46w 2.判定覆蓋仍以上述程序段為例,若選用的兩組測(cè)試用例是:CASEl: CASE3 A2 A1 B0 B0 X3 X1則可分別執(zhí)行路徑ace和abd。從而使兩個(gè)判斷的4個(gè)分支c、e和b、d分別得到覆蓋。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 47w 2.判定覆蓋若選用另外兩組測(cè)試用例:CASE4: CASE5 A3 A2 B0 B1 X3 X1則可分別執(zhí)行路徑acd和abe。同樣使兩個(gè)判斷的4個(gè)分支c、e和b、d分別得到覆蓋。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 48w 2.判定覆蓋w 上述兩組測(cè)試用例不僅滿(mǎn)足
18、了判定覆蓋,同時(shí)還做到了語(yǔ)句覆蓋。w 但是,在此程序段中的第2個(gè)判斷條件x1如果錯(cuò)寫(xiě)成x1,使用上述測(cè)試用例CASE5,照樣能按原路徑執(zhí)行(abe),而不影響結(jié)果。w 所以,判定覆蓋只能作到判定覆蓋仍無(wú)法確定判斷內(nèi)部條件的錯(cuò)誤。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 49w 3.條件覆蓋w 什么是條件覆蓋?條件覆蓋是指,設(shè)計(jì)若干測(cè)試用例,執(zhí)行被測(cè)程序以后,要使每個(gè)判斷中每個(gè)條件的可能取值至少滿(mǎn)足一次。 4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 504.2邏輯覆蓋邏輯覆蓋514.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 52w 4.判定-條件覆蓋w 什么是判定-
19、條件覆蓋? 判定條件覆蓋要求設(shè)計(jì)足夠的測(cè)試用例,使得判斷中每個(gè)條件的所有可能至少出現(xiàn)一次,并且每個(gè)判斷本身的判定結(jié)果也至少出現(xiàn)一次。 4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 53w 4.判定-條件覆蓋4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 54w 4.判定-條件覆蓋4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 55w 4.路徑覆蓋w 什么是路徑覆蓋?按路徑覆蓋要求進(jìn)行測(cè)試是指,設(shè)計(jì)足夠多的測(cè)試用例,要求覆蓋程序中所有可能的路徑。 4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 56w 5.路徑覆蓋針對(duì)例中的4條可能路徑 ace記為L(zhǎng)1 abd記為L(zhǎng)2
20、abe記為L(zhǎng)3 acd記為L(zhǎng)44.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 57w 5.路徑覆蓋4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 58w 5.路徑覆蓋4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 59w 5.路徑覆蓋這里所用的程序段非常簡(jiǎn)短。也只有4條路徑。在實(shí)際問(wèn)題中。一個(gè)不太復(fù)雜的程序,其路徑數(shù)都是一個(gè)龐大的數(shù)字,要在測(cè)試中覆蓋這樣多的路徑是無(wú)法實(shí)現(xiàn)的。為解決這一難題只得把覆蓋的路徑數(shù)壓縮到一定限度內(nèi),例如,程序中的循環(huán)體只執(zhí)行了一次。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 60w 5.路徑覆蓋其實(shí),即使對(duì)于路徑數(shù)很有限的程序已經(jīng)作到了路徑
21、覆蓋,仍然不能保證被測(cè)程序的正確性。例如,在上述語(yǔ)句覆蓋一段最后給出的程序段中出現(xiàn)的錯(cuò)誤也不是路徑覆蓋可以發(fā)現(xiàn)的(“or”與“and”的錯(cuò)寫(xiě))。 由此看出,各種結(jié)構(gòu)測(cè)試方法都不能保證程序的正確性。4.2邏輯覆蓋邏輯覆蓋一.幾種常用的邏輯覆蓋測(cè)試方法 61w 5.路徑覆蓋測(cè)試的目的并非要證明程序的正確性,而是要盡可能找出程序中的錯(cuò)誤。確實(shí)并不存在一種十全十美的測(cè)試方法,能夠發(fā)現(xiàn)所有的錯(cuò)誤。想要在有限的時(shí)間內(nèi)用有限的方法來(lái)發(fā)現(xiàn)所有的程序錯(cuò)誤做不到的,這又涉及到了有關(guān)軟件測(cè)試局限性的問(wèn)題。 4.2邏輯覆蓋邏輯覆蓋二.最少測(cè)試用例數(shù)計(jì)算 62為實(shí)現(xiàn)測(cè)試的邏輯覆蓋。必須設(shè)計(jì)足夠多的測(cè)試用例,并使用這些測(cè)
22、試用例執(zhí)行被測(cè)程序,實(shí)施測(cè)試。我們關(guān)心的是,對(duì)某個(gè)具體程序來(lái)說(shuō),至少要設(shè)計(jì)多少測(cè)試用例。這里提供一種估算最少測(cè)試用例數(shù)的方法。 4.2邏輯覆蓋邏輯覆蓋二.最少測(cè)試用例數(shù)計(jì)算 63結(jié)構(gòu)化程序是由3種基本控制結(jié)構(gòu)組成:順序型構(gòu)成串行操作;選擇型構(gòu)成分支操作;重復(fù)型構(gòu)成循環(huán)操作。為了把問(wèn)題簡(jiǎn)化,避免出現(xiàn)測(cè)試用例極多的組合爆炸,把構(gòu)成循環(huán)操作的重復(fù)型結(jié)構(gòu)用選擇結(jié)構(gòu)代替。4.2邏輯覆蓋邏輯覆蓋二.最少測(cè)試用例數(shù)計(jì)算 64例如,圖512表達(dá)了兩個(gè)順序執(zhí)行的分支結(jié)構(gòu)。兩個(gè)分支謂詞P1和P2取不同值時(shí),將分別執(zhí)行a或b及c或d操作。顯然,要測(cè)試這個(gè)小程序,需要至少提供4個(gè)測(cè)試用例才能作到邏輯覆蓋,使得ac、a
23、d、bc及bd操作均得到檢驗(yàn)。4.2邏輯覆蓋邏輯覆蓋二.最少測(cè)試用例數(shù)計(jì)算 65這里的4是圖中第1個(gè)分支謂詞引出的兩個(gè)操作,及第2個(gè)分支謂詞引出的兩個(gè)操作組合起來(lái)而得到的,即224。其中的2是由于兩個(gè)并列的操作,1十12而得到的。 4.2邏輯覆蓋邏輯覆蓋二.最少測(cè)試用例數(shù)計(jì)算 66對(duì)于一般的、更為復(fù)雜的問(wèn)題,估算最少測(cè)試用例數(shù)的原則也是同樣的。該程序中共有9個(gè)分支謂詞。 4.2邏輯覆蓋邏輯覆蓋二.最少測(cè)試用例數(shù)計(jì)算 67盡管這些分支結(jié)構(gòu)交錯(cuò)起來(lái)似乎十分復(fù)雜,很難一眼看出應(yīng)至少需要多少個(gè)測(cè)試用例,但如果仍用上面的方法,也是很容易解決的。注意到該圖可分上下兩層:分支謂詞1的操作域是上層;分支謂詞8
24、的操作域是下層。4.2邏輯覆蓋邏輯覆蓋二.最少測(cè)試用例數(shù)計(jì)算 68這兩層正像前面簡(jiǎn)單例中的P1和P2的關(guān)系一樣。只要分別得到兩層的測(cè)試用例個(gè)數(shù),再將其相乘即得總的測(cè)試用例數(shù)。4.2邏輯覆蓋邏輯覆蓋二.最少測(cè)試用例數(shù)計(jì)算 69(a)所需測(cè)試用例個(gè)數(shù)分別為1十1十1十1十15(b)所需測(cè)試用例個(gè)數(shù)分別為及1十1十13。因而兩層組合,得到5315。整個(gè)程序的上層所需測(cè)試用例數(shù)為l十1516。而下層十分顯然為3。故最后得到整個(gè)程序所需測(cè)試用例數(shù)至少為16348。4.2邏輯覆蓋邏輯覆蓋二.最少測(cè)試用例數(shù)計(jì)算 70這里需要首先考慮較為復(fù)雜的上層結(jié)構(gòu)。當(dāng)謂詞l不滿(mǎn)足時(shí)要作的操作又可進(jìn)一步分解為兩層(a),(
25、b)。4.2邏輯覆蓋邏輯覆蓋二.最少測(cè)試用例數(shù)計(jì)算 71整個(gè)程序的下層所需測(cè)試用例數(shù)為3。所以最后得到整個(gè)程序所需測(cè)試用例數(shù)至少為16348。4.2邏輯覆蓋邏輯覆蓋三.測(cè)試覆蓋準(zhǔn)則72前面介紹的邏輯覆蓋其出發(fā)點(diǎn)似乎是合理的。所謂“覆蓋”,就是想要作到全面,而無(wú)遺漏。但事實(shí)表明,它并不能真的作到無(wú)遺漏。甚至右圖程序段這樣的小問(wèn)題都無(wú)能為力。出現(xiàn)這一情況的原因在于,錯(cuò)誤區(qū)域僅僅在I0這個(gè)點(diǎn)上,即僅當(dāng)I取0時(shí),測(cè)試才能發(fā)現(xiàn)錯(cuò)誤。 4.2邏輯覆蓋邏輯覆蓋三.測(cè)試覆蓋準(zhǔn)則73KAFoster從測(cè)試工作實(shí)踐的教訓(xùn)出發(fā),吸收了計(jì)算機(jī)硬件的測(cè)試原理,提出了一種經(jīng)驗(yàn)型的測(cè)試覆蓋準(zhǔn)則,較好地解決了上述問(wèn)題。Fos
26、rer的經(jīng)驗(yàn)型覆蓋準(zhǔn)則是從硬件的早期測(cè)試方法中得到啟發(fā)的。我們知道,硬件測(cè)試中,對(duì)每一個(gè)門(mén)電路的輸入、輸出測(cè)試都是有額定標(biāo)準(zhǔn)的。通常,電路中一個(gè)門(mén)的錯(cuò)誤常常是“輸出總是0”,或是“輸出總是1”。4.2邏輯覆蓋邏輯覆蓋三.測(cè)試覆蓋準(zhǔn)則74與硬件測(cè)試中的這一情況類(lèi)似,我們常常要重視程序中謂詞的取值,但實(shí)際上它可能比硬件測(cè)試更加復(fù)雜。Foster通過(guò)大量的實(shí)驗(yàn)確定了程序中謂詞最容易出錯(cuò)的部分,得出了一套錯(cuò)誤敏感測(cè)試用例分析ESTCA(ErrorSensitiveTestCasesAnalysis)規(guī)則。4.2邏輯覆蓋邏輯覆蓋三.測(cè)試覆蓋準(zhǔn)則75規(guī)則1對(duì)于A rel B(rel可以是,和)型的分支謂詞
27、,應(yīng)適當(dāng)?shù)剡x擇A與B的值,使得測(cè)試執(zhí)行到該分支語(yǔ)句時(shí),AB,AB和AB的情況分別出現(xiàn)一次。4.2邏輯覆蓋邏輯覆蓋三.測(cè)試覆蓋準(zhǔn)則76規(guī)則2對(duì)于A rel1 C(rel1可以是或是,A是變量,C是常量)型的分支謂詞,當(dāng)rel1為時(shí),應(yīng)適當(dāng)?shù)剡x擇A的值,使: ACM(M是距C最小的機(jī)器容許正數(shù),若A和C均為整型時(shí),M=1)。同樣,當(dāng)rel1為時(shí),應(yīng)適當(dāng)?shù)剡x擇A,使: AC十M 4.2邏輯覆蓋邏輯覆蓋三.測(cè)試覆蓋準(zhǔn)則77規(guī)則3對(duì)外部輸入變量賦值,使其在每一測(cè)試用例中均有不同的值與符號(hào),并與同一組測(cè)試用例中其它變量的值與符號(hào)不一致。 4.2邏輯覆蓋邏輯覆蓋三.測(cè)試覆蓋準(zhǔn)則78顯然,上述規(guī)則1是為了檢測(cè)
28、rel的錯(cuò)誤;規(guī)則2是為了檢測(cè)“差一”之類(lèi)的錯(cuò)誤(如本應(yīng)是“IF A1”而錯(cuò)成“IF A0”);規(guī)則3則是為了檢測(cè)程序語(yǔ)句中的錯(cuò)誤(如應(yīng)引用一變量而錯(cuò)成引用一常量)。 4.2邏輯覆蓋邏輯覆蓋三.測(cè)試覆蓋準(zhǔn)則79上述三規(guī)則并不是完備的,但在普通程序的測(cè)試中確是有效的。原因在于規(guī)則本身針對(duì)著程序編寫(xiě)人員容易發(fā)生的錯(cuò)誤,或是圍繞著發(fā)生錯(cuò)誤的頻繁區(qū)域,從而提高了發(fā)現(xiàn)錯(cuò)誤的命中率。 4.3路徑分析路徑分析 l什么是路徑分析什么是路徑分析?分析程序中的路徑是指:檢驗(yàn)程序從入口開(kāi)始,執(zhí)行過(guò)程中經(jīng)歷的各個(gè)語(yǔ)句,直到出口。804.3路徑分析路徑分析 l路徑分析是白盒測(cè)試最為典型的問(wèn)題。l著眼于路徑分析的測(cè)試可稱(chēng)
29、為路徑測(cè)試。l完成路徑測(cè)試的理想情況是做到路徑覆蓋。814.3路徑分析路徑分析 l從上節(jié)的討論中我們已經(jīng)看出,對(duì)于比較簡(jiǎn)單的小程序?qū)崿F(xiàn)路徑覆蓋是可能做到的。l但如果程序中出現(xiàn)多個(gè)判斷和多個(gè)循環(huán),可能的路徑數(shù)目將會(huì)急劇增長(zhǎng),以至實(shí)現(xiàn)路徑覆蓋不可能做到。824.3路徑分析路徑分析 一、程序路徑表達(dá)式1路徑的弧序列表示及節(jié)點(diǎn)序列表示l如果圖51(b)中的1號(hào)節(jié)點(diǎn)為程序入口,5號(hào)節(jié)點(diǎn)為程序出口,這一程序中可能的路徑就有許多個(gè)。834.3路徑分析路徑分析 1路徑的弧序列表示及節(jié)點(diǎn)序列表示l在此列舉4條路徑,分別以弧序列表示及節(jié)點(diǎn)序列表示。844.3路徑分析路徑分析 2路徑表達(dá)式(pathexpressi
30、on)l路徑表達(dá)式作為一種表達(dá)式,其運(yùn)算對(duì)象指的是控制流圖中的弧。路徑表達(dá)式中引入兩個(gè)運(yùn)算:l乘運(yùn)算l加運(yùn)算854.3路徑分析路徑分析 2路徑表達(dá)式(pathexpression)乘運(yùn)算乘運(yùn)算l弧a和弧b相乘,所得的乘積為ab,它表示先沿弧a,再沿弧b所經(jīng)歷的路段。l例如,acde是四個(gè)弧的乘積,它表示沿著a、c、d和e的順序所經(jīng)歷的路段。864.3路徑分析路徑分析 2路徑表達(dá)式(pathexpression) 加運(yùn)算加運(yùn)算l弧a與弧b相加,其和a+b表示兩弧是或的關(guān)系。l如圖中節(jié)點(diǎn)2至節(jié)點(diǎn)3有兩個(gè)弧相聯(lián),是并行的路段。874.3路徑分析路徑分析 2路徑表達(dá)式(pathexpression)l
31、 可以看出在圖所表示的控制流中,共有可以看出在圖所表示的控制流中,共有4條路徑:條路徑:eacf,eadf,ebcf和和ebdf。l這這4條路徑是并行的或的關(guān)系,可以用加運(yùn)條路徑是并行的或的關(guān)系,可以用加運(yùn)算聯(lián)接它們,從而得到完整的路徑表達(dá)式:算聯(lián)接它們,從而得到完整的路徑表達(dá)式: eacf+ +eadf+ +ebcf+ +ebdf 884.3路徑分析路徑分析 2路徑表達(dá)式(pathexpression)l還可直接從圖中看出,既然弧還可直接從圖中看出,既然弧a和弧和弧b是并是并行的,弧行的,弧c和弧和弧d也是并行的。它們的頭尾也是并行的。它們的頭尾又分別與弧又分別與弧e和弧和弧f相聯(lián)。相聯(lián)。l
32、按上述兩種運(yùn)算的定義可寫(xiě)出路徑表達(dá)式:按上述兩種運(yùn)算的定義可寫(xiě)出路徑表達(dá)式: e(a+ +b)(c十十d)f 894.3路徑分析路徑分析 2路徑表達(dá)式(pathexpression)l不難發(fā)現(xiàn),這一表達(dá)式正是前面不難發(fā)現(xiàn),這一表達(dá)式正是前面4項(xiàng)之和表達(dá)式的因子提出形式。項(xiàng)之和表達(dá)式的因子提出形式。Eacf+ +eadf+ +ebcf+ +ebdfe(a+ +b)(c十十d)f 904.3路徑分析路徑分析 2路徑表達(dá)式(pathexpression)914.3路徑分析路徑分析 2路徑表達(dá)式(pathexpression)924.3路徑分析路徑分析 二、程序中路徑數(shù)的計(jì)算程序中到底有多少路徑程序中
33、到底有多少路徑?l這個(gè)問(wèn)題表面上看似乎容易回答,其實(shí)不然。程序中所表示的程序路徑數(shù)與循環(huán)的次數(shù)有關(guān)。934.3路徑分析路徑分析 二、程序中路徑數(shù)的計(jì)算l右圖如果循環(huán)體最多執(zhí)行三次,那么路徑數(shù)為3。然而,當(dāng)程序中既有循環(huán)又有分支出現(xiàn)時(shí),其路徑數(shù)并不容易直覺(jué)地從控制流圖中看出。944.3路徑分析路徑分析 二、程序中路徑數(shù)的計(jì)算l1.路徑表達(dá)式計(jì)算假定所討論的程序已經(jīng)得到了它的路徑表達(dá)式,則可把其中的所有弧均代以數(shù)值“1”,然后依表達(dá)式的乘法和加法運(yùn)算,所得數(shù)值即為該程序的路徑數(shù)。954.3路徑分析路徑分析 二、程序中路徑數(shù)的計(jì)算l1.路徑表達(dá)式計(jì)算l例如,圖所給的程序,其路徑表達(dá)式為e(a十b)(
34、c十d)f。l把弧a,b,e,d,e,f均代人數(shù)值1,計(jì)算表達(dá)式的值即為路徑數(shù):N1(1十1)(1十1)1=4964.3路徑分析路徑分析 二、程序中路徑數(shù)的計(jì)算l1.路徑表達(dá)式計(jì)算l再以右圖為例,如果暫不考慮循環(huán),那么從節(jié)點(diǎn)1到節(jié)點(diǎn)4只有兩條路徑,L=a(b十cd)el代入數(shù)值“1”,得到:Ll(1十l1)1=2974.3路徑分析路徑分析 二、程序中路徑數(shù)的計(jì)算l1.路徑表達(dá)式計(jì)算l再看循環(huán),假定只考慮循環(huán)次數(shù)小于3的情況。l路徑表達(dá)式為:L+LfL十LfLfLL(1十fL十(fL)2)其中L表示循環(huán)體。984.3路徑分析路徑分析 二、程序中路徑數(shù)的計(jì)算l1.路徑表達(dá)式計(jì)算l此式中f代人“1”
35、,L代入“2”,則計(jì)算出路徑數(shù)為:2(1十12十(12)2)14994.3路徑分析路徑分析 二、程序中路徑數(shù)的計(jì)算l2.程序復(fù)雜度計(jì)算l我們知道,程序中含有的路徑數(shù)和程序的復(fù)雜性有著直接的關(guān)系。l程序越復(fù)雜,它的路徑數(shù)越多。1004.3路徑分析路徑分析 二、程序中路徑數(shù)的計(jì)算l2.程序復(fù)雜度計(jì)算如何度量程序復(fù)雜性?l假定不考慮程序控制流圖中,聯(lián)結(jié)各節(jié)點(diǎn)之間弧的方向,控制流圖便成為由節(jié)點(diǎn)和邊構(gòu)成的無(wú)向圖。我們把無(wú)向圖中任何兩個(gè)節(jié)點(diǎn)之間至少存在一條通路的圖稱(chēng)為連通圖(connectedgraph)。1014.3路徑分析路徑分析 二、程序中路徑數(shù)的計(jì)算l2.程序復(fù)雜度計(jì)算如何度量程序復(fù)雜性?lMcCabe給出了程序結(jié)構(gòu)復(fù)雜性計(jì)算公式。lMcCabe提出,對(duì)程序控制流圖的連通圖G,其復(fù)雜度V(G)可按以下公式計(jì)算:V(G)=En+2其中,E為圖G中的邊數(shù),n為圖G中的節(jié)點(diǎn)數(shù)。1024.3路徑分析路徑分析 二、程序中路徑數(shù)的計(jì)算l2.程序復(fù)雜度計(jì)算l程序結(jié)構(gòu)復(fù)雜性計(jì)算公式。V(G)=En+21034.4 程序插裝程序插裝 程序插裝(ProgramInstrumentation)是一種基本的測(cè)試手
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO 609:2025 EN Coal and coke - Determination of carbon and hydrogen - High temperature combustion method
- 義務(wù)教育課程標(biāo)準(zhǔn)解讀與思考
- 電力負(fù)荷控制員練習(xí)題庫(kù)與參考答案解析
- 12月病理學(xué)模擬試題(含參考答案解析)
- 木材化學(xué)成分在生物醫(yī)學(xué)工程中的應(yīng)用考核試卷
- 紡織品的綠色染整工藝創(chuàng)新考核試卷
- 肥料制造的農(nóng)田耕作與機(jī)械化作業(yè)考核試卷
- 2025年中子、電子及Γ輻照裝置合作協(xié)議書(shū)
- 認(rèn)證認(rèn)可ISO設(shè)施管理體系考核試卷
- 四個(gè)精某著名企業(yè)激勵(lì)故事
- 家長(zhǎng)講堂:法制主題教育
- 腫瘤科進(jìn)修心得體會(huì)護(hù)理
- 第五單元 生物與環(huán)境 大單元教學(xué)設(shè)計(jì)-2023-2024學(xué)年科學(xué)四年級(jí)下冊(cè)蘇教版
- 生長(zhǎng)激素在臨床中的應(yīng)用
- 武漢市2025屆高中畢業(yè)生二月調(diào)模擬卷試題
- 衛(wèi)生監(jiān)督信息員培訓(xùn)課件
- 杜邦分析法公式
- 五年級(jí)下冊(cè)勞動(dòng)《編花籃》課件
- 貴州省2025屆高考英語(yǔ)二模試卷含解析
- 2024年公務(wù)員考試申論課件:全面掌握答題技巧
- 2024年大唐集團(tuán)招聘筆試試題及答案-
評(píng)論
0/150
提交評(píng)論