เมื่อหลายวันก่อนพูดคุยเกี่ยวกับ 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 ครับ