說到測試用例的設(shè)計(jì)裆蒸,我想每個(gè)有過測試經(jīng)歷的測試工程師都會(huì)認(rèn)為很簡單琼讽,不就是:按需求或概要設(shè)計(jì)必峰,得到軟件功能劃分圖,然后據(jù)此按每個(gè)功能钻蹬,采用等價(jià)類劃分吼蚁、臨界值、因果圖等方法來設(shè)計(jì)用例就行了问欠。
但事實(shí)上撇開測試數(shù)據(jù)的設(shè)計(jì)不談肝匆,僅就測試項(xiàng)來說粒蜈,我們發(fā)現(xiàn),對同一個(gè)項(xiàng)目旗国,有經(jīng)驗(yàn)的測試人員枯怖,在寫用例或測試時(shí)總會(huì)有更多的測試考慮點(diǎn),從而發(fā)現(xiàn)更多的問題能曾;而有些測試人員測試用例的撰寫卻只有那么三板斧嫁怀,表面看好象已經(jīng)把頁面所有信息的測試都考慮到了,實(shí)際上卻還是遺漏了大量測試覆蓋點(diǎn)借浊,導(dǎo)致其測試出來的程序總是比較脆弱。
究其原因萝招,我覺得還是測試用例的撰寫水平不到位蚂斤,更確切地說是測試用例的覆蓋度太低。說實(shí)話我認(rèn)為系統(tǒng)測試用例真正做到100%覆蓋是很難的槐沼。難道說按設(shè)計(jì)中的功能劃分曙蒸,每個(gè)功能都寫到了這個(gè)用例就覆蓋完整了?錯(cuò)岗钩,這還遠(yuǎn)遠(yuǎn)不夠纽窟。因?yàn)槲覀冎肋€有大量的內(nèi)部處理、轉(zhuǎn)換兼吓、業(yè)務(wù)邏輯臂港、相互影響的關(guān)系等都是需求或設(shè)計(jì)中所不會(huì)點(diǎn)明的。而這些一方面需要靠測試人員對項(xiàng)目本身的了解视搏,另一方面要靠測試人員的經(jīng)驗(yàn)审孽,來一一找到這些隱藏點(diǎn)并予以測試,才能真正地保證我們的測試覆蓋度浑娜。
所以本文拋開具體的測試數(shù)據(jù)設(shè)計(jì)方法佑力,主要從測試覆蓋度的角度來介紹用例設(shè)計(jì)時(shí),如何才能考慮地更周全筋遭,如何才能將隱藏的測試項(xiàng)一一找出打颤,從而使我們的測試更全面更完整。
想法雖然美好漓滔,可是畢竟每個(gè)測試的項(xiàng)目都是各不相同编饺,針對不同項(xiàng)目我們的經(jīng)驗(yàn)也會(huì)告訴給我們不同的想法,這些想法通常很感性次和,很難用嚴(yán)密的邏輯理論來把它升華反肋。因此本文的內(nèi)容仍是很簡陋且不成熟,只是希望能以本文為磚踏施,引起大家的思考石蔗,一起來補(bǔ)充完善罕邀,以使我們的測試用例設(shè)計(jì)水平不斷提高。
正文
一养距、測試用例的切面設(shè)計(jì)
1诉探、功能點(diǎn)切面
2、特定切面
3棍厌、隱含切面
∩隹琛(1)、后臺(tái)功能
≡派础(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)、后臺(tái)的特殊處理
≡丶选(3)炒事、功能業(yè)務(wù)之間的關(guān)聯(lián)與轉(zhuǎn)換
(4)蔫慧、從設(shè)計(jì)實(shí)現(xiàn)發(fā)掘測試點(diǎn)
∧尤椤(5)、并發(fā)操作時(shí)的測試
3、特定切面用例設(shè)計(jì)
4睡扬、隱含切面用例設(shè)計(jì)
∶蓑肌(1)、無界面的后臺(tái)功能
÷袅(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)為頁面上的一個(gè)按鈕就是一個(gè)功能點(diǎn)盆昙。然后我們可以根據(jù)功能的復(fù)雜程度羽历,按每個(gè)功能;或一個(gè)功能點(diǎn)分多頁淡喜;或多個(gè)功能點(diǎn)合成一頁來進(jìn)行用例的撰寫秕磷。
2、特定切面
除此以外炼团,還有一種特定切面的劃分方法澎嚣,也是用例撰寫時(shí)經(jīng)常會(huì)用到的。所謂的特定切面瘟芝,就是忽略掉表面上的功能點(diǎn)易桃,而關(guān)注測試對象的某一個(gè)面。比如我們的內(nèi)部管理系統(tǒng)提供了銷售錄入導(dǎo)入锌俱、注冊錄入導(dǎo)入等功能晤郑,從菜單劃分上對應(yīng)了七八個(gè)功能點(diǎn)。但這些功能處理后臺(tái)有個(gè)共同的處理項(xiàng)就是授權(quán)記錄的生成,這時(shí)我們就可以把“授權(quán)記錄生成”單獨(dú)拿出來做一個(gè)測試項(xiàng)造寝,而在其它測試項(xiàng)中涉及這一部分的用例就不必再一一撰寫磕洪。此外象一些界面共通的操作用例單獨(dú)寫成一頁,也是一種特定切面匹舞。所以如果說將用例按功能點(diǎn)劃分是一種縱向劃分法褐鸥,那么特定切面就是從橫向的角度分析所得到的切面。在普通功能點(diǎn)劃分上再根據(jù)實(shí)際情況設(shè)計(jì)特定切面赐稽,可以使我們的用例閱讀性叫榕、理解性、操作性更強(qiáng)姊舵。
3晰绎、隱含切面
這類用例是最容易被忽略的。它往往不是明顯的某個(gè)功能項(xiàng)括丁,可能是功能項(xiàng)后臺(tái)的隱含處理荞下,也可能是多個(gè)功能項(xiàng)之間的關(guān)聯(lián)處理,甚至可能是在某種特定情形下的處理史飞。這都需要測試人員通過對軟件的學(xué)習(xí)了解尖昏,來進(jìn)行挖掘。
」棺省(1)抽诉、后臺(tái)功能
常見的如一些定時(shí)自動(dòng)啟動(dòng)的服務(wù);以及某種特定情況下自動(dòng)執(zhí)行的操作等吐绵。它們在界面上往往是不體現(xiàn)的迹淌,但許多在需求設(shè)計(jì)中還是會(huì)提到,也有一些比較細(xì)小的功能可能會(huì)被忽略己单,就需要測試人員根據(jù)對項(xiàng)目的了解程度來進(jìn)行挖掘唉窃。所以說一個(gè)熟悉項(xiàng)目的和一個(gè)不熟悉的測試人員,寫出來的用例就完全是兩個(gè)層次的纹笼。
∥品荨(2)、完整業(yè)務(wù)流程的測試
我們都知道測試用例的設(shè)計(jì)是從點(diǎn)廷痘、線矮嫉、面三個(gè)層次去考慮的。完整的一個(gè)功能項(xiàng)是線牍疏,其中的某個(gè)按鈕是點(diǎn)蠢笋,多個(gè)相關(guān)功能結(jié)合成完整業(yè)務(wù)流就是面。從實(shí)際來看這類用例往往被我們忽略鳞陨。
事實(shí)上目前公司的軟件本來都是業(yè)務(wù)型應(yīng)用軟件昨寞,將各種功能從業(yè)務(wù)流中切割出來單獨(dú)寫用例瞻惋,肯定也會(huì)有涉及到整體流程的情況。若不加以區(qū)分援岩,將細(xì)節(jié)與全局?jǐn)囋谝黄鸺呃牵粌H思路混亂,也容易考慮不周享怀。因此在系統(tǒng)測試階段羽峰,建議用例設(shè)計(jì)要有分有合,針對具體功能的就只圍著這個(gè)功能轉(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)行自如;再有如存在大量動(dòng)態(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ā)組長等討論清楚愿险,是否需要測試颇蜡。若時(shí)間緊張或其它原因決定不測的,應(yīng)在測試計(jì)劃中說明。若需要測試的风秤,則具體可根據(jù)實(shí)際情況來設(shè)計(jì)鳖目,可以是通過系統(tǒng)某個(gè)功能的測試來涉及,此時(shí)就不需要單獨(dú)劃分測試項(xiàng)缤弦;若相對比較獨(dú)立的领迈,也可以通過單獨(dú)的測試項(xiàng)來對其專門進(jìn)行測試。
“濉(5)狸捅、除功能測試外的其它測試類型
包括可靠性、安全性抢韭、恢復(fù)性薪贫、配置安裝測試等等,這些測試類型都是一個(gè)單獨(dú)的測試項(xiàng)刻恭。
所謂好的開始是成功的一半瞧省,保證測試項(xiàng)劃分的完整、合理鳍贾、正確鞍匾,會(huì)直接影響到本次測試的成效。通常建議該階段工作要花1-2天的時(shí)間來考慮骑科,并要在測試過程中隨著對軟件的深入了解橡淑,不斷進(jìn)行調(diào)整補(bǔ)充∨厮可千萬不要認(rèn)為把分析設(shè)計(jì)中的功能模型圖搬搬過來就可以了梁棠。
二、詳細(xì)用例的設(shè)計(jì)
劃分好了測試項(xiàng)斗埂,接著就是針對各個(gè)測試項(xiàng)符糊,考慮具體的測試用例了。根據(jù)測試項(xiàng)的特點(diǎn)呛凶,測試用例的設(shè)計(jì)角度也有所不同男娄。下面我們就來看看通常的功能點(diǎn)測試用例,該從哪些角度出發(fā)來進(jìn)行設(shè)計(jì):
1漾稀、功能切面表面用例設(shè)計(jì)
∧O小(1)、具體功能測試
根據(jù)需求分析設(shè)計(jì)崭捍,按頁面提供的各個(gè)功能項(xiàng)尸折,采用黑盒測試的各種方法,設(shè)計(jì)用例殷蛇。比如頁面提供了增翁授、刪拣播、改、查功能收擦,那么這四個(gè)功能是否正確實(shí)現(xiàn)就是我要驗(yàn)證的贮配。這是最簡單、最基本塞赂,同時(shí)也是必須的測試用例泪勒,通常我們的編碼人員自測也就是做到這個(gè)程度。^_^
⊙缁(2)圆存、組合操作的測試
這是從上一角度擴(kuò)展出來的,相對而言也是編碼人員不會(huì)去測試的仇哆,所以需要測試人員多作考慮沦辙。
所謂組合操作測試,也就是選擇某幾個(gè)操作項(xiàng)讹剔,按一定的順序進(jìn)行操作油讯,驗(yàn)證系統(tǒng)不會(huì)出現(xiàn)意外錯(cuò)誤。當(dāng)然要將所有功能項(xiàng)排列組合一遍來測試不僅不必要延欠,也是不可能的陌兑。所以具體要將哪些功能項(xiàng)進(jìn)行結(jié)合,要按怎樣的步驟來操作由捎,還是需要測試人員根據(jù)實(shí)際情況來作設(shè)計(jì)(所以說在IT業(yè)人才就是一切呀兔综,呵呵:)。
一般來說我們會(huì)考慮功能項(xiàng)之間的數(shù)據(jù)是否會(huì)存在關(guān)聯(lián)狞玛,若有就需要考慮這種組合了软驰。常見的如查詢功能,需要將各條件逐一累加進(jìn)行測試心肪;增完的數(shù)據(jù)能否改锭亏,改完能否刪,刪完能否再增蒙畴,這之間能否查詢到正確結(jié)果贰镣;按鈕的連續(xù)多次點(diǎn)擊會(huì)否出現(xiàn)異常呜象;有嚴(yán)格前后順序要求的幾個(gè)操作膳凝,嘗試顛倒順序去操作,系統(tǒng)能否控制等等恭陡。
不僅在某功能內(nèi)部蹬音,擴(kuò)展到有關(guān)聯(lián)的多個(gè)功能項(xiàng)之間,同樣有組合操作測試的存在休玩。如申報(bào)完了能才反饋著淆;如申報(bào)成功或失敗后再嘗試申報(bào)等劫狠。當(dāng)然對于這類用例既可以寫到某個(gè)功能切面中,也可以單獨(dú)寫到完整業(yè)務(wù)流程的切面中永部,這就取決于可能涉及用例的數(shù)量了独泞,若關(guān)系比較復(fù)雜,當(dāng)然是單獨(dú)寫比較好苔埋;若也就是三五個(gè)用例數(shù)懦砂,那就直接在某個(gè)功能的用例中補(bǔ)充好了。
∽殚稀(3)荞膘、GUI界面的測試
這類測試是測試人員的強(qiáng)項(xiàng),具體測試項(xiàng)目如限長玉工、非法輸入等等羽资,就不必贅述了。要提醒的是在測試時(shí)遵班,一定要從實(shí)際使用者的操作習(xí)慣出發(fā)屠升。要知道界面原型所能確定的也只是頁面的擺放顯示,而實(shí)際操作時(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ù)辛孵,是否會(huì)實(shí)時(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í)別號(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)方式是否合理(比如只在某一頁面提供某數(shù)據(jù)的獲取功能,但根據(jù)業(yè)務(wù)劃分有些人員不能操作此頁面墓懂,卻必須要能看到該數(shù)據(jù))焰宣;
所做的數(shù)據(jù)控制是否合理(比如必須在A功能中新增數(shù)據(jù),然后才能在B功能中操作捕仔,但實(shí)際業(yè)務(wù)中有可能會(huì)出現(xiàn)相反操作)宛徊;
所做的數(shù)據(jù)控制是否完整(如授權(quán)的方式有普通按月、有買斷逻澳、有按數(shù)量控制闸天,那么當(dāng)同一企業(yè)嘗試同時(shí)存在以上幾種授權(quán)方式時(shí),系統(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ù),就會(huì)涉及到數(shù)據(jù)完整性的測試精居。最常見的如被引用的數(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ì)否異常(最常見如用戶名錄入時(shí)允許長度10,但引用到某個(gè)單子填寫時(shí)允許長度是8维雇,此時(shí)就會(huì)異常了)淤刃。
(2)谆沃、后臺(tái)的特殊處理
是指某功能除了表面所見以外的程序處理钝凶。比如訂單錄入仪芒,表面所見的就是訂單的保存唁影,但后臺(tái)還會(huì)有重復(fù)數(shù)據(jù)的判斷耕陷、非法數(shù)據(jù)的處理、業(yè)務(wù)邏輯上沖突情況的處理以及其它種種根據(jù)需求設(shè)計(jì)所特有的處理据沈。又比如備份功能哟沫,在備份前可能有數(shù)據(jù)的清空、備份目錄的清空锌介、備份目標(biāo)是否存在的校驗(yàn)嗜诀、備份文件重復(fù)時(shí)的處理等等。類似這些在分析設(shè)計(jì)中就未必會(huì)寫全了孔祸,還是要測試人員多花心思去思考挖掘隆敢。
(3)亿蒸、功能業(yè)務(wù)之間的關(guān)聯(lián)與轉(zhuǎn)換
相關(guān)聯(lián)的幾個(gè)功能之間數(shù)據(jù)的傳遞形入,會(huì)否產(chǎn)生影響弃甥。比如新增錄入的某種特殊字符,要查詢時(shí)會(huì)引起查詢SQL語句異常温自;又如某下載文件名中存在中文等字符,下載時(shí)由于編碼問題導(dǎo)致亂碼的出現(xiàn)皇钞;再有報(bào)表填寫時(shí)到小數(shù)點(diǎn)后四位悼泌,生成報(bào)文時(shí)會(huì)不會(huì)被忽略成兩位了等等。象這種問題夹界,通常只能是在每個(gè)功能設(shè)計(jì)用例時(shí)馆里,盡量保證用例中的數(shù)據(jù)能涉及到允許范圍的各種情況,即充分運(yùn)用等價(jià)類劃分+邊界值的方法設(shè)計(jì)出各種“稀奇古怪”的數(shù)據(jù)可柿,并需驗(yàn)證這些數(shù)據(jù)從頭流到尾也拜,都還是能保持其正確性,而不僅僅是在當(dāng)前功能中正確趾痘。
÷(4)、從設(shè)計(jì)實(shí)現(xiàn)發(fā)掘測試點(diǎn)
這個(gè)就是我們測試中最難捉的BUG了永票,它往往是由編碼人員自己在編碼時(shí)創(chuàng)造出來的卵贱,連設(shè)計(jì)人員都不會(huì)知道。
比如內(nèi)部管理系統(tǒng)中侣集,正常的產(chǎn)品键俱,其類別通常是2位數(shù)字;如果是模塊世分,其類別就以產(chǎn)品代碼來取代编振。這時(shí)如何來判斷該產(chǎn)品是模塊呢?最保險(xiǎn)的當(dāng)然是校驗(yàn)其產(chǎn)品類別字段的值能否在產(chǎn)品表中找到臭埋;也有比較簡單的方法就是直接判斷類別代碼大于2位還是小于等于2位踪央。此時(shí)若能確切知道采用的是哪種實(shí)現(xiàn)方法臀玄,就可以直接找到其漏洞所在。比如采用后一種方法畅蹂,當(dāng)產(chǎn)品類別長度變化時(shí)健无,明顯系統(tǒng)會(huì)出錯(cuò)。那么即使確認(rèn)該實(shí)現(xiàn)方式不改液斜,測試人員也應(yīng)將其作為限制寫入測試報(bào)告累贤,。讓大家知道這個(gè)產(chǎn)品類別長度是不能隨意變化的少漆。
而讓人郁悶的是臼膏,類似這樣的實(shí)現(xiàn),有太多的編碼人員都是隨性處理的示损,它們細(xì)而隱蔽讶请,在系統(tǒng)數(shù)據(jù)正常情況下根本不會(huì)被發(fā)現(xiàn);而在漫漫的軟件使用道路中屎媳,由于需求變更等原因?qū)υ幸恍┰O(shè)計(jì)做維護(hù)變化夺溢,這種問題就會(huì)突然暴發(fā)出來讓人措不及防。所以要杜絕這類漏洞烛谊,除了測試人員要做土撥鼠风响,不停地對軟件各功能的實(shí)現(xiàn)細(xì)節(jié)進(jìn)行挖掘外,也要多給編碼人員灌輸完美實(shí)現(xiàn)的理念丹禀,多用復(fù)雜但抗壓性高的代碼状勤,來替代簡單但依賴性強(qiáng)的代碼。
∷帷(5)持搜、并發(fā)操作時(shí)的測試
即兩個(gè)或多個(gè)用戶同時(shí)操作同一功能時(shí),會(huì)否引起數(shù)據(jù)的混亂焙矛。通常在C/S結(jié)構(gòu)下葫盼,如果有同時(shí)操作的可能,是需要作此測試的村斟;而在B/S結(jié)構(gòu)下由于其特殊性贫导,此問題通常難以解決。除非就是某用戶一旦使用過某功能后蟆盹,在一定時(shí)間內(nèi)鎖定不允許再用孩灯,但這也會(huì)帶來實(shí)際應(yīng)用中的不便,所以除非是特別核心的數(shù)據(jù)逾滥,一般我們也不會(huì)去做此控制峰档,當(dāng)然對于可能出現(xiàn)的并發(fā)沖突也就作為系統(tǒng)的限制進(jìn)行遺留了。
3、特定切面用例設(shè)計(jì)
所謂特定切面讥巡,其實(shí)就是從另一個(gè)角度切割出來的用例面掀亩,所以具體的用例撰寫方式其實(shí)與功能切面是一致的。
4尚卫、隱含切面用例設(shè)計(jì)
隱含切面分以下幾種情況:
(1)尸红、無界面的后臺(tái)功能
對這類測試項(xiàng)吱涉,需要通過參數(shù)設(shè)置、代碼調(diào)用等方式來實(shí)現(xiàn)測試外里,但具體的測試設(shè)計(jì)其實(shí)與普通功能測試并無二致怎爵。這里要注意,因?yàn)闇y試時(shí)往往前臺(tái)盅蝗、后臺(tái)是分開來分別進(jìn)行的鳖链,而實(shí)際運(yùn)行時(shí)兩者很可能是交集的,所以測試時(shí)要多注意后臺(tái)功能的執(zhí)行與前臺(tái)的一些功能執(zhí)行會(huì)否產(chǎn)生沖突墩莫?比如后臺(tái)有個(gè)文件搬運(yùn)的服務(wù)芙委,那有沒有可能在前臺(tái)文件生成過程中,后臺(tái)執(zhí)行文件搬運(yùn)了狂秦?若有可能就要注意會(huì)否出現(xiàn)問題了灌侣。
(2)裂问、與業(yè)務(wù)流相關(guān)的測試
這類測試用例的設(shè)計(jì)侧啼,就要從完整業(yè)務(wù)角度來設(shè)計(jì)數(shù)據(jù)了。從理論上來講堪簿,應(yīng)該要將各個(gè)功能可能出現(xiàn)的各種數(shù)據(jù)排列組合到一起痊乾,按業(yè)務(wù)流程逐一進(jìn)行測試。但實(shí)際上我們不可能去做全覆蓋椭更。所以設(shè)計(jì)這類用例時(shí)哪审,最好有一張草稿,將所有相關(guān)功能按業(yè)務(wù)流程逐一列示虑瀑,然后再將每個(gè)功能可能出現(xiàn)的特定數(shù)據(jù)一一標(biāo)上协饲,最后將圖中最可能出現(xiàn)的、最可能出錯(cuò)的缴川、最核心的數(shù)據(jù)取出來茉稠,分別組合成一個(gè)個(gè)完整的業(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ì)
每一個(gè)測試思路最終都要轉(zhuǎn)化成具體的數(shù)據(jù)才能來執(zhí)行。關(guān)于測試數(shù)據(jù)設(shè)計(jì)的方法也不外乎那幾種绿语,就不再贅述了秃症。此處單就一些經(jīng)常易犯的錯(cuò)誤,提出一些注意點(diǎn)吕粹,作為用例數(shù)據(jù)設(shè)計(jì)時(shí)的參考:
1种柑、盡量避免可能出現(xiàn)歧義測試結(jié)果的數(shù)據(jù):即你設(shè)計(jì)的數(shù)據(jù)必須能唯一正確地反映出你所希望測試的結(jié)果。比如一組測試數(shù)據(jù)匹耕,有可能得到結(jié)果A或結(jié)果B聚请,此時(shí)單用此數(shù)據(jù)來測試預(yù)期結(jié)果為A的用例,那明顯就產(chǎn)生了歧義稳其。
2驶赏、對于不便具體列示的數(shù)據(jù),則必須詳細(xì)描述其各項(xiàng)特性:有時(shí)我們在設(shè)計(jì)用例時(shí)為節(jié)約時(shí)間既鞠,不一定要到具體的一個(gè)數(shù)值煤傍,這也是允許的,但前提是你必須要詳細(xì)描述清楚你要測試的數(shù)據(jù)特性嘱蛋。比如數(shù)據(jù)庫字段限長20蚯姆,要測試超長數(shù)據(jù)時(shí)五续,可以描述為:嘗試輸入長度為21位的半角英文字符;嘗試輸入長度為19位的半角英文字符龄恋,然后切換到中文全角再輸入一位全角字符等疙驾。千萬不能寫成:嘗試輸入超長字符,因?yàn)檫@只能是測試方案郭毕,作為方案是可以這樣寫它碎,但到用例階段,必須要是具體的显押、明確的扳肛、可操作的。
3煮落、測試數(shù)據(jù)的設(shè)計(jì)必須有明確目的性:即測試數(shù)據(jù)是從測試方案衍生而來的敞峭。如上例測試方案是測超長字符輸入控制踊谋,所以測試數(shù)據(jù)就要根據(jù)具體字段長度來錄入超長數(shù)據(jù)蝉仇,如果一味錄入長15位、長16位的數(shù)據(jù)那就沒意義了殖蚕。好的測試數(shù)據(jù)是可以同時(shí)針對多個(gè)測試方案的轿衔,此時(shí)可以在用例邊注明一下該數(shù)據(jù)的測試目的,因?yàn)殡S著時(shí)間推移睦疫,對著具體的數(shù)據(jù)你也許會(huì)忘了它到底是測什么的害驹,而這對你最后總結(jié)測試,查驗(yàn)測試覆蓋率是非常不利的蛤育,所以隨時(shí)記下你的思路想法吧宛官,好記性不如爛筆頭。
4瓦糕、測試數(shù)據(jù)可省略描述:測試數(shù)據(jù)描述以能讓人看懂為準(zhǔn)則底洗。所以寫用例時(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è)用例,即可圣贸。這樣測試時(shí)仍能復(fù)原測試數(shù)據(jù)挚歧,且該用例的測試目的一眼就明,增加了用例的清晰性吁峻。
至些昼激,我根據(jù)測試用例設(shè)計(jì)的順序庇绽,從測試數(shù)據(jù)的切面設(shè)計(jì)(即測試項(xiàng)劃分),到詳細(xì)測試用例設(shè)計(jì)橙困,再到測試數(shù)據(jù)設(shè)計(jì)三個(gè)層面瞧掺,逐一介紹了如何來提高測試用例的覆蓋度。因?yàn)榫唧w項(xiàng)目中的具體情況太多凡傅,以上敘述的內(nèi)容也只能是管窺蠡測辟狈。至于其中的疏漏錯(cuò)誤之處應(yīng)也難免,只希望各位閱后能打開思路夏跷,從自己多年的測試經(jīng)驗(yàn)中多總結(jié)哼转、提煉出一些想法思路,進(jìn)一步補(bǔ)充完善這個(gè)文檔槽华,使大家的測試用例設(shè)計(jì)能力都能進(jìn)一步提升壹蔓。