.NET單元測試(四):用例設計

首先照雁,我們先來思考一個問題:單元測試中秦叛,哪一個環(huán)節(jié)更重要晦溪?

要回答這個問題,我們先需要了解單元測試到底有哪些環(huán)節(jié)挣跋,讀到這里三圆,請暫停一分鐘,回憶一下我們平時的單元測試實踐(請最小化瀏覽器)避咆。


對于單元測試可以劃分成哪些環(huán)節(jié)舟肉,你是不是有了自己的認識呢?

按照自己的理解查库,不管怎樣劃分路媚,都是可以的骂租。小編根據(jù)自己的經(jīng)驗晾捏,將其劃分成如下幾個環(huán)節(jié):

  • 分析業(yè)務
  • 設計用例
  • 實現(xiàn)用例
  • 重構
  • 持續(xù)集成

接下來陷猫,請暫停一分鐘捕捂,思考一下這五個環(huán)節(jié)中,哪一個更重要(請最小化瀏覽器)俄精。


經(jīng)過一分鐘的思考婆赠,相信你有了自己的認識浴麻。

針對這個問題够吩,小編并沒能確定哪一個環(huán)節(jié)更重要比然,似乎,需要每個環(huán)節(jié)的良好配合才能發(fā)揮各個環(huán)節(jié)的最大作用周循。

這篇文章要講的內(nèi)容就是這五個環(huán)節(jié)中的 設計用例 環(huán)節(jié)强法。

做一個練習

請針對下面這個業(yè)務設計用例(可以想象成有一個返回true或者false的方法,接受一個字符串湾笛,按照定義的規(guī)則做檢查)

image46.png

請暫停三分鐘饮怯,盡量思考更多的用例(請最小化瀏覽器)。


如果你之前沒有任何測試經(jīng)驗嚎研,你的用例可能有這么會包含這么一些情況:


image47.png

等價類劃分

針對這個問題我們可以把輸入的情況按照下面的方式進行分類:


image48.png

這樣分類后蓖墅,我們發(fā)現(xiàn),在每個類別區(qū)間的輸入都具有相同的意義临扮,這就是等價類劃分 论矾。

通過等價類劃分,可以迫使我們分析業(yè)務的邊界杆勇,明確哪些用例是真實有效的贪壳,避免了不必要的無效用例。

等價類劃分可以分為有效等價類和無效等價類

  • 有效等價類:是指對于程序的規(guī)格說明來說是合理的蚜退、有意義的輸入數(shù)據(jù)構成的集合闰靴。
  • 無效等價類:無效等價類指對程序的規(guī)格說明是不合理的或無意義的輸入數(shù)據(jù)所構成的集合。

在這個練習中钻注,“6-18個字母蚂且,數(shù)字或字符” 就是有效等價類,另外兩個區(qū)間屬于無效等價類幅恋。

在做等價類劃分時杏死,這兩種等價類都是必不可少的。

邊界值分析法

邊界值往往有更多出錯的可能捆交,所以在設計用例時需要對邊界值格外敏感识埋。邊界值分析法就是 對輸入或輸出的邊界值進行測試。通常邊界值分析法是作為對等價類劃分法的補充零渐。

針對這個練習窒舟,至少有這么些情況屬于邊界值:


image49.png

在業(yè)務描述時抓住一些關鍵的點可以幫助我們識別業(yè)務中的邊界值,比如當業(yè)務中包含如下這些描述時诵盼,往往就需要留意邊界值了:

  • 最XX(最小/大惠豺、最快/慢、最高/底.....)
  • 超過
  • 在內(nèi)
  • 相鄰
  • ...

當我們識別到了邊界值风宁,對于越界的用例設計是非常有必要的洁墙,這是對程序健壯性的驗證。

  • 短了再短/長了再長
  • 第一個減1/最后一個加1
  • 少了更少/多了更多
  • 剛好超過/剛好在內(nèi)

經(jīng)過了等價類劃分和邊界值分析戒财,我們設計出了一些用例热监,但是對于業(yè)務中的 “數(shù)字、字母或符號” 還未進行考慮饮寞。對于用戶的輸入情況無法估計孝扛,這就導致可能存在多種組合列吼,針對這種組合,如果憑空想是很容易漏掉的苦始。接下來使用的 判定表分析 就是為了解決這種問題寞钥。

判定表

針對這個練習,只考慮輸入的字符的情況陌选,可以分成:字母理郑、數(shù)字、英文字符咨油、非英文字符您炉、圖標。我們需要考慮這些情況的組合役电,如果沒有判定表赚爵,是比較頭痛的。

判定表的定義:判定表是分析和表達多邏輯條件下執(zhí)行不同操作的情況的工具宴霸。

這里以判定表的部分截圖為例;


image50.png

通過判定表囱晴,我們可以清楚的羅列各種情況,降低漏掉的可能性瓢谢。

有時候可能會遇到分類特別多的情況畸写,這會導致判定表非常龐大。不一定要把每個小細節(jié)作為一個項目氓扛,可以以一個維度枯芬,一個類別作為一個分類。進而減少測試用例維護的工作量采郎。

結果

經(jīng)過上面幾輪方法的透析千所,我們可以得到如下的用例表格。


image51.png

這個表格已經(jīng)包含了這個業(yè)務的絕大多數(shù)用例情況(畢竟完美的用例套件是不存在的)蒜埋。

上面介紹的三種方法不是一定要按照剛才介紹的順序來使用淫痰,只要能夠在設計用例的時候想到有這些方法,并用這些方法進行分析整份,基本就可以覆蓋絕大多數(shù)情況待错。

理想是美好的,現(xiàn)實往往比較苦澀烈评。當我們再分析具體業(yè)務火俄,嘗試用上面的方法去分析時,有時候并不能很快的找到合適的等價類劃分方法讲冠,邊界識別也可能模糊不清瓜客,被我們漏掉。

仔細分析上面的三種方法可以發(fā)現(xiàn),其中都包含了一個關鍵的步驟:變量識別谱仪。

變量識別

所謂變量識別玻熙,就是識別業(yè)務中的可變的關鍵點,通過不斷的改變這些關鍵點來構造用例芽卿。

舉個栗子

業(yè)務描述:針對當前系統(tǒng)用戶揭芍,只在第一次調(diào)用時胳搞,執(zhí)行委托的方法卸例。

針對此描述,咱們再暫停三分鐘肌毅,請思考其中的變量筷转,以及其可變化的情況(請最小化瀏覽器)。


三分鐘過后悬而,你是不是識別到了其中的變量呢呜舒?

小編識別到了這么些變量;

  • 當前系統(tǒng)用戶:如果不是當前系統(tǒng)用戶會怎樣?
  • 第一次調(diào)用:如果不是第一次調(diào)用會怎樣笨奠?
  • 委托:這個委托是有返回值呢袭蝗,還是沒返回值?如果委托中拋出了異常會怎樣般婆?

你是不是比小編識別到更多變量呢到腥?做個練習,請針對下面的業(yè)務描述識別變量蔚袍,并設計用例乡范。

“ 執(zhí)行所有事件,在執(zhí)行過程不拋出異常啤咽,在全部運行之后如果有異常則拋出所有異辰荆”

錯誤推測

除了上面介紹的方法,還有一種基于經(jīng)驗的用例設計方法:錯誤推測宇整。

所謂錯誤推測瓶佳,基于經(jīng)驗和直覺推測程序中所有可能存在的各種錯誤, 從而有針對性的設計測試用例的方法。

錯誤猜測大多基于經(jīng)驗鳞青,需要從邊界值分析等其他技術獲得幫助霸饲。這種技術猜測特定軟件類型可能發(fā)生的錯誤類型,并且設計測試用例查出這些錯誤盼玄。
對有經(jīng)驗的工程師來說贴彼,錯誤猜測有時是唯一最有效發(fā)現(xiàn)Bug的測試設計方法。

但是經(jīng)驗是需要積累的埃儿,是需要時間的器仗,對于一個新人來講,快速獲得經(jīng)驗是提升的法寶,對于老人來講精钮,把經(jīng)驗傳遞給新人威鹿,幫助新人快速成長,應該是義不容辭的責任轨香。

所以忽你,老人把經(jīng)驗都記錄下來對自己和新人都會非常受益。

總結

在這邊文章中臂容,我們介紹了如下設計用例的方法:

  • 等價類劃分
  • 邊界值識別
  • 判定表分析
  • 變量識別
  • 錯誤推測

每種方法都不復雜科雳,也都能幫我們解決問題,如果能夠在每次設計用例的時候想到這些方法脓杉,基本用例設計就比較全了糟秘。

參考資料:《單元測試的藝術》《軟件測試》《軟件測試的藝術》

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市球散,隨后出現(xiàn)的幾起案子尿赚,更是在濱河造成了極大的恐慌,老刑警劉巖蕉堰,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凌净,死亡現(xiàn)場離奇詭異,居然都是意外死亡屋讶,警方通過查閱死者的電腦和手機冰寻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丑婿,“玉大人性雄,你說我怎么就攤上這事「睿” “怎么了秒旋?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诀拭。 經(jīng)常有香客問我迁筛,道長,這世上最難降的妖魔是什么耕挨? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任细卧,我火速辦了婚禮,結果婚禮上筒占,老公的妹妹穿的比我還像新娘贪庙。我一直安慰自己,他們只是感情好翰苫,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布止邮。 她就那樣靜靜地躺著这橙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪导披。 梳的紋絲不亂的頭發(fā)上屈扎,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音撩匕,去河邊找鬼鹰晨。 笑死,一個胖子當著我的面吹牛止毕,可吹牛的內(nèi)容都是我干的模蜡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼滓技,長吁一口氣:“原來是場噩夢啊……” “哼哩牍!你這毒婦竟也來了棚潦?” 一聲冷哼從身側響起令漂,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎丸边,沒想到半個月后叠必,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡妹窖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年纬朝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骄呼。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡共苛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蜓萄,到底是詐尸還是另有隱情隅茎,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布嫉沽,位于F島的核電站辟犀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏绸硕。R本人自食惡果不足惜堂竟,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望玻佩。 院中可真熱鬧出嘹,春花似錦、人聲如沸咬崔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至娶聘,卻和暖如春闻镶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背丸升。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工铆农, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人狡耻。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓墩剖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親夷狰。 傳聞我的和親對象是個殘疾皇子岭皂,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 黑盒測試案例設計技術篇 1 概述 本章介紹黑盒測試的概念和進行黑盒測試的目的與意義爷绘,及關于等價類劃分、邊界值分析进倍、...
    西邊人閱讀 16,895評論 0 41
  • 等價類劃分方法: 一.方法簡介 1.定義是把所有可能的輸入數(shù)據(jù),即程序的輸入域劃分成若干部分(子集),然后從每一個...
    繼續(xù)hug閱讀 5,588評論 1 16
  • (全) 等價類劃分方法: 一.方法簡介 1.定義 是把所有可能的輸入數(shù)據(jù),即程序的輸入域劃分成若干部分(子集),然...
    xiangxiangUUU閱讀 2,095評論 1 7
  • 1.測試與軟件模型 軟件開發(fā)生命周期模型指的是軟件開發(fā)全過程土至、活動和任務的結構性框架。軟件項目的開發(fā)包括:需求猾昆、設...
    宇文臭臭閱讀 6,718評論 5 100
  • 1.測試與軟件模型 軟件開發(fā)生命周期模型指的是軟件開發(fā)全過程陶因、活動和任務的結構性框架。軟件項目的開發(fā)包括:需求垂蜗、設...
    Mr希靈閱讀 21,949評論 7 278