วันนี้อ่านหนังสือเรื่อง Continuous Integration
ไปเจอชุดคำถามที่น่าสนใจว่า
เรากำลังนำแนวคิดและแนวปฏิบัติของ Continuous Integration มาใช้งาน
หรือเราเพียงนำเครื่องมือที่เรียกว่า Continuous Integration Tool มาใช้เท่านั้น
ดังนั้นลองมาตอบคำถามเหล่านี้กันหน่อย

คำถามที่ 1

ในแต่ละวันทำการ check-in หรือ push code หรือ pull request
ไปยัง branch หลักที่ทำงานร่วมกันกี่ครั้ง ?

แนวคิดของ Continuous Integration นั้น
เพื่อช่วยทำให้มั่นใจว่า การรวม code และสิ่งต่าง ๆ ที่เปลี่ยนแปลงนั้นถูกต้องหรือไม่
ดังนั้นถ้าเราไม่ทำการส่งการเปลี่ยนแปลงไปยัง branch หลักที่ทุกคนในทีมทำงานร่วมกันแล้ว
คิดว่าปัญหาต่าง ๆ ยังคงอยู่ แม้จะมีการนำแนวคิดที่ดีมาใช้งาน
แต่เรากลับไม่ปรับเปลี่ยนตัวเราเอง
สุดท้ายสิ่งที่ผิดคือ อะไรก็ตามที่ไม่ใช่ตัวเรา !!

ถ้าแต่ละคนมี branch ส่วนตัว เช่น feature branch แล้ว
feature branch เหล่านี้ต้องมีอายุที่สั้น
จากนั้นทำการรวมไปยัง branch หลักที่ทำงานกัน
และลบ feature branch ไปซะ

คำถามที่ 2

มีชุดการทดสอบแบบอัตโนมัติหรือไม่ ?
เพื่อใช้ตรวจสอบการเปลี่ยนแปลงต่าง ๆ ที่เกิดขึ้น
ถ้าไม่มีหรือมีน้อยมาก ๆ นั่นหมายความว่า น่าจะกำลังไปผิดทาง
เพราะว่า ไม่ได้ช่วยทำให้เรามีความมั่นใจต่อการเปลี่ยนแปลงเลย
ดังนั้น เริ่มเขียนชุดการทดสอบแบบอัตโมัติได้แล้วนะ
ไม่ว่าจะเป็น unit, integration, api และ end-to-end test เป็นต้น

คำถามที่ 3

ถ้าระบบ Continuous Integration แจ้งผลการตรวจสอบว่า ไม่ผ่าน แล้ว
สิ่งที่เกิดขึ้นคือ ทุกคนในทีมจะหยุดทำงานแล้วช่วยกันแก้ไขให้การทำงานผ่าน
จากนั้นจึงแยกย้ายกลับไปทำงานของตนเองต่อไป
คำถามคือ ทีมของคุณทำแบบนี้ใช่หรือไม่ ?
ถ้าไม่แสดงว่า คุณไม่ได้สนใจทีมเลย สนใจแต่ตนเอง

ลองคิดดูสิว่า
ถ้าการเปลี่ยนแปลงล่าสุดทำให้ระบบทำงานไม่ถูกต้องแล้ว
คนอื่น ๆ ในทีมจะผ่านได้อย่างไร
ดังนั้นจงหยุดทำงานของตัวเอง
แล้วมาช่วยกันแก้ไขปัญหาตรงกลางให้ผ่านก่อนเสมอ

ก่อนกลับบ้านต้องมั่นใจว่า
การเปลี่ยนแปลงต่าง ๆ เหล่านั้น
ต้องถูกตรวจสอบและเมื่อตรวจสอบแล้วต้องผ่านเท่านั้น