首先照雁,我們先來思考一個問題:單元測試中秦叛,哪一個環(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ī)則做檢查)
請暫停三分鐘饮怯,盡量思考更多的用例(請最小化瀏覽器)。
如果你之前沒有任何測試經(jīng)驗嚎研,你的用例可能有這么會包含這么一些情況:
等價類劃分
針對這個問題我們可以把輸入的情況按照下面的方式進行分類:
這樣分類后蓖墅,我們發(fā)現(xiàn),在每個類別區(qū)間的輸入都具有相同的意義临扮,這就是等價類劃分 论矾。
通過等價類劃分,可以迫使我們分析業(yè)務的邊界杆勇,明確哪些用例是真實有效的贪壳,避免了不必要的無效用例。
等價類劃分可以分為有效等價類和無效等價類
- 有效等價類:是指對于程序的規(guī)格說明來說是合理的蚜退、有意義的輸入數(shù)據(jù)構成的集合闰靴。
- 無效等價類:無效等價類指對程序的規(guī)格說明是不合理的或無意義的輸入數(shù)據(jù)所構成的集合。
在這個練習中钻注,“6-18個字母蚂且,數(shù)字或字符” 就是有效等價類,另外兩個區(qū)間屬于無效等價類幅恋。
在做等價類劃分時杏死,這兩種等價類都是必不可少的。
邊界值分析法
邊界值往往有更多出錯的可能捆交,所以在設計用例時需要對邊界值格外敏感识埋。邊界值分析法就是 對輸入或輸出的邊界值進行測試。通常邊界值分析法是作為對等價類劃分法的補充零渐。
針對這個練習窒舟,至少有這么些情況屬于邊界值:
在業(yè)務描述時抓住一些關鍵的點可以幫助我們識別業(yè)務中的邊界值,比如當業(yè)務中包含如下這些描述時诵盼,往往就需要留意邊界值了:
- 最XX(最小/大惠豺、最快/慢、最高/底.....)
- 超過
- 在內(nèi)
- 相鄰
- ...
當我們識別到了邊界值风宁,對于越界的用例設計是非常有必要的洁墙,這是對程序健壯性的驗證。
- 短了再短/長了再長
- 第一個減1/最后一個加1
- 少了更少/多了更多
- 剛好超過/剛好在內(nèi)
經(jīng)過了等價類劃分和邊界值分析戒财,我們設計出了一些用例热监,但是對于業(yè)務中的 “數(shù)字、字母或符號” 還未進行考慮饮寞。對于用戶的輸入情況無法估計孝扛,這就導致可能存在多種組合列吼,針對這種組合,如果憑空想是很容易漏掉的苦始。接下來使用的 判定表分析 就是為了解決這種問題寞钥。
判定表
針對這個練習,只考慮輸入的字符的情況陌选,可以分成:字母理郑、數(shù)字、英文字符咨油、非英文字符您炉、圖標。我們需要考慮這些情況的組合役电,如果沒有判定表赚爵,是比較頭痛的。
判定表的定義:判定表是分析和表達多邏輯條件下執(zhí)行不同操作的情況的工具宴霸。
這里以判定表的部分截圖為例;
通過判定表囱晴,我們可以清楚的羅列各種情況,降低漏掉的可能性瓢谢。
有時候可能會遇到分類特別多的情況畸写,這會導致判定表非常龐大。不一定要把每個小細節(jié)作為一個項目氓扛,可以以一個維度枯芬,一個類別作為一個分類。進而減少測試用例維護的工作量采郎。
結果
經(jīng)過上面幾輪方法的透析千所,我們可以得到如下的用例表格。
這個表格已經(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)驗都記錄下來對自己和新人都會非常受益。
總結
在這邊文章中臂容,我們介紹了如下設計用例的方法:
- 等價類劃分
- 邊界值識別
- 判定表分析
- 變量識別
- 錯誤推測
每種方法都不復雜科雳,也都能幫我們解決問題,如果能夠在每次設計用例的時候想到這些方法脓杉,基本用例設計就比較全了糟秘。
參考資料:《單元測試的藝術》《軟件測試》《軟件測試的藝術》