為什麼在實作之前撰寫測試會比較好
如果你在進行測試時, 只是重視檢查每個程式碼是否被實作正確, 這樣是沒有意義的.
例如: 檢查所輸入的三邊長度, 是否符合三角形的要求
verifyTriangle( int Edge1, int Edge2, int Edge3) {
if ( Edge1 + Edge2 > Edge3)
{
...
}
}
如果你只是根據他所實作的程式邏輯去測試, 你只是會產生(Edge1, Edge2, Edge3) = (1, 2, 3) (3, 4, 5)...等等, 檢查兩邊之河是否大於第三邊的測試資料. 因此你會發現這個程式實作的很好
可是如果你撇開程式實作邏輯不看, 只想想三角形該有的行為是甚麼. 這時候你會想到三角形三邊都需要大於0; 需要兩兩相加都要大於第三邊, 而不是只有某兩個相加大於第三邊就好.
因此你就會發現到這個程式有問題, 因為他沒有思考到這樣的狀況.
測試是要重視你想達到的意圖,而不是程式如何被實作.
因此當你對funciton或是class做測試時, 若是先寫完程式, 再撰寫測試, 你便會很容易依據程式實作邏輯, 來產生相關的測試個案. 這樣便會落入只確認do the thing right的陷阱.
你要做的, 是想想你該完成的功能是甚麼, 甚麼是最終客戶的使用行為. 根據這些事情去開測試個案, 這才是do the right thing.
所以若是你在實作前, 做撰寫測試程式, 你所想的便是客戶要的東西是甚麼, 而不是配合你程式實作的測試. 這也就是測試在實作前撰寫會比較好的原因之一.
留言列表