單元測試及白盒測試技術_第1頁
單元測試及白盒測試技術_第2頁
單元測試及白盒測試技術_第3頁
單元測試及白盒測試技術_第4頁
單元測試及白盒測試技術_第5頁
已閱讀5頁,還剩70頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

單元測試與白盒測試技術Thursday,February2,2023內容介紹單元測試介紹單元測試設計單元測試用例設計單元測試執(zhí)行單元測試評估實施時的原則和步驟單元測試中的白盒測試設計內容介紹單元測試介紹單元測試設計單元測試用例設計單元測試執(zhí)行單元測試評估實施時的原則和步驟單元測試中的白盒測試設計單元測試介紹單元測試是對軟件基本組成單元進行測試?;締卧梢允呛瘮?,類,類的方法,也可以是任何具有明確的功能、規(guī)格定義、明確的接口定義、并且其規(guī)模一般比較小。單元測試介紹(與系統(tǒng)測試相比較)單元測試的重點在于發(fā)現(xiàn)程序設計或實現(xiàn)的邏輯錯誤,基本輸入白盒測試范疇。使問題及早暴露,便于問題的定位解決。允許多個測試單元的測試并行展開。(與集成測試相比較)單元測試的測試對象是對應詳細設計中所描述的設計單位。而集成測試的對象是在概要設計中規(guī)劃的模塊及這些模塊間的組合。單元測試介紹單元測試過程分為計劃,設計,實現(xiàn),執(zhí)行,評估等幾個步驟。單元測試介紹單元測試過程分為計劃,設計,實現(xiàn),執(zhí)行,評估等幾個步驟計劃:確定測試需求,制定測試策略,確定測試所用資源(人力,設備),創(chuàng)建測試任務的時間表。設計:設計單元測試模型,制定測試方案,確認并結構化測試過程。實現(xiàn)單元測試:參考測試模型和測試方案,制定具體的測試用例,創(chuàng)建可重用的測試腳本。執(zhí)行:根據單元測試的方案,用例對單元進行測試,驗證測試的結果并記錄測試過程中出現(xiàn)的缺陷。評估:對單元測試的結果進行評估。主要進行測試完備性評估。內容介紹單元測試介紹單元測試設計單元測試用例設計單元測試執(zhí)行單元測試評估實施時的原則和步驟單元測試中的白盒測試設計2:單元測試設計主要包括:單元測試模型的設計。測試項目的設計。2.1單元測試模型的設計(1)構造單元測試模型的主要工作構造最小運行調度系統(tǒng):驅動模塊模擬實現(xiàn)單元接口:樁模塊模擬生成測試數據或狀態(tài),為單元運行準備動態(tài)環(huán)境。還需要考慮對測試過程的支持測試結果的保留對測試覆蓋率的紀錄測試過程的自動化2.1單元測試模型的設計(2)單元測試環(huán)境示意圖驅動模塊被測單元樁模塊1樁模塊2樁模塊3測試用例測試結果2.1單元測試模型的設計(3)驅動模塊一般只是一個接受測試數據,并把數據傳遞給被測模塊,然后打印相關結果的“主程序”??梢钥紤]自動獲取測試數據的功能。樁模塊替代那些被調用的模塊,作少量的數據操作。保存或打印入口處的信息。插裝代碼用以紀錄單元測試中覆蓋率的信息。如果對某個單元的驅動模塊和樁模塊很難測試,那么可以考慮把這個單元的測試推遲到集成測試階段。2.2測試項目的設計(1)測試項目是測試用例的總則,根據測試需求設計測試點。設計測試項目的時候,可以從功能覆蓋和代碼覆蓋兩個角度進行考慮。2.2測試項目的設計(2)功能覆蓋屬于黑盒測試的范疇。指出測試用例是否已經覆蓋了程序應該提供的功能。功能覆蓋率是考核單元測試質量的一個關鍵指標。2.2測試項目的設計(3)代碼覆蓋(邏輯覆蓋)是考核單元測試質量的一個關鍵指標。是常用的白盒測試方法,包括:語句覆蓋:設計若干測試用例,使得每一個可執(zhí)行語句至少執(zhí)行一次。判斷覆蓋:設計若干測試用例,使得程序中每個判斷的取真分支和取假分支都至少執(zhí)行一次。條件覆蓋:設計若干測試用例,運行被測試程序,使得程序中每個判斷的每個條件的可能取值至少執(zhí)行一次。2.2測試項目的設計(4)代碼覆蓋(2)對于比較復雜的覆蓋標準,難以進行100%的覆蓋測試。此時一般使用測試率表示。不同的測試對象可以設定不同的測試覆蓋率。比如:核心代碼:100%共享資源庫:100%非核心代碼:90%覆蓋率的統(tǒng)計可以用插裝代碼進行??梢杂泄ぞ哌M行自動化插裝代碼。內容介紹單元測試介紹單元測試設計單元測試用例設計單元測試執(zhí)行單元測試評估實施時的原則和步驟單元測試中的白盒測試設計3單元測試用例設計3.1單元測試用例編寫原則3.2單元測試用例設計方法3.1單元測試用例編寫原則(1)單元測試用例設計的根據是軟件的設計說明書。完整的單元測試需要測試:被測單元作了它應該做的事情。被測單元沒有作不希望它作的事情。設計用例可以按照5個基本步驟進行。3.1單元測試用例編寫原則(2)基本步驟如下:為系統(tǒng)運行起來而設計用例單元測試用例中,第一個測試用例一般是使用最簡單的方法執(zhí)行被測單元。當這個用例可以被執(zhí)行時,說明測試環(huán)境和測試單元是可用的。為正向測試而設計用例閱讀相關的設計說明,每一個測試用例就是通過有針對性地測試說明書中的一項或者多項內容。用以驗證設計說明書所對應的功能或性能能否實現(xiàn)。3.1單元測試用例編寫原則(3)為逆向測試而設計用例用來驗證被測單元沒有做不應該做的事情。主要依靠錯誤猜測的方法進行測試用例的構造。為滿足特殊要求而設計用例從系統(tǒng)的性能、安全性、保密性的角度來設計測試用例。為代碼覆蓋而設計用例為了保證特定的測試覆蓋目標,可能還需要補充一些測試用例。3.2單元測試用例設計方法常用的設計方法有:規(guī)范(規(guī)格)導出法等價類劃分法邊界值分析法狀態(tài)轉移測試法分支測試法條件測試法數據定義-使用測試法內部邊界值測試法錯誤猜測法單元測試用例-規(guī)范導出法(1)根據相應的規(guī)范描述來設計測試用例。每個測試用例被用來測試一個或多個規(guī)范陳述句?;旧鲜歉鶕愂鲆?guī)范所用語句的順序來相應地為被測斷垣設計測試用例。這個方法在用例和規(guī)范陳述之間做到了很好的對應。加強了規(guī)范的可讀性和可維護性。是一種正向的測試技術,需要逆向的測試技術對測試用例進行補充。當規(guī)范中的某種情形需要不同的處理的時候,每個陳述句可能需要多個用例。單元測試用例-規(guī)范導出法(2)例子:計算平方根的函數的規(guī)范(1)輸入:實數;輸出:實數規(guī)范:當輸入一個0或比0大的數的時候,返回其正平方根;當輸入一個小于0的數時,顯示錯誤信息“平方根非法-輸入值小于0”并返回0;庫函數Print-Line可以用來輸出錯誤信息。單元測試用例-規(guī)范導出法(3)由規(guī)范的3個陳述,可以得到兩個用例用例1:輸入4,輸出應該為2。對應于第一個陳述(當輸入一個0或比0大的數時…)用例2:輸入-1,輸出0,并顯示錯誤提示信息。對應于第二,第三個陳述(當輸入一個小于0的數時,顯示錯誤信息“平方根非法-輸入值小于0”并返回0;庫函數Print-Line可以用來輸出錯誤信息。)單元測試用例-等價類劃分法(1)等價類劃分法是一種正式的測試用例設計方法.基于對被測單元的輸入、輸出所作的劃分。對每一個劃分中的所有輸入、被測單元有等價的行為。假設某一特定的等價類中的所有值對于測試目的來說是等價的。那么可以在每個等價類中尋找一個值作為測試用例。當軟件比較復雜的時候,等價類的劃分也很復雜?;旧鲜且环N正向測試技術。單元測試用例-等價類劃分法(2)對于前面的例子:可以考慮作出如下劃分輸入(i)<0和(ii)>0。輸出(a)>=0和(b)Error。測試用例有兩個:輸入4,輸出2。對應于(ii)和b輸入-10,輸出0和錯誤提示。對應于(i)和(b)。單元測試用例-等價類劃分法(3)實際上,通常復雜程度的程序就難以找到嚴格的等價類。如果考慮白盒的方法,等價類的劃分準則可以是:具有相同(類似)的執(zhí)行路徑的輸入。在例子中,如果對于輸入大于0的時的處理有不同的方法,那么我們把輸入大于0的劃分繼續(xù)細化。單元測試用例-邊界值分析法(1)使用等價類測試方法相同的等價類劃分。只是邊界值分析假定錯誤更多地存在于劃分的邊界上,因此在邊界上以及兩側的情況設計測試用例。邊界值方法在軟件變得復雜的時候會變得不實用。對于非向量類型的值(比如枚舉值),邊界分析沒有意義。有些邊界值在軟件的實際使用中很少出現(xiàn)。由這樣的用例找出的錯誤意義比較小。單元測試用例-邊界值分析法(2)對于前面的例子:劃分(ii)的邊界為0和無窮大;劃分(i)的邊界為最小負實數和0;劃分a有一個邊界0。由此得到以下用例:輸入{最小負實數}輸入{絕對值很小的負數}輸入0輸入{絕對值很小的實數}輸入{最大正實數}單元測試用例-狀態(tài)轉移測試法適用于以狀態(tài)機作為模型或設計為狀態(tài)的單元模塊。通過能導致狀態(tài)遷移的事件來測試狀態(tài)之間的轉換??梢栽O計逆向測試用例。比如狀態(tài)和事件的非法組合。單元測試用例-分支測試法(1)根據單元中控制流分支或判斷點來設計測試用例。通常用來達到一定的覆蓋率?!昂诤小毙问降姆种y試“猜測”那里有分支,并設計相應的用例去測試該分支。類似于等價類劃分?!鞍缀小毙问饺缦拢航o定一個結構化的規(guī)格說明,說明單元中的控制流,就可以設計測試用例來測試其中的分支。單純使用功能規(guī)格說明會導致分支遺漏設計分支測試的時候,不應該忽略整體的功能。單元測試用例-分支測試法(2)對于前面的例子,假設有如下的測試用例:1、輸入4;2、輸入-10。對于這個單元,有四種不同的實現(xiàn)ifinput<0then callprint_line“Squarerooterror-illegalnegativeinput” return0else calculatetheanswer returntheanswerend_if 實現(xiàn)1單元測試用例-分支測試法(3)例子的不同實現(xiàn)ifinput<0then callprint_line“Squarerooterror-illegalnegativeinput” return0elseifinput==0thenreturn0elsecalculatetheanswerreturntheanswerend_if 實現(xiàn)2callco-processortocalculatetheanswerexamineco-processorstatusregistersifstatus=errorthen callprint_line“Squarerooterror-illegalnegativeinput” return0else returntheanswerend_if 實現(xiàn)3單元測試用例-分支測試法(3)例子的不同實現(xiàn)(續(xù))ifinput<0then callprint_line“Squarerooterror-illegalnegativeinput” return0elseifinput==0thenreturn0elsecalculatethefirstapproximationLOOP calculateerror EXIT_LOOPWHENerror<desiredaccuracy adjustapproximationEND_LOOPreturntheanswerend_if 實現(xiàn)4單元測試用例-條件測試法(1)條件測試法的目標是測試在每個邏輯條件的單個成分及他們的組合情況下,程序是正確的??梢允褂枚鄠€用例來達到一定的覆蓋率。比如:MCDC(ModifiedConditionDecisionCoverage)白盒測試技術。比較適合于有結構化規(guī)格說明的單元。它提供了一個全面的測試,包括復雜條件,編程和設計錯誤多發(fā)區(qū)域,以及分支測試不能達到的區(qū)域。單元測試用例-條件測試法(2)考慮前面的例子:ifinput<0then callprint_line“Squarerooterror-illegalnegativeinput” return0elseifinput==0thenreturn0elsecalculatethefirstapproximationLOOP calculateerror EXIT_LOOPWHEN(error<desiredaccuracy)or(iterations=10) adjustapproximationEND_LOOPreturntheanswerend_if 實現(xiàn)4單元測試用例-條件測試法(3)測試用例就要證明error<desiredaccuracy和iterations=10都能夠成立。測試用例1:10次迭代,每次誤差都大于期望誤差。顯示條件iterations=10單獨滿足。測試用例2:2次迭代后,誤差小于期望誤差。error<desiredaccuracy單獨滿足。單元測試用例-數據流法(1)又稱為數據定義-使用測試法。數據定義是指數據項被賦值的地方,數據使用是指數據項被讀或使用的地方。目的是設計測試用例,以驅動執(zhí)行數據定義和使用之間的路徑。用例設計的第一步是列出所有的數據定義使用對。然后根據定義-使用對來設計相應的用例。單元測試用例-數據流法(2)前面的例子定義使用1InputroutineBythemathsco-processor2Co-processorstatusTestforstatus=error3ErrormessageByPrint_Line4RETURN0Bythecallingunit5Answerbyco-processorRETURNtheanswer6RETURNtheanswerBythecallingunit單元測試用例-數據流法(3)測試用例設計如下:測試用例1:輸入4,返回2。測試定義-使用對1,2,5,6。測試用例2:輸入-10,返回0,輸出“平方根錯誤…”。測試定義使用對1,2,3,4。單元測試用例-內部邊界值法(1)大多數情況下,可以從單元的功能規(guī)格說明中導出等價類和邊界值測試。但是,在實現(xiàn)的時候可能會引入其他的邊界。測試需要增加新的等價類。前面的例子中,如果從效率上考慮,可能會根據輸入的大小,調用不同的處理方法。此時,需要按照單元內部的結構再細化等價類。輸入的等價類分為:input<0;input>=0&&input<100;input>=100單元測試用例-內部邊界值法(2)if(input>=100)then usemethod1tocalculatetherootelse usemethod2tocalculatetheroot.錯誤猜測法基于經驗和其他一些測試技術。在經驗的基礎上,測試者猜測錯誤的類型及在特定的軟件中錯誤發(fā)生的位置,類型,并設計測試用例去發(fā)現(xiàn)他們??赡苄枰鶕涷灒玫揭粋€可能錯誤列表。然后根據這個列表去生成用例。純粹依賴于經驗。一般只能作為輔助方法。內容介紹單元測試介紹單元測試設計單元測試用例設計單元測試執(zhí)行單元測試評估實施時的原則和步驟單元測試中的白盒測試設計4單元測試的執(zhí)行(1)測試中模擬運行環(huán)境的程序執(zhí)行精確性和測試結論有關。在單元程序測試的時候,需要考慮所有可能影響單元測試結果的因素。這些因素包括:隱性輸入,關聯(lián)系統(tǒng)。可以考慮使用一些工具來完成設置。4單元測試的執(zhí)行自動測試可以大大提高測試執(zhí)行的效率,便于回歸測試。可以使用商業(yè)化的測試工具。也可以考慮自行開發(fā)一些工具。自動測試通過預定義的腳本文件將測試用例逐條放入文件。由驅動程序讀取文件,驅動被測單元,將得到的結果存放在文件中(或者自動比較)。和界面有關的測試,可以通過Record&Replay工具進行。但是要注意模塊化。內容介紹單元測試介紹單元測試設計單元測試用例設計單元測試執(zhí)行單元測試評估實施時的原則和步驟單元測試中的白盒測試設計5單元測試的評估單元測試完成后,需要對測試效果進行評估:測試完備性評估:檢查測試過程中是否已經執(zhí)行了所有的測試用例。代碼覆蓋率評估:根據覆蓋率工具提供的覆蓋情況進行評估??赡芤驗槟承┰蚴沟酶采w率達不到要求。不可能路徑和條件不可達的或者冗余的代碼。不充分的測試用例。為了覆蓋率而拼湊測試用例是低效率的。內容介紹單元測試介紹單元測試設計測試用例應用方法單元測試執(zhí)行單元測試評估實施時的原則和步驟單元測試中的白盒測試設計6實施時的原則和步驟(1)總則:排除測試的隨意性,使得測試方法化,流程化精心制定測試計劃嚴格評審測試計劃嚴格執(zhí)行測試計劃系統(tǒng)分析測試結果并提交報告。6實施時的原則和步驟(2)制定測試計劃/方案重點是測試用例的設計,必須按照有關設計方法進行用例設計。白盒測試法中的邏輯覆蓋測試:語句覆蓋,判斷覆蓋,判定-條件覆蓋,條件-組合覆蓋、路徑覆蓋,…黑盒測試中的等價類劃分法,邊界值分析法,錯誤推測方法等。6實施時的原則和步驟(3)測試計劃評審由測試人員進行,開發(fā)人員配合,對測試計劃進行評審和修改,并最后達成最終計劃。評審內容包括:方法性,合理性,全面性和最優(yōu)性。測試計劃執(zhí)行由測試操作人員按照指定的測試計劃流程化地進行。及時反饋問題。保證按照測試計劃要求實施。當測試過程比較規(guī)整化的時候,可以考慮由開發(fā)人員自身執(zhí)行。6實施時的原則和步驟(4)測試結果分析并提交報告測試人員和開發(fā)人員共同對測試結果進行分析,歸類,給出錯誤原因和解決方法,對結果進行報告和歸檔。測試文檔報告包含如下內容:單元名稱(id)和描述;單元的目的和功能簡單描述;單元和其他單元的依賴關系;測試用例測試環(huán)境、過程和步驟地描述實際測試結果錯誤跟蹤分析測試人員和完成時間測試評審其它情況內容介紹單元測試介紹單元測試設計單元測試用例設計單元測試執(zhí)行單元測試評估實施時的原則和步驟單元測試中的白盒測試設計7單元測試中的白盒測試設計白盒測試主要檢查程序的內部結構、邏輯、循環(huán)和路徑。常用方法有:邏輯覆蓋和基本路徑覆蓋按照覆蓋目標不同,邏輯覆蓋有可以分為:語句覆蓋,判定覆蓋,判定-條件覆蓋、條件組合覆蓋以及路徑覆蓋。白盒測試的模塊例子(1)程序流程框圖a(A>1)and(B=0)(A=2)or(X>0)X=X+1X=X/AFFTTbcde白盒測試的模塊例子(2)4個可能的路徑以及應該滿足的表達式L1(ace):MandNL2(abd):~Mand~NL3(abe):~MandNL4(acd):Mand~N其中M={(A>1)and(B=0)};

N={(A=2)or(X/A>1)}語句覆蓋語句覆蓋:就是指設計若干個測試用例,使得用這些測試用例執(zhí)行測試之后使得每一條可執(zhí)行語句至少被執(zhí)行一遍。對于前面的例子,L1包含了所有的可執(zhí)行語句,所以根據L1來設計測試用例就可以達到100%語句覆蓋。用例如下:{input(A,B,x);output(A,B,x)}={(2,0,4),(2,0,3)}語句覆蓋的不足語句覆蓋可以保證檢驗了每一個可執(zhí)行語句。但是不能保證用于控制的邏輯運算得到充分的檢驗。比如第一個邏輯運算中的and錯寫成了or,最后的結果仍然成立。語句覆蓋是最弱的邏輯覆蓋。if(A>1)and(B=0) x=x/A;if(A=2)or(X>0) x=x+1;判斷覆蓋又稱為分支覆蓋:設計若干個測試用例,執(zhí)行測試,使得被測單元中的每個判斷的取值TRUE和FALSE分支至少經歷一次。對于判斷(A>1)and(B=0)和(A=2)or(X>0)分別測試其true,false分支??梢赃x擇L1,L2組合或者L3,L4組合。對于L1,L2組合,L1:{(2,0,4),(2,0,3)}L2:{(1,0,-1),(1,0,-1)};對于L3,L4組合,L1:{(2,1,1),(2,1,2)}L2:{(3,0,3),(3,1,1)};判斷覆蓋的不足復合判斷中,某個子判斷的錯誤不一定引起整個判斷的值的改變。這樣的錯誤可能被漏掉。比如:使用上面定義的測試的時候,如果第二個判斷中X>0成為了X<10,最后的結果還是一樣的。兩組測試用例都不能測試這些值。彌補這個缺陷的是條件覆蓋。條件覆蓋(1)設計若干個用例,執(zhí)行測試,使得程序中每個判斷的每個條件的可能取值至少執(zhí)行一次。條件包括:A>1:T1 notA>1:F1B=0:T2 notB=0:F2A=2:T3 notA=2:F3x>1:T4 notx>1:F4if(A>1)and(B=0) x=x/A;if(A=2)or(X>0) x=x+1;條件覆蓋(2)下面的兩組測試用例都滿足條件覆蓋要求:測試用例通過路徑條件取值覆蓋分支{(1,0,3),(1,0,4)}abe(L3)F1,T2,F3,F4b,e{(2,1,1),(2,1,2)}abe(L3)T1,F2,T3,F4b,e測試用例通過路徑條件取值覆蓋分支{(2,0,4),(2,0,3)}L1T1,T2,T3,T4c,e{(1,0,1),(1,0,1)}L2F1,T2,F3,F4b,d{(2,1,1),(2,1,2)}L3T1,F2,T3,F4b,e條件覆蓋(3)不足之處:雖然可以保證每個條件都取不同的值,但是不能保證每個判斷都取不同的值。有時甚至不能滿足分支覆蓋的要求。比如前面的第一組用例。使用判斷-條件覆蓋來彌補這個不足。判斷-條件覆蓋(1)判斷-條件覆蓋就是設計足夠的測試用例,使得判斷中每個條件的所有可能取值至少執(zhí)行一次,同時每個判斷的所有可能判斷結果至少執(zhí)行一次。測試用例的例子:測試用例通過路徑條件取值覆蓋分支{(2,0,4),(2,0,3)}ace(L1)T1,T2,T3,T4c,e{(2,1,1),(2,1,2)}abd(L2)F1,F2,F3,F4b,d判斷-條件覆蓋(2)判斷-條件覆蓋的不足之處:某些條件的值錯誤的時候,判斷的值依舊可能是正確的。此時,有關這個條件的錯誤可能沒有被發(fā)現(xiàn)。(A>1)AND(B=0),如果第一個條件不成立,那么不管

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論