pycon 2007 裡的 presentation 提到測試金字塔,由下而上將測試歸為三類:
單元測試,功能測試,應用測試。
程式測試需要很多的單元測試,一些功能測試,少量的應用測試。
具有某個程度的單元測試可以保證代碼質量。
周蟒是我第一個包含完整測試的開源專案。然而周蟒也不是一開始就寫了測試用例.
我的經驗是 "先能跑,再求好"。在一開始先讓功能能跑,之後再想法改善或改寫。
周蟒改善或改寫的過程中,unittest, doctest (單元測試,功能測試), 與 example test (應用測試) 就是主要保證功能穩定的方式。
我覺得加入測試是我在開發周蟒過程中做出的最好決定。 當周蟒程式超過 15k 後, 已經進入難以將整份 code 短時間一次 Review 的階段。 這時我決定花時間為周蟒加入一部分測試用例。 我發現這麼作提昇了整個小程式的 ' 解析度 '-- nosetests 的報表告訴我:每個簡單的功能都運行。
當我在周蟒加入了某數量的測試用例後,周蟒的開發方式就有了質變。
由於可以提前由自動測試獲得功能結果,讓周蟒的開發方式變得更大膽, 我可以放心地大膽試驗各種新功能,並隨時能透過測試確認新功能對架構帶來的影響。 也得以在早期版本中即輕鬆地透過大規模的重構來增加架構的彈性。
用幾次就丟的程式 / 腳本當然沒加入測試的價值. 然而要維持一份可維護的程式,加入測試是很好的方式.