什么是好的測試用例(一)[1] 用例設計
這項研究部分基于NSF制定的EIA-0113539 ITR/SY+PE:“提高軟件測試者的教育! 材料中表達的任何觀點、發現和結論或者評論都屬于作者,不代表國家科學基金會(NSF)的觀點。
摘要
設計好的測試用例是一門復雜的藝術。其復雜性有三個原因:
測試用例能幫我們發現信息。不同類型的測試對不同類型的信息有效。
可以從多方面證明測試用例是“好的”。但沒有一個測試用例在任何方面都很優秀。
人們往往會根據某個測試類型來創建測試用例,比如域測試或基于風險的測試。好的域測試與好的基于風險的測試是不同的。
什么是測試用例?
讓我們從基礎開始,什么是測試用例?
IEEE標準610(1990)對測試用例的定義如下:
1) 為特定目的開發的一套測試輸入、執行條件以及期望結果的集合,例如運用特殊的程序路徑或檢查應用是否滿足某個特定的需求。
2) (IEEE Std 829-1983)指定輸入、預期結果和一組測試項的執行條件的文檔。 根據Ron Patton(2001,p,65)的定義:
測試用例是進行軟件測試時,嘗試使用的特殊輸入和遵照的流程。
Boris Beizer(1995,p.3)把測試定義為:
一個或多個子測試的執行順序就像是一個序列,因為一個子測試的結果和/或最終狀態是下一個子測試的輸入和/或初始狀態!皽y試”這一詞通常涵蓋子測試、專用測試和組測試。
Bob Binder(1999,p.47)定義的測試用例: 軟件測試
測試用例闡明了IUT測試前的狀態及其環境、測試輸入或條件、以及期望的結果。期望的結果指明了IUT會從測試輸入中產生什么結果。這些細則包括了IUT產生的信息、異常、返回值、IUT的結果狀態及其環境。測試用例也會為其他構成IUT及其環境的對象指定初始和結果條件。
實踐中,很多事物都可以當作測試用例,即使他們完全不符合準備好的測試文檔。
Brian Marick用一個相關的術語來描述沒有完全文檔化的測試用例,其測試觀點是:
“測試觀點是對被測事物的一個簡要描述。例如,測試平方根功能,其中一個測試構思可以是“測一個小于0的數”。這個測試想法是檢驗代碼是否有錯誤處理機制!
我認為,測試用例是對程序提出的質疑,運行測試的目的就是獲取信息,比如程序是否會通過測試。
在明確測試觀點是什么以及怎樣把這種思想應用在產品的某些特殊方面(比如,外觀)時,需要還是不需要注明流程細節。依照習慣,如果文件記錄是測試用例不可或缺的一部分,那么就請用測試觀點代替遵循的所有測試用例。
測試用例定義的一個重要應用就是:測試用例必須具有一定的能力暴露信息。
按照這種定義,測試用例的變化范圍會隨著程序趨于穩定。測試初期,在程序的任何方面都會出現問題的時候,試著用最大的有效值填寫數據型的輸入字段是一個明智有效的測試方式。數周之后,程序經過數次構建通過測試之后,不再需要測試用例對這個字段進行獨立測試,因為它已經具有了處理異常的能力。此時,更多相關的測試用例會同時組合10個不同變量組成邊界線,或者會根據較長的測試序列或情景設置邊界。
同樣,按照這種定義,對測試用例數量報告的度量是沒有意義的。幾周前一組20個單變量的測試是有用的,而現在它們已經沒用或者合為一體時,應該怎么做?假設你創建了一個包含20個測試的組合測試,這個測試的度量報告是20還是21個測試?僅執行一次的測試是怎樣的?因為程序設計變化而使測試沒有意義時,沒有運行設計和實現的測試是怎樣的?
測試用例定義的另一個應用是設計的測試不是用來暴露缺陷的,目的是信息。通常,缺陷中含有信息,但不是絕對的(這要歸功于Marick,1997的見解。)。要取得測試結果,我們需要充分地尋找測試提供的信息。
信息目標
執行測試時,我們能學到或得到什么?這里有幾個例子:
發現缺陷。
這是測試普遍的目的。運行測試的目的是觸發故障并暴露缺陷。
通常,我們是在產品所有感興趣的部分尋找缺陷。
文章來源于領測軟件測試網 http://www.kjueaiud.com/