測試的目的是檢查程序的行為是否符合設計規ge,程序的行為就是某種輸入時會產生什么輸出,因此,一個典型的測試用例完成以下工作:設定輸入數據、執行程序、驗證輸出是否符合預期。
函數的輸入數據一般包括:
(1)參數;
(2)成員變量,只考慮函數需要讀取的成員變量;
(3)全局變量,只考慮函數需要讀取的全局變量;
(4)內部輸入,主要是調用子函數產生的輸入、局部靜態變量、中斷產生的輸入。
以上四項,當涉及到復雜數據類型時,只考慮函數需要讀取的域,例如,一個結構對象,有十個域,而函數只讀取其中一個域,則不必考慮其他九個域。
(5)其他數據,如函數需要讀取文件或數據庫中的數據,則要先在文件或數據庫中設置好這些數據。
顯然,所有可能輸入都進行測試,既不可能也無意義,我們應該用一定的規則選擇有代表性的數據作為輸入。輸入可分為三大類:正常輸入,邊界輸入,非法輸入,每大類還可再分為若干小類,劃分小類的依據是:同一小類中每個數據都具有等價的測試效果,也就是說,小類中取任取一個數據作為輸入,如果測試通過,可以肯定同小類的其他輸入也可以測試通過,這就是平常說的“等價類法”。
正常輸入
例如字符串的Trim函數,功能是將字符串前后的空ge去除,那么正常的輸入可以有四類:
前面有空ge;后面有空ge; 前后均有空ge; 前后均無空ge。
邊界輸入
上例中空字符串可以看作是邊界輸入。
再如一個表示年齡的參數,它的有效范圍是0-100,那么邊界輸入有兩個:0和100。
非法輸入
垃圾數據或使代碼不能完成正常功能的數據,如一個文件操作的函數,非正常輸入有這么幾類:
文件不存在;
目錄不存在;
文件正在被其他程序打開;
權限錯誤。
預期輸出
一個完整的測試用例應該有預期輸出,預期輸出就是程序運行后的預期結果,通常表現在對某些數據的修改,即預期輸出要自動判斷程序所改寫的數據的結果值是否符合預期。程序可能修改的數據包括:
(1)返回值;
(2)輸出參數;
(3)成員變量,只考慮函數所改寫的成員變量;
(4)全局變量,只考慮函數所改寫的全局變量;
(5)內部輸出,即需判斷的中間結果,如函數計算好一個報文后發送出去,要判斷這個報文是否正確。
以上五項,當涉及到復雜數據類型時,只考慮函數所改寫的域,例如,一個結構對象,有十個域,而函數只改寫了其中一個域,則不必考慮其他九個域。
(6)其他數據,如函數改寫文件或數據庫中的數據,也是一種輸出,不過通常難于自動判斷是否符合預期,可用人工查看來代替。
新聞熱點
疑難解答