ci-testing-00
ในการพัฒนา 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 แล้วหรือยัง ?
  • ถ้ามีแล้วจากนั้นคือ มันมีคุณค่า มีคุณภาพมากน้อยเพียงใด ?

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