เส้นทางอาชีพการเป็น Software Developer กับ ChatGPT #2
Published: 2023-04-27 13:37:36

**Software Development Life Cycle (SDLC)**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u9mn2iric3m24tvyda9b.jpg)

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

1. แบบแผน (Planning) - ในขั้นตอนนี้ทีมพัฒนาซอฟต์แวร์จะประเมินและวางแผนการพัฒนา รวมถึงการกำหนดความต้องการ การวิเคราะห์ความเป็นไปได้และการเตรียมแผนการทดสอบซอฟต์แวร์

2. ออกแบบ (Design) - ในขั้นตอนนี้ทีมพัฒนาซอฟต์แวร์จะออกแบบโครงสร้างของระบบ การจัดทำแผนภาพและการออกแบบส่วนประกอบต่าง ๆ เพื่อให้มีความเข้าใจเกี่ยวกับซอฟต์แวร์ที่กำลังจะพัฒนา

3. พัฒนา (Development) - ในขั้นตอนนี้ทีมพัฒนาซอฟต์แวร์จะเขียนโค้ดและทำการทดสอบโปรแกรม

4. ทดสอบ (Testing) - ในขั้นตอนนี้ทีมทดสอบซอฟต์แวร์จะทำการทดสอบความถูกต้องของโปรแกรม โดยรวมถึงการทดสอบเพื่อตรวจสอบว่าโปรแกรมสามารถทำงานได้ถูกต้องและตามความต้องการของผู้ใช้งาน

5. การปรับปรุงและการบำรุงรักษา (Maintenance and Monitoring) - หลังจากที่โปรแกรมหรือซอฟต์แวร์ได้ถูกสร้างขึ้นและเผยแพร่ไปแล้ว จะต้องมีการบำรุงรักษาและปรับปรุงอยู่ตลอดเวลา เพื่อให้ซอฟต์แวร์สามารถทำงานได้ตลอดเวลาและไม่มีปัญหาในการใช้งาน

**ในแต่ละขั้นตอน เกี่ยวข้องกับตำแหน่งงานใดบ้าง**

1. วิเคราะห์ความต้องการ (Requirement Analysis): Business Analyst, System Analyst
2. ออกแบบ (Design): Software Architect, System Designer, UX Designer
3. พัฒนา (Development): Software Developer, Front-end Developer, Back-end Developer, Full-stack Developer
4. ทดสอบ (Testing): QA Engineer, Software Tester
5. การปรับปรุงและการบำรุงรักษา (Maintenance): Software Support Engineer, Technical Support Engineer, System Administrator

**ในแต่ละขั้นตอน เกี่ยวข้องกับเอกสารอะไร หรือมี กระบวนการทำงานอย่างไร**

ในแต่ละขั้นตอนของ SDLC มักจะมีการเขียนเอกสารและสร้างเอกสารที่เกี่ยวข้องเพื่อใช้ในการพัฒนาซอฟต์แวร์ และใช้ในการสื่อสารระหว่างทีมพัฒนาซอฟต์แวร์กันด้วยกัน โดยในแต่ละขั้นตอนจะมีเอกสารที่เกี่ยวข้องและมีแนวทางที่เหมาะสมดังนี้

**1. วิเคราะห์ความต้องการ (Requirement Analysis)**

- Business Requirements Document (BRD)
- Functional Requirements Document (FRD)
- Use Case Diagrams
- Business Process Models
- User Stories
- การทำความเข้าใจความต้องการของลูกค้าอย่างละเอียดและระบุสิ่งที่ต้องการได้ชัดเจน
- การทำความเข้าใจตลาดและผู้ใช้งานเป้าหมายเพื่อเตรียมพัฒนาสิ่งที่ต้องการได้อย่างเหมาะสม

**2. ออกแบบ (Design)**

- Technical Design Document (TDD)
- Database Design Document
- Wireframes and Mockups
- User Interface (UI) Design Document
-  การออกแบบโครงสร้างของซอฟต์แวร์ให้เป็นไปตามหลักการออกแบบซอฟต์แวร์ที่เหมาะสม
-  การเลือกเทคโนโลยีที่เหมาะสมและเป็นไปตามสถานการณ์ของธุรกิจ

**3. พัฒนา (Development)**

-  Source Code
-  Unit Test Cases
-  Integration Test Cases
-  Deployment Scripts
-  การเขียนโค้ดที่สามารถอ่านง่ายและแก้ไขได้ง่าย
-  การทำงานร่วมกันในทีมโดยใช้เทคโนโลยีการพัฒนาที่เหมาะสม

**4. ทดสอบ (Testing)**

- Test Plan
- Test Cases
- Test Scripts
- Defect Report
ในขั้นตอนนี้ นักพัฒนาซอฟต์แวร์จะต้องทดสอบโปรแกรมเพื่อตรวจสอบว่าโปรแกรมทำงานได้ถูกต้องตามความต้องการหรือไม่ โดยการทดสอบสามารถแบ่งออกเป็นหลายประเภท เช่น การทดสอบฟังก์ชั่น (Functional Testing) การทดสอบประสิทธิภาพ (Performance Testing) การทดสอบความปลอดภัย (Security Testing) การทดสอบการทำงานร่วมกัน (Integration Testing) เป็นต้น การทดสอบเป็นขั้นตอนที่สำคัญมากในการพัฒนาซอฟต์แวร์ เนื่องจากการทดสอบที่ดีจะช่วยลดความผิดพลาดในโปรแกรมและช่วยให้โปรแกรมทำงานได้ถูกต้องมากขึ้น
* การทดสอบควรทำอย่างสม่ำเสมอตลอดกระบวนการพัฒนาโปรแกรม และควรใช้เทคโนโลยีและเครื่องมือที่เหมาะสมในการทดสอบ

 **5. Evaluation and Approval**

หลังจากที่โปรแกรมหรือระบบได้ถูกพัฒนาเสร็จสิ้นแล้ว ขั้นตอนต่อไปคือการประเมินและการอนุมัติ ซึ่งจะทำการตรวจสอบการทำงานของโปรแกรมหรือระบบว่าตรงตามความต้องการหรือไม่ โดยเฉพาะเรื่องความปลอดภัยและประสิทธิภาพของระบบ
  ในการประเมินและการอนุมัตินั้น มีหลายวิธี แต่หลักๆ แล้วจะมีการทดสอบ (Testing) โดยผู้ทดสอบจะทำการทดสอบความสมบูรณ์และความถูกต้องของโปรแกรมหรือระบบตามข้อกำหนดที่กำหนดไว้ ซึ่งการทดสอบสามารถแบ่งเป็นหลายประเภทได้ เช่น
- Unit Testing: การทดสอบระดับหน่วยงาน เช่น การทดสอบการทำงานของฟังก์ชั่นหนึ่งๆ ในโปรแกรม
- Integration Testing: การทดสอบการทำงานร่วมกันของหน่วยงานหลายๆ ในโปรแกรม หรือการทดสอบการทำงานร่วมกันของระบบย่อยหลายๆ ซึ่งประกอบกันเป็นระบบใหญ่
- System Testing: การทดสอบระบบในรูปแบบที่มีความคล้ายคลึงกับการใช้งานจริง
- Acceptance Testing: การทดสอบโดยผู้ใช้งานจริง เพื่อตรวจสอบว่าระบบสามารถทำงานได้ตามความต้องการหรือไม่

**6. Deployment**

หลังจากที่ได้ทำการพัฒนาและทดสอบแอปพลิเคชันเสร็จสิ้นแล้ว ขั้นตอนต่อไปคือการนำแอปพลิเคชันไปใช้งานจริง หรือที่เรียกว่าการ Deployment ซึ่งจะประกอบไปด้วยขั้นตอนดังนี้
- การเตรียมพร้อมสภาพแวดล้อม: การเตรียมแวดล้อมให้เหมาะสมกับการ Deploy โดยเฉพาะอย่างยิ่งถ้าเป็นการ Deploy บน Production Environment จะต้องมีการเตรียมตัวอย่างดีเพื่อลดความเสี่ยงที่จะเกิดข้อผิดพลาดขณะ Deploy
- การสร้าง Package: ขั้นตอนต่อไปคือการสร้าง Package หรือชุดไฟล์ของแอปพลิเคชันที่จะถูก Deploy โดยปกติแล้วจะใช้เครื่องมือที่ช่วยสร้าง Package อย่างเช่น Maven, Gradle, NPM ซึ่งจะสร้างไฟล์ที่เหมาะสมสำหรับการ Deploy ในรูปแบบที่ต้องการ
- การ Deploy: หลังจากที่ได้ Package แล้ว จะทำการ Deploy โดยมีหลายวิธีการเช่นการ Deploy ผ่าน Command Line Interface (CLI), การ Deploy ผ่านการใช้เว็บแอปพลิเคชัน, การ Deploy ผ่านเครื่องมือเฉพาะของระบบ เป็นต้น
- การทดสอบและตรวจสอบการ Deploy: หลังจากที่ได้ Deploy แอปพลิเคชันเสร็จแล้ว จะต้องมีการทดสอบและตรวจสอบการ Deploy โดยให้แน่ใจว่าแอปพลิเคชันทำงานได้ตามที่ควร และตรวจสอบปัญหาหรือข้อผิดพลาดที่อาจเกิดขึ้นในขณะที่ Deploy

**7. Maintenance and Monitoring**

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