開(kāi)發(fā)高質(zhì)量的測(cè)試用例是QA的基本工作。高質(zhì)量的測(cè)試用例是既有高覆蓋性又有高可執(zhí)行性,當(dāng)兩者不可兼得時(shí),它有最佳平衡點(diǎn)。本文不討論如何取得最佳平衡,只關(guān)注采用何種 分析方法 來(lái)提高測(cè)試用例的覆蓋率。 # f5 p6 K9 u, J2 F( @: W" S8 X T5 p3 P9 T1 q. s4 G 首先來(lái)說(shuō),分析分為兩個(gè)步驟,首先以不同得角度切分系統(tǒng),使得它成為更簡(jiǎn)單得模塊,第二是把不同得模塊想象成一個(gè)黑盒子,對(duì)這個(gè)黑盒子做類(lèi)似于單元測(cè)試得分析。 # X6 ]. s" { D) T$ t9 u& h3 L" K' k' g7 { k& |' x 1. 從不同得角度把系統(tǒng)分為不同得模塊 , v$ {( H3 i1 g, f: }8 ] 這里存在兩種思路 % F" D( P0 {5 F7 D% B2 u $ M; u( y, J( l: [; ~ 對(duì)系統(tǒng)進(jìn)行完整得劃分 $ L# [% Y1 X, M 軟件是復(fù)雜的。軟件開(kāi)發(fā)者面對(duì)這種復(fù)雜性采用的經(jīng)典的方法瀑布模型,也就是從上到下,逐漸細(xì)分,大模塊包括小模塊,小模塊包括更小的模塊。對(duì)于軟件測(cè)試來(lái)說(shuō),很自然的,我們也可以采用這種方法。但是,這還是遠(yuǎn)遠(yuǎn)不夠的。我們還要從更多的角度切入系統(tǒng),從不同的角度把系統(tǒng)切分成一塊一塊的,然后進(jìn)行測(cè)試。 4 v& M, ?0 w& J V4 w2 P! c1 q- v* V/ M6 | i 比如遙控器的例子。我們就可以從下面一些方面來(lái)劃分系統(tǒng) * z l% a2 D# G$ e 1)功能。% {& D0 J) d* w 這個(gè)劃分非常直觀(guān),Spec上肯定會(huì)明確指明遙控器假設(shè)有3個(gè)功能,開(kāi)關(guān)機(jī),+-調(diào)臺(tái),+-調(diào)音。對(duì)每個(gè)功能我們測(cè)試它能否正常工作。當(dāng)然我們也會(huì)注意到邊界情況:當(dāng)音量滿(mǎn)的時(shí)候,加音量。。。& R* w$ U2 h7 Q. P4 a3 W, M, G4 { 2)狀態(tài) U5 P8 K6 h' n5 `& `. i7 F1 U Spec上沒(méi)有說(shuō)明遙控器的狀態(tài),但我們應(yīng)該能分析得出遙控器有下面的狀態(tài)1 f1 Q0 f# x! g& v! l& {. | ? 關(guān)機(jī),開(kāi)機(jī),正在調(diào)臺(tái),正在調(diào)音 , }: p8 c8 N4 g- U 現(xiàn)在我們可以列一個(gè)matrix,測(cè)試在每種狀態(tài)下執(zhí)行上面的任意一種操作系統(tǒng)的反應(yīng)。注意,這個(gè)時(shí)候,你就要把你自己當(dāng)成用戶(hù),因?yàn)檫@些情況都不會(huì)在spec里詳細(xì)的說(shuō)明的。比如在關(guān)機(jī)狀態(tài)下調(diào)音,竟然開(kāi)機(jī)了。這個(gè)顯然就是bug。( A3 s; j$ K" d8 V& e- p 3)按鍵序列) h( {2 \9 I: F' ~7 H( G+ r 現(xiàn)在我們走得更遠(yuǎn)。我們把遙控器看作具有按鈕得一個(gè)玩意兒,然后輸入任意一個(gè)序列看是否會(huì)出現(xiàn)異常情況,是否會(huì)讓程序不正常得工作。這里不需要分任何得分析方法。這是一個(gè)很好得切入點(diǎn)。另外一個(gè)例子是,在測(cè)試web application時(shí),做一個(gè)爬蟲(chóng)程序去點(diǎn)擊頁(yè)面上得任何link。 2 D# ~2 Z" P! m; I% l* N# J1 A q* z, E5 g% v8 D 通過(guò)這些不同得劃分,testcase得覆蓋率可以得到有效得提高。. M/ J5 P4 b h d( A3 K( s$ W : X( P1 G- h; d5 W" k( O7 D0 S 需要注意一點(diǎn)是,不同得劃分肯定會(huì)帶來(lái)testcase得冗余。在劃分1)時(shí),有測(cè)試開(kāi)關(guān)機(jī)得case,在劃分2)時(shí),顯然也會(huì)有這樣得case。這是不可避免得,也沒(méi)有關(guān)系。$ Y4 a" D3 S8 C0 s& r1 m, d % {- P) N a& O. ?# X1 X& \ 尋找某個(gè)特定得切面 : d: ]9 f) \6 J 上面得劃分系統(tǒng)可以看作 對(duì)整個(gè)系統(tǒng)得一種 分離方法,劃分方法得結(jié)果是把測(cè)試對(duì)象分成不同得一塊一塊。而“特定得切面”則只是描述了測(cè)試對(duì)象得一個(gè)面,它不存在劃分系統(tǒng)得問(wèn)題。還是上面得例子,比如“長(zhǎng)按按鈕”就是一個(gè)“特定得切面”。 $ V5 d7 l! W8 L! V, b 1 F3 s2 U5 ]9 [/ C ”長(zhǎng)按Power按鈕“是一個(gè)測(cè)試得關(guān)注點(diǎn),“長(zhǎng)按volumn+”也是這樣得一個(gè)關(guān)注點(diǎn),如果在系統(tǒng)中多處存在這樣得相似得關(guān)注點(diǎn),那么就構(gòu)成了一個(gè)面,比如在這里是每個(gè)按鈕都存在“長(zhǎng)按按鈕”這樣一種可能,那么“長(zhǎng)按按鈕”這就可以看作系統(tǒng)得一個(gè)切面。對(duì)于這樣一個(gè)切面,如果把它分散在每個(gè)功能測(cè)試case里,顯然不是好主意。最好得方法是把它拿出來(lái)作為一個(gè)單獨(dú)得testcase。 4 e3 g8 O" N) v % K3 n2 G2 i T& ` 再舉一個(gè)例子是,“維護(hù)數(shù)據(jù)完整性” 是一個(gè)切面。很多系統(tǒng)都有用戶(hù)這個(gè)對(duì)象,很多其他得對(duì)象都會(huì)引用到它。對(duì)于引用已經(jīng)刪除得對(duì)象就是一個(gè)容易出問(wèn)題得地方。那么就把“刪除用戶(hù)”作為一個(gè)切面拿出來(lái),對(duì)每一個(gè)相關(guān)得對(duì)象進(jìn)行測(cè)試。這樣一個(gè)切面是非常好得testcase。 4 v# R6 T- e: N3 O$ P& ^" I6 ?5 {" ^# P7 q- k 說(shuō)到這里,你可能會(huì)發(fā)現(xiàn)這其實(shí)是面向方面編程(AOP)得概念。bingo!確實(shí)如此,好得思想方法在哪里都會(huì)閃光啊~_*. , a" c4 r% d$ z1 B7 o' A/ I2 R0 X2 L3 K7 |) W " X" F/ U/ Q2 g5 h$ q" { 2. 功能單元測(cè)試 ' i% G8 ]& s% W( e& D6 G% ? 面對(duì)一個(gè)比較小得功能單元,設(shè)計(jì)testcase就容易得多了。因?yàn)楣δ軉卧Р钊f(wàn)別,所以我僅僅寫(xiě)一些相對(duì)通用得思路。9 h3 l5 }3 e+ K; v, e2 K6 [ . Q% d5 g( ~ w, w 1)從4個(gè)可能變化的要素入手:輸入,輸出,參數(shù)和狀態(tài)。+ {1 P/ B; n' h3 W$ _4 s/ i 如果把某個(gè)功能想象成一個(gè)黑盒子,那么這個(gè)黑盒子任何時(shí)候得輸出可以用下面得三個(gè)參數(shù)來(lái)確定(輸入,狀態(tài),參數(shù))。這種方法可以對(duì)功能進(jìn)行詳盡得測(cè)試。 / }% D* y' V$ v1 Q P u! R" @" k% c) K 2)黑盒子得生命周期$ J9 A- U) a7 @' A& j! F" Z 盒子不是憑空出現(xiàn)的,它也不是在真空之中。在它的生命周期中,有那些東西能影響它?它的初始化,重啟動(dòng),關(guān)閉。。。 # A) [0 _+ \" w+ w4 r6 \9 T2 E( ^ 3)GUI測(cè)試% ?* |1 O. `% H, Y 一個(gè)功能單元可能有GUI,那么他們也應(yīng)該在這里測(cè)試。我們以GUI測(cè)試為例,GUI有它自己的特點(diǎn) 9 M0 ^2 ~0 j) K* V9 h7 T4 h, ]0 @ 1. GUI很容易變化2 o3 j# J3 V# A m6 ? 2. GUI一般不容易錯(cuò),因?yàn)镚UI不包含復(fù)雜的邏輯 1 L0 T z" c( a! | 3. GUI的錯(cuò)誤很容易看出來(lái), 很多GUI問(wèn)題其實(shí)看一下就知道了,比如字體不對(duì) " q- h$ P1 ^. j 4. GUI難以描述。GUI涉及的內(nèi)容很多顏色,布局,字體。。。 . F9 L: ]' l9 q2 X" { ? 所以對(duì)于GUI的測(cè)試用例,應(yīng)該給出一個(gè)關(guān)鍵點(diǎn),而不用給出具體的描述。比如“檢查label字體”比“字體是宋體,大小11,斜體“要好,當(dāng)然除非特別要求2 Q& @#
|