เมื่อหลายวันก่อนพูดคุยเกี่ยวกับ Unit testing
เลยได้มีโอกาสแลกเปลี่ยนมุมมองต่อการเขียนและการนำมาใช้งานนิดหน่อย
ซึ่งสิ่งหนึ่งที่น่าสนใจคือ ความเข้าใจผิด
ยกตัวอย่างเช่น
- ถ้าเรามี Unit tests แล้ว bug ของระบบจะไม่มี
- ถ้าเรามี Unit tests แล้วคุณภาพของระบบต้องดีแน่ ๆ รวมทั้ง code ด้วย
- ถ้า Unit tests มันไม่มีประโยชน์อะไร ก็ไม่ต้องทำ
คิดว่ามี Unit tests แล้วระบบต้องไม่มี bug !!
ระบบที่ทุกคนต้องการคือ ระบบที่ทำงานได้อย่างถูกต้อง ระบบที่สามารถจัดการกับเหตุการณ์ที่คาดไม่ถึงได้ คงไม่มีใครชอบระบบที่มี bug หรือข้อผิดพลาดมากมาย ดังนั้นสิ่งที่ทีมพัฒนาไม่ว่าจะเป็น SA/BA, Developer และ QA/Tester (และคนที่เกี่ยวข้อง) ต้องทำการตรวจสอบความถูกต้องเสมอนั่นคือการ Testing โดยที่ Developer ก็ต้องทำการทดสอบเช่นกัน เพื่อทำให้มั่นใจว่า code ที่เขียนขึ้นมานั้น ทำงานได้ตามที่คาดหวัง การเขียน code ก็เช่นกัน จำเป็นต้องมีการทดสอบด้วย การทดสอบ code ในแต่ละส่วน เราจะเรียกว่า Unit test สามารถทดสอบแบบ manual ได้นะ แต่ถ้า code มีจำนวนมากขึ้น จำนวน Unit test ก็มากขึ้นด้วย ดังนั้นการทดสอบแบบ manual ไม่น่าจะรอดบางคนบอกว่า ทดสอบไปทำไม ไม่มีเวลา !! แต่บอกว่าพัฒนาเสร็จได้อย่างไร ?ดังนั้นสิ่งที่ Developer ควรทำคือ การบันทึกกาทดสอบของ code ในส่วนต่าง ๆ ไว้ ในรูปแบบของ code ของการทดสอบ นั่นคือ Unit test โดย Unit test จะมีจำนวนมากขึ้นเรื่อย ๆ สามารถทำการทดสอบซ้ำได้บ่อยเท่าที่ต้องการ ทดสอบได้รวดเร็วขึ้น ลดเวลาในการทดสอบทั้งหมด หรือ regression testing และเพิ่มความมั่นใจมากขึ้น
แต่ถ้า Developer เข้าใจผิด !! แต่ถ้า Developer เข้าใจไม่ครบ !! แต่ถ้า Developer ไม่มีความรับผิดชอบ !! ถึงแม้ว่าจำนวนของ test coverage หรือ % ของ code ที่มี test ครอบคลุมเป็น 100% ก็ตาม Bug หรือข้อผิดพลาดก็เกิดขึ้นอยู่ดี
แต่สิ่งที่ทำให้เรารู้คือ ความผิดพลาด
เรียนรู้กับมัน ว่าเราผิดพลาดอะไร ? ว่าเราขาดตกบกพร่องอะไร ? เพื่อทำการแก้ไขและปรับปรุงให้ดียิ่งขึ้น จากนั้นเขียนชุดการทดสอบเช่น Unit test ขึ้นมา แน่นอนว่าผลการทำงานต้องไม่ผ่าน จากนั้นทำการแก้ไข code ซะ จนกว่าผลการทดสอบจะผ่าน สุดท้ายเราก็จะได้ ชุดการทดสอบที่ดีกว่าเดิมที่สำคัญเราจะไม่ผิดที่เดิม ( คนที่ผิดเรื่องเดิมซ้ำ ๆ ไม่น่าให้อภัยนะ )
สุดท้ายแล้วนั้น
การเขียนชุดการทดสอบนั้นต้องเป็นส่วนหนึ่งของ feature ที่พัฒนาเสมอ ไม่ว่าจะเป็น Unit/Integration/Acceptance test ไม่มีคำว่าเดี๋ยว หรือ ทำทีหลัง เพราะว่าสุดท้ายคุณก็ต้องทดสอบอยู่ดี ดังนั้นก่อนลงมือพัฒนาคิดให้เยอะ ๆ มิเช่นนั้นก็จะจมอยู่ในโคลนที่เราสร้างกันขึ้นมาเองคำถาม Bug คืออะไร ?ขอให้สนุกกับการ coding ครับ