ก่อนที่จะพัฒนาซอฟต์แวร์ (Software) เราต้องรู้กระบวนการพัฒนาซอฟต์แวร์ (Software) กันก่อน เรียกว่า Software Development Lifecycle (SDLC) หรือ วงจรการพัฒนาซอฟต์แวร์ (software) คือ กระบวนการที่ออกแบบขั้นตอนการพัฒนาซอฟต์แวร์ (Software) ซึ่งอาจเป็นเรื่องที่ท้าทายในการจัดการเนื่องจากข้อกำหนดที่เปลี่ยนแปลง ไม่ว่าจะเป็น ความต้องการ (Requement) ที่เปลี่ยนไป การทำงานร่วมกันข้ามสายงาน สายบริษัท
เราจึงใช้กระบวนการจัดระเบียบการพัฒนาซอฟต์แวร์ โดยใช้กระบวนการ SDLC เพื่อกำหนดขอบเขตของโปรเจคนั้น ๆ เพื่อระบบที่พร้อมการส่งมอบงานในทุกขั้นตอนของกระบวนการพัฒนาซอฟต์แวร์ (Software) และให้ผู้มีส่วนได้ส่วนเสียของโปรเจคทั้งหมดเห็นตรงกันในเป้าหมายของการพัฒนาซอฟต์แวร์ (Software) และข้อกำหนดล่วงหน้าและแผนที่จะบรรลุเป้าหมายเหล่านั้น โดยมีกระบวนการ SDLC มี 6 กระบวนการ เรียกว่า SDLC Process
ที่มารูปภาพ : https://productcoalition.com/a-comprehensive-guide-to-the-software-development-life-cycle-sdlc-15b7892e1d44?gi=cd04a8b67f16
การวางแผน (Analysis):
ก่อนเริ่มโปรเจค ทีมจะต้องทำการศึกษาและทำความเข้าใจ ความต้องการ ขอบเขตงาน และสรุปแผนการทำงานในทุกขั้นตอนให้กับผู้ที่เกี่ยวข้องทุกคน ทั้งภายในทีม Dev และกับเจ้าของผลิตภัณฑ์ เจ้าของผลิตภัณฑ์สามารถเพิ่มเติม requirement ได้ แม้ในช่วงการพัฒนาหากจำเป็นต่อผลิตภัณฑ์
Business Analysis (BA) ทำ Research ข้อมูลเพื่อวิเคราะห์ความต้องการของธุรกิจ กระบวนการทางธุรกิจ ตลอดจนปัญหาและพฤติกรรมของผู้ใช้งานกลุ่มเป้าหมาย จากนั้นจึงนำมาสร้างเป็นแผนจัดสรรระยะเวลาและงานตาม Scope Requirement ที่ต้องดําเนินการ และงานเอกสารที่เกี่ยวข้องกับผลิตภัณฑ์ เช่น
- กำหนดวัตถุประสงค์ของโครงการ.
- กำหนดขอบเขตและระยะเวลาของโครงการ.
- สร้างแผนโครงการที่รวมถึงการจัดทำงาน, การจัดการทรัพยากร, และกำหนดกฎระเบียบ
การออกแบบ (Design):
ทีม UX/UI Designer สร้าง Prototyping จะช่วยให้ทั้งผู้ใช้งานและนักพัฒนาเห็นในสิ่งเดียวกัน ซึ่งการออกแบบ Wireframe ที่ละเอียดครบทุก Flow นี้จะเป็นเสมือนพิมพ์เขียวให้ทีม Dev และช่วยลดปัญหาความคลาดเคลื่อนในการสื่อสารของทีม Dev กับเจ้าของโครงการ รวมถึงผู้ที่เกี่ยวข้อง จะต้องทำงานใกล้ชิดกับทีม Dev เพื่อช่วยอธิบายถึงรายละเอียดปลีกย่อยของการออกแบบ รวมถึงช่วยแก้ปัญหาและประสานกับเจ้าของโครงการ เพื่อนำข้อเสนอแนะต่างๆ ที่เกิดขึ้นระหว่างการทำงานของทีม Dev มาใช้ปรับปรุงแบบจำลองหรือ Wireframe ให้มีความเหมาะสมมากยิ่งขึ้น ในขณะเดียวกันทีมโปรแกรมเมอร์ก็ต้องยึดถือแบบจำลองนี้เป็นแนวทางในการเขียนโค้ด เพื่อให้ระบบสามารถใช้งานได้ตามที่ทีมตกลงไว้กับเจ้าของโครงการ
การทำงาน (development):
เริ่มจากการเขียน Code ตามที่ Design Wireframe เอาไว้ จะแบบออกเป็นสองส่วน ได้เเก่ Front-end ที่ต้องทำตาม Design, UX และ UI การจัดทำเนื้อหา รูปภาพประกอบ ข้อความ การแจ้งเตือน และคำอธิบายต่างๆ ทั้งหมดที่จะนำแสดงผลในหน้าจอของซอฟต์แวร์ ขั้นตอนนี้จะใช้เวลาตาม scope ของ Requirement และ Design ส่วนที่สองจะเป็น Logic ที่ต้องทำตาม Back-end Back-end หาก บางโปรแกรมอาจจะใช้ข้อมูลจากฐานข้อมูลเดียวบนระบบของตัวเอง แต่สำหรับโปรแกรมระบบที่มีความซับซ้อนมากๆ จะต้องทำการสร้าง API (Application Program Interface) ขึ้นใช้งานร่วมกับฐานข้อมูลที่มาจากโปรแกรมระบบอื่นๆ
การทดสอบ (Testing):
กระบวนการทดสอบซอฟต์แวร์ หรือ Software Testing Process เป็นการตรวจสอบทั้งความถูกต้องของฟังก์ชั่นการทำงาน ความถูกต้องของข้อมูล รวมถึงประสิทธิภาพของโปรแกรมระบบก่อนนำโปรแกรมระบบไปใช้งานจริง ขั้นตอนการทดสอบรวมถึงกระบวนการแก้ไขข้อบกพร่อง(Bug) หลังจากการ development จะต้องมีการตรวจข้อบกพร่องของ Code ทั้งหมดที่เกิดขึ้นระหว่างการพัฒนา การจัดทำเอกสารและ bug report จะถูกส่งกลับไปยัง Developer เพื่อแก้ไข
การปรับปรุง (Deployment):
เมื่อโปรแกรมระบบที่พัฒนาขึ้นผ่านกระบวนการทดสอบซอฟต์แวร์ – Software Testing Process แล้ว ทางทีม Dev จะดำเนินการติดตั้งบนเครื่อง Production เพื่อเปิดใช้งานจริงต่อไป
การดูแลรักษา (Maintenance):
หลังจากติดตั้งและส่งมอบโปรแกรมระบบให้แก่เจ้าของโครงการแล้ว ทีมจะต้องคอยมอนิเตอร์ Log file อยู่เสมอเพื่อป้องกันไม่ให้เกิดปัญหาจากการใช้งาน หรือหากพบว่าโปรแกรมระบบมีข้อผิดพลาดเกิดขึ้นก็จะสามารถเข้าไปช่วยสนับสนุนเจ้าของโครงการได้อย่างทันท่วงที
เป้าหมายของ SDLC คือ การลดความเสี่ยงของโปรเจกต์ด้วยการวางแผนล่วงหน้า เพื่อให้ซอฟต์แวร์ (software) ตอบสนองตามความต้องการ ความคาดหวัง ของลูกค้าในระหว่างการใช้งานจริงและหลังจากนั้น
ประโยชน์ของ SDLC
- เพิ่มการมองเห็นกระบวนการพัฒนาสำหรับผู้มีส่วนได้ส่วนเสียทั้งหมดที่เกี่ยวข้อง
- การประมาณค่า การวางแผน และการตั้งเวลาอย่างมีประสิทธิภาพ
- ปรับปรุงการบริหารความเสี่ยงและการประมาณการต้นทุน
- การส่งมอบซอฟต์แวร์อย่างเป็นระบบและความพึงพอใจของลูกค้าที่ดีขึ้น
SDLC Models
การเลือกรูปแบบ SDLC (Software Development Life Cycle) Models ขึ้นอยู่กับลักษณะของโครงการ, ความต้องการของลูกค้า, และสภาพแวดล้อมโครงการ. นี้คือสรุปของบาง SDLC Models และความเหมาะสมของแต่ละ Model
Waterfall Model
ที่มารูปภาพ : https://medium.com/linkit-intecs/waterfall-model-vs-agile-model-c580e389feb
เหมาะสำหรับโครงการที่มีความแน่นอนและความเสถียรในข้อกำหนด, และไม่มีการเปลี่ยนแปลงที่ค่อนข้างมั่นคง. แต่หากโครงการมีความซับซ้อนหรือมีความแปลกปลอม, การใช้ Waterfall Model อาจทำให้ยากต่อการบริหารโครงการและการปรับเปลี่ยน
ข้อดี Waterfall Model :
- ขั้นตอนและการทำงานถูกกำหนดไว้ล่วงหน้า.
- การสร้างเอกสารเป็นขั้นตอนหนึ่ง ทำให้ เอกสารที่ครบถ้วน
- การทำงานตามลำดับทำให้เหมาะสำหรับโครงการที่มีความเสถียร
ข้อเสีย Waterfall Model :
- ไม่ยืดหยุ่นและไม่เหมาะสำหรับโครงการที่มีการเปลี่ยนแปลงบ่อย
- ไม่สามารถทำการเปลี่ยนแปลงหรือปรับปรุงได้ง่าย.
- ไม่เหมาะสำหรับโครงการที่มีการเปลี่ยนแปลงบ่อยหรือไม่แน่นอน
Agile Model
ที่มารูปภาพ : https://www.javatpoint.com/agile-sdlc
เหมาะสำหรับโครงการ ที่เน้นความยืดหยุ่นและการปรับตัวตามการเปลี่ยนแปลงที่เกิดขึ้นในขณะที่กำลังพัฒนาซอฟต์แวร์ โดยมีการแบ่งโครงการเป็นกลุ่มเล็ก ๆ ที่เรียกว่า "Sprints" หรือ "Iterations" ซึ่งแต่ละ Sprint มีระยะเวลาที่จำกัดและต้องผลิตซอฟต์แวร์ที่พร้อมใช้งานในระยะเวลานั้น ๆ ซึ่งทำให้มีการปรับปรุงและการทดสอบอย่างต่อเนื่อง
ข้อดี Agile Model :
- สามารถปรับปรุงได้ตลอดเวลาตามความต้องการ.
- การทดสอบตลอดระบบช่วยให้ได้ซอฟต์แวร์ที่มีคุณภาพสูง.
ข้อเสีย Agile Model :
- การทำงานแบบวนรอบอาจทำให้การติดตามความคืบหน้าเป็นไปได้ยาก
- การที่สามารถปรับเปลี่ยนได้ตลอดเวลาอาจทำให้ไม่มีความมั่นคงในการตัดสินใจ
Spiral Model
ที่มารูปภาพ : https://www.intellectsoft.net/blog/spiral-model-sdlc/
เหมาะสำหรับโครงการที่ถูกออกแบบมาเพื่อการพัฒนาซอฟต์แวร์ที่มีความซับซ้อนและมีความเสี่ยงสูง. ขั้นตอนใน Spiral Model ถูกจัดเป็นวงรอบที่ผลิตซอฟต์แวร์ด้วยการทำงานต่อเนื่อง ๆ และมีการตรวจสอบความเสี่ยงและการวางแผนตลอดขั้นตอน.
ข้อดี Spiral Model :
- การทำงานแบบวนรอบช่วยจัดการความเสี่ยงในโครงการ.
- สามารถปรับปรุงแผนการทำงานและซอฟต์แวร์ตามความต้องการ.
- การทดสอบถูกนำทางตลอดระบบการพัฒนา
ข้อเสีย Spiral Model
- การจัดการ Spiral Model ต้องการการวางแผนและการควบคุมที่ดี.
- การทดสอบในแต่ละรอบของ Spiral Model อาจเป็นไปได้ที่ซับซ้อนและมีความท้าทาย.
Iterative Model
ที่มารูปภาพ : https://en.wikipedia.org/wiki/Iterative_and_incremental_development
การทำงานแบบวนรอบ (Iterative) และมีการทดสอบและปรับปรุงตลอดกระบวนการพัฒนา. ใน Iterative Model, การพัฒนาซอฟต์แวร์ถูกแบ่งเป็นรอบ ๆ โดยแต่ละรอบประกอบด้วยขั้นตอนต่าง ๆ เช่น การวางแผน, การออกแบบ, การทำงาน, การทดสอบ, และการปรับปรุง
ข้อดีของ Iterative Model
- ทีมสามารถปรับปรุงตามความต้องการและการทดสอบ.
- สามารถปรับปรุงแผนการทำงานและตัวซอฟต์แวร์ตามความต้องการ
ข้อเสียของ Iterative Model
- ต้องการการวางแผนและการควบคุมที่ดี
- การทดสอบในแต่ละรอบของ Iterative Model อาจเป็นไปได้ที่ซับซ้อนและมีความท้าทาย.
V-Model (Vee Model)
ที่มารูปภาพ : https://www.consilia-brno.com/experience/comparison-of-v-model-and-agile-software-development-methodology
เหมาะสำหรับโครงการที่มีข้อกำหนดที่ชัดเจนและไม่มีการเปลี่ยนแปลงบ่อย, โดยที่การทดสอบถูกใส่ใจตั้งแต่ต้นจนถึงสิ้นสุดขั้นตอนพัฒนา. แม้ V-Model จะไม่ยืดหยุ่นเท่ากับ Agile Model หรือ Iterative Model, แต่สามารถให้ความมั่นใจในคุณภาพของซอฟต์แวร์ที่ได้ผ่านการทดสอบที่รอบคอบ
ข้อดีของ V-Model :
- แต่ละขั้นตอนมีการทำงานและทดสอบที่ชัดเจน.
- การทดสอบถูกตรวจสอบตั้งแต่ขั้นตอนการออกแบบจนถึงการทดสอบระบบ
ข้อเสียของ V-Model :
- ไม่สามารถทำการเปลี่ยนแปลงหรือปรับปรุงได้ง่าย.
- ไม่เหมาะสำหรับโครงการที่มีการเปลี่ยนแปลงบ่อยหรือไม่แน่นอน.
ที่มา :
https://www.techterrotor.com/2021/05/software-development-life-cycle-sdlc.html