軟件測試第二章單元測試



Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,*,第,2,章:單元測試,主講,:,林躍進,2024/12/9,1,3.1單元測試概述,定義:單元測試又稱程序模塊測試,是檢驗程序的最小的單位測試單元測試的主要任務,:,單元測試針對每個程序的模塊,主要測試,5,個方面的問題:,模塊接口、局部數(shù)據(jù)結(jié)構(gòu)、邊界條件、獨立的路徑、錯誤處理,2024/12/9,2,3.1單元測試概述,模塊接口,這是對模塊接口進行的測試,檢查進出程序單元的數(shù)據(jù)流是否正確模塊接口測試必須在任何其它測試之前進行2024/12/9,3,3.1單元測試概述,模塊接口測試至少需要如下的測試項目:,(1),調(diào)用所測模塊時的輸入?yún)?shù)與模塊的形式參數(shù)在個數(shù)、類型、順序上是否一致;,(2),所測模塊調(diào)用子模塊時,它輸入給子模塊的參數(shù)與子模塊中的形式參數(shù)在個數(shù)、類型、順序上是否一致;,(3),是否會修改只是作為輸入值的形式參數(shù),(4),調(diào)用標準函數(shù)的參數(shù)在個數(shù)、類型、順序上是否正確;,(5),全局變量的定義在各模塊中是否一致。
2024/12/9,4,3.1單元測試概述,局部數(shù)據(jù)結(jié)構(gòu),在模塊工作過程中,必須測試模塊內(nèi)部的數(shù)據(jù)能否保持完整性,包括內(nèi)部數(shù)據(jù)的內(nèi)容、形式及相互關(guān)系不發(fā)生錯誤2024/12/9,5,對于局部數(shù)據(jù)結(jié)構(gòu),應該在單元測試中注意發(fā)現(xiàn)以下幾類錯誤:,(1),變量從來沒有被使用,包括可能別的地方使用了外部變量或函數(shù)2),變量沒有初始化3),錯誤的類型轉(zhuǎn)換4),數(shù)組越界5),變量或函數(shù)名稱拼寫錯誤,包括使用了外部變量或者函數(shù)2024/12/9,6,3.1單元測試概述,邊界條件測試:,主要檢查臨界數(shù)據(jù)是否正確處理1,)普通合法數(shù)據(jù)是否正確處理;,(,2,)普通非法數(shù)據(jù)是否正確處理;,(,3,)邊界內(nèi)最接近邊界的(合法,/,非法)數(shù)據(jù)是否正確處理2024/12/9,7,3.1單元測試概述,獨立路徑測試,在單元測試中,最主要的測試是針對路徑的測試測試用例必須能夠發(fā)現(xiàn)由于計算錯誤、不正確的判定或不正常的控制流而產(chǎn)生的錯誤2024/12/9,8,3.1單元測試概述,常見的錯誤有:,死代碼,錯誤的計算優(yōu)先級;,精度錯誤,包括比較運算錯誤、賦值錯誤;,表達式的不正確符號,包括,=,=,=,!=,;,循環(huán)變量的使用錯誤,包括錯誤賦值。
2024/12/9,9,3.1單元測試概述,出錯處理,測試出錯處理的重點是模塊在工作中發(fā)生了錯誤,其中的出錯處理設施是否有效檢驗程序中的出錯處理可能面對的情況有:,2024/12/9,10,3.1單元測試概述,(1),是否檢查錯誤出現(xiàn),包括資源使用前后、其它模塊使用前后;,(2),出現(xiàn)錯誤是否進行處理,包括拋出錯誤、通知用戶、進行記錄3),錯誤處理是否有效,包括在系統(tǒng)干預前處理、報告和記錄的錯誤都應真實詳細2024/12/9,11,3.2 單元測試的執(zhí)行過程,單元測試的執(zhí)行過程,單元測試常常是和代碼編寫工作同時進行的,在完成了程序編寫、復查和語法正確性驗證后,就應進行單元測試用例設計在單元測試時,如果模塊不是獨立的程序,需要設置一些,輔助測試模塊,輔助測試模塊有兩種:,2024/12/9,12,3.2 單元測試的執(zhí)行過程,(,1,),驅(qū)動模塊,(Drive),用來模擬被測試模塊的上一級模塊,相當于被測模塊的主程序它接收數(shù)據(jù),將相關(guān)數(shù)據(jù)傳送給被測模塊,啟動被測模塊,并打印出相應的結(jié)果2,),樁模塊,(Stub),用來模擬被測模塊工作過程中所調(diào)用的模塊它們一般只進行很少的數(shù)據(jù)處理2024/12/9,13,1.單元測試,2024/12/9,14,3.2 單元測試的執(zhí)行過程,驅(qū)動模塊和樁模塊都是額外的開銷,雖然在單元測試中必須編寫,,但并不需要作為最終的產(chǎn)品提供給用戶。
2024/12/9,15,單元測試,#include,void iszero(int m),if(m!=0),printf(“%d”,m);,else printf(“%d”,1);,void main(void),int a5;,int i=0;,printf(“,輸入,5,個整數(shù),:n,”);,for(i=0;i=4;i+),scanf(“%d”,iszero(ai);,2024/12/9,16,3.3 單元測試的執(zhí)行過程,在代碼編寫完成后的單元測試工作主要分為兩個步驟:人工靜態(tài)檢查(靜態(tài)測試)和動態(tài)執(zhí)行跟蹤(動態(tài)測試)2024/12/9,17,3.3 單元測試的執(zhí)行過程,靜態(tài)測試是指測試不運行的部分,只是檢查和審閱動態(tài)測試是指通常意義上的測試,運行和使用軟件單元測試的依據(jù)是詳細設計和概要設計!,2024/12/9,18,3.3 單元測試的執(zhí)行過程,靜態(tài)測試,不運行程序,通過程序員本人或其它人員執(zhí)行人工檢查,主要檢查:,代碼風格和規(guī)則檢查,程序設計和結(jié)構(gòu)的檢查,業(yè)務邏輯檢查,同行評審:走讀、小組評審、審查p.23,),2024/12/9,19,靜態(tài)測試,(,1,)走讀,一般檢查代碼,也可以是檢查設計文檔。
一般是項目內(nèi)部的其它開發(fā)人員,不涉及公司高層或外部專家2024/12/9,20,靜態(tài)測試,(,2,)小組評審,由一個正式的組織對產(chǎn)品進行評價確認任何與需求規(guī)格、設計規(guī)格或標準不一致的地方或者在檢查后給出可替換的建議參與者主要是公司技術(shù)領(lǐng)導或權(quán)威公司及外部專家,主要適用于需求規(guī)格和概要設計的評審2024/12/9,21,靜態(tài)測試,(,3,)審查,遵循嚴格的過程,人員經(jīng)過培訓,檢查過程有標準,檢查針對實際的產(chǎn)品或半成品,目的是發(fā)現(xiàn)存在的錯誤參加人員:公司內(nèi)部設計、開發(fā)、測試、質(zhì)量等部門中的工作性相關(guān)的員工組成2024/12/9,22,靜態(tài)測試,詳細設計靜態(tài)測試(,p.25,),代碼靜態(tài)測試(,p.26,),2024/12/9,23,動態(tài)測試,動態(tài)測試,黑盒測試,白盒測試,2024/12/9,24,3.4 基于JUnit的單元測試,詳細見實驗指導書,2024/12/9,25,作業(yè),1,簡述單元測試的步驟,2,什么是驅(qū)動模塊和樁模塊?為下面的函數(shù)構(gòu)造一個驅(qū)動模塊,并至少設計,5,條測試用例/*,計算兩個整數(shù)的除法運算,將結(jié)果轉(zhuǎn)換為單一精度輸出*,/,float divide(int a,int b),float c;,if(b=0),printf(“,除數(shù)不能為,0,!”,);,return 0;,c=(float)a/b;,return c;,2024/12/9,26,。