軟體測試之如何編寫單元測試用例
單元測試是以程式設計說明書為指導,測試模組範圍內的重要控制路徑,以揭露錯誤。
當程式編好以後,將它錄製在媒體上,或者直接由終端鍵盤輸入到機中進行除錯。測試的相對複雜性和所發現的錯誤受到單元測試所限定的範圍的限制。它在執行的過程中緊密的依照程式框架對模組進行測試(除錯),測試包含入口和出口的引數,輸入和輸出資訊,錯誤處理資訊,部分邊界數值測試。需要在6個方面對所測模組進行檢查。
1. 模組介面測試
模組介面測試是單元測試的基礎,當模組通過外部裝置進行輸入/輸出操作時,只有在資料能正確流入、流出模組的前提下,模組才能完成他的功能。
模組介面測試應考慮下列因素:
★ 呼叫
★ 呼叫其他模組時所給實際引數的個數是否與被調模組的形參個數相同;
★ 呼叫其他模組時所給實際引數的屬性是否與被調模組的形參屬性匹配;
★ 呼叫預定義函式時所用引數的個數、屬性和次序是否正確;
★ 輸入的實際引數與形式引數的個數是否相同;
★ 輸入的實際引數與形式引數的屬性是否匹配;
★ 輸入的實際引數與形式引數的量綱是否一致;
★ 是否修改了只做輸入用的形式引數;
★ 是否存在與當前入口點無關的引數引用;
★ 是否修改了只讀型引數;
★ 對全程變數的定義各模組是否一致;
★ 是否把某些約束作為引數傳遞。
★ 輸出給標準函式的引數在個數、屬性、順序上是否正確;
★ 限制是否通過形式引數來傳送;
★ 檔案屬性是否正確;
★ OPEN/CLOSE語句是否正確;
★ 格式說明與輸入輸出語句是否匹配;
★ 緩衝區大小與記錄長度是否匹配;
★ 檔案使用前是否已經開啟;
★ 是否處理了輸入
★ 輸出資訊中是否有文字性錯誤;
★ 在結束檔案處理時是否關閉了檔案。
2.區域性資料結構測試
區域性資料結構是為了保證臨時儲存在模組內的資料在程式執行過程中完整、正確的基礎。模組的區域性資料結構往往是錯誤的根源,力求發現最常見的幾類錯誤:
★ 不合適或不相容的型別說明;
★ 變數無初值;
★ 變數初始化或省缺值有錯;
★ 不正確的變數名(拼錯或不正確地截斷);
★ 出現上溢、下溢和地址異常。
3.路徑測試
應對模組中重要的執行路徑進行測試。由於錯誤的計算、不正確的比較或不正常的控制流而導致執行路徑的錯誤。路徑錯誤應考慮下列因素:
★ 運算的優先次序不正確或誤解了運算的優先次序;
★ 運算的方式錯,即運算的物件彼此在型別上不相容;
★ 演算法錯;
★ 初始化不正確;
★ 浮點數運算精度問題而造成的兩值比較不等;
★ 關係表示式中不正確的變數和比較符號表示不正確;
★ 不正確地多迴圈一次或少迴圈一次;
★ 錯誤的或不可能的迴圈終止條件;
★ 當遇到發散的迭代時不能終止的迴圈;
★ 不適當地修改了迴圈變數等。
4. 邊界條件測試
邊界條件測試是單元測試中最重要的一項任務。軟體經常在邊界上失效,邊界條件測試是一項基礎測試,也是後面系統測試中的功能測試的重點,邊界測試執行的較好,可以大大提高程式健壯性。邊界條件測試應考慮下列因素:
★ 程式內有一個n次迴圈,n次迴圈應是1~n, 出錯0~n;
★ 小於、小於等於、等於、大於、大於等於、不等於確定的比較值出錯;
★ 出現上溢、下溢和地址異常。
5.錯誤處理測試
比較完善的模組設計要求能預見出錯的條件,並設定適當的出錯處理,以便在一旦程式出錯時,能對出錯程式重做安排,保證其邏輯上的正確性。這種出錯處理也應當是模組功能的一部分。錯誤處理測試應考慮下列因素:
★ 出錯的描述難以理解;
★ 出錯的描述不足以對錯誤定位,不足以確定出錯的原因;
★ 顯示的錯誤與實際的錯誤不符;
★ 對錯誤條件的處理不正確;
★ 異常處理不當。
6.程式碼書寫規範
程式碼書寫規範應考慮下列因素:
★ 模組設計程式框架流程圖;
★ 程式碼書寫規範,對齊方式;
★ 程式碼的註釋;
★ 引數型別,資料長度,指標,陣列長度大小;
★ 輸入輸出引數和結果。
單元測試是對每個程式的單體除錯。主要有以下幾步:
程式語法檢查;
程式邏輯檢查。
在程式的邏輯檢查之前,首先需要製作測試資料;即假設一些輸入資料和檔案資料。測試資料直接影響了程式的除錯工作,所以製作的資料應該滿足以下幾個條件:
資料應能滿足設計上要求的上下限及迴圈次數;
資料應滿足程式中的各種檢驗要求的錯誤資料;
資料應能適宜於人工對程式的檢查工作。
測試資料的內容包含4個方面:
正常的資料
不同的資料
錯誤的資料
大量的資料
通過以上不同角度的資料檢驗,證明程式邏輯是對的,程式的除錯也就結束了。
在程式測試期,評價模組的五個主要特性是:
★ 模組介面;
★ 區域性資料結構;
★ “重要”的執行路徑;
★ 錯誤處理路徑;
★ 影響上述幾點的界限條件。
在其它任何測試開始之前,需要測試橫穿模組介面的資料流。如果資料不是正確地進入和退出,其它的測試就談不上。
在程式測試中介面測試的清單如下:
⑴ 輸入引數的數目是否等於變元的數目
⑵ 引數與變元的屬性是否匹配
⑶ 引數與變元的單位是否匹配
⑷ 傳送給被呼叫模組的變元數是否等於引數的專案
⑸ 傳送給被呼叫模組的變元屬性是否同參數屬性一致
⑹ 傳送給被呼叫模組的變元單位是否同參數的單位一致
⑺ 屬於內部的函式屬性數目及變元次序是否正確
⑻ 對引數的任何訪問是否與當前的入口點無關
⑼ 輸入是否改動變元
⑽ 跨模組的全程量定義是否相容
⑾ 限制是否作為變元來傳送
⑿ 引數是否被重複定義
表 測試說明書
程式名
|
功能名
|
除錯日期 |
測試結果 |
|
|
|
|
資料製作方法: |
|||
測試方法: |
|||
測試問題: .單體程式測試問題 .功能程式測試問題 .子系統程式測試問題 .系統測試問題 |