試用例設計是測試過程中非常重要的一個活動,不管是文檔化的設計輸出,還是只是存在于他們腦海中的測試思想,其質量都會直接影響測試執行的質量。
盡管每個測試人員都掌握了不少的測試用例設計技術與方法,例如:等價類劃分、狀態轉換測試等,但是如何將它們應用到具體的測試對象測試中去,很多測試人員都會感覺有些力不從心,甚至有無從下手的感覺。
下面是針對某個功能模塊的一個簡單的需求描述:該基本功能是為了創建某個條目,它的基本需求如下:
假如dataBit0 = 0, 并且cBPDU或者pBPDU的值不為1,那么創建請求會被拒絕。假如dataBit0 = 0, 并且cBPDU = 1或者pBPDU = 1,在滿足下面條件下可以創建成功: (1)其他的bit不能為1; (2)TD的取值必須是Guranteed; (3)VLANpop的取值必須是disabled; |
假如你得到這樣的一個需求描述,你準備如何來設計該功能模塊的測試用例?通常來說,測試人員拿到需求規格說明之后,會根據其中定義的需求條目設計測試用例,類似于如下過程。

圖1 通常的測試用例設計
針對上面的需求描述,根據圖1直接設計測試用例,會不會覺得有些迷茫呢?即使測試人員設計了多個測試用例,覆蓋了每條測試需求,是不是也會覺得評估測試覆蓋率比較困難?
實際上,需求規格說明通常是針對開發人員而寫的,并不一定直接適合測試的要求。因此,假如測試人員希望能夠更好的進行測試用例設計,需要將需求規格說明轉化成為測試人員可以方便使用的語言很重要,即在需求規格說明和設計測試用例之間增加一個橋梁:模型。在建立模型的過程中,測試人員不僅需要學習需求規格說明,同時也需要了解各種測試設計技術與方法,并能將兩者數量的結合起來。圖2是增加了“模型”概念的測試用例設計過程。

圖2 改進的測試用例設計
還是以上面的需求描述為例,我通過學習該需求之后,發現它可能可以與決策表技術結合起來。因此,我將上述需求翻譯為適合決策表技術的各種條件與輸出,并根據它們的不同組合得到不同的結果。圖3是我針對上述需求描述,基于決策表技術得到的初始決策表,然后可以基于此進行決策表優化,直至得到概要和詳細的測試用例列表。

圖3 初始決策表
根據圖2的過程得到的圖3的結果,是否覺得整個測試設計過程更加清楚,而且更加容易進行測試覆蓋率等方面的評估?注意:這里只是根據需求描述得到的一些測試用例,并沒有考慮其他方面的測試用例,例如非功能測試用例等。
需求規格說明對測試人員很重要,測試設計技術與方法也很重要,但更重要的是測試人員如何能夠將兩者有效的結合起來,并在此基礎之上建立適合測試設計和評估的“模型”。而這通常是測試用例設計的難點所在,同時也是體現測試人員技術含量的地方。下面是測試人員在建立模型過程中可以參考的一些方向:
1、基于黑盒測試技術,例如:決策表模型、狀態轉換模型、正交矩陣模型等;
2、基于測試類型,例如:質量特性模型、缺陷分類模型等;
3、基于全局因素的全局因素模型;
4、基于功能交互的功能交互模型;
測試設計過程中建立有效的“模型”,測試人員設計測試用例相對會比較容易,并且可以很好的提高測試覆蓋率,從而幫助提升產品質量。另一方面,通過建立模型,也可以幫助測試人員有效的評審測試對象功能的描述,例如可以發現需求中定義不清楚、遺漏等方面的問題。