經(jīng)典案例
  • 金融大數據解決方案
  • 汽車(chē)大數據解決方案
  • 政府大數據解決方案
  • 鐵路大數據解決方案
  • 電力大數據解決方案
  • 軍工大數據解決方案
  • 解放軍總裝備部
  • 中國航天科工集團
  • 航天科技集團

如何對軟件進(jìn)行白盒測試?

發(fā)布于:2020-01-03 21:27來(lái)源:北京軟件開(kāi)發(fā)公司 作者:北京大數據公司 點(diǎn)擊:
       


白盒測試時(shí)軟件測試中必不可少的環(huán)節,它是檢測一家軟件開(kāi)發(fā)公司團隊實(shí)力的重要指標。
        白盒測試又稱(chēng)結構測試,透明盒測試、邏輯驅動(dòng)測試或基于代碼的測試。白盒測試是一種測試用例設計方法,盒子指的是被測試的軟件,白盒指的是盒子是可視的,你清楚盒子內部的東西以及里面是如何運作的。 "白盒"法全面了解程序內部邏輯結構、對所有邏輯進(jìn)行測試。"白盒"法是窮舉路徑測試。在使用這一方案時(shí),測試者必須檢查程序的內部結構,從檢查程序的邏輯著(zhù)手,得出測試數據。貫穿程序的獨立路徑數是天文數字。
  采用什么方法對軟件進(jìn)行測試呢?常用的軟件測試方法有兩大類(lèi):靜態(tài)測試方法和動(dòng)態(tài)測試方法。其中軟件的靜態(tài)測試不要求在計算機上實(shí)際執行所測程序,主要以一些人工的模擬技術(shù)對軟件進(jìn)行分析和測試;而軟件的動(dòng)態(tài)測試是通過(guò)輸入一組預先按照一定的測試準則構造的實(shí)例數據來(lái)動(dòng)態(tài)運行程序,而達到發(fā)現程序錯誤的過(guò)程。在動(dòng)態(tài)分析技術(shù)中,重要的技術(shù)是路徑和分支測試。下面要介紹的六種覆蓋測試方法屬于動(dòng)態(tài)分析方法。
測試方法
  白盒測試的測試方法有代碼檢查法、靜態(tài)結構分析法、靜態(tài)質(zhì)量度量法、邏輯覆蓋法、基本路徑測試法、域測試、符號測試、Z路徑覆蓋程序變異。
白盒測試法的覆蓋標準有邏輯覆蓋、循環(huán)覆蓋和基本路徑測試。其中邏輯覆蓋包括語(yǔ)句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、條件組合覆蓋和路徑覆蓋。

  六種覆蓋標準:語(yǔ)句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、條件組合覆蓋和路徑覆蓋發(fā)現錯誤的能力呈由弱至強的變化。語(yǔ)句覆蓋每條語(yǔ)句至少執行一次。判定覆蓋每個(gè)判定的每個(gè)分支至少執行一次。條件覆蓋每個(gè)判定的每個(gè)條件應取到各種可能的值。判定/條件覆蓋同時(shí)滿(mǎn)足判定覆蓋條件覆蓋。條件組合覆蓋每個(gè)判定中各條件的每一種組合至少出現一次。路徑覆蓋使程序中每一條可能的路徑至少執行一次。
要求

  1.保證一個(gè)模塊中的所有獨立路徑至少 被使用一次
  2.對所有邏輯值均需測試 true 和 false
  3.在上下邊界及可操作范圍內運行所有循環(huán)
  4.檢查內部數據結構以確保其有效性
目的

  通過(guò)檢查軟件內部的邏輯結構,對軟件中的邏輯進(jìn)行覆蓋測試;在程序不同地方設立檢查點(diǎn),檢查程序的狀態(tài),以確定實(shí)際運行狀態(tài)與預期狀態(tài)是否一致。
特點(diǎn)

  依據說(shuō)明書(shū)進(jìn)行測試、對內部細節的嚴密檢驗、針對特定條件設計測試用例、對軟件的邏輯路徑進(jìn)行覆蓋測試。
實(shí)施步驟
  1.測試計劃階段:根據需求說(shuō)明書(shū),制定測試進(jìn)度。
  2.測試設計階段:依據程序設計說(shuō)明書(shū),按照一定規范化的方法進(jìn)行軟件結構劃分和設計測試用例
  3.測試執行階段:輸入測試用例,得到測試結果。
  4.測試總結階段:對比測試的結果和的預期結果,分析錯誤原因,找到并解決錯誤。
優(yōu)缺點(diǎn)

  1. 優(yōu)點(diǎn):迫使測試人員去仔細思考軟件;可以檢測代碼中的每條分支和路徑;揭示隱藏在代碼中的錯誤;對代碼的測試比較徹底;最優(yōu)化。
  2. 缺點(diǎn):昂貴。無(wú)法檢測代碼中遺漏的路徑和數據敏感性錯誤。不驗證規格的正確性。
局限

  但即使每條路徑都測試了仍然可能有錯誤。第一,窮舉路徑測試程序違反了設計規范,即程序本身是個(gè)錯誤的程序。第二,窮舉路徑測試不可能查出程序中因遺漏路徑而出錯。第三,窮舉路徑測試可能發(fā)現不了一些與數據相關(guān)的錯誤。
如何挑選工具

  白盒測試目前主要用在具有高可靠性要求的軟件領(lǐng)域,例如:軍工軟件、航天航空軟件、工業(yè)控制軟件等等。白盒測試工具在選購時(shí)應當主要是對開(kāi)發(fā)語(yǔ)言的支持、覆蓋的深度、嵌入式軟件的測試、測試的可視化等。
代碼的覆蓋深度

  從覆蓋源程序語(yǔ)句的詳盡程度分析,邏輯覆蓋標準包括以下不同的覆蓋標準:語(yǔ)句覆蓋、判定覆蓋、條件覆蓋、條件判定組合覆蓋、多條件覆蓋和修正判定條件覆蓋。
  1.語(yǔ)句覆蓋 為了暴露程序中的錯誤,程序中的每條語(yǔ)句至少應該執行一次。因此語(yǔ)句覆蓋(Statement Coverage)的含義是:選擇足夠多的測試數據,使被測程序中每條語(yǔ)句至少執行一次。語(yǔ)句覆蓋是很弱的邏輯覆蓋。
  2.判定覆蓋語(yǔ)句覆蓋稍強的覆蓋標準是判定覆蓋(Decision Coverage)。判定覆蓋的含義是:設計足夠的測試用例,使得程序中的每個(gè)判定至少都獲得一次“真值”或“假值”,或者說(shuō)使得程序中的每一個(gè)取“真”分支和取“假”分支至少經(jīng)歷一次,因此判定覆蓋又稱(chēng)為分支覆蓋
  3.條件覆蓋 在設計程序中,一個(gè)判定語(yǔ)句是由多個(gè)條件組合而成的復合判定。為了更徹底地實(shí)現邏輯覆蓋,可以采用條件覆蓋(Condition Coverage)的標準。條件覆蓋的含義是:構造一組測試用例,使得每一判定語(yǔ)句中每個(gè)邏輯條件的可能值至少滿(mǎn)足一次。
  4.多條件覆蓋 多條件覆蓋也稱(chēng)條件組合覆蓋,它的含義是:設計足夠的測試用例,使得每個(gè)判定中條件的各種可能組合都至少出現一次。顯然滿(mǎn)足多條件覆蓋的測試用例是一定滿(mǎn)足判定覆蓋、條件覆蓋和條件判定組合覆蓋的。
  5.修正條件判定覆蓋修正條件判定覆蓋是由歐美的航空/航天制造廠(chǎng)商和使用單位聯(lián)合制定的“航空運輸和裝備系統認證標準”,目前在國外的國防、航空航天領(lǐng)域應用廣泛。這個(gè)覆蓋度量需要足夠的測試用例來(lái)確定各個(gè)條件能夠影響到包含的判定的結果。它要求滿(mǎn)足兩個(gè)條件:首先,每一個(gè)程序模塊的入口和出口點(diǎn)都要考慮至少要被調用一次,每個(gè)程序的判定到所有可能的結果值要至少轉換一次;其次,程序的判定被分解為通過(guò)邏輯操作符(and、or)連接的布爾條件,每個(gè)條件對于判定的結果值是獨立的。
  不同的測試工具對于代碼的覆蓋能力也是不同的,通常能夠支持修正條件判定覆蓋的測試工具價(jià)格是極其昂貴的。
基本路徑測試法

  白盒測試的測試方法中運用最為廣泛的是基本路徑測試法。
  基本法是在程序控制流圖的基礎上,通過(guò)分析控制構造的環(huán)路復雜性,導出基本可執行路徑集合,從而設計測試用例。設計出的測試用例要保證在測試中程序的每個(gè)可執行語(yǔ)句至少執行一次。
在程序控制流圖的基礎上,通過(guò)分析控制構造的環(huán)路復雜性,導出基本可執行路徑集合,從而設計測試用例。包括以下4個(gè)步驟和一個(gè)工具方法:

  1. 程序的控制流圖:描述程序控制流的一種圖示方法。
  2. 程序圈復雜度:McCabe復雜性度量。從程序的環(huán)路復雜性可導出程序基本路徑集合中的獨立路徑條數,這是確定程序中每個(gè)可執行語(yǔ)句至少執行一次所必須的測試用例數目的上界
  3. 導出測試用例:根據圈復雜度和程序結構設計用例數據輸入和預期結果。
  4. 準備測試用例:確?;韭窂郊械拿恳粭l路徑的執行。
工具方法

  圖形矩陣:是在基本路徑測試軟件工具,利用它可以實(shí)現自動(dòng)地確定一個(gè)基本路徑集。
  程序的控制流圖:描述程序控制流的一種圖示方法。
  圓圈稱(chēng)為控制流圖的一個(gè)結點(diǎn),表示一個(gè)或多個(gè)無(wú)分支的語(yǔ)句或源程序語(yǔ)句
  流圖只有二種圖形符號:圖中的每一個(gè)圓稱(chēng)為流圖的結點(diǎn),代表一條或多條語(yǔ)句。
  流圖中的箭頭稱(chēng)為邊或連接,代表控制流
  任何過(guò)程設計都要被翻譯成控制流圖。
  如何根據程序流程圖畫(huà)出控制流程圖?
  在將程序流程圖簡(jiǎn)化成控制流圖時(shí),應注意:
  在選擇或多分支結構中,分支的匯聚處應有一個(gè)匯聚結點(diǎn)。
  邊和結點(diǎn)圈定的區域叫做區域,當對區域計數時(shí),圖形外的區域也應記為一個(gè)區域。
步驟

  基本路徑測試法的步驟:
  第一步:畫(huà)出控制流圖
  流程圖用來(lái)描述程序控制結構??蓪⒘鞒虉D映射到一個(gè)相應的流圖(假設流程圖的菱形決定框中不包含復合條件)。在流圖中,每一個(gè)圓,稱(chēng)為流圖的結點(diǎn),代表一個(gè)或多個(gè)語(yǔ)句。一個(gè)處理方框序列和一個(gè)菱形決測框可被映射為一個(gè)結點(diǎn),流圖中的箭頭,稱(chēng)為邊或連接,代表控制流,類(lèi)似于流程圖中的箭頭。一條邊必須終止于一個(gè)結點(diǎn),即使該結點(diǎn)并不代表任何語(yǔ)句(例如:if-else-then結構)。由邊和結點(diǎn)限定的范圍稱(chēng)為區域。計算區域時(shí)應包括圖外部的范圍。
  第二步:計算圈復雜度
圈復雜度是一種為程序邏輯復雜性提供定量測度的,將該度量用于計算程序的基本的獨立路徑數目,為確保所有語(yǔ)句至少執行一次的測試數量的上界。獨立路徑必須包含一條在定義之前不曾用到的邊。

  有以下三種方法計算圈復雜度:
  流圖中區域的數量對應于環(huán)型的復雜性;
  給定流圖G的圈復雜度V(G),定義為V(G)=E-N+2,E是流圖中邊的數量,N是流圖中結點(diǎn)的數量;
  給定流圖G的圈復雜度V(G),定義為V(G)=P+1,P是流圖G中判定結點(diǎn)的數量。
  第三步:導出
  根據上面的計算方法,可得出四個(gè)獨立的路徑。(一條獨立路徑是指,和其他的獨立路徑相比,至少引入一個(gè)新處理語(yǔ)句或一個(gè)新判斷的程序通路。V(G)值正好等于該程序的獨立路徑的條數。)
  路徑1:4-14
  路徑2:4-6-7-14
  路徑3:4-6-8-10-13-4-14
  路徑4:4-6-8-11-13-4-14
  根據上面的獨立,去設計輸入數據,使程序分別執行到上面四條路徑。
三步法

  1. 根據代碼的功能,人工設計測試用例進(jìn)行基本功能測試
  2. 統計白盒覆蓋率,為未覆蓋的白盒單位設計測試用例,實(shí)現完整的白盒覆蓋,比較理想的覆蓋率是實(shí)現100%語(yǔ)句、條件、分支、路徑覆蓋
  3. 自動(dòng)生成大量的測試用例,捕捉"程序員未處理某些特殊輸入"形成的錯誤。
  第1步的測試用例通常是現成的,因為詳細設計文檔會(huì )規定程序的基本功能,沒(méi)有文檔的,程序員在編程時(shí)也要想清楚程序的功能,這些基本功能就是基本測試用例;
  第2步是在第1步的基礎上,檢查未覆蓋的白盒單位,由于未覆蓋的邏輯單位通常對應未測試的等價(jià)類(lèi),因此第2步可以找出第1步所遺漏的測試用例;
  第3步用自動(dòng)彌補第2步的固有缺陷
  “三步法”盡量避免重復工作,白盒方法和黑盒方法相結合,人工方法和自動(dòng)方法相補充,如果第2步的覆蓋率比較理想,那么基本上可以保證找出所有等價(jià)類(lèi)。在開(kāi)發(fā)過(guò)程允許的限度內,"三步法"已接近極限,當得起"徹底測試"四個(gè)字。
------分隔線(xiàn)----------------------------
------分隔線(xiàn)----------------------------
QQ客服熱線(xiàn)