Screen Shot 2558-08-12 at 4.57.01 PM
หนึ่งในแนวปฏิบัติของ Extreme Programming (XP)
ที่ได้รับความนิยมอย่างสูงนั่นก็คือ Continuous Integration (CI)
ซึ่งมันได้เข้ามาเป็นส่วนหนึ่งของการพัฒนา software ไปแล้ว

ลองคิดดูสิว่า
ถ้าคุณขาด CI ไปแล้ว คุณจะพัฒนา software ได้อย่างไร ?

ในปัจจุบัน
มีระบบ และ เครื่องมือ สำหรับการสร้างระบบ CI มากมาย
ตั้งแต่ขั้นตอนการ build, test, deploy และ monitoring

แต่แปลกนะ !!
ปัญหาก็ยังเกิดขึ้นมากมาย แม้จะมีระบบ CI แล้วก็ตาม
ดังนั้นลองมาตรวจสอบกันหน่อยสิว่า
ระบบ CI ของคุณเป็นอย่างไรกันบ้าง ?
เพื่อใช้เป็นแนวทางในการปรับปรุง และ ลดปัญหาต่าง ๆ ที่เกิดขึ้น

1. สมาชิกทุกคนในทีมทำการ commit การเปลี่ยนแปลงไปยัง branch หลัก อย่างไร ?

นั่นคือ ในแต่ละวันทำการ commit กี่ครั้ง ?
แย่ที่สุดคือ 1 ครั้งต่อวันต่อคน

ยิ่ง commit ได้บ่อยเท่าไรจะยิ่งดีมาก ๆ
เรื่องนี้ห้ามมีข้อยกเว้นใด ๆ ทั้งสิ้น

2. สมาชิกทุกคนในทีมรู้ เห็น และเข้าถึงผลลัพธ์จากการทำงานของระบบ CI ?

หมายความว่า ผลการทำงานของระบบ CI
มันต้องง่ายต่อการเข้าถึง และ ชัดเจน
นั่นแสดงว่า ทีมมีความชัดเจน และ โปร่งใส

ถ้าคุณเข้าถึงยาก หมายถึงปัญหาแล้ว !!

3. เมื่อผลการทำงานของระบบ CI มัน fail ต้องได้รับการแก้ไขทันที !!

ลองดูสิว่า
ทีมของคุณทำอย่างไร เมื่อการ build ของระบบ CI มัน fail … ?

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

ที่สำคัญในการแก้ไข
ควรกำหนดขอบเขตของเวลา-ของการแก้ไขด้วยนะ
ถ้าการแก้ไขใช้เวลาเกิน ให้ทำการ revert ซะ

แต่ถ้าทุกคนในทีมไม่สนใจว่าผลของระบบ CI จะเป็นอย่างไร
นั่นหมายถึงปัญหา ซึ่งจะต้องแก้ไข และ ปรับปรุงนะครับ

4. สมาชิกทุกคนรู้สึกว่าต้องรับผิดชอบในระบบ CI หรือไม่ ?

ลองคิดดูสิว่า
ถ้าคุณทำการมอบหมายหน้าที่ให้ใครบางคนดูแล CI
โดยที่คนอื่น ๆ ไม่สนใจเลย ถึงแม้จะทำงาน fail ก็ตาม
นั่นคือปัญหา …

ดังนั้นแทนที่จะให้ใครคนใดคนหนึ่งดูแล
ก็ให้ทั้งทีมดูแลไปเลยสิครับ

5. เมื่อการ build ของระบบ CI มัน fail จะไม่มีใคร commit การเปลี่ยนแปลงเข้ามา !!

ถ้ามีการ commit การเปลี่ยนแปลงเข้ามา
ในขณะที่ระบบ build ของ CI มัน fail
แสดงว่า สมาชิกในทีมไม่ได้สนใจผลการทำงานจากระบบ CI เลย
หรือผลการทำงานของ CI มันเข้าถึงยากหรือไม่

นั่นคือสิ่งที่คุณต้องปรับปรุงนะ

6. ก่อนกลับบ้าน หรือ เลิกงาน ต้องมั่นใจว่าระบบ CI ทำงานได้อย่างถูกต้องเสมอ

ข้อนี้เป็นกฏเหล็กที่ทุกคนในทีม ต้องเห็นชอบร่วมกัน

7. สมาชิกทุกคนในทีมต้องทำการทดสอบก่อน commit เสมอ

อย่าไปฝากความหวังที่ระบบ CI เพียงอย่างเดียว
ไม่เช่นนั้นที่ระบบ CI จะมีแต่ผลการทำงานที่ fail
ซึ่งมันไม่น่าจะเกิดขึ้นบ่อยนัก !!

ดังนั้น สิ่งที่คุณขาดไม่ได้คือ
การเขียน unit test, integration, system test นะครับ

8. ระบบ CI จะต้องทำการ build ในทุก ๆ การเปลี่ยนแปลง หรือ บ่อยที่สุดเท่าที่จะทำได้

ยิ่งทำการ build บ่อยเท่าไร
ทีมจะได้ feedback กลับมาเร็วเท่านั้น
นั่นคือ ถ้ามีปัญหาแล้ว เราสามารถแก้ไขได้อย่างรวดเร็วนั่นเอง

ลองคิดดูว่า
ถ้าระบบ CI ทำการ build ทุก ๆ 1 ชั่วโมง
คุณน่าจะลืมว่าทำอะไรไปบ้างหรือเปล่านะ ?
ดังนั้นให้ทำงานทุก ๆ 1 นาทีน่าจะดีกว่านะครับ

9. ระบบ CI ต้องทำงานไม่นาน เช่น ไม่เกิน 10 นาที

ถ้าทำงานมากกว่านี้ นั่นหมายถึงระบบ CI ของคุณมีปัญหาแล้วนะ
ต้องทำการแก้ไข และ ปรับปรุงให้ดีขึ้น

ไม่เช่นนั้น ทีมพัฒนาก็จะเลิกใช้ไปในที่สุด !!!

10. ขั้นตอนการทำงานของระบบ CI ต้องเหมือนกับขั้นตอนบนเครื่องของทีมพัฒนาทุกคน

ลองคิดดูว่า
ถ้าเครื่องของคุณเป็นอีกแบบ
และบนระบบ CI เป็นอีกแบบ
ถ้าเกิดปัญหาขึ้นมา คุณจะหาสาเหตุได้อย่างไร ?

และมันก่อให้เกิดคำพูด คือ เครื่องของผมมันทำงานได้นะ !!

ดังนั้น ถึงเวลาที่คุณต้องตอบแล้วว่า

ระบบ CI ของคุณเป็นอย่างไรบ้าง ?

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

แล้วคุณจะได้ระบบ Continuous Integration ที่ดีขึ้นอย่างแน่นอนครับ