qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請?jiān)L問 http://qaseven.github.io/

          如何提高測試用例設(shè)計(jì)的測試覆蓋率

           說到測試用例的設(shè)計(jì),我想每個有過測試經(jīng)歷的測試工程師都會認(rèn)為很簡單,不就是:按需求或概要設(shè)計(jì),得到軟件功能劃分圖,然后據(jù)此按每個功能,采用等價類劃分、臨界值、因果圖等方法來設(shè)計(jì)用例就行了。
            但事實(shí)上撇開測試數(shù)據(jù)的設(shè)計(jì)不談,僅就測試項(xiàng)來說,我們發(fā)現(xiàn),對同一個項(xiàng)目,有經(jīng)驗(yàn)的測試人員,在寫用例或測試時總會有更多的測試考慮點(diǎn),從而發(fā)現(xiàn)更多的問題;而有些測試人員測試用例的撰寫卻只有那么三板斧,表面看好象已經(jīng)把頁面所有信息的測試都考慮到了,實(shí)際上卻還是遺漏了大量測試覆蓋點(diǎn),導(dǎo)致其測試出來的程序總是比較脆弱。
            究其原因,我覺得還是測試用例的撰寫水平不到位,更確切地說是測試用例的覆蓋度太低。說實(shí)話我認(rèn)為系統(tǒng)測試用例真正做到100%覆蓋是很難的。難道說按設(shè)計(jì)中的功能劃分,每個功能都寫到了這個用例就覆蓋完整了?錯,這還遠(yuǎn)遠(yuǎn)不夠。因?yàn)槲覀冎肋€有大量的內(nèi)部處理、轉(zhuǎn)換、業(yè)務(wù)邏輯、相互影響的關(guān)系等都是需求或設(shè)計(jì)中所不會點(diǎn)明的。而這些一方面需要靠測試人員對項(xiàng)目本身的了解,另一方面要靠測試人員的經(jīng)驗(yàn),來一一找到這些隱藏點(diǎn)并予以測試,才能真正地保證我們的測試覆蓋度。
            所以本文拋開具體的測試數(shù)據(jù)設(shè)計(jì)方法,主要從測試覆蓋度的角度來介紹用例設(shè)計(jì)時,如何才能考慮地更周全,如何才能將隱藏的測試項(xiàng)一一找出,從而使我們的測試更全面更完整。
            想法雖然美好,可是畢竟每個測試的項(xiàng)目都是各不相同,針對不同項(xiàng)目我們的經(jīng)驗(yàn)也會告訴給我們不同的想法,這些想法通常很感性,很難用嚴(yán)密的邏輯理論來把它升華。因此本文的內(nèi)容仍是很簡陋且不成熟,只是希望能以本文為磚,引起大家的思考,一起來補(bǔ)充完善,以使我們的測試用例設(shè)計(jì)水平不斷提高。
            正文
            一、測試用例的切面設(shè)計(jì)
            1、功能點(diǎn)切面
            2、特定切面
            3、隱含切面
            (1)、后臺功能
            (2)、完整業(yè)務(wù)流程的測試
            (3)、某種特定情況下的系統(tǒng)運(yùn)行
            (4)、其它相關(guān)系統(tǒng)
            (5)、除功能測試外的其它測試類型
            二、詳細(xì)用例的設(shè)計(jì)
            1、功能切面表面用例設(shè)計(jì)
            (1)、具體功能測試
            (2)、組合操作的測試
            (3)、GUI界面的測試
            (4)、數(shù)據(jù)初始化情況測試
            (5)、業(yè)務(wù)需求實(shí)現(xiàn)是否正確
            2、功能切面隱含測試項(xiàng)用例設(shè)計(jì):
            (1)、數(shù)據(jù)完整性的測試
            (2)、后臺的特殊處理
            (3)、功能業(yè)務(wù)之間的關(guān)聯(lián)與轉(zhuǎn)換
            (4)、從設(shè)計(jì)實(shí)現(xiàn)發(fā)掘測試點(diǎn)
            (5)、并發(fā)操作時的測試
            3、特定切面用例設(shè)計(jì)
            4、隱含切面用例設(shè)計(jì)
            (1)、無界面的后臺功能
            (2)、與業(yè)務(wù)流相關(guān)的測試
            (3)、其它測試類型
            三、測試數(shù)據(jù)的設(shè)計(jì)
            一、測試用例的切面設(shè)計(jì)
            所謂測試切面設(shè)計(jì),其實(shí)就是測試用例大項(xiàng)的劃分。測試用例劃分的經(jīng)典方法是瀑布模型,也就是從上到下,逐漸細(xì)分,大模塊包括小模塊,小模塊包括更小的模塊。但僅僅如此是不夠的,我們還要從更多的角度切入系統(tǒng),從不同的角度把系統(tǒng)切分成一塊一塊的,來進(jìn)行測試,從而確保測試大項(xiàng)的完整性。
            1、功能點(diǎn)切面
            這是最常見的切面,通常我們認(rèn)為頁面上的一個按鈕就是一個功能點(diǎn)。然后我們可以根據(jù)功能的復(fù)雜程度,按每個功能;或一個功能點(diǎn)分多頁;或多個功能點(diǎn)合成一頁來進(jìn)行用例的撰寫。
            2、特定切面
            除此以外,還有一種特定切面的劃分方法,也是用例撰寫時經(jīng)常會用到的。所謂的特定切面,就是忽略掉表面上的功能點(diǎn),而關(guān)注測試對象的某一個面。比如我們的內(nèi)部管理系統(tǒng)提供了銷售錄入導(dǎo)入、注冊錄入導(dǎo)入等功能,從菜單劃分上對應(yīng)了七八個功能點(diǎn)。但這些功能處理后臺有個共同的處理項(xiàng)就是授權(quán)記錄的生成,這時我們就可以把“授權(quán)記錄生成”單獨(dú)拿出來做一個測試項(xiàng),而在其它測試項(xiàng)中涉及這一部分的用例就不必再一一撰寫。此外象一些界面共通的操作用例單獨(dú)寫成一頁,也是一種特定切面。所以如果說將用例按功能點(diǎn)劃分是一種縱向劃分法,那么特定切面就是從橫向的角度分析所得到的切面。在普通功能點(diǎn)劃分上再根據(jù)實(shí)際情況設(shè)計(jì)特定切面,可以使我們的用例閱讀性、理解性、操作性更強(qiáng)。
            3、隱含切面
            這類用例是最容易被忽略的。它往往不是明顯的某個功能項(xiàng),可能是功能項(xiàng)后臺的隱含處理,也可能是多個功能項(xiàng)之間的關(guān)聯(lián)處理,甚至可能是在某種特定情形下的處理。這都需要測試人員通過對軟件的學(xué)習(xí)了解,來進(jìn)行挖掘。
            (1)、后臺功能
            常見的如一些定時自動啟動的服務(wù);以及某種特定情況下自動執(zhí)行的操作等。它們在界面上往往是不體現(xiàn)的,但許多在需求設(shè)計(jì)中還是會提到,也有一些比較細(xì)小的功能可能會被忽略,就需要測試人員根據(jù)對項(xiàng)目的了解程度來進(jìn)行挖掘。所以說一個熟悉項(xiàng)目的和一個不熟悉的測試人員,寫出來的用例就完全是兩個層次的。
            (2)、完整業(yè)務(wù)流程的測試
            我們都知道測試用例的設(shè)計(jì)是從點(diǎn)、線、面三個層次去考慮的。完整的一個功能項(xiàng)是線,其中的某個按鈕是點(diǎn),多個相關(guān)功能結(jié)合成完整業(yè)務(wù)流就是面。從實(shí)際來看這類用例往往被我們忽略。
            事實(shí)上目前公司的軟件本來都是業(yè)務(wù)型應(yīng)用軟件,將各種功能從業(yè)務(wù)流中切割出來單獨(dú)寫用例,肯定也會有涉及到整體流程的情況。若不加以區(qū)分,將細(xì)節(jié)與全局?jǐn)囋谝黄穑粌H思路混亂,也容易考慮不周。因此在系統(tǒng)測試階段,建議用例設(shè)計(jì)要有分有合,針對具體功能的就只圍著這個功能轉(zhuǎn):而在業(yè)務(wù)流程測試項(xiàng)中,再完全從整體的業(yè)務(wù)流角度出發(fā)去考慮用例,這樣不僅不容易產(chǎn)生疏漏,用例閱讀與執(zhí)行也更清楚。
            (3)、某種特定情況下的系統(tǒng)運(yùn)行
            這類用例的設(shè)計(jì)往往與系統(tǒng)實(shí)際業(yè)務(wù)情況密不可分。比如財(cái)務(wù)軟件,通常需要在月尾一天、月頭一天、年尾一天、年頭一天,對所有相關(guān)功能中的日期處理進(jìn)行測試;又比如WIN 2000環(huán)境開發(fā)測試的系統(tǒng),要測試在98、XP、2003等操作系統(tǒng)下是否能運(yùn)行自如;再有如存在大量動態(tài)圖片視頻等的網(wǎng)頁,在普通網(wǎng)速下的展現(xiàn)速度等等。總之就是要盡可能從實(shí)際應(yīng)用的角度出發(fā)考慮,來進(jìn)行測試補(bǔ)充。
            (4)、其它相關(guān)系統(tǒng)
            即指在當(dāng)前項(xiàng)目中直接使用的其它成果,包括公司自有的系統(tǒng)模塊、組件、函數(shù);以及購買或免費(fèi)得到的一些功能組件。對這些內(nèi)容需要預(yù)先與開發(fā)組長等討論清楚,是否需要測試。若時間緊張或其它原因決定不測的,應(yīng)在測試計(jì)劃中說明。若需要測試的,則具體可根據(jù)實(shí)際情況來設(shè)計(jì),可以是通過系統(tǒng)某個功能的測試來涉及,此時就不需要單獨(dú)劃分測試項(xiàng);若相對比較獨(dú)立的,也可以通過單獨(dú)的測試項(xiàng)來對其專門進(jìn)行測試。
            (5)、除功能測試外的其它測試類型
            包括可靠性、安全性、恢復(fù)性、配置安裝測試等等,這些測試類型都是一個單獨(dú)的測試項(xiàng)。
            所謂好的開始是成功的一半,保證測試項(xiàng)劃分的完整、合理、正確,會直接影響到本次測試的成效。通常建議該階段工作要花1-2天的時間來考慮,并要在測試過程中隨著對軟件的深入了解,不斷進(jìn)行調(diào)整補(bǔ)充。可千萬不要認(rèn)為把分析設(shè)計(jì)中的功能模型圖搬搬過來就可以了。
            二、詳細(xì)用例的設(shè)計(jì)
            劃分好了測試項(xiàng),接著就是針對各個測試項(xiàng),考慮具體的測試用例了。根據(jù)測試項(xiàng)的特點(diǎn),測試用例的設(shè)計(jì)角度也有所不同。下面我們就來看看通常的功能點(diǎn)測試用例,該從哪些角度出發(fā)來進(jìn)行設(shè)計(jì):
            1、功能切面表面用例設(shè)計(jì)
            (1)、具體功能測試
            根據(jù)需求分析設(shè)計(jì),按頁面提供的各個功能項(xiàng),采用黑盒測試的各種方法,設(shè)計(jì)用例。比如頁面提供了增、刪、改、查功能,那么這四個功能是否正確實(shí)現(xiàn)就是我要驗(yàn)證的。這是最簡單、最基本,同時也是必須的測試用例,通常我們的編碼人員自測也就是做到這個程度。^_^
            (2)、組合操作的測試
            這是從上一角度擴(kuò)展出來的,相對而言也是編碼人員不會去測試的,所以需要測試人員多作考慮。
            所謂組合操作測試,也就是選擇某幾個操作項(xiàng),按一定的順序進(jìn)行操作,驗(yàn)證系統(tǒng)不會出現(xiàn)意外錯誤。當(dāng)然要將所有功能項(xiàng)排列組合一遍來測試不僅不必要,也是不可能的。所以具體要將哪些功能項(xiàng)進(jìn)行結(jié)合,要按怎樣的步驟來操作,還是需要測試人員根據(jù)實(shí)際情況來作設(shè)計(jì)(所以說在IT業(yè)人才就是一切呀,呵呵:)。
            一般來說我們會考慮功能項(xiàng)之間的數(shù)據(jù)是否會存在關(guān)聯(lián),若有就需要考慮這種組合了。常見的如查詢功能,需要將各條件逐一累加進(jìn)行測試;增完的數(shù)據(jù)能否改,改完能否刪,刪完能否再增,這之間能否查詢到正確結(jié)果;按鈕的連續(xù)多次點(diǎn)擊會否出現(xiàn)異常;有嚴(yán)格前后順序要求的幾個操作,嘗試顛倒順序去操作,系統(tǒng)能否控制等等。
            不僅在某功能內(nèi)部,擴(kuò)展到有關(guān)聯(lián)的多個功能項(xiàng)之間,同樣有組合操作測試的存在。如申報(bào)完了能才反饋;如申報(bào)成功或失敗后再嘗試申報(bào)等。當(dāng)然對于這類用例既可以寫到某個功能切面中,也可以單獨(dú)寫到完整業(yè)務(wù)流程的切面中,這就取決于可能涉及用例的數(shù)量了,若關(guān)系比較復(fù)雜,當(dāng)然是單獨(dú)寫比較好;若也就是三五個用例數(shù),那就直接在某個功能的用例中補(bǔ)充好了。
            (3)、GUI界面的測試
            這類測試是測試人員的強(qiáng)項(xiàng),具體測試項(xiàng)目如限長、非法輸入等等,就不必贅述了。要提醒的是在測試時,一定要從實(shí)際使用者的操作習(xí)慣出發(fā)。要知道界面原型所能確定的也只是頁面的擺放顯示,而實(shí)際操作時的控制實(shí)現(xiàn)仍是編碼人員自行實(shí)現(xiàn)的,即使有編碼指南,其所及范圍也是十分有限。而許多編碼人員在用戶操作方便性上的考慮往往差強(qiáng)人意。所以測試人員就必須要把好這一關(guān)。
            (4)、數(shù)據(jù)初始化情況測試
            不該為空的數(shù)據(jù)是否有校驗(yàn);該有默認(rèn)值的數(shù)據(jù)默認(rèn)值是否正確;引用其它功能生成的數(shù)據(jù),是否會實(shí)時刷新;頁面關(guān)閉或系統(tǒng)重啟后,數(shù)據(jù)的初始化設(shè)置等都是這類用例。
            (5)、業(yè)務(wù)需求實(shí)現(xiàn)是否正確
            這類問題往往是由于我們的需求說明欠詳細(xì),而編碼人員的需求了解程度又較低造成。作為測試人員自然要對需求進(jìn)行深刻研究,來對軟件實(shí)現(xiàn)進(jìn)行把關(guān)。這里常見的一些關(guān)注點(diǎn)有:
            數(shù)據(jù)的長度、類型控制是否合理(比如控制納稅人識別號只能為數(shù)字,但實(shí)際業(yè)務(wù)中是會有字母出現(xiàn)的);
            業(yè)務(wù)邏輯控制是否合理(比如某數(shù)據(jù)項(xiàng)不提供修改,但實(shí)際業(yè)務(wù)中該數(shù)據(jù)項(xiàng)經(jīng)常會需要改動);
            提供的實(shí)現(xiàn)方式是否合理(比如只在某一頁面提供某數(shù)據(jù)的獲取功能,但根據(jù)業(yè)務(wù)劃分有些人員不能操作此頁面,卻必須要能看到該數(shù)據(jù));
            所做的數(shù)據(jù)控制是否合理(比如必須在A功能中新增數(shù)據(jù),然后才能在B功能中操作,但實(shí)際業(yè)務(wù)中有可能會出現(xiàn)相反操作);
            所做的數(shù)據(jù)控制是否完整(如授權(quán)的方式有普通按月、有買斷、有按數(shù)量控制,那么當(dāng)同一企業(yè)嘗試同時存在以上幾種授權(quán)方式時,系統(tǒng)是否能有必要的控制);
            還有其它一些操作細(xì)節(jié)上的滿足(如業(yè)務(wù)上需要批量操作的數(shù)據(jù)有否提供批量操作功能、導(dǎo)入失敗的結(jié)果文件是否能修改后直接再導(dǎo)入等)。
            對于不滿足的需求,經(jīng)開發(fā)組長、需求經(jīng)理等確認(rèn)不作修改的,就要作為軟件的缺限或限制在測試報(bào)告中進(jìn)行說明民。
            2、功能切面隱含測試項(xiàng)用例設(shè)計(jì):
            (1)、數(shù)據(jù)完整性的測試
            當(dāng)某數(shù)據(jù)被其它功能引用;或當(dāng)前功能要引用其它來源的數(shù)據(jù),就會涉及到數(shù)據(jù)完整性的測試。最常見的如被引用的數(shù)據(jù)刪除了,或關(guān)鍵字被修改了,引用的數(shù)據(jù)會否出錯;兩個途徑進(jìn)入的數(shù)據(jù)會否沖突或重復(fù);此外還有因?yàn)橄嚓P(guān)的幾個功能由不同人員編碼,從而導(dǎo)致彼此的控制不一致,如A功能進(jìn)入的數(shù)據(jù)在可允許的極端情況下,到B功能中引用會否異常(最常見如用戶名錄入時允許長度10,但引用到某個單子填寫時允許長度是8,此時就會異常了)。
            (2)、后臺的特殊處理
            是指某功能除了表面所見以外的程序處理。比如訂單錄入,表面所見的就是訂單的保存,但后臺還會有重復(fù)數(shù)據(jù)的判斷、非法數(shù)據(jù)的處理、業(yè)務(wù)邏輯上沖突情況的處理以及其它種種根據(jù)需求設(shè)計(jì)所特有的處理。又比如備份功能,在備份前可能有數(shù)據(jù)的清空、備份目錄的清空、備份目標(biāo)是否存在的校驗(yàn)、備份文件重復(fù)時的處理等等。類似這些在分析設(shè)計(jì)中就未必會寫全了,還是要測試人員多花心思去思考挖掘。
            (3)、功能業(yè)務(wù)之間的關(guān)聯(lián)與轉(zhuǎn)換
            相關(guān)聯(lián)的幾個功能之間數(shù)據(jù)的傳遞,會否產(chǎn)生影響。比如新增錄入的某種特殊字符,要查詢時會引起查詢SQL語句異常;又如某下載文件名中存在中文等字符,下載時由于編碼問題導(dǎo)致亂碼的出現(xiàn);再有報(bào)表填寫時到小數(shù)點(diǎn)后四位,生成報(bào)文時會不會被忽略成兩位了等等。象這種問題,通常只能是在每個功能設(shè)計(jì)用例時,盡量保證用例中的數(shù)據(jù)能涉及到允許范圍的各種情況,即充分運(yùn)用等價類劃分+邊界值的方法設(shè)計(jì)出各種“稀奇古怪”的數(shù)據(jù),并需驗(yàn)證這些數(shù)據(jù)從頭流到尾,都還是能保持其正確性,而不僅僅是在當(dāng)前功能中正確。
            (4)、從設(shè)計(jì)實(shí)現(xiàn)發(fā)掘測試點(diǎn)
            這個就是我們測試中最難捉的BUG了,它往往是由編碼人員自己在編碼時創(chuàng)造出來的,連設(shè)計(jì)人員都不會知道。
            比如內(nèi)部管理系統(tǒng)中,正常的產(chǎn)品,其類別通常是2位數(shù)字;如果是模塊,其類別就以產(chǎn)品代碼來取代。這時如何來判斷該產(chǎn)品是模塊呢?最保險(xiǎn)的當(dāng)然是校驗(yàn)其產(chǎn)品類別字段的值能否在產(chǎn)品表中找到;也有比較簡單的方法就是直接判斷類別代碼大于2位還是小于等于2位。此時若能確切知道采用的是哪種實(shí)現(xiàn)方法,就可以直接找到其漏洞所在。比如采用后一種方法,當(dāng)產(chǎn)品類別長度變化時,明顯系統(tǒng)會出錯。那么即使確認(rèn)該實(shí)現(xiàn)方式不改,測試人員也應(yīng)將其作為限制寫入測試報(bào)告,。讓大家知道這個產(chǎn)品類別長度是不能隨意變化的。
            而讓人郁悶的是,類似這樣的實(shí)現(xiàn),有太多的編碼人員都是隨性處理的,它們細(xì)而隱蔽,在系統(tǒng)數(shù)據(jù)正常情況下根本不會被發(fā)現(xiàn);而在漫漫的軟件使用道路中,由于需求變更等原因?qū)υ幸恍┰O(shè)計(jì)做維護(hù)變化,這種問題就會突然暴發(fā)出來讓人措不及防。所以要杜絕這類漏洞,除了測試人員要做土撥鼠,不停地對軟件各功能的實(shí)現(xiàn)細(xì)節(jié)進(jìn)行挖掘外,也要多給編碼人員灌輸完美實(shí)現(xiàn)的理念,多用復(fù)雜但抗壓性高的代碼,來替代簡單但依賴性強(qiáng)的代碼。
            (5)、并發(fā)操作時的測試
            即兩個或多個用戶同時操作同一功能時,會否引起數(shù)據(jù)的混亂。通常在C/S結(jié)構(gòu)下,如果有同時操作的可能,是需要作此測試的;而在B/S結(jié)構(gòu)下由于其特殊性,此問題通常難以解決。除非就是某用戶一旦使用過某功能后,在一定時間內(nèi)鎖定不允許再用,但這也會帶來實(shí)際應(yīng)用中的不便,所以除非是特別核心的數(shù)據(jù),一般我們也不會去做此控制,當(dāng)然對于可能出現(xiàn)的并發(fā)沖突也就作為系統(tǒng)的限制進(jìn)行遺留了。
            3、特定切面用例設(shè)計(jì)
            所謂特定切面,其實(shí)就是從另一個角度切割出來的用例面,所以具體的用例撰寫方式其實(shí)與功能切面是一致的。
            4、隱含切面用例設(shè)計(jì)
            隱含切面分以下幾種情況:
            (1)、無界面的后臺功能
            對這類測試項(xiàng),需要通過參數(shù)設(shè)置、代碼調(diào)用等方式來實(shí)現(xiàn)測試,但具體的測試設(shè)計(jì)其實(shí)與普通功能測試并無二致。這里要注意,因?yàn)闇y試時往往前臺、后臺是分開來分別進(jìn)行的,而實(shí)際運(yùn)行時兩者很可能是交集的,所以測試時要多注意后臺功能的執(zhí)行與前臺的一些功能執(zhí)行會否產(chǎn)生沖突?比如后臺有個文件搬運(yùn)的服務(wù),那有沒有可能在前臺文件生成過程中,后臺執(zhí)行文件搬運(yùn)了?若有可能就要注意會否出現(xiàn)問題了。
            (2)、與業(yè)務(wù)流相關(guān)的測試
            這類測試用例的設(shè)計(jì),就要從完整業(yè)務(wù)角度來設(shè)計(jì)數(shù)據(jù)了。從理論上來講,應(yīng)該要將各個功能可能出現(xiàn)的各種數(shù)據(jù)排列組合到一起,按業(yè)務(wù)流程逐一進(jìn)行測試。但實(shí)際上我們不可能去做全覆蓋。所以設(shè)計(jì)這類用例時,最好有一張草稿,將所有相關(guān)功能按業(yè)務(wù)流程逐一列示,然后再將每個功能可能出現(xiàn)的特定數(shù)據(jù)一一標(biāo)上,最后將圖中最可能出現(xiàn)的、最可能出錯的、最核心的數(shù)據(jù)取出來,分別組合成一個個完整的業(yè)務(wù)數(shù)據(jù)用例,來進(jìn)行測試。這樣就可以按清晰的思路,找出最實(shí)用、最有效的測試數(shù)據(jù)。
            (3)、其它測試類型
            這一類的測試通常都有其特定的方法。如要測可靠性就準(zhǔn)備大量數(shù)據(jù)不停地執(zhí)行;要測安全性就考慮數(shù)據(jù)的加密、數(shù)據(jù)的傳輸、數(shù)據(jù)的破壞;恢復(fù)性一般從網(wǎng)絡(luò)、電源方面著手;配置安裝則根據(jù)系統(tǒng)可支持的配置,搭建相應(yīng)環(huán)境進(jìn)行功能驗(yàn)證,此處的驗(yàn)證也要掌握技巧,即要多測試那些涉及到:數(shù)據(jù)庫讀寫、磁盤文件讀寫、文件上傳下載、文件加解密、數(shù)據(jù)統(tǒng)計(jì)、圖表展現(xiàn)、打印等方面的功能。
            三、測試數(shù)據(jù)的設(shè)計(jì)
            每一個測試思路最終都要轉(zhuǎn)化成具體的數(shù)據(jù)才能來執(zhí)行。關(guān)于測試數(shù)據(jù)設(shè)計(jì)的方法也不外乎那幾種,就不再贅述了。此處單就一些經(jīng)常易犯的錯誤,提出一些注意點(diǎn),作為用例數(shù)據(jù)設(shè)計(jì)時的參考:
            1、盡量避免可能出現(xiàn)歧義測試結(jié)果的數(shù)據(jù):即你設(shè)計(jì)的數(shù)據(jù)必須能唯一正確地反映出你所希望測試的結(jié)果。比如一組測試數(shù)據(jù),有可能得到結(jié)果A或結(jié)果B,此時單用此數(shù)據(jù)來測試預(yù)期結(jié)果為A的用例,那明顯就產(chǎn)生了歧義。
            2、對于不便具體列示的數(shù)據(jù),則必須詳細(xì)描述其各項(xiàng)特性:有時我們在設(shè)計(jì)用例時為節(jié)約時間,不一定要到具體的一個數(shù)值,這也是允許的,但前提是你必須要詳細(xì)描述清楚你要測試的數(shù)據(jù)特性。比如數(shù)據(jù)庫字段限長20,要測試超長數(shù)據(jù)時,可以描述為:嘗試輸入長度為21位的半角英文字符;嘗試輸入長度為19位的半角英文字符,然后切換到中文全角再輸入一位全角字符等。千萬不能寫成:嘗試輸入超長字符,因?yàn)檫@只能是測試方案,作為方案是可以這樣寫,但到用例階段,必須要是具體的、明確的、可操作的。
            3、測試數(shù)據(jù)的設(shè)計(jì)必須有明確目的性:即測試數(shù)據(jù)是從測試方案衍生而來的。如上例測試方案是測超長字符輸入控制,所以測試數(shù)據(jù)就要根據(jù)具體字段長度來錄入超長數(shù)據(jù),如果一味錄入長15位、長16位的數(shù)據(jù)那就沒意義了。好的測試數(shù)據(jù)是可以同時針對多個測試方案的,此時可以在用例邊注明一下該數(shù)據(jù)的測試目的,因?yàn)殡S著時間推移,對著具體的數(shù)據(jù)你也許會忘了它到底是測什么的,而這對你最后總結(jié)測試,查驗(yàn)測試覆蓋率是非常不利的,所以隨時記下你的思路想法吧,好記性不如爛筆頭。
            4、測試數(shù)據(jù)可省略描述:測試數(shù)據(jù)描述以能讓人看懂為準(zhǔn)則。所以寫用例時當(dāng)碰到連續(xù)幾個用例,僅某幾個關(guān)鍵數(shù)據(jù)值改動,其余均是一樣的情況下,不必每個用例都要重復(fù)描述所有數(shù)據(jù),可以在第一個用例描述完整之后,其余用例中僅列示不同的數(shù)據(jù),并標(biāo)明其余數(shù)據(jù)同上第X個用例,即可。這樣測試時仍能復(fù)原測試數(shù)據(jù),且該用例的測試目的一眼就明,增加了用例的清晰性。
            至些,我根據(jù)測試用例設(shè)計(jì)的順序,從測試數(shù)據(jù)的切面設(shè)計(jì)(即測試項(xiàng)劃分),到詳細(xì)測試用例設(shè)計(jì),再到測試數(shù)據(jù)設(shè)計(jì)三個層面,逐一介紹了如何來提高測試用例的覆蓋度。因?yàn)榫唧w項(xiàng)目中的具體情況太多,以上敘述的內(nèi)容也只能是管窺蠡測。至于其中的疏漏錯誤之處應(yīng)也難免,只希望各位閱后能打開思路,從自己多年的測試經(jīng)驗(yàn)中多總結(jié)、提煉出一些想法思路,進(jìn)一步補(bǔ)充完善這個文檔,使大家的測試用例設(shè)計(jì)能力都能進(jìn)一步提升。

          posted on 2014-08-15 09:27 順其自然EVO 閱讀(227) 評論(0)  編輯  收藏 所屬分類: 測試學(xué)習(xí)專欄

          <2014年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 安国市| 武城县| 古浪县| 外汇| 莆田市| 澳门| 山阴县| 长汀县| 历史| 桑植县| 招远市| 理塘县| 银川市| 台州市| 郁南县| 施秉县| 桐乡市| 云梦县| 子洲县| 辽阳县| 平乡县| 丰台区| 吴堡县| 太原市| 镇巴县| 五家渠市| 马边| 岳阳县| 饶河县| 永和县| 达州市| 修水县| 内丘县| 若羌县| 雅安市| 琼中| 玉环县| 德化县| 达日县| 芜湖县| 永寿县|