好的測(cè)試用例一定是一個(gè)完備的集合漏麦,它能夠覆蓋所有等價(jià)類以及各邊界值促王,而跟能是否發(fā)現(xiàn)缺陷無(wú)關(guān)
三種最常用的測(cè)試用例設(shè)計(jì)方法:
第一,等價(jià)類劃分方法
等價(jià)類中任意一個(gè)輸入數(shù)據(jù)對(duì)于揭露程序中潛在錯(cuò)誤都有相同效果。后續(xù)我們只要從每個(gè)等價(jià)類中任意選取一個(gè)值進(jìn)行測(cè)試劝贸,就剋用少量具有代表性的測(cè)試輸入取得較好的測(cè)試覆蓋效果。
eg:成績(jī)?nèi)≈捣秶?-100之間整數(shù)贰逾,及格60
有效等價(jià)類:0-59之間任意整數(shù)
有效等價(jià)類:60-100之間任意整數(shù)
無(wú)效等價(jià)類1:0-100之間任何浮點(diǎn)數(shù)
無(wú)效等價(jià)類2:小于0負(fù)數(shù)
無(wú)效等價(jià)類3:大于100整數(shù)
無(wú)效等價(jià)類:其他任意非數(shù)字字符
第二悬荣,邊界值分析法
邊界值分析是對(duì)等價(jià)類劃分的補(bǔ)充。
eg:上述成績(jī)邊界值:-1,0,1,59,60,61,99,100,101
第三疙剑,錯(cuò)誤推測(cè)法
錯(cuò)誤推測(cè)方法是指基于對(duì)被測(cè)軟件系統(tǒng)設(shè)計(jì)的理解氯迂,過(guò)往經(jīng)驗(yàn)以及個(gè)人直覺,推測(cè)處軟件可能存在的缺陷言缤,從而有針對(duì)性的設(shè)計(jì)測(cè)試用例的方法嚼蚀。這個(gè)方法強(qiáng)調(diào)的是對(duì)被測(cè)軟件的需求理解以及設(shè)計(jì)實(shí)現(xiàn)的細(xì)節(jié)把握,當(dāng)然還有個(gè)人能力管挟。
比如轿曙,Web?界面的?GUI?功能測(cè)試,需要考慮瀏覽器在有緩存和沒有緩存下的表現(xiàn)僻孝;Web?Service?的?API?測(cè)試导帝,需要考慮被測(cè)?API?所依賴的第三方?API?出錯(cuò)下的處理邏輯;對(duì)于代碼級(jí)的單元測(cè)試穿铆,需要考慮被測(cè)函數(shù)的輸入?yún)?shù)為空情況下的內(nèi)部處理邏輯等等您单。由此可見,這些測(cè)試用例的設(shè)計(jì)都是基于曾經(jīng)遇到的問(wèn)題而進(jìn)行的錯(cuò)誤推測(cè)荞雏,很大程度上取決于個(gè)人能力虐秦。
在軟件企業(yè)的具體實(shí)踐中平酿,為了降低對(duì)個(gè)人能力的依賴,通常會(huì)建立常見缺陷知識(shí)庫(kù)悦陋,在測(cè)試設(shè)計(jì)的過(guò)程中蜈彼,會(huì)使用缺陷知識(shí)庫(kù)作為檢查點(diǎn)列表(checklist),去幫助優(yōu)化補(bǔ)充測(cè)試用例的設(shè)計(jì)俺驶。
對(duì)于中小企業(yè)幸逆,可能最初的方法就是建立一個(gè)簡(jiǎn)單的?wiki?頁(yè)面,讓測(cè)試工程師完成測(cè)試用例的最初設(shè)計(jì)后對(duì)應(yīng)這個(gè)?wiki?頁(yè)面先做一輪自檢痒钝,如果在后續(xù)測(cè)試中發(fā)現(xiàn)了新的點(diǎn)秉颗,就會(huì)繼續(xù)完善這個(gè)?wiki?頁(yè)面。
對(duì)于測(cè)試基礎(chǔ)架構(gòu)比較成熟的中大型軟件企業(yè)送矩,通常會(huì)以該缺陷知識(shí)庫(kù)作為數(shù)據(jù)驅(qū)動(dòng)測(cè)試的輸入來(lái)自動(dòng)生成部分的測(cè)試數(shù)據(jù)
在真實(shí)的工程實(shí)踐中蚕甥,不同的軟件項(xiàng)目在研發(fā)生命周期的各個(gè)階段都會(huì)有不同的測(cè)試類型。?比如栋荸,傳統(tǒng)軟件的開發(fā)階段通常會(huì)有單元測(cè)試菇怀,軟件模塊集成階段會(huì)有代碼級(jí)集成測(cè)試,打包部署后會(huì)有面向終端用戶的?GUI?測(cè)試晌块;再比如爱沟,電商網(wǎng)站的測(cè)試會(huì)分為服務(wù)器端基于?API?的測(cè)試、中間件測(cè)試匆背、前端?GUI?測(cè)試等呼伸。
對(duì)于每一種不同的測(cè)試類型,設(shè)計(jì)出“好的”測(cè)試用例的關(guān)注點(diǎn)和方法論可能會(huì)有很大的差異钝尸,?有些可能采用黑盒方法括享,有些可能采用白盒方法,有些還會(huì)采用灰盒方法(比如珍促,微服務(wù)架構(gòu)中的測(cè)試)铃辖,所以很難有一套放之四海而皆準(zhǔn)的套路。
所以猪叙,在這篇文章中娇斩,我僅以最常見、最容易理解的面向終端用戶的?GUI?測(cè)試為例穴翩,跟你聊聊如何才能設(shè)計(jì)一個(gè)“好的”測(cè)試用例犬第。
面向終端用戶的?GUI?測(cè)試,最核心的測(cè)試點(diǎn)就是驗(yàn)證軟件對(duì)需求的滿足程度芒帕,這就要求測(cè)試工程師對(duì)被測(cè)軟件的需求有深入的理解歉嗓。在我看來(lái),深入理解被測(cè)軟件需求的最好方法是副签,測(cè)試工程師在需求分析和設(shè)計(jì)階段就開始介入遥椿,因?yàn)檫@個(gè)階段是理解和掌握軟件的原始業(yè)務(wù)需求的最好時(shí)機(jī)。
只有真正理解了原始業(yè)務(wù)需求之后淆储,才有可能從業(yè)務(wù)需求的角度去設(shè)計(jì)針對(duì)性明確冠场、從終端用戶使用場(chǎng)景考慮的端到端(End-2-End)的測(cè)試用例集。這個(gè)階段的測(cè)試用例設(shè)計(jì)本砰,主要目的是驗(yàn)證各個(gè)業(yè)務(wù)需求是否被滿足碴裙,主要采用基于黑盒的測(cè)試設(shè)計(jì)方法。
在具體的用例設(shè)計(jì)時(shí)点额,首先需要搞清楚每一個(gè)業(yè)務(wù)需求所對(duì)應(yīng)的多個(gè)軟件功能需求點(diǎn)舔株,然后分析出每個(gè)軟件功能需求點(diǎn)對(duì)應(yīng)的多個(gè)測(cè)試需求點(diǎn),最后再針對(duì)每個(gè)測(cè)試需求點(diǎn)設(shè)計(jì)測(cè)試用例还棱。
以用戶登錄為例
圖中的業(yè)務(wù)需求到軟件功能需求载慈、軟件功能需求到測(cè)試需求,以及測(cè)試需求到測(cè)試用例的映射關(guān)系珍手,在非互聯(lián)網(wǎng)軟件企業(yè)的實(shí)踐中办铡,通常會(huì)使用需求追蹤管理工具(比如?ALM、DOORS琳要、JIRA寡具、TestLink?等)來(lái)管理,并以此來(lái)衡量測(cè)試用例對(duì)業(yè)務(wù)需求稚补、軟件功能需求的覆蓋率童叠。
具體到測(cè)試用例本身的設(shè)計(jì),有兩個(gè)關(guān)鍵點(diǎn)需要你注意课幕。
1厦坛、從軟件功能需求出發(fā),全面地撰豺、無(wú)遺漏地識(shí)別出測(cè)試需求是至關(guān)重要的粪般,這將直接關(guān)系到用例的測(cè)試覆蓋率。?比如污桦,如果你沒有識(shí)別出用戶登錄功能的安全性測(cè)試需求亩歹,那么后續(xù)設(shè)計(jì)的測(cè)試用例就完全不會(huì)涉及安全性,最終造成重要測(cè)試漏洞凡橱。
2小作、對(duì)于識(shí)別出的每個(gè)測(cè)試需求點(diǎn),需要綜合運(yùn)用等價(jià)類劃分稼钩、邊界值分析和錯(cuò)誤推測(cè)方法來(lái)全面地設(shè)計(jì)測(cè)試用例顾稀。?這里需要注意的是,要綜合運(yùn)用這三種方法坝撑,并針對(duì)每個(gè)測(cè)試需求點(diǎn)的具體情況静秆,進(jìn)行靈活選擇粮揉。
以“用戶登錄”的功能性測(cè)試需求為例,你首先應(yīng)該對(duì)“用戶名”和“密碼”這兩個(gè)輸入項(xiàng)分別進(jìn)行等價(jià)類劃分抚笔,列出對(duì)應(yīng)的有效等價(jià)類和無(wú)效等價(jià)類扶认,對(duì)于無(wú)效等價(jià)類的識(shí)別可以采用錯(cuò)誤猜測(cè)法(比如,用戶名包含特殊字符等)殊橙,然后基于兩者可能的組合辐宾,設(shè)計(jì)出第一批測(cè)試用例。
等價(jià)類劃分完后膨蛮,你需要補(bǔ)充“用戶名”和“密碼”這兩個(gè)輸入項(xiàng)的邊界值的測(cè)試用例叠纹,比如用戶名為空(NULL)、用戶名長(zhǎng)度剛剛大于允許長(zhǎng)度等敞葛。
用例設(shè)計(jì)的其他經(jīng)驗(yàn)
1誉察、只有深入理解被測(cè)試軟件的架構(gòu),你才能設(shè)計(jì)出“有的放矢”的測(cè)試用例集惹谐,去發(fā)現(xiàn)系統(tǒng)邊界以及系統(tǒng)集成上的潛在缺陷冒窍。
作為測(cè)試工程師,切忌不能把整個(gè)被測(cè)系統(tǒng)看作一個(gè)大黑盒豺鼻,你必須對(duì)內(nèi)部的架構(gòu)有清楚的認(rèn)識(shí)综液,比如數(shù)據(jù)庫(kù)連接方式、數(shù)據(jù)庫(kù)的讀寫分離儒飒、消息中間件?Kafka?的配置谬莹、緩存系統(tǒng)的層級(jí)分布、第三方系統(tǒng)的集成等等桩了。
2附帽、必須深入理解被測(cè)軟件的設(shè)計(jì)與實(shí)現(xiàn)細(xì)節(jié),深入理解軟件內(nèi)部的處理邏輯井誉。
單單根據(jù)測(cè)試需求點(diǎn)設(shè)計(jì)的用例蕉扮,只能覆蓋“表面”的一層,往往會(huì)覆蓋不到內(nèi)部的處理流程颗圣、分支處理喳钟,而沒有覆蓋到的部分就很可能出現(xiàn)缺陷遺漏。在具體實(shí)踐中在岂,你可以通過(guò)代碼覆蓋率指標(biāo)找出可能的測(cè)試遺漏點(diǎn)奔则。
同時(shí),切忌不要以開發(fā)代碼的實(shí)現(xiàn)為依據(jù)設(shè)計(jì)測(cè)試用例蔽午。因?yàn)殚_發(fā)代碼實(shí)現(xiàn)的錯(cuò)誤會(huì)導(dǎo)致測(cè)試用例也出錯(cuò)易茬,所以你應(yīng)該根據(jù)原始需求設(shè)計(jì)測(cè)試用例。
3及老、需要引入需求覆蓋率和代碼覆蓋率來(lái)衡量測(cè)試執(zhí)行的完備性抽莱,并以此為依據(jù)來(lái)找出遺漏的測(cè)試點(diǎn)范抓。