亚洲天堂av网_久久精品欧美一区二区三区不卡_亚洲欧美一级_欧美成人合集magnet

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

白盒測試

白盒測試又稱結(jié)構(gòu)測試、邏輯驅(qū)動測試或基于程序的測試,是軟件測試的一種重要方法。根據(jù)軟件產(chǎn)品的內(nèi)部工作過程,它在計算機上進行測試,以確認每個內(nèi)部操作是否符合設計規(guī)范,以及是否所有內(nèi)部組件都已檢查完畢。其目的是發(fā)現(xiàn)程序編碼過程中的錯誤。

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

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

目錄

基本概念 編輯本段

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

宗旨原則 編輯本段

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

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

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

在上下限和操作范圍內(nèi)運行所有循環(huán);

檢查程序的內(nèi)部數(shù)據(jù)結(jié)構(gòu)以確保其結(jié)構(gòu)的有效性。

測試方法 編輯本段

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

邏輯覆蓋方法

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

報表覆蓋范圍

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

決策覆蓋范圍

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

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

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

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

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

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

基本路徑測試:如果覆蓋的路徑數(shù)量被壓縮到一定限度,它就變成了基本路徑測試?;韭窂綔y試是在程序控制流程圖的基礎(chǔ)上,通過分析控制結(jié)構(gòu)的循環(huán)復雜性并導出基本可執(zhí)行路徑集來設計測試用例的方法。設計的測試用例應該確保程序的每個可執(zhí)行路徑在測試期間至少執(zhí)行一次。基本路徑測試方法包括以下五個方面:

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

2.根據(jù)程序流程圖,繪制程序的控制流程圖;

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

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

5.設計測試用例。根據(jù)程序結(jié)構(gòu)和程序循環(huán)復雜性,設計用例的輸入數(shù)據(jù)和預期結(jié)果,以確?;韭窂郊忻織l路徑的執(zhí)行。

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

循環(huán)試驗

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

靜態(tài)測試方法:靜態(tài)測試方法主要是程序結(jié)構(gòu)分析,可分為代碼審查、代碼遍歷、控制流分析、數(shù)據(jù)流分析、信息流分析等。

代碼審查

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

代碼走查

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

控制流分析

控制流分析是指檢查程序的控制結(jié)構(gòu),以驗證在編程過程中是否遵循了程序結(jié)構(gòu)的某些規(guī)則,并在此基礎(chǔ)上獲得相關(guān)結(jié)構(gòu)組件的語法樹并揭示控制結(jié)構(gòu)的缺陷??刂屏麝P(guān)系圖稱為控制流圖。圖上的每個節(jié)點對應一個程序元素,兩個節(jié)點之間有一條直接的弧線,這表明對應的兩個元素在控制流關(guān)系中形成了一個序列對??刂屏鞒虉D中的路徑對應于潛在可執(zhí)行程序元素的序列。執(zhí)行路徑意味著執(zhí)行相應的程序元素序列。如果輸入導致路徑的執(zhí)行,那么路徑是可達的,否則是不可達的。通常,有許多具有周期的無線路徑。即使沒有循環(huán),程序也可能有許多路徑要分析。它有五種基本程序結(jié)構(gòu):線性結(jié)構(gòu)、基本條件判斷、多分支條件判斷、while-do循環(huán)和do-while循環(huán)??刂屏鞣治鲋饕獜娜齻€方面分析程序結(jié)構(gòu):條件決策節(jié)點本身的復雜性;條件決策節(jié)點和循環(huán)節(jié)點對執(zhí)行路徑的影響;周期本身的復雜性。

數(shù)據(jù)流分析

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

信息流分析

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

檢測方法 編輯本段

程序儀表

程序插裝使被測程序在保持原有邏輯完整性的基礎(chǔ)上向程序中插入一些探針,并通過探針的執(zhí)行拋出程序的運行特征數(shù)據(jù)?;趯@些特征數(shù)據(jù)的分析,可以得到程序的控制流和數(shù)據(jù)流信息,進而得到邏輯覆蓋等動態(tài)信息。在程序中何處設置探針,如何設計探針以及如何對探針函數(shù)捕獲的數(shù)據(jù)進行編碼和解碼。

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

領(lǐng)域測試

領(lǐng)域測試的“領(lǐng)域”是指程序的輸入空間。領(lǐng)域測試方法基于對輸入空間的分析,其理想結(jié)果是檢查輸入空間中的每個輸入元素是否產(chǎn)生正確的結(jié)果。輸入空間可以分成不同的子空間,每個子空間對應不同的計算。在調(diào)查了被測程序的結(jié)構(gòu)后發(fā)現(xiàn),子空間的劃分是由程序中分支語句的謂詞決定的,輸入空間的一個元素以程序中某些特定語句的執(zhí)行結(jié)束。領(lǐng)域測試基于對輸入領(lǐng)域的分析,并選擇適當?shù)臏y試點進行測試。

符號測試

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

程序變異

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

覆蓋標準 編輯本段

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

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

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

白盒測試白盒測試

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

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

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

第一層是語句;

第二層是分支覆蓋;

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

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

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

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

方法選擇 編輯本段

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

1.在測試中,首先分析了靜態(tài)結(jié)構(gòu)。

2.采用靜態(tài)和動態(tài)相結(jié)合的方法。在靜態(tài)結(jié)構(gòu)分析、代碼檢查和靜態(tài)質(zhì)量度量之后,進行覆蓋測試。

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

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

5.不同的測試階段有不同的側(cè)重點。

應用領(lǐng)域 編輯本段

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

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

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

附件列表


0

詞條內(nèi)容僅供參考,如果您需要解決具體問題
(尤其在法律、醫(yī)學等領(lǐng)域),建議您咨詢相關(guān)領(lǐng)域?qū)I(yè)人士。

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

上一篇 子網(wǎng)掩碼    下一篇 虎牙直播

標簽

同義詞

暫無同義詞