พอดีไปเจอ Handbook เล่มเล็กๆ ที่อธิบาย เรื่อง การทำ Test ไวได้ดี และสั้นกระชับด้วย 12 หน้าเอง แต่มันใช้ได้ แม้เวลาจะผ่านหลายปีครับ โดยมี 12 ข้อ ดังนี้ครับ
- If you write code, write tests.
- ไม่ว่าทำตำแหน่งไหน ถ้าลงมาเขียน Code ต้องทำ Test ด้วย - Don’t get stuck on unit testing dogma.
- อย่าให้ความเชื่อเดิม ทำลายแนวคิด เช่น Test มืออยู่แล้ว มันทำได้ / Code นี้ใช้มา 20 ปี แล้วไม่มีปัญหา ไม่ต้องเทส
- Testing needs creativity มันไม่มีท่าที่ตายตัวตอนทำ หลัก Refactor คำกลางๆ หา Idea ใหม่มาเทส ถ้าระบบเดิมมันทำ unit testing ยาก ทำ Component / Integration Test แล้วค่อยกระชับวงล้อมสิ - Embrace unit testing karma.
- Testing needs flexibility อันนี้ผมมองว่าตัว Test มันไม่ได้มี Pattern ตายตัว ทำแบบนั้น แบบนี้ ต้องไปตาม Code ที่ได้มา flexibility ผมมองว่า Refactoring + Design Pattern เขียน Test ให้ง่าย Code ต้องง่ายด้วย - Think of code and test as one.
- Test ต้องมาพร้อมกับ Code เสมอ - The test is more important than the unit.
- อะไร คือ Unit Test > Unit Test พวก Test ที่ไม่มี Dependency พวก DB / File / WebService / ระบบอื่นๆ รวมถึงอะไรที่ต้องมีการเตรียมการก่อนด้วย
- Unit Test ไม่ได้ตอบทุกสิ่ง แต่อย่างน้อยควรมีเขียนขึ้นมา และมันจะวนไปในส่วนข้อ dogma / karma ถ้ามันซับซ้อนทำให้ง่ายขึ้นสิ - The best time to test is when the code is fresh.
- เริ่มเขียน Code ไปแล้ว ทำ Test คู่กันไปเลยจะดีที่สุด จากประสบการณ์แล้ว ถ้าทำที่หลัง มันจะ Test ยาก และคนไม่กล้าที่จะ Refactor เพราะ มันศักดิ์สิทธิ์ - Tests not run waste away.
- เขียน Test มาแล้ว กด Run ด้วย ไม่งั้นเขียนมาทำไม
- Automate ยุคนี้ทำงานง่าย และให้ Feedback ได้เร็วด้วย ถ้าผูก CI/CD ไว้จะดีมาก - An imperfect test today is better than a perfect test someday.
- เขียน Test ก่อนทีละนิด แม้ว่ามันอาจจะไม่ครอบคุลมในทุก Case แต่ยังดีกว่าจะบอกว่าเดี๋ยวมาทำที้หลัง คำว่าเดี๋ยวมันไม่มีอยู่จริง คนทำอาจจะไม่อยู่แล้วก็ได้
- อย่าลังเลที่จะเขียน Test - An ugly test is better than no test.
- อันนี้เรียกว่า ถ้าเจอ Code ที่มันไม่ Clean มันอาจจะมีท่ายากในการทำ Test แต่ Test ที่ได้ มันจะไม่สวย และเหนื่อยทำด้วย
- อย่างน้อยทำ Test ไปแล้ว เรามีกรอบ มีความมั่นใจใน Refactor มันนะ ว่าของเดิมมันจะไม่พัง - Sometimes, the test justifies the means. (สร้างความชอบธรรม)
- Test มันบอกแล้วว่า Code ทำอะไร Design มาเพื่ออะไรในช่วงเวลานั้นๆ - Only fools use no tools.
- ถ้ามี Tools ควรใช้มันนะ ตัวอย่างที่ชัดสุด Manual Test vs Automate Test งานไหนใช้ Automate หรือ เครื่องมือมาช่วยได้ ทำซะ เอาเวลาไปทำอย่างอื่นดีกว่า - Good tests fail.
- ถ้า Test Run ผ่านหมด ไม่ใช่ว่า เราทำดีนะ บางทีมันยังมีจุดที่ต้อง Improve เพิ่มขึ้นมา ในส่วนที่มองไม่เห็น ตัวนี้ใช้ Code Coverage เข้ามาตอบโจทย์ และช่วยได้นะ
Resource
- TheWayOfTestivus (agitar.com)
- The Way of Testivus - Unit Testing Wisdom From An Ancient Software Start-up (artima.com)
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.