軟體測試之 單元測試

2022-05-30 09:39:07 字數 3964 閱讀 7246

1)單元測試是對軟體基本組成單元進行的測試,如函式(fuction或procedure)或乙個類的方法(method)。這裡,基本單元不一定是指乙個具體的函式(fuction或procedure)或乙個類的方法(method),在具體實現時,也可能對應的是多個程式檔案中的一組函式。

2)在軟體系統中,單元也具有一些基本屬性,如:明確的功能、規格定義、明確的與其他部分的介面定義等,可清晰的與同一程式的其他單元劃分開來。

1)單元測試的目的在於發現各模板內部可能存在的各種錯誤,主要是基於白盒測試。

2)軟體產品不僅僅包含**,還包含各種文件,因此測試應從三方面考慮:

a.針對文件的測試;

b.針對**的測試;

c.針對文件和**是否一致的測試。

3)單元測試階段,對應的文件時詳細設計說明書,對應的**是單元**,因此單元測試的目的主要有三方面:

a.驗證單元**和詳細設計文件的一致性;

b.跟蹤詳細設計文件中設計的實現,發現詳細設計文件中存在的錯誤;

c.發現在編碼過程中引入的錯誤(編碼過程中引入的錯誤包含兩類:和設計不符引入的錯誤;和設計相符但由於編碼出現疏漏導致錯誤),這裡其實是針對文件和**是否一致的測試。

單元的常見錯誤一般出現在5個方面:**的穩定、易讀、規範、易維護、專業。

因此,單元測試的關注的重點有5點:單元介面、區域性資料結構、邊界條件、獨立路徑、出錯處理,下列一一介紹。

1)單元介面

介面實際上就是輸入輸出對應關係的集合,如果資料不能正確的輸入和輸出,就談不上進行其他測試,單元介面處常見錯誤:

a.被測單元的輸入輸出引數在個數、屬性、順序上和詳細設計中的描述不一致;

b.修改了只做輸入用的形式引數,可能會導致資料的錯誤修改;

c.約束條件通過形式引數來傳送,導致函式間的控制耦合增大(耦合是指兩個實體相互依賴於對方的乙個度量)。

2)區域性資料結構

在單元工作過程中,必須測試單元內部的資料能否保持完整性,包括內部資料的內容、形式及內部關係不發生錯誤。

對於區域性資料結構,應該在單元測試中注意發現以下幾類錯誤:

a.不正確或不一致的資料型別說明;

b.使用尚未賦值或尚未初始化的變數;

c.錯誤的初始值或錯誤的預設值;

d.變數名拼寫或書寫錯誤。

3)獨立路徑

對基本執行路徑和迴圈進行測試會發現大量的錯誤,常見的錯誤有:

a.運算的優先次序不正確或誤解了運算的優先次序;

b.運算的方式錯誤;

c.不同資料型別的比較;

d.關係表示式中不正確的變數和比較符;

e.「差1錯」。即不正確的多迴圈或少迴圈一次;

f.錯誤的或不可能的迴圈終止條件;

g.當遇到發散的迭代時不能終止的迴圈;

h.不適當地修改了迴圈變數等。

4)出錯處理

比較完善的單元設計要求能預見出錯條件,並設定適當的出錯處理,以便在出錯時,能對出錯程式重新作安排,保證其邏輯上的正確性,出錯處理模組常見的錯誤或缺陷有:

a.出錯的描述難以理解;

b.出錯的描述不足以對錯誤定位和確定出錯的原因(這個錯誤由系統的安全級別來定);

c.現實的錯誤與實際的錯誤不符;

d.對錯誤條件的處理不正確;

e.在對錯誤驚醒處理之前,錯誤條件已經引起系統的干預等。

5)邊界條件

邊界上出現錯誤是比較常見的,單元測試時,應當仔細的測試為限制資料處理而設定的邊界條件。

需要注意與邊界有關的資料型別如數值、字元、位置、數量、尺寸等,還需注意這些邊界的首個、最後乙個、最大值、最小值等特徵,常見錯誤出現情況:

a.在n次迴圈的第n次,取最大最小值時容易發生錯誤;

b.特別要注意資料流,控制流中剛好等於、大於、小於確定的比較值時出現錯誤的可能性。

在單元測試時,由於單元本身不是乙個獨立的程式,乙個完整的可執行的軟體系統並未構成,所以需要設定一些輔助測試單元,輔助測試單元有兩種:驅動單元和樁單元。

1)驅動單元(driver)

用來模擬被測試單元的上層單元,相當於被測函式的主程式,它接收測試資料,將相關資料傳送到被測單元,啟動被測單元,最後再輸出實測結果。當被測單元能完成相關功能時,也可以不要驅動單元。

驅動單元,主要完成以下幾個步驟

a.接受測試資料,包含測試用例的輸入和預期輸入;

b.把測試用例輸入傳送給要測試的單元,驅動被測單元執行;

c.將被測單元的實際輸出和預期輸出進行比較,得到測試結果;

d.將測試結果輸出到指定位置。

2)樁單元(stub)

指用來代替被測單元工作過程中呼叫的子單元,樁單元的功能是從測試角度模擬被測單元所呼叫的其他單元,樁單元需要針對不同的輸入,返回不同的期望值,模擬不同的功能。如果被測單元為底層函式嗎,則不需要設計樁單元。

樁單元的型別:系統函式、自定義函式。

樁單元模擬的單元可能是自定義函式:這些自定義函式可能尚未編寫完成,為了測試被測單元,需要構造樁單元來替代他們;或者可能存在錯誤,會影響測試結果,給分析被測單元造成困難,因此需要構造正確無誤的樁單元來達到隔離的目的。

3)構造單元的測試環境的主要工作

a.構造最小執行排程系統,即驅動單元,用以模擬被測單元的上一級單元;

b.模擬實現單元介面,即單元函式需呼叫的其他函式介面,即樁單元;

c.模擬生成測試資料和狀態,為單元執行準備動態環境。

一般的單元測試策略有3種:孤立的單元測試策略、自頂向下的單元測試策略、自底向上的單元測試策略。

1)孤立的單元測試策略(isolation unit testing)

a.方法:不考慮每個模組與其他模組之間的關係,為每個模組設計樁模組和驅動模組;

每個模組進行獨立的單元測試.

b.優點:最簡單,最容易操作;

可以達到高的結構覆蓋率;

可以並行開開展;

是純粹的單元測試。

c.缺點:樁函式和驅動函式工作量很大,效率低。

2)自頂向下的單元測試策略(top down unit testing )

a.方法:先對最頂層的單元進行測試,把頂層所呼叫的單元做成樁模組;

對第二層進行測試,使用上面已測試的單元做驅動模組;

如此類推直到測試完所有模組。

b.優點:可以節省驅動函式的開發工作量,測試效率較高。

c.缺點:隨著被測單元乙個乙個被加入,測試過程將變得越來越複雜,並且開發和維護的成本將增加。

3)自底向上的單元測試策略(bottom up unit testing)

a.方法:先對模組呼叫層次圖上最底層的模組進行單元測試,模擬呼叫該模組的模組做驅動模組;

然後再對上面一層做單元測試,用下面已被測試過的模組做樁模組;

以此類推,直到測試完所有模組。

b.優點:可以節省樁函式的開發工作量,測試效率較高。

c.缺點:不是純粹的單元測試,底層函式的測試質量對上層函式的測試將產生很大的影響。

1)單元測試計畫階段:完成單元測試計畫

2)單元測試設計階段:完成單元測試方案

3)單元測試實現階段:完成單元測試用例、單元測試教程、單元測試指令碼及資料檔案

4)單元測試執行階段:執行單元測試用例。修改發現的問題並進行回歸測試,提交單元測試報告

1)對全新的**或修改過的**進行測試;

2)單元測試根據單元測試方案和計畫進行,排除測試的隨意性;

3)必須保證單元測試計畫、單元測試方案、單元測試用例等經過評審;

4)當測試用力地測試結果與預期結果不一致時,單元測試的執行人員需如實記錄實際的測試結果;

5)只有當測試計畫中的結束標準達到時,單元測試才能結束;

6)對被測試單元需達到一定的**覆蓋率要求。

1)**靜態分析工具

2)**檢查工具

3)測試指令碼工具

4)覆蓋率檢測工具

5)記憶體檢測工具

6)專為單元測試設計的工具

軟體測試之單元測試

對於一般的大型程式,我們一般都會先進行單元測試,乙個單元一般是乙個子程式 乙個類 乙個函式 乙個模組等等,根據具體情況劃分。單元測試將注意力放在各個小的單元上,使得測試人員能夠相對容易的定位到錯誤的地方,同時由於把程式進行了模組化,所以可以多個單元模組同時測試。單元測試過程主要需要考慮兩個大點 設計...

單元測試之Django單元測試

每個應用,自帶tests.py 整合在django的專案檔案裡,更多是開發人員寫django自動的測試執行 3.1 前後置方法執行特點 django.test.testcase類主要由前 後置處理方法和test開頭的方法組成 特點 繼承於django.test.testcase 測試用例都是test...

軟體測試 Python 單元測試

數字轉布林型 class js def he self,i j 0s 0 while j i s j j 1 return simport unittest from com.tjb.tt.js import js 測試檔案不能使用 print 方法 class test1 unittest.tes...