知名百科  > 所屬分類  >  其他科技   

白盒測試

白盒測試又稱結構測試、邏輯驅動測試或基于程序的測試,是軟件測試的一種重要方法。根據軟件產品的內部工作過程,它在計算機上進行測試,以確認每個內部操作是否符合設計規范,以及是否所有內部組件都已檢查完畢。其目的是發現程序編碼過程中的錯誤。

白盒測試從測試重點可以分為控制流分析技術和數據流分析技術。從是否執行程序的角度來看,可以分為靜態測試方法和動態測試方法。靜態測試方法主要是程序結構分析,可分為代碼走查、代碼審查、控制流分析、數據流分析、信息流分析等。動態測試方法主要分為邏輯覆蓋法和路徑測試法,其中路徑測試法應用最為廣泛。

白盒測試的靜態測試工具主要包括Logiscope、PRQA軟件,動態測試工具主要包括DevPartner軟件和Pure series,可以幫助軟件測試人員增加代碼覆蓋率、提高代碼質量并發現代碼中隱藏的問題。

目錄

基本概念 編輯本段

白盒測試基于對產品內部工作的了解,測試用于檢查產品的內部動作是否按照規范的規定進行。無論系統的功能如何,它都根據程序的內部結構對程序進行測試,以檢查每個程序是否能按照預定的要求正常工作。它通常用于分析程序的內部結構。程序的結構和處理像白盒一樣透明,允許測試人員使用程序的內部邏輯結構和相關信息來設計或選擇測試用例并測試程序的所有邏輯路徑。白盒測試主要用于單元測試和集成測試,但通常不適用于系統測試。但在涉及動態描述的系統描述部分,仍可借鑒一些白盒測試方法。因此,白盒測試不限于單元測試和集成測試。

宗旨原則 編輯本段

白盒測試的主要目的是檢查程序模塊,在檢查過程中應遵循以下原則:

確保程序模塊的所有獨立執行路徑至少測試一次;

在取“真”和“假”的兩種情況下,所有邏輯判斷都可以至少測試一次;

在上下限和操作范圍內運行所有循環;

檢查程序的內部數據結構以確保其結構的有效性。

測試方法 編輯本段

動態測試是在程序運行狀態下進行的測試,即通過輸入預先設計的數據,根據程序運行計算的結果將其與實際輸出結果進行比較,然后發現程序中的錯誤。在程序運行過程中,通過動態測試,測試人員可以判斷基本模塊、執行過程、子系統以及整個系統的運行結果是否存在缺陷。動態測試方法分為三個步驟。首先設置待測配置,然后對相關源程序進行插樁、編譯和鏈接生成可執行文件,最后插樁程序系統自動記錄執行路徑并獲得覆蓋率。動態測試方法分為邏輯覆蓋法和路徑測試法,其中路徑測試法應用最為廣泛。

邏輯覆蓋方法

邏輯覆蓋是一系列測試的通用術語。這種方法要求測試人員對程序的邏輯結構有清晰的理解。根據覆蓋對象的不同和源程序句子的詳細覆蓋情況,常見的邏輯覆蓋可分為六種類型:句子覆蓋、決策覆蓋、條件覆蓋、決策-條件覆蓋、條件組合覆蓋和路徑覆蓋。

報表覆蓋范圍

語句覆蓋是設計幾個測試用例,然后運行被測程序,使每個可執行語句至少執行一次。這種覆蓋使程序中的每個可執行語句都能被執行,但它是最弱的邏輯覆蓋標準,效果有限,必須與其他方法交互使用。

決策覆蓋范圍

判斷覆蓋是指設計幾個測試用例,然后運行被測試的程序,使程序中每個被判斷的真分支和假分支至少經歷一次。判斷覆蓋率略好于句子覆蓋率,但不能保證能找出判斷條件中的錯誤。因此,需要更強的邏輯覆蓋標準來測試和判斷內部條件。

條件覆蓋:條件覆蓋是設計幾個測試用例,然后運行被測程序,使程序中判斷的每個條件的可能值至少執行一次。

路徑覆蓋:路徑覆蓋就是設計足夠多的測試用例,執行程序所有可能的路徑,這是一種覆蓋率最高的覆蓋技術。

z路徑覆蓋范圍:路徑覆蓋由于路徑太多而不便于使用,因此人們放棄了路徑覆蓋的一些次要因素并簡化了循環機制,這大大減少了路徑的數量,使覆蓋這些有限的路徑成為可能。這種覆蓋方法稱為Z路徑覆蓋。循環簡化是指限制循環次數,只考慮循環執行一次和零次。用Z-路徑覆蓋法簡化程序中的循環后,程序中只剩下兩種結構:序列結構和分支結構。

路徑測試方法:白盒測試有兩種常用技術,一種是覆蓋測試,另一種是路徑測試。從流程圖來看,程序的一次執行對應于從入口到出口的一條路徑,對這條路徑的測試就是路徑測試。從廣義上講,任何與路徑分析相關的測試都可以稱為路徑測試。路徑測試基于程序控制流圖,通過分析控制結構的循環復雜度,導出基本可執行路徑集,進而設計測試用例。

程序路徑表達式:在分析路徑時,首先要解決的是確定每條路徑和路徑的數量。為了更直觀形象地表達每條路徑,我們可以使用弧序列或節點序列并引入兩種運算:加法和乘法。弧A和弧B的相加表示為a+b,表示兩條弧為“或”,為平行路徑;弧A和弧B的乘積表示為ab,表示路徑首先經過弧A,然后經過弧B,弧A和弧B依次相連。

基本路徑測試:如果覆蓋的路徑數量被壓縮到一定限度,它就變成了基本路徑測試。基本路徑測試是在程序控制流程圖的基礎上,通過分析控制結構的循環復雜性并導出基本可執行路徑集來設計測試用例的方法。設計的測試用例應該確保程序的每個可執行路徑在測試期間至少執行一次。基本路徑測試方法包括以下五個方面:

1.根據詳細設計或程序源代碼,繪制程序的程序流程圖;

2.根據程序流程圖,繪制程序的控制流程圖;

3.計算程序的循環復雜度。循環復雜度是一種軟件度量標準,用于對程序邏輯的復雜度進行定量測試,該度量標準用于計算程序的基本獨立路徑的數量。

4.找到一條獨立的道路。通過程序的程序流程圖導出設置的基本路徑,并列出程序的獨立路徑;

5.設計測試用例。根據程序結構和程序循環復雜性,設計用例的輸入數據和預期結果,以確保基本路徑集中每條路徑的執行。

每個測試用例執行后,都會與預期結果進行比較。如果所有的測試用例都被執行了,你可以確定程序中所有的可執行語句都至少被執行了一次。但是一些獨立路徑通常不是完全隔離的,有時它們是程序正常控制流的一部分,因此對這些路徑的測試可以是對另一條路徑的測試的一部分。

循環試驗

循環測試專門用于測試程序中的循環,可以進一步提高測試覆蓋率。本質上,循環測試的目的是檢查循環結構的有效性。通常,循環可分為簡單循環、嵌套循環、鏈式循環和非結構化循環。

靜態測試方法:靜態測試方法主要是程序結構分析,可分為代碼審查、代碼遍歷、控制流分析、數據流分析、信息流分析等。

代碼審查

代碼審查是由若干程序員和測試人員組成的審查小組通過閱讀、討論和爭論對程序進行靜態分析的過程。代碼評審分為兩步:第一步,組長提前將設計說明書、控制流程圖、程序文本、相關需求和規范分發給組員,作為評審的依據。團隊成員在充分閱讀這些材料后進行審查的第二步是召開程序審查會議。在會議上,程序員首先解釋程序的邏輯,程序員和其他團隊成員可以提出問題,討論并檢查是否有錯誤。例如,在對一個局部小問題的修改方法的討論中,可能會發現牽連其中的其他問題,甚至是設計模塊的功能描述、模塊之間的接口和系統整體結構中的重大問題,從而導致需求的重新定義、重新設計和重新驗證,從而大大提高軟件質量。

代碼走查

代碼演練與代碼審查基本相同,其過程分為兩步。第一步是先把材料發給檢查組的每個成員,仔細研究后再開會。會議評審的過程不同于代碼評審。參與者不是簡單地閱讀程序并對照錯誤清單進行檢查,而是被允許充當計算機,也就是說,首先,測試團隊的成員為被測試的程序準備許多有代表性的測試用例,并將其提交給走查團隊。演練團隊開會并集體充當計算機,這樣測試用例就可以根據程序邏輯運行,并且可以隨時記錄程序的痕跡以供分析和討論。

控制流分析

控制流分析是指檢查程序的控制結構,以驗證在編程過程中是否遵循了程序結構的某些規則,并在此基礎上獲得相關結構組件的語法樹并揭示控制結構的缺陷。控制流關系圖稱為控制流圖。圖上的每個節點對應一個程序元素,兩個節點之間有一條直接的弧線,這表明對應的兩個元素在控制流關系中形成了一個序列對。控制流程圖中的路徑對應于潛在可執行程序元素的序列。執行路徑意味著執行相應的程序元素序列。如果輸入導致路徑的執行,那么路徑是可達的,否則是不可達的。通常,有許多具有周期的無線路徑。即使沒有循環,程序也可能有許多路徑要分析。它有五種基本程序結構:線性結構、基本條件判斷、多分支條件判斷、while-do循環和do-while循環。控制流分析主要從三個方面分析程序結構:條件決策節點本身的復雜性;條件決策節點和循環節點對執行路徑的影響;周期本身的復雜性。

數據流分析

數據流分析最早出現在生成有效目標代碼的編譯系統中,這種方法主要用于優化代碼。數據流測試是一種基于程序控制流的結構化測試方法,從已建立的數據目標狀態序列中發現異常。它的基本思想是變量的定義,通過重復引用和定義可以影響另一個變量的值或路徑的選擇。在測試數據流時,根據變量在被測程序中的定義和引用位置來選擇測試路徑。

信息流分析

信息流分析主要用于驗證程序變量之間的信息傳輸是否遵循保密性要求,并通過分析輸入數據、輸出數據和語句之間的關系來檢查程序錯誤。信息流分析主要用于分析是否存在無用語句。信息流分析可以列出對輸入變量的所有可能的引用,檢查程序的執行是否在任何指定點影響輸出變量值的語句,并提供對輸入-輸出關系的檢查,以查看每個輸出值是否來自相應的輸入值。

檢測方法 編輯本段

程序儀表

程序插裝使被測程序在保持原有邏輯完整性的基礎上向程序中插入一些探針,并通過探針的執行拋出程序的運行特征數據。基于對這些特征數據的分析,可以得到程序的控制流和數據流信息,進而得到邏輯覆蓋等動態信息。在程序中何處設置探針,如何設計探針以及如何對探針函數捕獲的數據進行編碼和解碼。

程序插裝在實踐中應用廣泛,可用于捕獲程序執行過程中變量值的變化,也可用于檢測程序的分支覆蓋和語句覆蓋。程序插裝的關鍵技術包括檢測什么信息、在程序中何處設置探針、如何設計探針以及探針函數捕獲的數據的編碼和解碼。

領域測試

領域測試的“領域”是指程序的輸入空間。領域測試方法基于對輸入空間的分析,其理想結果是檢查輸入空間中的每個輸入元素是否產生正確的結果。輸入空間可以分成不同的子空間,每個子空間對應不同的計算。在調查了被測程序的結構后發現,子空間的劃分是由程序中分支語句的謂詞決定的,輸入空間的一個元素以程序中某些特定語句的執行結束。領域測試基于對輸入領域的分析,并選擇適當的測試點進行測試。

符號測試

符號測試遵循傳統的程序測試方法,通過運行被測程序來驗證其可靠性。此外,由于符號測試的結果代表了一大類普通測試的運行結果,因此它實際上是為了證明程序是否接受這樣的輸入以及輸出結果是否正確。從符號測試的使用情況來看,問題的關鍵是開發一個比傳統編譯器更強大的編譯器。能夠處理符號操作的編譯器和解釋器。

程序變異

程序變異測試是一種錯誤驅動的測試,針對的是特定的程序錯誤。由于人們無法找出程序中的所有錯誤,因此更現實的方法是盡可能縮小錯誤的范圍,從而有助于測試某一類型的錯誤是否存在。這樣可以很容易地關注對軟件最有害的可能錯誤,實現更高的測試效率并降低測試成本。

覆蓋標準 編輯本段

測試覆蓋標準包括K.A.Foster的ESTCA覆蓋標準和Woodward的分級LCSAJ覆蓋標準。福斯特的經驗覆蓋率標準受到早期硬件測試方法的啟發。通過大量實驗,確定了程序中最容易出錯的謂詞部分,并得到了一組錯誤敏感測試用例分析(ESTCA)規則。Woodward等人提出了一種分層的LCSAJ覆蓋準則。LCSAJ(線性碼序列和跳轉)的意思是線性碼序列和跳轉。LC SAJ是一組順序執行的代碼,以控制流跳轉作為其終點。它表明覆蓋率標準越高,就越難滿足。

ESTCA覆蓋標準:ESTCA coverage criterion也稱為錯誤敏感測試用例分析規則,是基于程序中最容易出錯的謂詞部分的規則,屬于大數據的范疇。ESTCA覆蓋率準則針對的是程序員容易犯的錯誤,或者是圍繞錯誤發生頻繁的區域,從而提高發現錯誤的概率。它有三個規則。

規則1:對于A rel B(rel可以是)的分支謂詞,應該適當選擇A和B的值,以便當測試執行到分支語句時,A《B、A=B和A》B的情況分別出現一次。

白盒測試白盒測試

規則2:對于類型為rel1 C的分支謂詞(rel1可以》或

規則3:為外部輸入變量賦值,使它們在每個測試用例中具有不同的值和符號,這些值和符號與同一組測試用例中其他變量的值和符號不一致。

LCSAJ覆蓋標準:LCSAJ覆蓋準則也稱為線性碼序列和跳轉。LCSAJ是一組按順序執行的代碼,以控制流的跳轉作為其終點。LCSAJ的起點是程序第一行的入口點或控制流可以到達的點。幾個LCSAJ字符串首尾相連,最后一個LCSAJ端點就是程序的終點,構成了程序的一條路徑。LCSAJ覆蓋準則是一種分層覆蓋準則;

第一層是語句;

第二層是分支覆蓋;

第三層是一段LCSAJ覆蓋,即程序的每個LCSAJ至少測試一次;

第四層是兩個LCSAJ蓋的任意連接,即程序中每兩個首尾相連的LCSAJ將被測試一次;

第五層為任意連接的三層LCSAJ蓋;

n+2層是每n個端到端LCSAJ組合測試一次,以此類推。

方法選擇 編輯本段

白盒測試中測試方法的選擇策略如下:

1.在測試中,首先分析了靜態結構。

2.采用靜態和動態相結合的方法。在靜態結構分析、代碼檢查和靜態質量度量之后,進行覆蓋測試。

3.利用靜態分析的結果,通過代碼檢查和動態測試進一步確認結果,使測試工作更加有效。

4.覆蓋測試是白盒測試的重點,基本路徑測試用于達到語句覆蓋標準。對于關鍵模塊,應該使用多個覆蓋標準來衡量代碼覆蓋率。

5.不同的測試階段有不同的側重點。

應用領域 編輯本段

白盒測試適用于單元測試、集成測試和回歸測試。單元測試是指檢查和驗證軟件中最小的可測試單元。單元是一個軟件組件,不能再細分為其他組件。軟件工程師編寫白盒測試用例來檢查單元編碼是否正確。

集成測試測試軟件組件、硬件組件或兩者來評估它們的交互。測試人員可以編寫白盒測試用例以及黑盒測試用例來清楚地檢查各個單元之間的接口。

回歸測試,即系統或組件的選擇性重新測試,以驗證修改不會導致意外影響,并且系統或組件仍符合其指定要求。回歸測試可以通過黑盒測試用例、白盒測試用例或兩者的結合來完成。白盒測試用例以及集成測試用例可以被保存并允許作為回歸測試的一部分。

附件列表


0

詞條內容僅供參考,如果您需要解決具體問題
(尤其在法律、醫學等領域),建議您咨詢相關領域專業人士。

如果您認為本詞條還有待完善,請 編輯

上一篇 子網掩碼    下一篇 虎牙直播

標簽

同義詞

暫無同義詞
主站蜘蛛池模板: 国产免费久久精品| 影音先锋无码a∨男人资源站| 国产日韩在线亚洲字幕中文| 亚洲欧美日韩丝袜另类| 97无码人妻福利免费公开在线视频 | 自拍偷自拍亚洲精品播放| 日韩精品一卡二卡三卡四卡2021| 国产精品一区二区在线观看 | 中文字幕在线视频精品| 色综合久久久无码中文字幕| 无码人妻av一二区二区三区| 国产一区二区精品久久凹凸| 中文字幕永久更新| 美女张开腿让男人桶爽国产| 巨大欧美黑人xxxxbbbb| 免费在线观看视频网站| a毛看片免费观看视频| 污污的文章让人起反应的| 国产精品无码素人福利不卡| 亚洲中文字幕久久精品无码a| 日本高清视频色wwwwww色| 日韩乱码人妻无码中文字幕视频 | 久久久综合中文字幕久久| 色噜噜狠狠一区二区三区| 成人看片app| 免费国产在线观看老王影院| 99爱在线精品视频网站| 欧美日韩视频精品一区二区 | 中文字幕三级理论影院| 精品亚洲综合久久中文字幕| 天天做天天添天天谢| 成人免费淫片在线费观看| 北条麻妃在线一区二区| a色毛片免费视频| 欧美成人手机在线视频| 国产成人麻豆亚洲综合无码精品| 久久久精品一区二区三区| 精品无码人妻一区二区三区不卡| 天天躁日日躁狠狠久久| 亚洲国产精品综合一区在线| 国产挤奶水主播在线播放|