2015年10月18日 星期日

自動測試與 TDD 實務開發(使用C#) Day 1 筆記

前言==========
這次運氣不錯,有幸報到第四梯的課程,
其實在第三梯的時候就想報名了,不過剛好有兩位好友先後結婚,
只好期待 Joey 的第四梯了!
也感謝 Joey 用心準備與持續精進的課程內容,
這應該也是一種早買早享受(提早進入這領域),晚買享折扣(學到更多)的概念吧!

對課程有興趣,或是想要導入測試來強化產品,真的大力推薦 Joey 課程,網址如下:
https://skilltree.my/events/mbh
一定是物超所值的。

另外是他的粉絲團『91 敏捷開發之路』
https://www.facebook.com/91agile
以及點部落『In 91』
http://www.dotblogs.com.tw/hatelove

心得==========
第一天的主軸在於:

【老闆是花錢請你來寫 production code 不是來寫測試的!】

重點還是在開發,不是測試!
測試只是工具,輔助你驗證 production code 是符合開發者的想法,
滿足顧客的需求!

在團隊開發中最常遇到的狀況:

  1. 測試環境和正式環境有些因素導致無法驗證,例如:資料庫、第三方的 API 等
  2. 不知道錯在哪裡!一段冗長的流程結果錯了,必須要從頭追到尾
  3. 上頭問起那些功能測過......提不出證據
  4. 修 A 壞 B,修好 B 結果 A 又往生了!
  5. 平行開發,只憑想像或是文件,整合的時候就是場災難


這些問題都可以仰賴撰寫測試,來降低開發成本,
BUG 越早被發現,處理成本越低,
整個就是早期發現早期治療的概念!
所以寫測試就像是在健檢一樣,必然會有一些成本的支出,
但是效益絕對是很大的。

Unit Test 是:

  1. 最小測試單位
  2. 外部相依為零
  3. 不具備商業邏輯
  4. 測試案例之間相依為零
  5. 一個測試案例只測一件事情


Unit Test 的特性是:

  1. Fast
  2. Independent
  3. Repeatable
  4. Self-Validating
  5. Timely

簡稱 FIRST

3A 原則

  1. Arrange
  2. Act
  3. Assert


要驗證的東西

  1. 回傳值
  2. 狀態的改變
  3. 與外部的互動


單元測試的意義在於模擬外部如何使用測試物件,驗證行為是否符合預期!
所以應以需求為出發點,而不是為了測試而測試,要記住是在開發!
非公開的方法,應該透過測試公開的方法而被測試,
沒有涵蓋到表示兩種可能:

  1. 測試案例代表性不足
  2. 沒被涵蓋到的程式,沒有存在的價值(永遠不會被用到!)


後記==========
其實在前公司曾經試著要導入自動化測試,想藉著導入測試提升產品的品質,
確實遇到了一些阻力,同時也因為自己對於測試沒有充分的了解,
沒有持續改善的觀念,最終仍以失敗收場,相當可惜!
希望在這課程中,能夠提升自己對於自動化測試的認知與能力,並且在往後的專案中落實。

沒有留言: