Two approaches – Mock/Stub

เรื่องนี้พึ่งย่อยเสร็จแต่เป็นสิ่งที่คุยกับ @visibletrap ตั้งแต่วันแรกที่มาถึงสิงคโปร์ (คุยทีเดียวหลายเรื่อง ล่อไปสามชั่วโมงได้ ฮ่าๆ) เรื่องก็มีอยู่ว่าเวลาทำ TDD หลายค่ายมักบอกว่าให้ทำ Mock ซึ่งก็เคยพยายามทำหลายครั้งแต่ก็ไม่ประสบความสำเร็จเสียทีเพราะรู้สึกมันทำให้เขียนอะไรซ้ำหลายอย่าง วันนั้น @visibletrap ก็เลยอธิบายและคุยจนเคลียร์ว่าเค้าใช้ Mock เมื่อไหร่กัน

วิธีการทำระบบอะไรซักอย่างปกติก็มีอยู่สองทางในการสร้างขึ้นมา คือ Top-Down / Bottom-Up

วิธีที่คุ้นเคยสุดเพราะอะไรไม่รู้อาจจะเพราะที่เรียนมาในมหาวิทยาลัยต่างๆ ในวิชา SE ที่บอกว่าให้หาคำนาม บลาๆๆ ก่อนคือ Bottom-Up เริ่มจากหาว่าในระบบจะมี Model อะไรบ้าง แล้วหา Behavior เพื่อสร้างคลาสขึ้นมาทั้งหมดให้ครบทั้ง Flow โดยเริ่มจากฐานที่เป็นคำนาม จนถึงชั้นบนสุดที่เป็นส่วนติดต่อกับ User วิธีที่จะสร้าง Test กับระบบแบบนี้ง่ายสุดก็คือสร้าง Stub ขึ้นมาให้ทำหน้าที่แทน Third-party คอยให้ข้อมูลต่างๆ เพื่อให้ระบบทำงานได้ถูกต้องตลอด ปัจจุบันก็ยังคงชินกับการสร้างระบบด้วยวิธีนี้อยู่ เวลาทำอะไรก็เลยมักสร้าง Stub ขึ้นมาก่อน แล้วค่อยๆ ไล่จาก Model ขึ้นไปจนถึง User Handler Class

วิธีที่ @visibletrap บอกมาอีกวิธีคือการสร้างระบบจากส่วนที่ติดต่อกับผู้ใช้จริงๆ โดยสร้างตาม Behavior ของระบบไล่ลงมาจนถึง Model โดยการสร้างแต่ละชั้นก็สร้าง Mock ของชั้นถัดไปคู่ขึ้นมาเพื่อทำหน้าที่ให้ข้อมูลและตรวจสอบความถูกต้องของ Behavior นั้น จนถึงชั้นสุดท้ายถึงได้ Stub ออกมา พอลองคิดตามวิธีนี้ดู ก็รู้สึกว่ามันจะได้ระบบที่เร็วกว่าแบบสร้างจาก Model มากเลยแฮะ เพราะได้ชั้นที่ติดต่อกับ User จริงๆมาก่อนแล้ว และได้ Behavior การทำงานจริงๆ ขึ้นมาและไม่คิดว่าจะเปลี่ยนอีกภายหลัง

ตอนนี้ก็หาโอกาสลองอีกวิธีอยู่ ซึ่งไม่รู้ว่าจะได้ลองเมื่อไหร่แล้วจะมีปัญหาอะไรบ้าง แต่งานยุ่งๆ อย่างนี้รวมถึงต้องคอย review code เพื่อนในทีม สงสัยจะไม่มีเวลาลองแฮะ คงต้องรอให้ว่างกว่านี้ก่อน ช่วงนี้ JFDI มี event ถี่เหลือเกินจนแทบไม่ได้ทำอะไรเลยด้วย กว่าจะได้ลองคงอีกนาน

About llun

Just a programmer

, , ,

  • Poparo

    สู้ๆ