fbpx
บล็อก 23 มิถุนายน 2022

เจาะลึกข้อผิดพลาดในแต่ละขั้นตอนของ SDLC ที่นักพัฒนา Software ต้องรู้

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

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

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) ให้กับแผนกไอที หรือผู้ที่มีส่วนเกี่ยวข้องเป็นผู้รับผิดชอบต่อ 

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

  • จุดผิดพลาดจากการเขียน Log:  ถ้าเราเขียนบันทึกการงานน้อยเกินไปจะทำให้การตรวจสอบการทำงานของระบบทำได้ยาก แต่ในทางกลับกันถ้าหากมีการบันทึกมากเกินไปจนกินพื้นที่จัดเก็บข้อมูล ก็จะส่งผลกระทบต่อการจัดเก็บข้อมูลสำคัญอื่นๆ เช่น Username, Password และข้อมูลส่วนตัวของลูกค้า เป็นต้น ทำให้เกิดความเสี่ยงด้านความปลอดภัย ดังนั้นการแก้ไขปัญหานี้สามารถทำได้ตั้งแต่ขั้นตอนแรกของการออกแบบ ควรจะมีการคุยกับทีมที่เกี่ยวข้องกับการดูแลระบบ เพื่อออกแบบ Log เพื่อให้เหมาะสมพอสำหรับการดูและระบบ
  •  ปัญหาการทำเอกสารสำหรับการบำรุงรักษาระยะยาว: โดยทั่วไประยะเวลาการพัฒนาซอฟต์แวร์จะใช้เวลาประมาณ 6 เดือน ถึง 3 ปี โดยหน้าที่ของนักพัฒนาซอฟต์แวร์จะจบที่พัฒนาซอฟต์แวร์เรียบร้อย และส่งงานต่อให้ทีมไอที ซึ่งเป็นคนละส่วนกับทีมนักพัฒนาซอฟต์แวร์ ระบบที่อยู่บน Production จะมีการใช้งานเป็นระยะเวลานานอาจจะเป็น 5- 10 ปี แต่บ่อยครั้งที่นักพัฒนาซอฟต์แวร์ มักลืมหรือไม่ได้ให้ความสำคัญในการเตรียมเอกสารที่เกี่ยวข้องกับการดูแลระบบในระยะยาวให้กับทีมผู้ดูแลระบบ เช่น คู่มือการตรวจสอบและแก้ปัญหาสำหรับกรณีต่างๆ หรือคู่มือการดูแลรักษาระบบ ดังนั้น ก่อนการส่งมอบงานให้กับทีมไอที นักพัฒนาที่ดีและรอบครอบจะมีการเตรียมเอกสารที่เกี่ยวข้องกับการดูแลรักษาระบบให้พร้อมและครอบคลุมการใช้งานในระยะยาว