ในการพัฒนา software ได้นำเอาแนวคิด Continuous Integration(CI) เข้ามาใช้งาน
ซึ่งผมคิดว่าเป็นสิ่งที่ขาดไม่ได้เลย
เพื่อช่วยทำให้ทีมทำการ integrate บ่อย ๆ
เพื่อช่วยทำให้ software ที่สร้างค่อย ๆ เติบโตอย่างยั่งยืน
เพื่อช่วยทำให้ทีมได้รับ feedback กลับมาอย่างรวดเร็วทั้งดีและร้าย
เพื่อจะได้แก้ไขและปรับปรุงได้อย่างทันท่วงที
แต่สิ่งที่น่าแปลกใจก็คือ ไม่นำการทดสอบ (Testing) เข้ามาร่วมทำงานกับ Continuous Integration !!
ทีมที่มีการนำแนวคิด Continuous Integration มาใช้นั้น
จะเริ่มจากการสร้างระบบ Continuous Integration Server ทำหน้าที่ build, package และ deploy/release ระบบงาน ส่วนการทดสอบยังคงทำแบบเดิม หรือ แบบ manual !! ถ้าถามว่ามันมีข้อดีไหม ? ตอบได้เลยว่ามีข้อดีมาก เช่น- ทำให้ทีมพัฒนารู้ว่า source code สามารถ compile ได้หรือไม่
- ทำให้ทีมพัฒนารู้ว่า source code ทั้งหมดยังคงทำได้ได้ ไม่มีปัญหา
- ทำให้สามารถ deploy ไปยัง server ต่าง ๆ ได้อย่างรวดเร็ว โดยไม่ต้องใช้คน
แต่ปัญหาที่ตามมาคือ เรื่องของคุณภาพของระบบ !!เนื่องจากในแต่ละการ build/deploy นั้น ไม่มีชุดการทดสอบแบบอัตโนมัติอะไรเลย หรือไม่มีกระบวนการทดสอบเข้ามาอยู่ในระบบ Continuous Integration ซึ่งก่อให้เกิดปัญหาตามมามากมายเช่น
- ทีมพัฒนาไม่ทำการทดสอบทั้งระบบ
- ทีมทดสอบทำการทดสอบไม่ไหว
- ทีมทดสอบทำการทดสอบช้า
- ทีมทดสอบไม่ทดสอบทุก ๆ test case
- ทีมพัฒนาและทีมทดสอบไม่ทำการ regression test
ลองคิดดูสิว่า ถ้าต้อง deploy ระบบงานไปในแต่ละ environment ทั้ง Dev, Test, SIT, SUT, UAT, Staging, Production จะต้องทำการทดสอบกันอย่างไร ?ปัญหาเหล่านี้มันสะท้อนถึงโครงสร้างและกระบวนการขององค์กร ดังนั้นสิ่งที่ต้องแก้ไขทีคือ ต้องนำเอาการทดสอบเข้ามาอยู่ใน Continuous Integration ด้วยเสมอ โดยการทดสอบควรที่จะทำงานแบบอัตโนมัติอีกด้วย (Automated Testing)
โดยในระบบ Continuous Integration ควรมีความสามารถดังนี้ เพื่อทำให้การทดสอบมีประสิทธิภาพ
- Scalability สามารถทำการทดสอบทุก ๆ test case ได้ทุกครั้งเมื่อ source code เปลี่ยนแปลง
- Automation สามารถทำการทดสอบได้แบบอัตโนมัติ เมื่อเกิดปัญหาระบบจะหยุดทำงาน และแจ้งปัญหาออกมา
- Parallel testing เมื่อจำนวนของชุดการทดสอบเยอะขึ้น ดังนั้นระบบควรทำการทดสอบแบบขนานได้ เพื่อเพิ่มความเร็วของการทดสอบ
คำถามสำหรับทีมพัฒนาคือ
- วันนี้คุณนำแนวคิด Continuous Integration มาใช้แล้วหรือยัง ?
- วันนี้คุณนำกระบวนการทดสอบมารวมเข้ากับ Continuous Integration แล้วหรือยัง ?
- ถ้ามีแล้วจากนั้นคือ มันมีคุณค่า มีคุณภาพมากน้อยเพียงใด ?