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

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

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

    David Ko的學習之旅

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