หลายคนอาจจะเจอคำถามแนวๆว่า เพิ่ม Feature นี้เข้าไป หรือ Deploy ระบบที่ละส่วน มันมีแนวคิดการ Integrate หรือ ป่าวนะ ที่เป็น Guideline หรือป่าวนะ สรุปมีแนวทาง โดยมี 4 กลยุทธ์ที่ใช้กัน ดังนี้ครับ
- Big Bang
- Incremental
- Top-Down
- Button-Up
- Sandwich
1. Big Bang
- Big Bang ไม่มีลำดับอะไร เมื่อทุกคนทำเสร็จให้เทรวม และทดสอบรวมกันเดียว
- เหมาะกับ
- งานที่ไม่มีความซับซ้อน หรือมีขนาดเล็ก เพราะ ถ้าพลาดนี้หนังชีวิตเลยครับ
- แต่ต้องระวัง
- เนื่องจากเป็นการเทรวม หายังไม่ได้ตกลง Interface (Internal / External) กันก่อน ทำให้เกิดปัญหาตอนเอาทุก Component / Sub-System แต่ละอันมารวมกัน
- การทดสอบ หากมีข้อผิดพลาดเกิดขึ้น อาจจะทำให้หา Root-Cause ได้ยากขึ้น
- ตัวอย่าง
- Coding: การ Merge Feature ที่มี Dev ทำหลายๆคนกลับเข้าที่ Branch หลัก
- System: การ Deploy ระบบคลังสินค้า ที่มีการเชื่อมกับระบบบัญชีพร้อมกัน
2. Incremental
- Incremental มีการจัดลำดับ / ความสำคัญก่อนหลัง เช่น การทำ Core ขึ้นมาก่อน แล้วค่อยเพิ่ม Feature เข้าไปในแต่ละ Release
- เหมาะกับ
- งานที่มีขนาดใหญ่ จึงต้องแบ่งออกเป็น Component / Sub-System
- แผนงานยืดหยุ่นได้ เพราะ ใช้เวลาเก็บข้อมูล เพื่อมาปรับตัวระบบที่ละนิดเล็กบ้าง ใหญ่บ้าง
- สำหรับแนวทาง Incremental มี 3 รูปแบบ
- Top-Up: พัฒนาจาก Component / Sub-System ที่อยู่ด้านบน และไล่ลอง ยกตัวอย่าง UI (Front-End) อยู่ด้านบนที่ต้องเรียกใช้งาน API (Web Service) ด้านล่าง แต่ระหว่างที่เราพัฒนา UI มันไม่มี API ดังนั้นต้องมีการทำ Stub / Mock เข้ามาช่วยเตรียมข้อมูลก่อน
- ตัวอย่าง: ตอนทำ Component ของ UI_HOME ต้องเตรียม Stub ของ UI_A / UI_C / UI_D
- Button-up: พัฒนาจาก Component / Sub-System ที่อยู่ด้านล่างไล่ขึ้นไป จากตัวอย่างของ Top-Down ที่มี UI (Front-End) กับ API (Web Service) คราวนี้ทีมพัฒนาเริ่มทำในส่วนของ API ขึ้นมาก่อน ส่วนของงานที่มาจาก UI ต้องทำ Driver เพื่อเข้ามาทดสอบ ถ้าในเคสนี้จะเป็นตัว API Tool อย่าง Post-Man ครับ
- ตัวอย่าง: ตอนทำ Component ของ API_A ต้องเตรียม Drive ของ UI_A
- Sandwich: เป็นการผสมระหว่าง Top-Up กับ Button-up เพราะถ้าไล่ทำที่ละจุดไปเรื่อยๆ จะใช้ระยะเวลาที่ยาวนาน และเปลืองทรัพยากรได้ เพราะต้องมาทำ Stub กับ Driver เลยมีการจัดกลุ่มของ Component / Sub-System ขึ้นมา และทำ Stub/Driver เท่าที่จะเป็น
- ตัวอย่าง: จับกลุ่มของ UI_A / UI_B และ API_B มาเป็น Sandwich โดยเหลือเตรียม Driver UI_HOME และ Stub ของ API_A เท่านั้น
- ตัวอย่าง
- Coding: การตกลงการ Release Sub-Feature ในแต่ละเวอรชัน เช่น 8.7.17.0 ระบบ Core / 8.7.17.1 ส่วนการเดินรายการ / 8.7.17.3 ส่วนการออกรายงาน เป็นต้น
- System: อาจจะมองเป็นการ Implement ระบบ ERP ขนาดใหญ่ โดยติดตั้งจาก Core และใช้งาน จากนั้นค่อยติดตั้ง Module อื่นๆ เพิ่มขึ้นมา
สรุป ไม่ว่าจะเลือกทางไหนต้องพิจารณา
- เลือกทางไหนขึ้นกับ Skill ของทีมงานทุกคน
- ขนาด และความซับซ้อนของระบบที่กำลังพัฒนา
- รูปแบบ Software/Product Integration Strategy มีผลกับทางทดสอบระบบด้วยครับ
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.