撰寫本篇文章是因為在一個讀書會當中,聽到了成員分享邰曉梅老師在著作中提到的觀念,雖然他不是該章節的重點,但是可以快速幫你已安全的方法,列出所有可能的測試案例。這個測試案例,可以不只手動測試適合使用,想要做出高覆蓋率、高品質的單元測試或整合測試,等價類劃分法也可以幫上大忙。
簡單來說,等價類就是找出可以影響測試目標(可能是單一函式,一個模組,或是系統的一個完整功能)的所有變數,同時把程式的邏輯抽出來,最後將這些邏輯一個一個拿出來檢視,看所有變數的值各自落在哪裡時,這個功能會吐出什麼結果。
很難懂嗎?代表你很正常。我們接著往下看:
我們在一次把前文中我的妹妹找對象的例子拿出來,還記得他列出的十個條件嗎?天啊!要為這個程式建立測試真的太可怕了。不過沒關係,我們一項一項看。在這之前,我們來介紹除邏輯以外,等價劃分法另一個觀念:變數。
當我們檢視每一個單一變數時,它都可以最粗略地分類成為兩類:
舉個例子吧!
第一個變數是"有錢",所以isRich的有效等價類就是true,無效等價類就是false。對了!聰明如你,一定就可以應變,舉一反三地知道第二個變數"帥"的有效等價類就是顏值(facePoint)大於90,無效等價類就是90分及以下。
好了,以此類推,你應該就可以接著走下去了。等你把10個條件都列完以後,你應該會得到一個[二元樹]http://btechsmartclass.com/DS/U3_T3.html),就像下圖所示:
**太好了!代表你的資料結構老師沒白教!**如上圖,從I~P都是我們把所有條件都衡量後,所有可能的結果。同時,聰明如你,一定也發現了,就我們這個測試目標的邏輯來說,只要第一個條件無效,後面都不用再看了,也就代表從第二個變數開始所有值都是無效值。如此一來,這棵二元樹就會變成一個非常"偏斜"的樹。如此一來,需要驗測的情況又更少了。太好了!這又代表你的演算法老師沒白教!
到此打住,我想最粗淺最粗淺的等價類劃分法你已經有了基本概念。上網google有很多資深老司機會教你怎麼應用,這不用我這個半路出家的工程師在這邊班門弄斧。但是!你發現了嗎...
還記得我們解完波動拳後,又用一篇文章介紹怎麼消除DataClump嗎?忘記沒關係,按我簡單複習一下先。這時,解耦合的價值來了。因為我們用建立Man這個獨立物件的方式來改寫了這段邏輯,除了可讀性增加以外,同時等價類的數量也是一口氣下降到只剩4種喔!怎麼辦到的?很簡單,因為我們已經把所有變數對邏輯的影響藏到同一類別的4個method裡面了,於是你只要討論這四個條件的有效與無效值就可以了。當然,你也可以依樣畫葫地每次都從同一個等價類的可能變數值中random出一組來進行測試,以增加信心。
瞧!解耦合是不是一舉多得!
文內前文的連結(https://ithelp.ithome.com.tw/articles/10191942)點下去是已刪除的QQ
前一篇「『波動拳消除了,然後呢?』 -- 談Code Smell 辨識與消除」也有對不上的情形...