測試用例就是測試數據及與之相關的功能的一個特定集合,它是為驗證被測試程序(為測試程序路徑或驗證是否符合特定功能等方面的需求)而設計的。在單元測試過程中,測試用例的設計應與復審工作相結合,根據設計的測試用例選取不同的測試數據,將增加發現各類錯誤的可能性;另外,根據項目的具體情況確定測試用例項。如:測試用例編號、用例輸入、用例預期輸出、被測單元的版本號、實際輸出等。單元測試用例的設計既可以使用白盒測試也可以使用黑盒測試,但以白盒測試為主,黑盒測試側重于功能,白盒測試側重于邏輯。
白盒測試進入的前提條件是測試人員已經對被測試對象有了一定的了解,基本上明確了被測試軟件的邏輯結構。具體過程就是針對程序邏輯結構設計和加載測試用例,驅動程序執行,檢查在不同點程序的狀態,以確定實際的狀態是否與預期的狀態一致。
一般來說,為了度量測試的完整性,測試工作中通常要求達到一定的覆蓋率要求。因為通過覆蓋率的統計可以知道測試是否充分,對軟件的哪個部分所做的測試不夠,指導我們如何設計增加覆蓋率的測試用例。這樣就能夠提高測試質量,盡量避免設計無效的用例。
在白盒測試的范疇內通常使用下面幾種測試覆蓋率來度量測試,如:語句覆蓋、判定覆蓋、條件覆蓋、判定條件覆蓋、條件組合覆蓋、路徑覆蓋等。白盒測試最低應該達到的覆蓋率目標是:語句覆蓋率達到100%,分支覆蓋率達到100%,覆蓋程序中主要的路徑,主要路徑是指完成模塊正常功能的路徑和功能等其他異常處理執行的路徑。
測試人員在實際工作中要根據不同的覆蓋要求來設計面向代碼的單元測試用例,運行測試用例后至少應該實現如下幾個覆蓋需求:
- 對程序模塊的所有獨立的執行路徑至少覆蓋一次。
- 對所有的邏輯判定,真假兩種情況都至少覆蓋一次。
- 在循環的邊界和運行界限內執行循環體,即用邊界值的方法來測試循環體。
- 測試內部數據結構的有效性等。
黑盒測試是要首先了解軟件產品具備的功能和性能等需求,再根據需求設計一組測試用例以驗證程序內部活動是否符合需求分析和設計要求的活動。在黑盒測試范疇內通常使用功能覆蓋率來度量測試的完整性。而功能覆蓋率中最常見的就是需求覆蓋,目的就是通過設計一定的測試用例,使得每個需求點都被測試到。其次,還包括接口覆蓋(又叫入口點覆蓋),其目的就是通過設計一定的測試用例使系統的每個接口都被測試到。黑盒測試應達到的覆蓋率目標是:程序單元正確地實現了需求分析和設計上要求的所有功能,滿足性能要求,同時程序單元要有可靠性和安全性。
測試人員在實際工作中至少應該設計能夠覆蓋如下需求的基于功能的單元測試用例:
(1)測試程序單元的功能是否實現。
(2)測試程序單元性能是否滿足要求(可選)。
(3)是否有可選的其他測試特性,如邊界、余量、安全性、可靠性、強度(壓力)測試、人機交互界面測試等。
無論是白盒測試還是黑盒測試,每個測試用例都應該包含下面4個關鍵元素:
(1)被測單元模塊初始狀態聲明,即測試用例的開始狀態(僅適用于被測單元維持了調用中間狀態的情況)。
(2)被測單元的輸入,包含由被測單元讀入的任何外部數據值。
(3)該測試用例實際測試的代碼,用被測單元的功能和測試用例設計中使用的分析來說明,如:單元中哪一個決策條件被測試。
(4)測試用例的期望輸出結果(在測試進行之前的測試說明中定義)。