為什麼在實作之前撰寫測試會比較好
 

如果你在進行測試時, 只是重視檢查每個程式碼是否被實作正確, 這樣是沒有意義的.

例如: 檢查所輸入的三邊長度, 是否符合三角形的要求
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.

所以若是你在實作前, 做撰寫測試程式, 你所想的便是客戶要的東西是甚麼, 而不是配合你程式實作的測試. 這也就是測試在實作前撰寫會比較好的原因之一.

arrow
arrow
    全站熱搜

    kojenchieh 發表在 痞客邦 留言(2) 人氣()