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