對於軟體測試, 很多初學者一看到很多名詞便會嚇到, 這麼多東西如何記得起來, 有些東西看起來很像, 有些東西看不出他們到底有什麼關聯. 這樣的痛苦常常不斷被提到. 因此, 這裡想要利用圖示的方式, 把他們串連起來, 讓你方便分類和記憶.
軟體測試進行的方式, 如圖 7-1 所示, 可以分成靜態測試和動態測試兩種:
不藉由執行受測程式的方式, 來確認受測軟體的品質.
藉由執行受測程式的方式, 來確認受測軟體的品質.
圖 7-1 軟體測試分成動態和靜態兩種
下面整理了一個表格, 來說明這兩個作法的差異
很多人說到動態測試可以想像, 因為他們大多是這樣在進行測試, 那靜態測試是什麼鬼? 可以不用執行受測程式就可以確認有沒有問題? 這太神了. 別急, 讓我繼續解釋下去, 你就會了解, 其實你平時已經在用了.
靜態測試的執行方式, 如圖 7-2 所示, 可以分成以下幾類:
Code Review 我想大家應該都是知道,當開發人員的程式寫個段落, 就可以讓其他人幫忙確認, 有什麼地方沒處理好, 或是有些狀況沒有考慮到.
Inspection 大家比較沒有聽過. 它是一個比較正式的檢視流程. 會說好要分成哪些階段, 有哪些角色要參與, 大家要做什麼事情. 這個流程通常是在看非程式碼的部分, 像是需求文件和設計文件之類的.
提到 Static Analysis 這麼 formal 的名稱, 大家可能一時間不知道他是什麼. 如果說 SonarQube 大家都是這是什麼. 這邊就是會有些工具, 會去分析受測軟體的程式, 看看中間有什麼問題.
敏捷開發中有個實踐(practice)叫做 Pair Programming, 兩個人一起開發同一個東西. 在這個過程中, 可以不斷檢視對方所寫的內容, 讓問題可以第一時間抓到.
圖 7-2 靜態測試的種類
在看完靜態測試後, 接著我們來看看動態測試. 動態測試這邊我們會分成兩種做法:
不管受測程式裡面的結構, 把它當成一個黑箱, 只根據它提供的功能來驗證, 來確認它的行為是否和我們預期想的一樣.
會根據受測程式裡面的結構, 來決定要如何測試.
圖 7-3 動態測試分成黑箱測試和白箱測試
黑箱測試是大家多知道, 也比較多人使用. 不過, 大家都只是知道這個名稱, 卻不知道裡面有什麼內容, 很多東西你已經在使用, 卻不知道他的名稱. 黑箱測試的手法有數十種, 這邊我只打算介紹 3 個.
這個做法是把輸入或是輸出的值域, 切出幾個等價區域, 每個區域找一個代表資訊去測即可.
很多狀況會有邊界值, 通常邊界值都容易出錯, 因此會把它當成要測試的案例
通常每個測試場景會所多因素所影響, 因此我們會透過一個因果關係表格, 來描述需要處理的狀況的組合.
圖 7-4 黑箱測試的種類
在白箱測試方面, 比較少人進行這一塊. 這裡可以分成兩個部分
從程式的控制邏輯來看要如何測試. 例如 if, for, while 等等的控制指令的程式流程, 來想相關的測試個案
會從變數來思考要如何開立測試個案. 變數會有宣告, 設定值, 或者是被引用等狀況. 會去思考在這些狀況下要如何測試.
圖 7-5 白箱測試的種類
所以總結下來, 測試的進行方式, 可以分成如圖 7-6 的分類. 從這個圖中你可以有個全貌, 並且從他們的關聯, 你也比較容易把所有東西記得起來.
目前到這裡, 只是給大家一個全局觀, 後面還會再有篇幅, 去解釋細部的運作, 也會給相關的範例. 再麻煩大家有耐心繼續看下去.
圖 7-6 軟體測試方法的分類
講到 Verification & Validation(V&V),有這麼一個說法叫「內驗外確」,也就是專案團隊「內部驗證」;客戶「外部確認」,這樣的說法是正確的嗎?
意思有點接近.... 但是就看你是不是有內外團隊可以幫你測試