




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
白盒測試及其用例的設計4.1白盒測試方法為什麼要進行白盒測試?如果所有軟體錯誤的根源都可以追溯到某個唯一原因,那麼問題就簡單了。然而,事實上一個bug常常是由多個因素共同導致的,如下圖所示。Return假設此時開發工作已結束,程式送交到測試組,沒有人知道代碼中有一個潛在的被0除的錯誤。若測試組採用的測試用例的執行路徑沒有同時經過x=0和y=5/x進行測試,顯然測試工作似乎非常完善,測試用例覆蓋了所有執行語句,也沒有被0除的錯誤發生。白盒測試方法(續)白盒測試也稱結構測試或邏輯驅動測試,是針對被測單元內部是如何進行工作的測試。它根據程式的控制結構設計測試用例,主要用於軟體或程式驗證。白盒測試法檢查程式內部邏輯結構,對所有邏輯路徑進行測試,是一種窮舉路徑的測試方法。但即使每條路徑都測試過了,仍然可能存在錯誤。因為:窮舉路徑測試無法檢查出程式本身是否違反了設計規範,即程式是否是一個錯誤的程式。窮舉路徑測試不可能查出程式因為遺漏路徑而出錯。窮舉路徑測試發現不了一些與數據相關的錯誤。白盒測試方法(續)採用白盒測試方法必須遵循以下幾條原則,才能達到測試的目的:保證一個模組中的所有獨立路徑至少被測試一次。所有邏輯值均需測試真(true)和假(false)兩種情況。檢查程式的內部數據結構,保證其結構的有效性。在上下邊界及可操作範圍內運行所有迴圈。白盒測試主要是檢查程式的內部結構、邏輯、迴圈和路徑。常用測試用例設計方法有:邏輯覆蓋法(邏輯驅動測試)基本路徑測試方法4.2白盒測試的基本概念4.2.1控制流圖4.2.2環形複雜度4.2.3圖矩陣Return4.2.1控制流圖控制流圖(可簡稱流圖)是對程式流程圖進行簡化後得到的,它可以更加突出的表示程式控制流的結構。控制流圖中包括兩種圖形符號:節點和控制流線。節點由帶標號的圓圈表示,可代表一個或多個語句、一個處理框序列和一個條件判定框(假設不包含複合條件)。控制流線由帶箭頭的弧或線表示,可稱為邊。它代表程式中的控制流。對於複合條件,則可將其分解為多個單個條件,並映射成控制流圖。常見結構的控制流圖常見結構的控制流圖其中,包含條件的節點被稱為判定節點(也叫謂詞節點),由判定節點發出的邊必須終止於某一個節點,由邊和節點所限定的範圍被稱為區域。4.2.2環形複雜度環形複雜度也稱為圈複雜度,它是一種為程式邏輯複雜度提供定量尺度的軟體度量。環形複雜度的應用——可以將環形複雜度用於基本路徑方法,它可以提供:程式基本集的獨立路徑數量;確保所有語句至少執行一次的測試數量的上界。獨立路徑是指程式中至少引入了一個新的處理語句集合或一個新條件的程式通路。採用流圖的術語,即獨立路徑必須至少包含一條在本次定義路徑之前不曾用過的邊。測試可以被設計為基本路徑集的執行過程,但基本路徑集通常並不唯一。
計算環形複雜度的方法環形複雜度以圖論為基礎,為我們提供了非常有用的軟體度量。可用如下三種方法之一來計算環形複雜度:控制流圖中區域的數量對應於環形複雜度。給定控制流圖G的環形複雜度—V(G),定義為V(G)=E-N+2
其中,E是控制流圖中邊的數量,N是控制流圖中的節點數量。給定控制流圖G的環形複雜度—V(G),也可定義為V(G)=P+1
其中,P是控制流圖G中判定節點的數量。4.2.3圖矩陣圖矩陣是控制流圖的矩陣表示形式。圖矩陣是一個方形矩陣,其維數等於控制流圖的節點數。矩陣中的每列和每行都對應於標識的節點,矩陣元素對應於節點間的邊。通常,控制流圖中的結點用數字標識,邊則用字母標識。如果在控制流圖中從第i個結點到第j個結點有一個標識為x的邊相連接,則在對應圖矩陣的第i行第j列有一個非空的元素x。習題根據左圖給出的程式流程圖,完成以下要求:(1)畫出相應的控制流圖。(2)計算環形複雜度。(3)給出相應的圖矩陣。(4)找出程式的獨立路徑集合。4.3覆蓋測試4.3.1測試覆蓋率4.3.2邏輯覆蓋法4.3.3面向對象的覆蓋4.3.4測試覆蓋準則Return4.3.1測試覆蓋率測試覆蓋率:用於確定測試所執行到的覆蓋項的百分比。其中的覆蓋項是指作為測試基礎的一個入口或屬性,比如語句、分支、條件等。測試覆蓋率可以表示出測試的充分性,在測試分析報告中可以作為量化指標的依據,測試覆蓋率越高效果越好。但覆蓋率不是目標,只是一種手段。測試覆蓋率包括功能點覆蓋率和結構覆蓋率:功能點覆蓋率大致用於表示軟體已經實現的功能與軟體需要實現的功能之間的比例關係。結構覆蓋率包括語句覆蓋率、分支覆蓋率、迴圈覆蓋率、路徑覆蓋率等等。4.3.2邏輯覆蓋法根據覆蓋目標的不同,邏輯覆蓋又可分為語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、組合覆蓋和路徑覆蓋。語句覆蓋:選擇足夠多的測試用例,使得程式中的每個可執行語句至少執行一次。判定覆蓋:通過執行足夠的測試用例,使得程式中的每個判定至少都獲得一次“真”值和“假”值,也就是使程式中的每個取“真”分支和取“假”分支至少均經歷一次,也稱為“分支覆蓋”。條件覆蓋:設計足夠多的測試用例,使得程式中每個判定包含的每個條件的可能取值(真/假)都至少滿足一次。邏輯覆蓋法(續)判定/條件覆蓋:設計足夠多的測試用例,使得程式中每個判定包含的每個條件的所有情況(真/假)至少出現一次,並且每個判定本身的判定結果(真/假)也至少出現一次。——滿足判定/條件覆蓋的測試用例一定同時滿足判定覆蓋和條件覆蓋。組合覆蓋:通過執行足夠的測試用例,使得程式中每個判定的所有可能的條件取值組合都至少出現一次。
——滿足組合覆蓋的測試用例一定滿足判定覆蓋、條件覆蓋和判定/條件覆蓋。路徑覆蓋:設計足夠多的測試用例,要求覆蓋程式中所有可能的路徑。邏輯覆蓋法(續)組合覆蓋判斷/條件覆蓋判斷覆蓋條件覆蓋語句覆蓋邏輯覆蓋法(續)voidDoWork(intx,inty,intz){intk=0,j=0;if((x>3)&&(z<10)){k=x*y-1;j=sqrt(k);}//語句塊1if((x==4)||(y>5)){j=x*y+10;}//語句塊2
j=j%3;//語句塊3}邏輯覆蓋法(續)X>3&&z<10執行語句塊1執行語句塊2X==4||y>5執行語句塊3FFTTabdce語句覆蓋要實現DoWork函數的語句覆蓋,只需設計一個測試用例就可以覆蓋程式中的所有可執行語句。測試用例輸入為:{x=4、y=5、z=5}程式執行的路徑是:abd分析:語句覆蓋可以保證程式中的每個語句都得到執行,但發現不了判定中邏輯運算的錯誤,即它並不是一種充分的檢驗方法。例如在第一個判定((x>3)&&(z<10))中把“&&”錯誤的寫成了“||”,這時仍使用該測試用例,則程式仍會按照流程圖上的路徑abd執行。可以說語句覆蓋是最弱的邏輯覆蓋準則。判定覆蓋要實現DoWork函數的判定覆蓋,需要設計兩個測試用例。測試用例的輸入為:{x=4、y=5、z=5};{x=2、y=5、z=5}程式執行的路徑分別是:abd;ace分析:上述兩個測試用例不僅滿足了判定覆蓋,同時還做到語句覆蓋。從這點看似乎判定覆蓋比語句覆蓋更強一些,但仍然無法確定判定內部條件的錯誤。例如把第二個判定中的條件y>5錯誤寫為y<5,使用上述測試用例,照樣能按原路徑執行而不影響結果。因此,需要有更強的邏輯覆蓋準則去檢驗判定內的條件。判定覆蓋(續)16352789410說明:以上僅考慮了兩出口的判斷,我們還應把判定覆蓋準則擴充到多出口判斷(如Case語句)的情況。因此,判定覆蓋更為廣泛的含義應該是使得每一個判定獲得每一種可能的結果至少一次。條件覆蓋在實際程式代碼中,一個判定中通常都包含若干條件。條件覆蓋的目的是設計若干測試用例,在執行被測程式後,要使每個判定中每個條件的可能值至少滿足一次。對DoWork函數的各個判定的各種條件取值加以標記。對於第一個判定((x>3)&&(z<10)): 條件x>3取真值記為T1,取假值記為-T1
條件z<10取真值記為T2,取假值記為-T2對於第二個判定((x==4)||(y>5)):條件x==4取真值記為T3,取假值記為-T3條件y>5取真值記為T4,取假值記為-T4條件覆蓋(續)根據條件覆蓋的基本思想,要使上述4個條件可能產生的8種情況至少滿足一次,設計測試用例如下:測試用例執行路徑覆蓋條件覆蓋分支x=4、y=6、z=5abdT1、T2、T3、T4bdx=2、y=5、z=15ace-T1、-T2、-T3、-T4ce分析:上面這組測試用例不但覆蓋了4個條件的全部8種情況,而且將兩個判定的4個分支b、c、d、e也同時覆蓋了,即同時達到了條件覆蓋和判定覆蓋。條件覆蓋(續)說明:雖然前面的一組測試用例同時達到了條件覆蓋和判定覆蓋,但是,並不是說滿足條件覆蓋就一定能滿足判定覆蓋。如果設計了下表中的這組測試用例,則雖然滿足了條件覆蓋,但只是覆蓋了程式中第一個判定的取假分支c和第二個判定的取真分支d,不滿足判定覆蓋的要求。測試用例執行路徑覆蓋條件覆蓋分支x=2、y=6、z=5acd-T1、T2、-T3、T4cdx=4、y=5、z=15acdT1、-T2、T3、-T4cd判定/條件覆蓋判定/條件覆蓋實際上是將判定覆蓋和條件覆蓋結合起來的一種方法,即:設計足夠的測試用例,使得判定中每個條件的所有可能取值至少滿足一次,同時每個判定的可能結果也至少出現一次。根據判定/條件覆蓋的基本思想,只需設計以下兩個測試用例便可以覆蓋4個條件的8種取值以及4個判定分支。測試用例執行路徑覆蓋條件覆蓋分支x=4、y=6、z=5abdT1、T2、T3、T4bdx=2、y=5、z=15ace-T1、-T2、-T3、-T4ce判定/條件覆蓋(續)分析:從表面上看,判定/條件覆蓋測試了各個判定中的所有條件的取值,但實際上,編譯器在檢查含有多個條件的邏輯運算式時,某些情況下的某些條件將會被其他條件所掩蓋。因此,判定/條件覆蓋也不一定能夠完全檢查出邏輯運算式中的錯誤。例如:對於第一個判定(x>3)&&(z<10)來說,必須x>3和z<10這兩個條件同時滿足才能確定該判定為真。如果x>3為假,則編譯器將不再檢查z<10這個條件,那麼即使這個條件有錯也無法被發現。對於第二個判定(x==4)||(y>5)來說,若條件x==4滿足,就認為該判定為真,這時將不會再檢查y>5,那麼同樣也無法發現這個條件中的錯誤。組合覆蓋組合覆蓋的目的是要使設計的測試用例能覆蓋每一個判定的所有可能的條件取值組合。對DoWork函數中的各個判定的條件取值組合加以標記:1、x>3,z<10記做T1T2,第一個判定的取真分支2、x>3,z>=10記做T1-T2,第一個判定的取假分支3、x<=3,z<10記做-T1T2,第一個判定的取假分支4、x<=3,z>=10記做-T1-T2,第一個判定的取假分支5、x==4,y>5記做T3T4,第二個判定的取真分支6、x==4,y<=5記做T3-T4,第二個判定的取真分支7、x!=4,y>5記做-T3T4,第二個判定的取真分支8、x!=4,y<=5記做-T3-T4,第二個判定的取假分支組合覆蓋(續)根據組合覆蓋的基本思想,設計測試用例如下:測試用例執行路徑覆蓋條件覆蓋組合號x=4、y=6、z=5abdT1、T2、T3、T41和5x=4、y=5、z=15acdT1、-T2、T3、-T42和6x=2、y=6、z=5acd-T1、T2、-T3、T43和7x=2、y=5、z=15ace-T1、-T2、-T3、-T44和8分析:上面這組測試用例覆蓋了所有8種條件取值的組合,覆蓋了所有判定的真假分支,但是卻丟失了一條路徑abe。路徑覆蓋前面提到的5種邏輯覆蓋都未涉及到路徑的覆蓋。事實上,只有當程式中的每一條路徑都受到了檢驗,才能使程式受到全面檢驗。路徑覆蓋的目的就是要使設計的測試用例能覆蓋被測程式中所有可能的路徑。根據路徑覆蓋的基本思想,在滿足組合覆蓋的測試用例中修改其中一個測試用例,則可以實現路徑覆蓋:測試用例執行路徑覆蓋條件x=4、y=6、z=5abdT1、T2、T3、T4x=4、y=5、z=15acdT1、-T2、T3、-T4x=2、y=5、z=15ace-T1、-T2、-T3、-T4x=5、y=5、z=5abeT1、T2、-T3、-T4路徑覆蓋(續)分析:雖然前面一組測試用例滿足了路徑覆蓋,但並沒有覆蓋程式中所有的條件組合(丟失了組合3和7),即滿足路徑覆蓋的測試用例並不一定滿足組合覆蓋。說明:對於比較簡單的小程式,實現路徑覆蓋是可能做到的。但如果程式中出現較多判斷和較多迴圈,可能的路徑數目將會急劇增長,要在測試中覆蓋所有的路徑是無法實現的。為了解決這個難題,只有把覆蓋路徑數量壓縮到一定的限度內,如程式中的循環體只執行一次。在實際測試中,即使對於路徑數很有限的程式已經做到路徑覆蓋,仍然不能保證被測試程式的正確性,還需要採用其他測試方法進行補充。習題為以下流程圖所示的程式段設計一組測試用例,要求分別滿足語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、組合覆蓋和路徑覆蓋。X>8ANDY>5X>0ORY>0引用語句1引用語句2NYNYX>16ORY>10引用語句3NY4.3.3面向對象的覆蓋繼承上下文覆蓋由於傳統的結構化度量沒有考慮面向對象的一些特性(如多態、繼承和封裝等),所以在面向對象領域,傳統的結構化覆蓋必須被加強,以滿足面向對象特性。繼承上下文覆蓋考慮在每個類的上下文內獲得的覆蓋率級別。它是擴展到面向對象領域裏的一種覆蓋率度量方法,用於度量在系統中的多態調用被測試得多好。繼承上下文定義將基類上下文內例行程式的執行作為獨立於繼承類上下文內例行程式的執行。同樣,它們在考慮繼承類上下文內例行程式的執行也獨立於基類上下文內例行程式的執行。為了獲得100%繼承上下文覆蓋,代碼必須在每個適當的上下文內被完全執行。面向對象的覆蓋(續)基於狀態的上下文覆蓋在絕大多數面向對象的系統中存在這樣的一些類:這些類的對象可以存在於眾多不同狀態中的任何一種,並且由於類的行為依賴於狀態,每個類的行為在每個可能的狀態中其性質是不同的。基於狀態的上下文覆蓋對應於被測類對象的潛在狀態。這樣基於狀態的上下文覆蓋把一個狀態上下文內的一個例行程式的執行認為是獨立於另一個狀態內相同例行程式的執行。為了達到100%的基於狀態的上下文覆蓋,例行程式必須在每個適當的上下文(狀態)內被執行。4.3.4測試覆蓋準則邏輯覆蓋的出發點是合理的、完善的。所謂“覆蓋”,就是想要做到全面而無遺漏,但邏輯覆蓋並不能真正做到無遺漏。例如:我們不小心將前面提到的程式段中的if(x>3&&Z<10){……}
錯寫成if(x>=3&&Z<10){……}
按照我們前面設計的測試用例(x的值取2或4)來看,邏輯覆蓋對這樣的小問題都無能為力。分析出現這一情況的原因在於:錯誤區域僅僅在x=3這個點上,即僅當x的值取3時,測試才能發現錯誤。面對這類情況,我們應該從中吸取的教訓是測試工作要有重點,要多針對容易發生問題的地方設計測試用例。測試覆蓋準則(續)ESTCA覆蓋準則:在容易發生問題的地方設計測試用例,即重視程式中謂詞(條件判斷)的取值。ESTCA覆蓋準則是一套錯誤敏感用例分析規則。這一規則雖然並不完備,但在普通程式中卻是有效的。原因在於這是一種經驗型的覆蓋準則,規則本身針對了程式編寫人員容易發生的錯誤,或是圍繞著發生錯誤的頻繁區域,從而提高了發現錯誤的命中率。具體規則如下:
[規則1]對於ArelB型(rel可以是<、=或>)的分支謂詞,應適當的選擇A與B的值,使得測試執行到該分支語句時,A<B、A=B、A>B的情況分別出現一次。——這是為了檢測邏輯符號寫錯的情況,如將“A<B”錯寫為“A>B”。測試覆蓋準則(續)[規則2]對於ArelC型(rel可以是>或<,A是變數,C是常量)的分支謂詞:當rel為<時,應適當的選擇A的值,使A=C-M(M是距C最小的機器容許正數,若A和C都為正整數時,M=1);當rel為>時,應適當的選擇A的值,使A=C+M。——這是為了檢測“差1”之類的錯誤,如“A>1”錯寫成“A>0”。[規則3]對外部輸入變數賦值,使其在每一個測試用例中均有不同的值與符號,並與同一組測試用例中其他變數的值與符號不同。——這是為了檢測程式語句中的錯誤,如應該引用某一變數而錯成引用另一個常量。測試覆蓋準則(續)關於LCSAJLCSAJ(LinearCodeSequenceandJump)的字面含義是線性代碼序列與跳轉。在程式中,一個LCSAJ是一組順序執行的代碼,以控制跳轉為其結束點。LCSAJ的起點是根據程式本身決定的。它的起點可以是程式第一行或轉移語句的入口點,或是控制流可跳達的點。如果有幾個LCSAJ首尾相接,且第一個LCSAJ起點為程式起點,最後一個LCSAJ終點為程式終點,這樣的LCSAJ串就組成了程式的一條路徑(LCSAJ路徑)。一條LCSAJ程式路徑可能是由2個、3個或多個LCSAJ組成的。測試覆蓋準則(續)基於LCSAJ與路徑的關係,提出了層次LCSAJ覆蓋準則。它是一個分層的覆蓋準則,可以概括的描述為:第一層—語句覆蓋。第二層—分支覆蓋。第三層—LCSAJ覆蓋,即程式中的每一個LCSAJ都至少在測試中經歷過一次。第四層—兩兩LCSAJ覆蓋,即程式中的每兩個相連的LCSAJ組合起來在測試中都要經歷一次。第n+2層—每n個首尾相連的LCSAJ組合在測試中都要經歷一次。在實施測試時,若要實現上述的層次LCSAJ覆蓋,需要產生被測程式的所有LCSAJ。測試覆蓋準則(續)例:找出前面DoWork函數的所有LCSAJ和LCSAJ路徑。LCSAJ(5個):(1)intk=0,j=0;if((x>3)&&(z<10))
(2)k=x*y-1;j=sqrt(k);if((x==4)||(y>5))
(3)if((x==4)||(y>5))
(4)j=x*y+10;j=j%3
(5)j=j%3LCSAJ路徑(4條):(1)-(2)-(4)(1)-(2)-(5)
(1)-(3)-(4)(1)-(3)-(5)4.4路徑測試4.4.1路徑運算式4.4.2基本路徑測試方法4.4.3迴圈測試方法4.4.4產生測試用例Return4.4.1路徑運算式為了滿足路徑覆蓋,必須首先確定具體的路徑以及路徑的個數。我們通常採用控制流圖的邊(弧)序列和節點序列表示某一條具體路徑,更為概括的表示方法為:(1)弧a和弧b相乘,表示為ab,它表明路徑是先經歷弧a,接著再經歷弧b,弧a和弧b是先後相接的。(2)弧a和弧b相加,表示為a+b,它表明兩條弧是“或”的關係,是並行的路段。路徑數的計算:在路徑運算式中,將所有弧均以數值1来代替,再进行表达式的相乘和相加运算,最后得到的数值即为该程序的路径数。4.4.2基本路徑測試方法路徑測試就是從一個程式的入口開始,執行所經歷的各個語句的完整過程。從廣義的角度講,任何有關路徑分析的測試都可以被稱為路徑測試。完成路徑測試的理想情況是做到路徑覆蓋,但對於複雜性大的程式要做到所有路徑覆蓋(測試所有可執行路徑)是不可能的。在不能做到所有路徑覆蓋的前提下,如果某一程式的每一個獨立路徑都被測試過,那麼可以認為程式中的每個語句都已經檢驗過了,即達到了語句覆蓋。這種測試方法就是通常所說的基本路徑測試方法。
基本路徑測試方法(續)基本路徑測試方法是在控制流圖的基礎上,通過分析控制結構的環形複雜度,導出執行路徑的基本集,再從該基本集設計測試用例。基本路徑測試方法包括以下4個步驟:(1)畫出程式的控制流圖。(2)計算程式的環形複雜度,導出程式基本路徑集中的獨立路徑條數,這是確定程式中每個可執行語句至少執行一次所必須的測試用例數目的上界。(3)導出基本路徑集,確定程式的獨立路徑。(4)根據(3)中的獨立路徑,設計測試用例的輸入數據和預期輸出。基本路徑測試方法(續)voidSort(intiRecordNum,intiType)1{2intx=0;3inty=0;4while(iRecordNum-->0)5{6 If(iType==0)7 x=y+2;8else9 If(iType==1)10x=y+10;11else12x=y+20;13}14}基本路徑測試方法(續)畫出控制流圖:如右圖所示計算環形複雜度:
10(條邊)-8(個節點)+2=4導出獨立路徑(用語句編號表示)路徑1:4→14路徑2:4→6→7→14路徑3:4→6→9→10→13→4→14路徑4:4→6→9→12→13→4→14467910121314基本路徑測試方法(續)輸入數據預期輸出測試用例1irecordnum=0itype=0x=0y=0測試用例2irecordnum=1itype=0x=0y=0測試用例3irecordnum=1itype=1x=10y=0測試用例4irecordnum=1itype=2x=0y=20設計測試用例:習題1、使用基本路徑測試方法,為以下程式段設計測試用例。voidDo(intX,intA,intB){1if((A>1)&&(B=0))2X=X/A;3if((A=2)||(X>1))4X=X+1;5}2、在三角形問題中,要求輸入三個邊長:a,b,c。當三邊不可能構成三角形時提示錯誤,可構成三角形時計算三角形的周長。若是等腰三角形列印“等腰三角形”,若是等邊三角形,則列印“等邊三角形”。畫出相應的程式流程圖,並採用基本路徑測試方法為該程式設計測試用例。4.4.3迴圈測試方法從本質上說,迴圈測試的目的就是檢查迴圈結構的有效性。通常,迴圈可以劃分為簡單迴圈、嵌套迴圈、串接迴圈和非結構迴圈4類。(1)測試簡單迴圈。設其迴圈的最大次數為n,可採用以下測試集:跳過整個迴圈;只迴圈一次;只迴圈兩次;迴圈m次,其中m<n;分別迴圈n-1、n和n+1次。迴圈測試方法(續)(2)測試嵌套迴圈。如果將簡單迴圈的測試方法用於嵌套迴圈,可能的測試次數會隨嵌套層數成幾何級數增加。此時可採用以下辦法減少測試次數:測試從最內層迴圈開始,所有外層迴圈次數設置為最小值;對最內層迴圈按照簡單迴圈的測試方法進行;由內向外進行下一個迴圈的測試,本層迴圈的所有外層迴圈仍取最小值,而由本層迴圈嵌套的迴圈取某些“典型”值;重複上一步的過程,直到測試完所有迴圈。(3)測試串接迴圈。若串接的各個迴圈相互獨立,則可分別採用簡單迴圈的測試方法;否則採用嵌套迴圈的測試方法。(4)對於非結構迴圈這種情況,無法進行測試,需要按結構化程式設計的思想將程式結構化後,再進行測試。Z路徑覆蓋下的迴圈測試方法Z路徑覆蓋是路径覆盖的一种变体,它是將程式中的迴圈結構簡化為選擇結構的一种路径覆盖。迴圈簡化的目的是限制迴圈的次數,無論迴圈的形式和循環體實際執行的次數,簡化後的迴圈測試只考慮執行循環體一次和零次(不執行)兩種情況,即考慮執行時進入循環體一次和跳過循環體這兩種情況。在迴圈簡化的思路下,迴圈與判定分支的效果是一樣的,即:迴圈要麼執行、要麼跳過。4.4.4產生測試用例在實踐中,除了前面給出的各種方法外,通常還可以採用以下三種方法來補充設計測試用例:(1)通過非路經分析得到測試用例——這種方法得到的測試用例是在應用系統本身的實踐中提供的,基本上是測試人員憑工作經驗的得到,甚至是猜測得到的。(2)尋找尚未測試過的路徑並生成相應的測試用例——這種方法需要窮舉被測程式的所有路徑,並與前面已測試路徑進行對比。(3)通過指定特定路徑並生成相應的測試用例4.5最少測試用例數計算為實現測試的邏輯覆蓋,必須設計足夠多的測試用例,並使用這些測試用例執行被測程式,實施測試。我們關心的是:對於某個具體的程式來說,至少需要設計多少個測試用例。這裏提供一種估算最少測試用例數的方法。我們知道,結構化程式是由3種基本控制結構組成:順序型(構成串行操作)、選擇型(構成分支操作)和重複型(構成迴圈操作)。為了把問題化簡,避免出現測試用例極多
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论