พูดให้ยิ่งใหญ่มันก็คือ การแบ่งการทำงานออกเป็นส่วน ๆ ให้สามารถทำงานพร้อม ๆ กันไปได้โดยที่จะกระทบกันน้อยที่สุด ที่เห็นภาพง่าย ๆ คือ ถ้ามี Development ให้ programmer เขียน code ที่ยังไม่เสร็จ มีปัญหาอยู่ได้โดยไม่กระทบต่อระบบจริง ๆ ที่ user ใช้อยู่ เช่น ทำระบบ login ใหม่ แล้วพลาด password ของทุกคนเข้าไม่ได้เลย วันนั้นกว่าจะได้ทำงาน ก็เสียหายกันไปเท่าไหร่ คำว่า “คนจริง dev on production” เป็นอะไรที่ควรเลี่ยงให้ไกลที่สุด
องค์ประกอบหลักของสภาพแวดล้อมการพัฒนาซอฟต์แวร์ 💾
ระบบส่วนใหญ่จะมีการจัดเรียงสภาพแวดล้อมหลักตามลำดับการพัฒนาและการทดสอบดังนี้:
1. Development (Dev)
- วัตถุประสงค์: เป็นพื้นที่ทำงานของโปรแกรมเมอร์ (Developer) สำหรับเขียนโค้ด ทดสอบหน่วยย่อย (Unit Testing) และดีบั๊ก (Debug)
- ลักษณะ: มักจะเป็นเครื่องคอมพิวเตอร์ส่วนตัวของนักพัฒนา หรือสภาพแวดล้อมที่จำลองขึ้นเพื่อทำงานอย่างรวดเร็วและมีความยืดหยุ่นสูง ข้อมูลที่ใช้มักเป็นข้อมูลทดสอบหรือข้อมูลจำลอง (Mock Data)
2. Staging / Pre-Production (Stage)
- วัตถุประสงค์: เป็นสภาพแวดล้อมที่จำลอง (Mirror) สภาพแวดล้อมจริง (Production) ให้ใกล้เคียงที่สุด
- ลักษณะ: ใช้สำหรับการทดสอบระบบอย่างครอบคลุม (System Integration Testing – SIT) การทดสอบประสิทธิภาพ (Performance Testing) และการเตรียมพร้อมก่อนปล่อยสู่ผู้ใช้งานจริง มักใช้สำหรับการทำ UAT ด้วยเช่นกัน
3. User Acceptance Testing (UAT)
- วัตถุประสงค์: เป็นขั้นตอนที่ให้ผู้ใช้งานจริง (End-Users) หรือผู้มีส่วนได้ส่วนเสียทางธุรกิจเข้ามาทดสอบและตรวจสอบว่าซอฟต์แวร์ทำงานได้ตรงตามความต้องการทางธุรกิจหรือไม่
- ลักษณะ: มักจะติดตั้งอยู่ในสภาพแวดล้อม Staging หรือในบางกรณีอาจแยกออกมาเป็นสภาพแวดล้อมเฉพาะที่คล้าย Production มากที่สุด ข้อมูลที่ใช้อาจเป็นข้อมูลจริงที่ถูกปรับแต่งแล้ว
4. Production (Prod) ✨
- วัตถุประสงค์: เป็นสภาพแวดล้อมจริงที่ผู้ใช้งานปลายทาง (End-Users/Customers) ใช้งานซอฟต์แวร์นั้นๆ ในชีวิตประจำวันหรือการดำเนินธุรกิจ
- ลักษณะ: ต้องมีความเสถียร ประสิทธิภาพ และความปลอดภัยสูงสุด โค้ดที่นำมาใช้จะต้องผ่านการทดสอบและอนุมัติจากทุกขั้นตอนก่อนหน้านี้แล้ว
สภาพแวดล้อมเสริมอื่นๆ (Optional Environments)
- Testing / Quality Assurance (QA):
- ใช้สำหรับทีม QA/Tester ดำเนินการทดสอบฟังก์ชันต่างๆ โดยละเอียด (เช่น Functional Testing, Regression Testing) อาจอยู่ระหว่าง Dev กับ Staging หรือบางองค์กรอาจรวม Testing เข้ากับ Staging เลย
- Demo:
- ใช้สำหรับการสาธิตฟีเจอร์ใหม่ๆ ให้กับลูกค้าหรือผู้บริหาร โดยที่ไม่ต้องรบกวนสภาพแวดล้อม Staging หรือ Production
การมีสภาพแวดล้อมที่แยกจากกันอย่างชัดเจนเป็นหลักปฏิบัติที่ดีที่สุดในวงจรการพัฒนาซอฟต์แวร์ (SDLC) เพื่อให้มั่นใจว่าโค้ดใหม่ๆ จะได้รับการทดสอบอย่างละเอียดก่อนที่จะส่งผลกระทบต่อผู้ใช้งานจริงในสภาพแวดล้อม Production ครับ
About the author