Programmer can test
Posted by PunNeng on
February 7, 2008
programmer ก็ช่วย test ได้ครับ
ผมทำงานในทีมเล็กๆ ไม่มีเงิน หรือคนมากพอที่จะไปจ้าง หรือสร้างทีม tester เพราะฉะนั้น โปรแกรมเมอร์นี่แล จะต้องแบ่งเบาภาระการ test ให้กับทีม
สิ่งที่ programmer ช่วยได้ คือการใช้ Test driven development(TDD) เป็นตัวช่วย
สิ่งที่ผมเคยฟาดฟันมาก่อน คือการใช้ unit test ทำการ test source code ในทุกๆ unit ไม่ว่าจะเป็นตัวแปรเอย method(หรือบางคนจะเรียกว่า function)เอย หรือ integration test ที่เขียนยังไงก็ไม่ครอบคลุม จนมีฝรั่งใจดี สร้างสิ่งที่เรียกว่า Behavior driven development(BDD) นี่แหละ ใช่เลย แทนที่เราจะมองให้เป็น unit ทำไมเราไม่มองให้เป็นพฤติกรรม(behavior) ทดสอบที่พฤติกรรมไปเลย มันก็เลยเป็นการรวมกันของ unit test กับ integration test นี่แหละ ใช่เลย!!
แล้ว programmer จะไปเขียน test ตอนไหน ?? หลายๆ คนที่เคยทำ ก็อาจจะบอกว่า ก็เขียน code ไปก่อน แล้วไปเขียน test ทีหลังไง แต่ผมไม่ได้ทำแบบนั้น ผมใช้แนวคิดเรื่อง test first เป็นแนวทาง ก็คือเขียน test ไปก่อนนั่นแหละ แล้วค่อย implement ทีหลัง จริงๆ ต้องบอกว่า test ไป implement ไป มากกว่า
ตอนที่ใช้ Unit test มันจะทำ test first ยากหน่อย เพราะเวลา test มันจะต้อง test จาก code ที่เรา implement จริงๆ แต่พอได้ BDD มาช่วย การทำ test first ก็ดีขึ้น เพราะมันมีสิ่งที่เรียกว่า Mock/Stub เข้ามาช่วย เราเขียน test ได้นานขึ้น แล้วค่อยไป implement ทีเดียว
แน่นอนว่า การทำ test first จะช่วยให้การ test ง่ายขึ้น ดัก runtime error หรือ bug ที่เราคาดไม่ถึงมาก่อนได้มากขึ้น ถ้าเราใช้ unit test มันก็คงจะ test ได้แค่ unit นั้นๆ ที่เราพิจารณา ถึงแม้ integration test จะ test โดยรวมได้ แต่ผมก็ยังว่ามันไม่ครอบคลุมอยู่ดี ถ้าใช้ BDD จะช่วยเรื่องนี้ได้เยอะ เพราะเรามองเป็นพฤติกรรม(เดี๋ยวมาลุยกันตอนถัดไปครับ) ถ้าพฤติกรรมที่เรากำลัง test ผ่าน runtime error ก็จะหายไปเยอะเลย
ฟังดูเหมือนว่าการเขียน test จะเป็นสิ่งดี แต่มันไม่ค่อยสนุกเท่าไหร่ ปัญหามันก็มีบ้างครับ ส่วนใหญ่จะเป็นเรื่องของเวลาครับ เพราะเราจะเสียเวลาไปกับการเขียน test เพิ่มขึ้น แล้วเวลา coding เราจะน้อยลง และต้องเสียเวลาในการเรียนรู้อยู่นานครับ แต่ก็ยังพอมีสิ่งที่ผมเห็นว่าเป็นข้อดีในข้อเสียนี้ ก็คือ เราเสียเวลาในการเขียน code ก็จริง แต่ถ้าเขียน test ให้ครบหมดทุกกรณี(โดยเฉพาะ BDD คือ ทุกกรณีของพฤติกรรมของงานของเรา) เราจะมองเห็นทุก requirement และเป็น flow chart แบบคร่าวๆ
โดยส่วนตัวแล้วผมว่าเสียเวลาสักหน่อย กับการเขียน test เพื่อแลกกับความถูกต้องของงาน ผมว่าคุ้มครับ ทั้งนี้ ยังช่วยให้ tester ทำงานได้ง่ายขึ้นด้วย