浅谈白盒测试技术
????????????????????????????????????????????????? 淺談白盒測試技術
?????????????????????????????????????????????????????????????????????????????????????????? 某?? 某
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (**,**,** **)
摘要:伴隨著軟件和硬件的發展而逐步發展起來的軟件測試,白盒測試作為作為軟件測試技術最基本的方法之一,則是用來測試被測單元內部如何工作的一種方法,其目的是通過檢查軟件內部的邏輯結構,對軟件中的邏輯路徑進行覆蓋測試。白盒測試又稱為結構測試或透明測試。本文介紹白盒測試的概念、策略、原則、相關實驗步驟和常用的白盒測試方法以及常見的6種邏輯覆蓋測試方法:語句覆蓋、判斷覆蓋、條件覆蓋、判定條件覆蓋、條件組合覆蓋和路徑覆蓋。
關鍵字?? 白盒測試 ?邏輯覆蓋 ?測試方法
??????????????????????????????????????????????????????????? ON THE WHITE-BOX TESTING TECHNIQUES
??????????????????????????????????????????????????????????????????????????????????????? Mou Mou
????????????????????????????????????????????????????????????????????????????????????? (**,**,** **)
Abstract: Software testing developed with the development of software and hardware, white box testing as one of the most basic methods of software testing technology, is a method used to test how the inside of the unit under test, its purpose It is a coverage test of the logical path in the software by checking the logical structure inside the software. White box testing is also known as structural testing or transparent testing. This article introduces the concept, strategy, principles, related experimental steps and commonly used white box test methods of white box test and common six kinds of logical coverage test methods: statement coverage, judgment coverage, condition coverage, decision condition coverage, conditional combination coverage and path. cover.Keyword white box test logical coverage test method?
一、引 言
??????? 近年來,軟件質量關注度日益提高,軟件測試已經成為了軟件工程中一個非常重要的熱點話題。軟件測試時伴隨著軟件工程技術的發展起來的,然而,由于軟件規模的不斷增大,軟件模塊之間以及不同軟件系統之間的聯系變得更為錯綜復雜,原有的軟件測試方法已不能滿足測試需求。系統化的軟件測試方法應運而生。目前,可以通過三種典型的方法對軟件進行測試:黑盒測試、白盒測試以及灰盒測試。其中白盒測試是一種非常行之有效的測試手段,在程序的編寫過程中,代碼的筆誤是隨機且無可避免的,因此,需要通過白盒測試方法達到提高軟件質量的目的。
二、白盒測試
1、白盒測試的概念
?????? 白盒測試是按照程序內部的結構測試程序,通過測試來檢測產品內部動作是否按照設計規格說明書的規定正常進行,檢驗程序中的每條通路是否都能按預定要求正確工作。白盒測試一般用來分析程序的內部結構,對測試者而言是透明的,測試者可以看到被測程序源代碼,并分析其內部結構。因此,白盒測試也叫結構測試或透明測試。
2、白盒測試的策略
3、白盒測試的原則
4、白盒測試的實驗步驟
5、代碼質量的度量方法
??????? 代碼行:代碼行(Lines-of-code, LOC)[3]的計算通常是針對可執行語句,用程序中的代碼行多少來表示程序大小和復雜性。
Halstead軟件科學法:Halstead從計算機科學中區分出軟件科學.其把編程任務看作是由有限書庫的程序富豪的選擇和安排組成,這些符號是編譯器可區分的基本語法單位。根據軟件科學,計算機程序被看作是符號的集合,這些符號主要分為運算符和運算元.
??????? 結構度量:結構度量是將產品或系統中模塊間的交互量化的方法.最常用的設計結構度量是扇人(fan-in)和扇出(fan-out)度量。
??????? 扇人:調用給定模塊的模塊數目;
??????? 扇出:給定模塊所調用的模塊數。
??????? 圈復雜性(McCabe):?McCabe的圈復雜性測度被用來量化程序的可測性和可理解性,該理論來源于經典圖論中的圈數,也就是圖中區域數。
6、白盒測試方法
(1)代碼檢查法
?? ? ? 代碼檢查主要針對代碼的設計、標準依從、邏輯表達和結構等方面進行檢查,常規的檢查方式有桌面檢查、代碼審查和走查三種方式。代碼檢查應在編譯和動態測試之前進行,其優勢是能夠快速發現大量軟件邏輯設計和編碼缺陷,而且代碼檢查找到的是缺陷本身而非其表現形式,劣勢是耗費大量時間,而且對檢查者自身積累的知識和經驗要求較高。
(2)靜態結構分析法
?????? 測試者通過測試工具對程序源代碼的系統結構、數據結構、數據接口、內部控制邏輯等內部結構進行分析,進而生成函數調用關系圖、模塊控制流圖、內部文件調用關系圖、子程序、表、宏和函數參數表等各類圖形圖表。通過靜態結構分析可以明確軟件系統的組成和結構,便于測試者對其閱讀及理解,通過對圖形圖表進行深入分析,判斷軟件是否存在缺陷或錯誤[3]。
(3)靜態質量度量法
?????? ISO/IEC 9126國際標準將軟件質量分為六個方面,包括:功能性、可靠性、可用性、有效性、可維護性和輕便性。以ISO 9126質量模型作為基礎,我們可以構造質量度量模型,用于評估軟件的每個方面[6]。
(4)邏輯覆蓋法
?????? 針對邏輯覆蓋法,覆蓋準則是對“測試執行到合適才是足夠?”的定量回答,作為測試軟件的一種度量標準,描述程序源碼被測試程度。包含語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、條件組合覆蓋和路徑覆蓋等6中方法。
(5)基本路徑測試法
?????? 基本路徑測試法是在程序控制流圖的基礎上,首先對控制構造的環路復雜性進行分析,其次將可執行路徑集合導出,最后以此為基礎設計科學合理的測試用例。基本路徑測試法要求所設計的測試用例在被測程序的每個可執行語句至少執行一次。針對復雜條件,可以將其分解成為多個單一條件,并通過組合映射成控制流圖。
(6)其他白盒測試法
?????? 白盒測試方法還有域測試、符號測試、Z路徑覆蓋等方法。域測試是一種基于程序結構的測試方法,主要是針對域錯誤進行的程序測試。符號測試的基本思想是允許程序的輸入不僅僅是具體的數值數據,而且包括符號值。Z路徑測試是將程序中的循環次數加以限制,通常為循環I次或。次,這樣就將循環結構變為分支結構,Z路徑測試能有效降低被測程序的路徑數。
三、邏輯覆蓋測試方法
?????? 覆蓋率測試用例設計方法是一種常用的白盒測試方法。覆蓋率不是目標,只是一種手段。測試的目標是盡可能地去發現錯誤,去尋找被測試對象與規定的不一致的地方。
?????? 目前,比較常用的覆蓋測試用例方法包括語句覆蓋、判定覆蓋、條件覆蓋、組合覆蓋、路徑覆蓋。為了便于理解,這里結合一個實例來分析講解這幾種方法。偽代碼如下:
1---- Input (A, B)
2---- If (A >= 20 and B >= 20)
3---- ?C = A + B
4---- Else
5---- ?If (A + B >= 30 and (A >=25 or B >=25))
6---- ???C = A - B
7---- ?Else
8---- ???C = A / B
9---- Endif
10-- Output(C)
1、語句覆蓋
(1)主要特點:語句覆蓋是最起碼的結構覆蓋要求,語句覆蓋要求設計足夠多測試用例,使得程序中每條語句至少被執行1次。
(2)測試用例:
????????????????????????????????????????????????????????????????????? 表1 語句覆蓋測試用例表
| 測試用例 | A | B | 路徑 |
| 1 | 30 | 10 | MBCN |
(3)優點:可以直觀地從源代碼得到測試用例,無須細分每條判定表達式。
(4)缺點:這種測試方法僅僅針對程序邏輯中顯示存在的語句,但對隱藏的條件和可能到達的隱式邏輯分支,是無法測試的。在本例中路徑A就沒有執行。對于多個if-else判斷時,這種現象很明顯,語句對于多個分支的邏輯運算時無法全面反映的,對于do-while語句,可能僅僅只運行一次,而不考慮其他情況。
2、判定覆蓋
(1)主要特點:判定覆蓋又稱為分支覆蓋,它要求設計足夠多的測試用例,使得程序中每個判定至少有一次為真值,有一次問假值,即:程序中的每個分支至少執行一次,每個判斷的取真、取假至少執行1次。
(2) 測試用例:
????????????????????????????????????????????????????????????????????? 表2 判定覆蓋測試用例表
| 測試用例 | A | B | 路徑 |
| 1 | 30 | 30 | MAN |
| 2 | 30 | 10 | MBCN |
| 3 | 10 | 10 | MBDN |
(3)優點:對分支考慮的比較全面具體。
(4)缺點:未考慮到條件中真假不同的情況。
3、條件覆蓋
(1)主要特點:條件覆蓋要求設計足夠多的測試用例,使得判定中的每個條件獲得各種可能的結果,即每個條件至少有一次為真值,有一次為假值。
(2)測試用例:
?????????????????????????????????????????????????????????????????????? 表3 條件覆蓋測試用例表
| 測試用例 | A | B | 路徑 |
| 1 | 30 | 10 | MBCN |
| 2 | 10 | 30 | MBCN |
| 3 | 10 | 10 | MBDN |
(3)優點:每條語句中各條件的真假都有測試。
(4)缺點:未考慮到條件中真假不同的情況。
4、判定/條件覆蓋
(1)主要特點:設計足夠多的測試用例,使得判定中每個條件的所有可能結果至少出現一次,每個判定本身所有可能結果也至少出現一次。
(2)測試用例:
?????????????????????????????????????????????????????????????????????? 表4 判定/條件覆蓋測試用例表
| 測試用例 | A | B | 路徑 |
| 1 | 30 | 30 | MAN |
| 2 | 10 | 30 | MBCN |
| 3 | 10 | 10 | MBDN |
(3) 優點:覆蓋/條件覆蓋滿足判定覆蓋準則和條件覆蓋準則,彌補了二者的不足。
(4) 缺點:覆蓋/條件覆蓋準則的缺點是未考慮到條件的組合情況。
5、條件組合覆蓋
(1)主要特點:更強的邏輯覆蓋標準。
(2)測試用例:
????????????????????????????????????????????????????????????????? ?? 表5 條件組合覆蓋測試用例表
| 測試用例 | A | B | 路徑 |
| 1 | 30 | 30 | MAN |
| 2 | 10 | 30 | MBCN |
| 3 | 10 | 10 | MBDN |
(3)優點:滿足條件組合覆蓋的測試數據必然滿足判定覆蓋、條件覆蓋和判定/條件覆蓋準則。
(4)缺點:線性增加了測試數據的數量;滿足條件覆蓋標準的測試數據并不一定能使程序中的每條路徑都覆蓋。
6、路徑覆蓋
(1)主要特點:設計足夠多的測試用例,覆蓋程序中所有可能的路徑。
(2)測試用例:
??????????????????????????????????????????????????????????????????? 表6 路徑覆蓋測試用例表
| 測試用例 | A | B | 路徑 |
| 1 | 30 | 30 | MAN |
| 2 | 30 | 10 | MBCN |
| 3 | 10 | 10 | MBDN |
(3)優點:對程序進行了更為徹底的測試,覆蓋面廣。
(4)缺點:由于路徑覆蓋需要對所有可能的路徑進行測試,這樣一來需要設計大量、復雜的測試用例,使得工作量呈指數增大,而在有些情況下,一些執行路徑是不能被執行的,如:
??????? If(!A)C++;
??????? If(!A)D++;
??????? 這兩條語句實際值只包括了2條執行路徑,即A為真或假時候對C和D的處理,真或假不可能都存在,而路徑覆蓋測試,則認為是包含了真與假的4條執行路徑,這樣不僅降低了測試效率,而且大量的測試結果的累積,也為排錯帶來麻煩。
四、結 ?論
?????? 白盒測試是一種被廣泛使用的邏輯測試方法,是由程序內部邏輯驅動的一種單元測試方法。只有對程序內部十分了解才能進行適度有效的白盒測試,但是貫穿在程序內部的邏輯存在著不確定性和無窮性,尤其對于大規模復雜軟件,因此我不能窮舉所有的邏輯路徑,即使窮舉也未必會帶來好運。
?????? 那么正確使用白盒測試,就要先從代碼分析人手,根據不同的代碼邏輯規則、語句執行情況,選用適合的覆蓋方法。任何一個高效的測試用例,都是針對具體測試場景的,邏輯測試不是片面的測試正確的結果或是測試錯誤的結果,而是盡可能全面地覆蓋每一個邏輯路徑。
?????????????????????????????????????????????????????????????????????????????? 參 考 文 獻
[1] 王冠基本路徑測試中的Mc;Cabe算法改進及應用田哈爾濱理工大學學報,2010, 15 (1) :48.
[2] 全春靈基本路徑法測試_典型排序程度的測試用例設計田山西師范大學學報:自然科學版,2004, 19 (1) :92.
[3] 劉洋.白盒測試技術概述[J].廣西大學學報(自然科學版),2008,33(S1) :146-149.
[4] 張少龍.白盒測試[D]:西安財經學院,2011.
[5] 杜慶峰,李娜白盒測試基路徑算法[Pl.計算機工程.2009(15).
[6] 劉慧梅,徐華宇.軟件測試中代碼分析與插裝技術的研究[[J].
[7] 田鵬,張文博,過峰.淺析白盒測試技術與方法[J].電子科學技術,2015,02(03):329-333.
[8] 佘鳳.軟件測試中白盒測試覆蓋方法[J].電子商務,2012(12):59-60.
[9] 張炯.軟件測試用例設計方法研究[J].計算機光盤軟件與應用,2012,15(21):211-212.
[10] 衛延偉. 白盒測試系統的設計與研究[D].華中師范大學,2013.
總結
- 上一篇: 六、UML初识
- 下一篇: 组队学习可汗学院统计学1