ในการพัฒนา 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 ต่าง ๆ ได้อย่างรวดเร็ว โดยไม่ต้องใช้คน
ดังนั้นเรื่องของ source code จะเป็น version ล่าสุดเสมอ
เรื่องของกระบวนการ build->deploy->release เร็วและสะดวกขึ้น
แต่ปัญหาที่ตามมาคือ เรื่องของคุณภาพของระบบ !!
เนื่องจากในแต่ละการ 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 แล้วหรือยัง ?
- ถ้ามีแล้วจากนั้นคือ มันมีคุณค่า มีคุณภาพมากน้อยเพียงใด ?
เรื่องต่าง ๆ เหล่านี้มันไม่ใช่ว่า ใช้เครื่องมืออะไร ?
แต่มันคือเรื่องของวิธีคิดว่าจะสร้างระบบกันอย่างไรให้ยั่งยืนมากกว่า
ดังนั้นมันคือเรื่องของคนล้วน ๆ
และขอแนะนำให้ค่อย ๆ ทำ ค่อย ๆ ปรับปรุงทีละเล็กทีละน้อย
แล้วมันจะดีขึ้นเองครับ