江陰做網(wǎng)站百度秒收錄軟件工具
一、學(xué)習(xí)目的與要求
本章對單元測試進(jìn)行了詳細(xì)的介紹。通過本章的學(xué)習(xí),應(yīng)掌握單元測試的概念,了解單元測試的誤區(qū),掌握單元測試的策略、分析方法和用例設(shè)計方法。
二、考核知識點與考核目標(biāo)
(一)單元測試的概念(次重點)
- 理解:單元測試的概念
- 定義: 是在軟件開發(fā)過程中要進(jìn)行的最低價級別的測試活動,或者說是針對軟件設(shè)計的最小單位—程序模塊,進(jìn)行正確性檢驗的測試工作。
- 目的:發(fā)現(xiàn)每個程序模塊內(nèi)部可能存在的差錯
- 步驟:靜態(tài)檢查和動態(tài)執(zhí)行跟蹤
- 目標(biāo):驗證開發(fā)人員所編寫的代碼是否可以按照其所設(shè)想的方式執(zhí)行并產(chǎn)生符合預(yù)期值的結(jié)果
- 與集成測試的區(qū)別
類別 | 單元測試 | 系統(tǒng)測試 |
---|---|---|
對象不同 | 詳細(xì)設(shè)計 | 概要設(shè)計 |
方法不同 | 白盒測試 | 黑盒測試 |
內(nèi)容不同 | 模塊內(nèi)程序邏輯、功能測試 | 驗證各個接口、模塊組合是否達(dá)到預(yù)期 |
目的相同 | 發(fā)現(xiàn)開發(fā)過程的錯誤 |
- 與系統(tǒng)測試的區(qū)別
類別 | 單元測試 | 系統(tǒng)測試 |
---|---|---|
對象不同 | 詳細(xì)設(shè)計 | 需求規(guī)格說明書 |
層次不同 | 早期測試 | 后期測試 |
性質(zhì)不同 | 錯誤容易定位,且可并行測試 | 難定位錯誤 |
角度不同 | 開發(fā)人員 | 用戶 |
(二)單元測試環(huán)境(一般)
- 理解:單元測試環(huán)境
- 驅(qū)動模塊:相當(dāng)于被測模塊的主程序。它接收測試數(shù)據(jù),把這些數(shù)據(jù)傳送給被測模塊,最后輸出實測結(jié)果。
- 樁模塊:用以代替被測模塊調(diào)用的子模塊。樁模塊可以做少量的數(shù)據(jù)操作,不需要把子模塊所有功能都帶進(jìn)來,但不允許什么事情也不做。
(三)單元測試策略(重點)
- 理解:自頂向下策略
自頂向下的單元測試策略:
- 從頂層調(diào)用的單元做成樁模塊;
- 對第二層測試,使用上面已測試的單元做驅(qū)動模塊;
- 依次類推,直到全部單元測試結(jié)束。
- 優(yōu)點:在集成測試之前為系統(tǒng)提供早期的集成途徑,可以與詳細(xì)設(shè)計和編碼工作重疊進(jìn)行。
- 缺點:被樁模塊控制,測試過程會越來越復(fù)雜
- 理解:自底向上策略孤立測試
自底向上的單元測試策略:
- 先對模塊調(diào)用的最底層模塊進(jìn)行測試,模擬調(diào)用該模塊的模塊為驅(qū)動模塊;
- 其次,對上一層模塊進(jìn)行單元測試,用已經(jīng)被測試過的模塊做樁模塊,依次類推,直到全部單元測試結(jié)束。
- 優(yōu)點:不需要單獨設(shè)計樁模塊
- 缺點:過程會變復(fù)雜;周期會延長;維護(hù)成本會增加;頂層覆蓋率難以保證;不能與編碼,詳設(shè)同時進(jìn)行。
孤立測試的單元測試策略:
- 無需考慮每個模塊與其他模塊之間的關(guān)系,分別為每個模塊單獨設(shè)計樁模塊和驅(qū)動模塊,逐一完成所有單元模塊的測試。
- 優(yōu)點:簡單,易操作,時間短,覆蓋率高,可以并行。
- 缺點:成本高,需要設(shè)計多個樁模塊和驅(qū)動模塊。
(四)單元測試分析(次重點)
- 理解:單元測試分析
- 判斷得到的結(jié)果是否正確
- 判斷是否滿足所有的邊界條件
- 分析能否使用反向關(guān)聯(lián)檢查
- 分析能否使用其他手段來交叉檢查一下結(jié)果
- 分析是否可以強(qiáng)制一些錯誤發(fā)生(工具:EasyMock)
- 分析模塊接口
- 分析局部數(shù)據(jù)結(jié)構(gòu)
- 分析獨立路徑
- 分析出錯處理是否正確
(五)單元測試步驟(次重點)
- 理解:單元測試步驟
- 準(zhǔn)備階段
1)程序員培訓(xùn)
2)測試人員培訓(xùn)
3)準(zhǔn)備環(huán)境
4)確認(rèn)詳設(shè)
5)編寫測試用例- 編制階段
1)程序單元編制,并調(diào)試檢查
2)更正錯誤,修改源碼和測試用例- 代碼審查階段
1)靜態(tài)代碼審查
2)檢查算法邏輯
3)檢查模塊接口
4)檢查輸入?yún)?shù)
5)檢查接口調(diào)用
6)出錯處理
7)檢查語句正確
8)檢查規(guī)范
9)檢查風(fēng)格統(tǒng)一
10)檢查特殊字符
11)檢查是否可優(yōu)化、算法效率是否最高
12)檢查結(jié)構(gòu)是否清晰
13)檢查注釋
14)檢查文檔- 單元測試階段
1)設(shè)計測試用例
2)執(zhí)行測試用例
3)提交執(zhí)行結(jié)果- 評審、提交階段
1)進(jìn)行同級評審
2)給出評審結(jié)果
3)提交配置庫
(六)單元測試用例設(shè)計(重點)
- 應(yīng)用:單元測試用例設(shè)計
白盒測試覆蓋要求
- 所有獨立的執(zhí)行路徑必須覆蓋一次
- 判定真假情況至少覆蓋一次
- 循環(huán)的邊界和運行界限內(nèi)執(zhí)行循環(huán)體
- 測試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性
黑盒測試覆蓋要求
- 功能是否實現(xiàn)
- 性能是否滿足要求
- 是否有可選的其他測試特性
測試用例關(guān)鍵元素
- 初始狀態(tài)聲明
- 被測單元的輸入
- 實際測試代碼
- 期望結(jié)果
三、習(xí)題
- 單元測試中用來模擬被測模塊調(diào)用者的模塊是()。A.父模塊
B.子模塊
C.驅(qū)動模塊
D.樁模塊 - 不屬于單元測試內(nèi)容的是()。
A. 模塊接口測試
B. 局部數(shù)據(jù)結(jié)構(gòu)測試
C. 路徑測試
D. 用戶界面測試 - 在進(jìn)行單元測試時,常用的方法是______。
A. 采用白盒測試,輔之以黑盒測試
B. 采用黑盒測試,輔之以白盒測試
C. 只使用白盒測試
D. 只使用黑盒測試 - 單元測試有哪些步驟?各個步驟有哪些實施內(nèi)容?
單元測試的步驟
- 通常單元測試在編碼階段進(jìn)行。
- 在源程序代碼編制完成,經(jīng)過評審和驗證,確認(rèn)沒有語法錯誤之后,就開始進(jìn)行單元測試的測試用例設(shè)計。
- 利用設(shè)計文檔,設(shè)計可以驗證程序功能、找出程序錯誤的多個測試用例。
- 對于每一組輸入,應(yīng)有預(yù)期的正確結(jié)果。
- 模塊并不是一個獨立的程序,在考慮測試模塊時,同時要考慮它和外界的聯(lián)系,用一些輔助模塊去模擬與被測模塊相聯(lián)系的其它模塊。這些輔助模塊分為兩種:
a. 驅(qū)動模塊:相當(dāng)于被測模塊的主程序。它接收測試數(shù)據(jù),把這些數(shù)據(jù)傳送給被測模塊,最后輸出實測結(jié)果。
b. 樁模塊:用以代替被測模塊調(diào)用的子模塊。樁模塊可以做少量的數(shù)據(jù)操作,不需要把子模塊所有功能都帶進(jìn)來,但不允許什么事情也不做。- 被測模塊、與它相關(guān)的驅(qū)動模塊及樁模塊共同構(gòu)成了一個“測試環(huán)境”。
單元測試內(nèi)容
- 模塊接口測試:對通過被測模塊的數(shù)據(jù)流進(jìn)行測試。為此,對模塊接口,包括參數(shù)表、調(diào)用子模塊的參數(shù)、全程數(shù)據(jù)、文件輸入/輸出操作都必須檢查。局部數(shù)據(jù)結(jié)構(gòu)測試:設(shè)計測試用例檢查數(shù)據(jù)類型說明、初始化、缺省值等方面的問題,還要查清全程數(shù)據(jù)對模塊的影響。
- 路徑測試:選擇適當(dāng)?shù)臏y試用例,對模塊中重要的執(zhí)行路徑進(jìn)行測試。對基本執(zhí)行路徑和循環(huán)進(jìn)行測試可以發(fā)現(xiàn)大量路徑錯誤。
- 錯誤處理測試:檢查模塊的錯誤處理功能是否包含有錯誤或缺陷。例如,是否拒絕不合理的輸入;出錯的描述是否難以理解、是否對錯誤定位有誤、是否出錯原因報告有誤、是否對錯誤條件的處理不正確;在對錯誤處理之前錯誤條件是否已經(jīng)引起系統(tǒng)的干預(yù)等。
- 邊界測試:要特別注意數(shù)據(jù)流、控制流中剛好等于、大于或小于確定的比較值時出錯的可能性。對這些地方要仔細(xì)地選擇測試用例,認(rèn)真加以測試。
此外,如果對模塊運行時間有要求的話,還要專門進(jìn)行關(guān)鍵路徑測試,以確定最壞情況下和平均意義下影響模塊運行時間的因素。這類信息對進(jìn)行性能評價是十分有用的。單元測試的優(yōu)點:
- 它是一種驗證行為。
程序中的每一項功能都是測試來驗證它的正確性。它為以后的開發(fā)提供支援。就算是開發(fā)后期,我們也可以輕松的增加功能或更改程序結(jié)構(gòu),而不用擔(dān)心這個過程中會破壞重要的東西。而且它為代碼的重構(gòu)提供了保障。這樣,我們就可以更自由的對程序進(jìn)行改進(jìn)。- 它是一種設(shè)計行為。
編寫單元測試將使我們從調(diào)用者觀察、思考。特別是先寫測試(test-first),迫使我們把程序設(shè)計成易于調(diào)用和可測試的,即迫使我們解除軟件中的耦合。- 它是一種編寫文檔的行為。
單元測試是一種無價的文檔,它是展示函數(shù)或類如何使用的最佳文檔。這份文檔是可編譯、可運行的,并且它保持最新,永遠(yuǎn)與代碼同步。- 它具有回歸性。
自動化的單元測試避免了代碼出現(xiàn)回歸,編寫完成之后,可以隨時隨地的快速運行測試。
- 簡述單元測試的目的和意義。
目的:是暴漏出失敗和錯誤。失敗的可能性是可預(yù)期的,并且可以使用斷言來進(jìn)行檢查。
而錯誤則是不可預(yù)期的問題意義:
- 提前發(fā)現(xiàn)問題并解決可以節(jié)約時間
- 是測試階段的基礎(chǔ),為后期的集成測試和系統(tǒng)測試做好準(zhǔn)備;
- 對單元獨立測試,容易發(fā)現(xiàn)問題,減少成本。
- 單元測試策略主要有哪些?并試描述這些策略?
單元測試策略主要有三種方式:
- 自頂向下的單元測試策略:從頂層調(diào)用的單元做成樁模塊;對第二層測試,使用上面已測試的單元做驅(qū)動模塊;依次類推,直到全部單元測試結(jié)束。
- 自底向上的單元測試策略:先對模塊調(diào)用的最底層模塊進(jìn)行測試,模擬調(diào)用該模塊的模塊為驅(qū)動模塊;其次,對上一層模塊進(jìn)行單元測試,用已經(jīng)被測試過的模塊做樁模塊,依次類推,直到全部單元測試結(jié)束。
- 孤立測試的單元測試策略:無需考慮每個模塊與其他模塊之間的關(guān)系,分別為每個模塊單獨設(shè)計樁模塊和驅(qū)動模塊,逐一完成所有單元模塊的測試。
- 什么是驅(qū)動模塊?什么是樁模塊
單元本身無法構(gòu)成一個切實可運行的程序系統(tǒng),所以我們需要為單元測試來開發(fā)樁模塊和驅(qū)動模塊,從而完成我們的單元測試目的,這是樁模塊和驅(qū)動模塊的作用。
- 驅(qū)動模塊是用來模擬被測試模塊的上一級模塊,相當(dāng)于被測模塊的主程序。它接收數(shù)據(jù),將相關(guān)數(shù)據(jù)傳送給被測模塊,啟用被測模塊,并打印出相應(yīng)的結(jié)果。
- 樁模塊(Stub) 是指模擬被測試的模塊所調(diào)用的模塊,而不是軟件產(chǎn)品的組成的部分。
- 單元測試是根據(jù)在詳細(xì)設(shè)計階段中產(chǎn)生的規(guī)格說明進(jìn)行的。
- 在單元測試中, 樁模塊用來代替被測模塊的子模塊。
- 單元測試中用來模擬被測模塊調(diào)用者的模塊是
A父模塊
B子模塊
C驅(qū)動模塊
D樁模塊 - 在軟件底層進(jìn)行的測試稱為()
A系統(tǒng)測試
B集成測試
C單元測試
D功能測試 - 典型的軟件測試過程模型是()
A. V模型、W模型、H模型、迭代模型
B. V模型、W模型、H模型、螺旋模型
C. X模型、W模型、H模型、V模型
D. X模型、W模型、H模型、增量模型 - 用戶在真實的工作環(huán)境中使用軟件,用于測試系統(tǒng)的用戶友好性等。這種測試是()
A. 集成測試
B. 系統(tǒng)測試
C. Alpha測試
D. Beta測試 - 幾乎沒有產(chǎn)品計劃、進(jìn)度安排和正規(guī)的開發(fā)過程的軟件開發(fā)模式是()
A大棒模式
B邊寫邊改模式
C瀑布模式
D快速原型開發(fā)模式 - 軟件測試不需要了解軟件設(shè)計的()
A功能
B內(nèi)部結(jié)構(gòu)
C處理過程
D條件 - 實際的邏輯覆蓋測試中,一般以( )為主設(shè)計測試用例。
A. 條件覆蓋
B. 判定覆蓋
C. 條件組合覆蓋
D. 路徑覆蓋 - 以下不屬于單元測試優(yōu)點的一項是()
A它是一種驗證行為
B它是一種設(shè)計行為
C它是一種編寫文檔的行為
D它是一種評估行為 - 為特定的目的而設(shè)計的一組測試輸入、執(zhí)行條件和預(yù)期的結(jié)果叫做測試用例
- 用于觸發(fā)被測模塊的軟件模塊叫做驅(qū)動模塊_。