Software Development Life Cycle คือ

วัฏจักรการพัฒนาซอฟต์แวร์ หรือ Software Development Life Cycle เป็นวัฏจักรพื้นฐานในการพัฒนาซอฟต์แวร์ หรือโปรแกรมคอมพิวเตอร์ ให้มีประสิทธิภาพมากยิ่งขึ้น นับตั้งแต่เริ่มเก็บความต้องการ (Get Requirement) ไปจนถึงการสำรวจความเห็นย้อนกลับ (Feedback) มาที่ผู้พัฒนา

Software Development Life Cycle มีส่วนประกอบพื้นฐาน ดังต่อไปนี้

1. Planning: วางแผนโครงการ

การวางแผนการพัฒนาซอฟต์แวร์ เริ่มต้นจาก การเก็บความต้องการ (Get Requirement) ทั้งจากลูกค้า (Customer) หรือผู้ใช้งาน (User) อาจจะเป็นการกำหนดจากขั้นตอนทางธุรกิจ หรือ Business Process ก็ได้

2. Analysis: วิเคราะห์โครงการ

เมื่อเราได้ความต้องการจากลูกค้า หรือผู้ใช้งานแล้ว จะเข้าสู่ขั้นตอนการวิเคราะห์ระบบ ซึ่งจะต้องวิเคราะห์ความคุ้มค่าในการลงทุน (Return On Investment: ROI) ว่าคุ้มค่าในการดำเนินการต่อหรือไม่

เมื่อเราคำนวณความคุ้มค่าของโครงการแล้ว จึงจะนำมาจัดทำขอบเขตของโครงการ หรือ Project Scope Of Work เพื่อกำหนดขอบเขตการพัฒนาซอฟต์แวร์ว่าเราจะทำหรือไม่ทำอะไรบ้าง โดยขั้นตอนนี้จะต้องสรุปกับลูกค้า หรือผู้ใช้งาน ตามความต้องการ (Requirement) ที่ได้เก็บมาตั้งแต่ต้น จนได้ข้อสรุปที่ตกลงได้ทั้ง 2 ฝ่าย

เมื่อเราสามารถสรุปขอบเขตของโครงการได้แล้ว ขั้นตอนต่อไปคือ การทำแผนการปฏิบัติการ หรือ Action Plan เพื่อกำหนดการทำงานภายใต้ระยะเวลาตามที่ได้สรุปกับลูกค้า หรือผู้ใช้งาน ในขอบเขตของโครงการ (Project Scope Of Work)

3. Design: ออกแบบระบบ

การออกแบบระบบนี้ นอกจากการออกแบบทางด้านซอฟต์แวร์ ทั้งหน้าจอตอบสนองผู้ใช้งาน (User Interface: UI) และการโค้ดซอฟต์แวร์ (Software Coding) ด้วยการทำรายละเอียดซอฟต์แวร์ หรือ Software Specification แต่จะรวมถึงการออกแบบฐานข้อมูล (Database Design) และเครือข่าย (Network Design) ด้วย เพื่อให้ซอฟต์แวร์สามารถทำงานได้ตามความต้องการของลูกค้า หรือผู้ใช้งาน

4. Implementation: พัฒนาซอฟต์แวร์และติดตั้ง

เมื่อทำการออกแบบระบบเรียบร้อยแล้ว จะเข้าสู่ขั้นตอนการพัฒนาซอฟต์แวร์ให้ใช้งานได้จริง โดยพัฒนาซอฟต์แวร์ตามที่ได้ออกแบบไว้แล้ว ให้กลายเป็นความจริง สามารถใช้งานได้อย่างมีประสิทธิภาพ ตรงตามความต้องการของลูกค้า หรือผู้ใช้งาน ตามที่ได้เก็บมา

ขั้นตอนนี้จะทำอยู่ในสภาวะแวดล้อมทดสอบ หรือ Test Environment

5. Testing & Integration: ทดสอบและนำไปใช้งาน

หลังจากพัฒนาซอฟต์แวร์แล้ว ขั้นตอนต่อไปคือการทดสอบและการบูรณาการ จะต้องทำการทดสอบจนกว่า ความผิดพลาดของซอฟต์แวร์ หรือบั๊ก (Bug) จะลดน้อยมากที่สุด หรือไม่มีเลยก็ยิ่งดี

การทดสอบซอฟต์แวร์จะมี 2 ขั้นตอน คือ

– การทดสอบระบบย่อย หรือ Unit Test เป็นการทดสอบระบบย่อยๆทีละระบบว่า สามารถทำงานได้ตามที่ออกแบบไว้หรือไม่

– การทดสอบทั้งระบบ หรือ System Integrate Test (SIT) เป็นการเอาระบบย่อยๆ หลายๆระบบ มารวมกันให้ทำงานอย่างต่อเนื่อง เพื่อให้ตรงตามความต้องการที่เก็บมาจากลูกค้า หรือผู้ใช้งาน

เมื่อทำการทดสอบเสร็จแล้ว จึงจะนำไปให้ลูกค้า หรือผู้ใช้งาน ทำการทดสอบครั้งสุดท้ายก่อนใช้งานจริง (User Acceptance Test: UAT) เมื่อลูกค้า หรือผู้ใช้งานทดสอบระบบและลงนามในเอกสาร UAT เป็นที่เรียบร้อยแล้ว จึงจะเริ่มใช้งานระบบจริง หรือ Go Live โดยการนำระบบที่อยู่ในสภาวะแวดล้อมทดสอบ (Test Environment) ขึ้นไปที่สภาวะแวดล้อมใช้งานจริง (Production Environment)

6. Maintenance: บำรุงรักษาซอฟต์แวร์

เมื่อทำการ Go Live ระบบแล้ว ขั้นตอนต่อไปคือ การบำรุงรักษาซอฟต์แวร์

เมื่อใช้งานไปสักระยะ ลูกค้า หรือผู้ใช้งาน อาจจะพบข้อผิดพลาดของซอฟต์แวร์ (Bug) เพิ่มเติม หากสามารถแก้ไขได้ ก็ให้ทำการแก้ไข

แต่ถ้าหากแก้ไขไม่ได้ จำเป็นต้องพัฒนาซอฟต์แวร์เพิ่มเติม ก็ให้ย้อนกลับไปทำตั้งแต่ข้อ 1 วางแผนและเก็บความต้องการจากลูกค้า หรือผู้ใช้งานใหม่อีกครั้ง

เย๊อะม๊วกกก เช่น Waterfall, V-Shaped, Prototype, Spiral, Iterative Incremental, Big Bang, Agile แค่เห็นก็ปวดหัวละ ซึ่งแต่ละตัวก็มีรายละเอียดของมันอีกอื้อซ่าเลย ดังนั้นไปหาอ่านเอาเองละกัน แต่เรื่องที่เราควรจะต้องรู้คือ

‘ไม่มีใครอยากทำงานผิดพลาด’ แต่บางครั้งปัญหาหรือข้อผิดพลาดก็มาทั้งในรูปแบบ เส้นผมบังภูเขา หรือ แบบเข็นครกขึ้นเขา จนยากที่จะรับมือ โดยเฉพาะเมื่อเกิดขึ้นระหว่างการพัฒนาซอฟต์แวร์ (Software Development) ทำให้กระบวนการทำงานสะดุดล่าช้า ส่งผลกระทบต่อผู้ที่เกี่ยวข้องจำนวนมาก และอาจทำให้งานที่ออกมาไม่ได้คุณภาพและส่งผลเชิงลบต่อองค์กรในที่สุด

ด้วยเหตุนี้ บลูบิค จึงได้รวบรวม 6 ข้อผิดพลาดที่พบบ่อยในแต่ละขั้นตอนของการทำ Software Development Life Cycle (SDLC) ที่นักพัฒนาซอฟต์แวร์และโปรแกรมเมอร์ต้องรู้ เพื่อป้องกันไม่ให้เกิดข้อผิดพลาดและทำให้กระบวนการพัฒนาซอฟต์แวร์เป็นไปอย่างราบรื่น สามารถส่งมอบงานได้อย่างมีคุณภาพสมบูรณ์ตามเป้าหมายที่วางไว้ 

Software Development Life Cycle คือ

1. การวางแผน (Planning)

เป็นขั้นตอนที่ต้องมีการวางแผนและกำหนดว่า การพัฒนาซอฟต์แวร์ (Software: SW) นี้ ใครจะเป็นผู้ใช้งานและรูปแบบเป็นอย่างไร โดยมีการระบุอย่างชัดเจนถึง กรอบเวลา (timeline) ขอบเขตของงาน (Scope of Work) ความต้องการทางธุรกิจ (Business Requirement) ข้อมูลสำคัญ และผู้ที่เกี่ยวข้อง (Stakeholders) มีใครบ้าง 

ข้อผิดพลาดที่พบบ่อย  

  • ด้านเอกสาร (Document): ในขั้นตอนนี้นักพัฒนากับลูกค้าจะให้ความสำคัญในเรื่องการติดตั้งซอฟต์แวร์เป็นหลัก ทำให้มองข้ามการวางแผนและเตรียมเอกสารที่เกี่ยวข้องกับการบำรุงรักษา รวมถึงการกำหนดดีไซน์และความต้องการทางธุรกิจไม่ละเอียดมากพอ
  • การวางแผนทำ Software Test: การทำแผนทดสอบโดยทั่วไปจะให้ความสนใจไปที่การทำ User Acceptance Testing: UAT และ System Integration Testing: SIT เป็นหลัก และมักจะลืมวางแผนทำ Non-functional Test กับ Test อื่นๆ เช่น Performance Test, Load Test, และ Security Test ที่ดำเนินการโดยทีม Quality Assurance (QA) เป็นต้น

2. การวิเคราะห์ (Analysis)

เป็นขั้นตอนวิเคราะห์ความต้องการ (Requirement) ทั้งในส่วนของกรอบเวลาของโครงการ และ Feature ที่ต้องการว่ามีอะไรบ้าง เพื่อจัดลำดับความสำคัญของงาน กำหนดรายละเอียดของความต้องการ และวางแผนการทดสอบต่างๆ ว่าต้องทำอะไรบ้าง 

ข้อผิดพลาดที่พบบ่อย  

  • ไม่สามารถวิเคราะห์ Requirement ได้ครบถ้วนทั้งหมด: โดยทั่วไปในขั้นตอนนี้ทีมพัฒนาจะทำการพูดคุยกับผู้ใช้งาน Working Team และ Stakeholders ที่เกี่ยวข้อง เพื่อทำความเข้าใจให้ถูกต้องตรงกันทั้งสองฝ่าย แต่ในบางกรณีที่ต้องทำงานร่วมกับองค์กรขนาดใหญ่และมีผู้เกี่ยวข้องในโครงการพัฒนามากมายหลายฝ่าย ทำให้ทีมงานพัฒนาซอฟต์แวร์ไม่สามารถพูดคุยและวิเคราะห์ความต้องการของทุกภาคส่วนได้อย่างครบถ้วน
  • การเก็บ Requirement ไม่ครบ: ส่วนใหญ่แล้วนักพัฒนาซอฟต์แวร์จะทำงานตาม Requirement ของลูกค้าเป็นหลัก แต่ในบางกรณีลูกค้าให้ Requirement ไม่ครบ หรือคิดว่าไม่จำเป็นต้องมีจึงทำให้เกิดข้อผิดพลาขึ้นได้ ดังนั้นเพื่อป้องกันข้อผิดพลาดดังกล่าว นักพัฒนาควรจัดทำ Framework, Check List, หรือ Template ก่อนเข้าไปคุยกับลูกค้า หรือ Stakeholder 

3. การออกแบบ (Design)

เป็นขั้นตอนการดีไซน์ Functional Software ซึ่งแบ่งออกเป็น 2 ส่วน คือ 1) การออกแบบ UX/UI และ Workflow และ 2) Backend/Frontend 

ข้อผิดพลาดที่พบบ่อย  

  • ข้อผิดพลาดในการทำ Solution Architecture: แม้ในส่วนงานทีมพัฒนา SW จะแบ่งงานออกเป็น 2 ส่วน ได้แก่ API Base และ Frontend/Backend แต่ในความเป็นจริงแล้วยังมี Components อื่นๆ ที่เกี่ยวข้องด้วย ดังนั้นในขั้นตอนการออกแบบนี้จะพบข้อผิดพลาดในการทำ Solution Architecture ได้บ่อย ยกตัวอย่างเช่น โจทย์ คือ การพัฒนาแอปพลิเคชันการชำระเงินให้กับธนาคารแห่งหนึ่ง ซึ่งการออกแบบมุ่งเน้นให้ความสำคัญเฉพาะการออกแบบแอปฯ จนลืมไปว่าระบบการทำงานดังกล่าวนั้นไม่สามารถทำงานแบบ Standalone ได้ และยังจำเป็นต้องทำงานร่วมกับระบบอื่นๆ ขององค์กรนั้นด้วย เช่น ระบบ Legacy Component ขององค์กร หรือระบบของ Vendors รายอื่นที่ทำงานคู่กันในโครงการ เพื่อให้สามารถเชื่อมต่อทุกๆ Component ของระบบทั้งหมดร่วมกันได้อย่างสมบูรณ์ ซึ่งภาพการออกแบบเหล่านี้มักไม่ได้เกิดขึ้นในวันแรกของการออกแบบ จึงเป็นเหตุผลให้นักพัฒนาซอฟต์แวร์มักจะพลาดกันที่จุดนี้ได้บ่อย
  • มองข้ามความสำคัญในการออกแบบ Infrastructure: โดยทั่วไปในขั้นตอนการออกแบบจะให้ความสำคัญในเรื่องของ UX/UI และการนำไปติดตั้ง และอาจมองข้ามการออกแบบโครงสร้างพื้นฐานที่เป็นส่วนสำคัญ ซึ่งหากเปรียบกับการออกแบบที่อยู่อาศัยก็คือ นักพัฒนาซอฟต์แวร์ลืมออกแบบระบบสาธารณูปโภคอย่าง ระบบน้ำประปา ระบบไฟฟ้าในบ้านนั่นเอง ดังนั้น นักพัฒนาซอฟต์แวร์จะต้องคำนึงถึงทุกส่วนและภาพรวมการใช้งานอย่างละเอียดถี่ถ้วน

4. การติดตั้ง (Implementation)

เป็นขั้นตอนการพัฒนาระบบตามแบบที่ได้กำหนดไว้ 

ข้อผิดพลาดที่พบบ่อย 

โดยทั่วไปจะมีการแบ่งงานออกเป็น System Analyst (SA) เป็นผู้ออกแบบ Function การทำงานจาก Requirement และ SW Spec หรือ SW Developer จะทำหน้าที่พัฒนาซอฟต์แวร์ตาม Spec ที่ได้รับจาก SA ดังนั้น ปัจจัยที่ทำให้เกิดความผิดพลาดในขั้นตอนนี้คือ คนออกแบบและคนพัฒนาซอฟต์แวร์เป็นคนละคนกัน จึงทำได้เกิดปัญหา ดังต่อไปนี้ 

  • เกิดปัญหาเรื่อง กรอบเวลาการทำงาน และความเข้าใจการออกแบบคลาดเคลื่อนระหว่าง SA และ นักพัฒนา SW
  • มุมมองการทำงานที่ต่างกันระหว่าง Engineer และ Project Manager (PM) โดยมุมมองของ Engineer มักต้องการให้งานออกมาสมบูรณ์แบบที่สุด ในขณะที่ PM ต้องการให้โครงการจบได้เร็วที่สุด ความคิดเห็นที่สวนทางกันจึงทำให้เกิดอุปสรรคในการทำงานที่พบได้บ่อยในขั้นตอนนี้ ดังนั้นการทำงานจึงต้องหาจุดกึ่งกลางที่สามารถทำให้งานออกมามีคุณภาพ และอยู่ภายใต้กรอบเวลาที่วางเอาไว้ 

5. การทดสอบและการเชื่อมต่อระบบ (Testing & Integration)

ในขั้นตอนนี้จะมีการทำการทดสอบคุณภาพของซอฟต์แวร์สามารถใช้งานจริงซึ่งการทดสอบที่คุ้นเคยในกลุ่มนักพัฒนาซอฟต์แวร์ คือ UAT, SIT, และ การทำ Unit Test ที่เป็น Functional Test  แต่อาจจะมีการทดสอบที่เป็น Non-functional Test ที่ไม่ได้ทำการทดสอบในส่วนนี้จนนำไปสู่ข้อผิดพลาดที่อาจเกิดขึ้นได้ เช่น การทำ Performance Test, Penetration Test และ Smoke Test เป็นต้น 

ข้อผิดพลาดที่พบบ่อย 

  • Performance Test: เป็นการทดสอบ Performance ของระบบ ซึ่งการทดสอบด้วยคอมพิวเตอร์ของผู้พัฒนาซอฟต์แวร์เพียงเครื่องเดียวอาจไม่เพียงพอ เพราะในความเป็นจริงระบบจะต้องรองรับการใช้งานของ User ในหลักแสนถึงหลักล้าน แม้ในบางครั้งลูกค้าอาจจะแจ้งจำนวน Active Users มาแล้ว แต่ในความเป็นจริงการออกแบบให้รองรับการใช้งานตามตัวเลขพื้นฐานเหล่านั้นไม่เพียงพอ ดังนั้นนักพัฒนาซอฟต์แวร์จึงจำเป็นต้องทำการวิเคราะห์อย่างละเอียด เพื่อให้ระบบสามารถใช้งานได้อย่างครอบคลุม
  • Penetration Test: โดยทั่วไปการทำ Security Test นั้นจะเป็นหน้าที่ของบุคคลที่สามที่ไม่มีส่วนเกี่ยวข้องในการพัฒนาโครงการเป็นผู้ทดสอบ โดยองค์กรขนาดใหญ่บางแห่งจะมี QA หรือใช้บริการบริษัทที่เป็น Auditor ที่น่าเชื่อถือเข้ามาดูแลโดยตรงเพื่อสร้างความน่าเชื่อถือให้กับระบบ
  • Smoke Test เป็นการทดสอบหลังจากระบบขึ้นใช้งานจริงไปแล้ว อาจมีเหตุการณ์ต่างๆที่ไม่สามารถควบคุมได้เกิดขึ้น เช่น หากมีส่วนเชื่อมต่อต่างๆใช้งานไม่ได้ อินเตอร์เน็ตมีปัญหา ว่า ซอฟต์แวร์ยังสามารถดำเนินการได้หรือไม่ เป็นต้น 

6. การบำรุงรักษา (Maintenance)

เป็นขั้นตอนที่นักพัฒนาซอฟต์แวร์จะทำการส่งมอบงานบำรุงรักษา (Maintenance) ให้กับแผนกไอที หรือผู้ที่มีส่วนเกี่ยวข้องเป็นผู้รับผิดชอบต่อ