開發高質量的測試用例 是測試工程師的基本工作。那什么才算是高質量的測試用例呢?——高質量的測試用例是既有高覆蓋性又有高可執行性,當兩者不可兼得時,它有最佳平衡點。本文不討論如何取得最佳平衡,只關注采用何種分析方法來提高測試用例的覆蓋率。
首先來說,分析分為兩個步驟,首先以不同得角度切分系統,使得它成為更簡單的模塊,第二是把不同的模塊想象成一個黑盒子,對這個黑盒子做以下分析。
1. 從不同得角度把系統分為不同得模塊
這里存在兩種思路
1.1 對系統進行完整得劃分
軟件是復雜的。軟件開發者面對這種復雜性采用的經典的方法瀑布模型,也就是從上到下,逐漸細分,大模塊包括小模塊,小模塊包括更小的模塊。對于軟件測試來說,很自然的,我們也可以采用這種方法。但是,這還是遠遠不夠的。我們還要從更多的角度切入系統,從不同的角度把系統切分成一塊一塊的,然后進行測試。
比如遙控器的例子。我們就可以從下面一些方面來劃分系統
1 )功能。
這個劃分非常直觀, Spec 上肯定會明確指明遙控器假設有 3 個功能,開關機, +- 調臺, +- 調音。對每個功能我們測試它能否正常工作。當然我們也會注意到邊界情況:當音量滿的時候,加音量...
2 )狀態
Spec 上沒有說明遙控器的狀態,但我們應該能分析得出遙控器有下面的狀態
關機,開機,正在調臺,正在調音
現在我們可以列一個 matrix ,測試在每種狀態下執行上面的任意一種操作系統的反應。注意,這個時候,你就要把你自己當成用戶,因為這些情況都不會在 spec 里詳細的說明的。比如在關機狀態下調音,竟然開機了。這個顯然就是bug 。
3 )按鍵序列
現在我們走得更遠。我們把遙控器看作具有按鈕得一個玩意兒,然后輸入任意一個序列看是否會出現異常情況,是否會讓程序不正常得工作。這里不需要分任何得分析方法。這是一個很好得切入點。另外一個例子是,在測試 web application 時,做一個爬蟲程序去點擊頁面上得任何 link 。
通過這些不同得劃分, testcase 的覆蓋率可以得到有效得提高。
需要注意一點是,不同得劃分肯定會帶來 testcase 得冗余。在劃分 1 )時,有測試開關機得 case ,在劃分 2 )時,顯然也會有這樣得 case 。這是不可避免得,也沒有關系。
1.2 尋找某個特定得切面
上面得劃分系統可以看作對整個系統得一種分離方法,劃分方法得結果是把測試對象分成不同得一塊一塊。而 “ 特定得切面 ” 則只是描述了測試對象得一個面,它不存在劃分系統得問題。還是上面得例子,比如 “ 長按按鈕 ” 就是一個 “ 特定得切面 ” 。
“長按 Power 按鈕”是一個測試得關注點, “ 長按 volumn+”也是這樣得一個關注點,如果在系統中多處存在這樣得相似得關注點,那么就構成了一個面,比如在這里是每個按鈕都存在 “ 長按按鈕 ” 這樣一種可能,那么 “ 長按按鈕 ” 這就可以看作系統得一個切面。對于這樣一個切面,如果把它分散在每個功能測試 case 里,顯然不是好主意。最好得方法是把它拿出來作為一個單獨得 testcase 。
再舉一個例子是, “ 維護數據完整性 ” 是一個切面。很多系統都有用戶這個對象,很多其他的對象都會引用到它。對于引用已經刪除得對象就是一個容易出問題得地方。那么就把 “ 刪除用戶 ” 作為一個切面拿出來,對每一個相關得對象進行測試。這樣一個切面是非常好得 testcase 。
說到這里,你可能會發現這其實是面向方面編程 (AOP) 得概念。 bingo !確實如此,好得思想方法在哪里都會閃光啊 ~_*.
文章來源于領測軟件測試網 http://www.kjueaiud.com/