.NET单元测试(四):用例设计
首先,我們先來思考一個問題:單元測試中,哪一個環(huán)節(jié)更重要?
要回答這個問題,我們先需要了解單元測試到底有哪些環(huán)節(jié),讀到這里,請暫停一分鐘,回憶一下我們平時的單元測試實踐(請最小化瀏覽器)。
對于單元測試可以劃分成哪些環(huán)節(jié),你是不是有了自己的認識呢?
按照自己的理解,不管怎樣劃分,都是可以的。小編根據(jù)自己的經(jīng)驗,將其劃分成如下幾個環(huán)節(jié):
- 分析業(yè)務(wù)
- 設(shè)計用例
- 實現(xiàn)用例
- 重構(gòu)
- 持續(xù)集成
接下來,請暫停一分鐘,思考一下這五個環(huán)節(jié)中,哪一個更重要(請最小化瀏覽器)。
經(jīng)過一分鐘的思考,相信你有了自己的認識。
針對這個問題,小編并沒能確定哪一個環(huán)節(jié)更重要,似乎,需要每個環(huán)節(jié)的良好配合才能發(fā)揮各個環(huán)節(jié)的最大作用。
這篇文章要講的內(nèi)容就是這五個環(huán)節(jié)中的 設(shè)計用例 環(huán)節(jié)。
做一個練習(xí)
請針對下面這個業(yè)務(wù)設(shè)計用例(可以想象成有一個返回true或者false的方法,接受一個字符串,按照定義的規(guī)則做檢查)
請暫停三分鐘,盡量思考更多的用例(請最小化瀏覽器)。
如果你之前沒有任何測試經(jīng)驗,你的用例可能有這么會包含這么一些情況:
等價類劃分
針對這個問題我們可以把輸入的情況按照下面的方式進行分類:
這樣分類后,我們發(fā)現(xiàn),在每個類別區(qū)間的輸入都具有相同的意義,這就是等價類劃分 。
通過等價類劃分,可以迫使我們分析業(yè)務(wù)的邊界,明確哪些用例是真實有效的,避免了不必要的無效用例。
等價類劃分可以分為有效等價類和無效等價類
- 有效等價類:是指對于程序的規(guī)格說明來說是合理的、有意義的輸入數(shù)據(jù)構(gòu)成的集合。
- 無效等價類:無效等價類指對程序的規(guī)格說明是不合理的或無意義的輸入數(shù)據(jù)所構(gòu)成的集合。
在這個練習(xí)中,“6-18個字母,數(shù)字或字符” 就是有效等價類,另外兩個區(qū)間屬于無效等價類。
在做等價類劃分時,這兩種等價類都是必不可少的。
邊界值分析法
邊界值往往有更多出錯的可能,所以在設(shè)計用例時需要對邊界值格外敏感。邊界值分析法就是 對輸入或輸出的邊界值進行測試。通常邊界值分析法是作為對等價類劃分法的補充。
針對這個練習(xí),至少有這么些情況屬于邊界值:
在業(yè)務(wù)描述時抓住一些關(guān)鍵的點可以幫助我們識別業(yè)務(wù)中的邊界值,比如當(dāng)業(yè)務(wù)中包含如下這些描述時,往往就需要留意邊界值了:
- 最XX(最小/大、最快/慢、最高/底.....)
- 超過
- 在內(nèi)
- 相鄰
- ...
當(dāng)我們識別到了邊界值,對于越界的用例設(shè)計是非常有必要的,這是對程序健壯性的驗證。
- 短了再短/長了再長
- 第一個減1/最后一個加1
- 少了更少/多了更多
- 剛好超過/剛好在內(nèi)
經(jīng)過了等價類劃分和邊界值分析,我們設(shè)計出了一些用例,但是對于業(yè)務(wù)中的 “數(shù)字、字母或符號” 還未進行考慮。對于用戶的輸入情況無法估計,這就導(dǎo)致可能存在多種組合,針對這種組合,如果憑空想是很容易漏掉的。接下來使用的 判定表分析 就是為了解決這種問題。
判定表
針對這個練習(xí),只考慮輸入的字符的情況,可以分成:字母、數(shù)字、英文字符、非英文字符、圖標(biāo)。我們需要考慮這些情況的組合,如果沒有判定表,是比較頭痛的。
判定表的定義:判定表是分析和表達多邏輯條件下執(zhí)行不同操作的情況的工具。
這里以判定表的部分截圖為例;
通過判定表,我們可以清楚的羅列各種情況,降低漏掉的可能性。
有時候可能會遇到分類特別多的情況,這會導(dǎo)致判定表非常龐大。不一定要把每個小細節(jié)作為一個項目,可以以一個維度,一個類別作為一個分類。進而減少測試用例維護的工作量。
結(jié)果
經(jīng)過上面幾輪方法的透析,我們可以得到如下的用例表格。
這個表格已經(jīng)包含了這個業(yè)務(wù)的絕大多數(shù)用例情況(畢竟完美的用例套件是不存在的)。
上面介紹的三種方法不是一定要按照剛才介紹的順序來使用,只要能夠在設(shè)計用例的時候想到有這些方法,并用這些方法進行分析,基本就可以覆蓋絕大多數(shù)情況。
理想是美好的,現(xiàn)實往往比較苦澀。當(dāng)我們再分析具體業(yè)務(wù),嘗試用上面的方法去分析時,有時候并不能很快的找到合適的等價類劃分方法,邊界識別也可能模糊不清,被我們漏掉。
仔細分析上面的三種方法可以發(fā)現(xiàn),其中都包含了一個關(guān)鍵的步驟:變量識別。
變量識別
所謂變量識別,就是識別業(yè)務(wù)中的可變的關(guān)鍵點,通過不斷的改變這些關(guān)鍵點來構(gòu)造用例。
舉個栗子
業(yè)務(wù)描述:針對當(dāng)前系統(tǒng)用戶,只在第一次調(diào)用時,執(zhí)行委托的方法。
針對此描述,咱們再暫停三分鐘,請思考其中的變量,以及其可變化的情況(請最小化瀏覽器)。
三分鐘過后,你是不是識別到了其中的變量呢?
小編識別到了這么些變量;
- 當(dāng)前系統(tǒng)用戶:如果不是當(dāng)前系統(tǒng)用戶會怎樣?
- 第一次調(diào)用:如果不是第一次調(diào)用會怎樣?
- 委托:這個委托是有返回值呢,還是沒返回值?如果委托中拋出了異常會怎樣?
你是不是比小編識別到更多變量呢?做個練習(xí),請針對下面的業(yè)務(wù)描述識別變量,并設(shè)計用例。
“ 執(zhí)行所有事件,在執(zhí)行過程不拋出異常,在全部運行之后如果有異常則拋出所有異常”
錯誤推測
除了上面介紹的方法,還有一種基于經(jīng)驗的用例設(shè)計方法:錯誤推測。
所謂錯誤推測,基于經(jīng)驗和直覺推測程序中所有可能存在的各種錯誤, 從而有針對性的設(shè)計測試用例的方法。
錯誤猜測大多基于經(jīng)驗,需要從邊界值分析等其他技術(shù)獲得幫助。這種技術(shù)猜測特定軟件類型可能發(fā)生的錯誤類型,并且設(shè)計測試用例查出這些錯誤。 對有經(jīng)驗的工程師來說,錯誤猜測有時是唯一最有效發(fā)現(xiàn)Bug的測試設(shè)計方法。
但是經(jīng)驗是需要積累的,是需要時間的,對于一個新人來講,快速獲得經(jīng)驗是提升的法寶,對于老人來講,把經(jīng)驗傳遞給新人,幫助新人快速成長,應(yīng)該是義不容辭的責(zé)任。
所以,老人把經(jīng)驗都記錄下來對自己和新人都會非常受益。
總結(jié)
在這邊文章中,我們介紹了如下設(shè)計用例的方法:
- 等價類劃分
- 邊界值識別
- 判定表分析
- 變量識別
- 錯誤推測
每種方法都不復(fù)雜,也都能幫我們解決問題,如果能夠在每次設(shè)計用例的時候想到這些方法,基本用例設(shè)計就比較全了。
參考資料:《單元測試的藝術(shù)》《軟件測試》《軟件測試的藝術(shù)》
轉(zhuǎn)載于:https://juejin.im/post/5ce55a75e51d4577790c1bf6
總結(jié)
以上是生活随笔為你收集整理的.NET单元测试(四):用例设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 良心安利建筑行业3d打印模型素材网站
- 下一篇: python单元测试用例_Python单