เส้นทางอาชีพการเป็น Software Developer กับ ChatGPT #3
Published: 2023-04-28 14:40:33

**หลักการพัฒนาซอฟท์แวร์ให้สำเร็จมีอะไรบ้าง**

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

**Waterfall, Agile , V-model คืออะไร**
Waterfall, Agile, และ V-model เป็นเทคนิคหรือแนวคิดในการจัดการโครงการพัฒนาซอฟต์แวร์ โดยแต่ละเทคนิคมีลักษณะและวิธีการทำงานที่แตกต่างกันไปดังนี้:

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

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

**Waterfall มีขั้นตอนการนำไปใช้อย่างไรอย่างไร**
Waterfall เป็นโมเดลการพัฒนาซอฟต์แวร์ที่มีขั้นตอนการทำงานแบบเชิงเส้น โดยมีขั้นตอนการทำงานดังนี้

1. Requirements Analysis: การวิเคราะห์ความต้องการของระบบโดยละเอียด ซึ่งรวมถึงการกำหนดขอบเขตของระบบ รายละเอียดการทำงาน และฟังก์ชันการทำงานของระบบ
2. System Design: การออกแบบระบบโดยใช้เทคโนโลยีที่เหมาะสมกับความต้องการของระบบ ซึ่งประกอบด้วยการออกแบบระบบเบื้องหลัง การออกแบบฐานข้อมูล และการออกแบบหน้าจอ
3. Implementation: การเขียนโค้ด และทดสอบซอฟต์แวร์เพื่อให้มั่นใจว่าระบบทำงานได้ตามที่กำหนด
4. Testing: การทดสอบความถูกต้องของระบบโดยละเอียด เพื่อให้มั่นใจว่าระบบทำงานได้ตามที่กำหนด โดยการทดสอบแบ่งเป็นสองประเภท คือการทดสอบชิ้นงานและการทดสอบระบบโดยรวม
5. Deployment: การประยุกต์ใช้ระบบ โดยใช้เทคนิคการติดตั้งและการเข้ารหัส
6. Maintenance: การบำรุงรักษาระบบ โดยการแก้ไขข้อผิดพลาด และอัพเดทระบบเพื่อให้รองรับความต้องการใหม่ ๆ


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

ref: https://www.actitime.com/wp-content/uploads/2021/02/The-Waterfall-Model.svg

**Waterfall เป็นโมเดลในการพัฒนาซอฟต์แวร์ที่มีข้อดีและข้อเสียดังนี้**
**ข้อดี:**

1. การวางแผนอย่างละเอียดทำให้เป็นไปได้อย่างมีประสิทธิภาพและมีการควบคุมคุณภาพสูง
2. เหมาะสำหรับโปรเจ็กต์ที่มีขอบเขตและข้อมูลเป็นที่แน่นอน
3. ข้อมูลและเอกสารจะถูกสร้างขึ้นในขั้นตอนการวางแผนและออกแบบ
4. เหมาะสำหรับโครงการที่มีความเชื่อมั่นสูงในการวางแผนและการตัดสินใจ

**ข้อเสีย:**

1. การเปลี่ยนแปลงและการแก้ไขในขั้นตอนต่อไปจะยากและมีค่าใช้จ่ายสูง
2. ไม่เหมาะสำหรับโครงการที่มีความซับซ้อนและความไม่แน่นอนในข้อมูล
3. อาจเกิดความล่าช้าในการออกระบบใช้งานจริง เนื่องจากต้องรอจนกว่าขั้นตอนก่อนหน้าจะเสร็จสมบูรณ์
4. ไม่สามารถปรับปรุงและปรับเปลี่ยนได้ง่าย

การเลือกใช้โมเดล Waterfall หรือไม่ขึ้นอยู่กับลักษณะและขอบเขตของโครงการ โดยโปรเจ็กต์ที่มีขอบเขตและข้อมูลที่แน่นอน และมีความเชื่อมั่นในการวางแผนและการตัดสินใจอาจเหมาะสมกับโมเดล Waterfall. ในทางกลับกัน โครงการที่มีความซับซ้อนและการเปลี่ยนแปลงของข้อมูลบ่อยควรใช้โมเดล Agile

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

1. Requirements analysis (วิเคราะห์ความต้องการ): การรวบรวมความต้องการและเพื่อทำความเข้าใจกับลูกค้าว่าต้องการอะไรและจะมีประโยชน์อย่างไรจากซอฟต์แวร์ที่จะพัฒนา
2. System design (ออกแบบระบบ): การออกแบบระบบและการวางแผนการพัฒนาซอฟต์แวร์ตามความต้องการที่ได้รับ
3. Architectural design (ออกแบบสถาปัตยกรรม): การออกแบบสถาปัตยกรรมของซอฟต์แวร์เพื่อให้สามารถรองรับความต้องการและประสิทธิภาพ
4. Module design (ออกแบบโมดูล): การออกแบบโมดูลของซอฟต์แวร์เพื่อทำให้มีความยืดหยุ่นและสามารถทำงานร่วมกันได้อย่างถูกต้อง
5. Implementation (การสร้างระบบ): การสร้างระบบที่ตอบสนองตามความต้องการ
6. Integration testing (การทดสอบการผสานระบบ): การทดสอบการทำงานร่วมกันของระบบ
7. System testing (การทดสอบระบบ): การทดสอบซอฟต์แวร์ว่ามีประสิทธิภาพตามที่ต้องการหรือไม่
8. Acceptance testing (การทดสอบการยอมรับ): การทดสอบการยอมรับซอฟต์แวร์จากลูกค้า


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

ref: https://en.wikipedia.org/wiki/V-model#/media/File:Systems_Engineering_Process_II.svg

**V-Model มีข้อดีข้อเสียอย่างไร**

**ข้อดีของ V-Model ได้แก่**

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

**ข้อเสียของ V-Model ได้แก่**

1. ไม่สามารถเปลี่ยนแปลงความต้องการของลูกค้าได้ง่าย ๆ ระหว่างขั้นตอนการพัฒนา ซึ่งอาจทำให้มีความล่าช้าในการทำงาน
2. มีการใช้เวลาและทรัพยากรมากขึ้น เนื่องจากต้องมีการทดสอบและตรวจสอบทุกขั้นตอน
3. ไม่เหมาะสมกับโครงการที่มีความซับซ้อนและมีการเปลี่ยนแปลงบ่อย ๆ ในความต้องการของผู้ใช้งาน

**Agile มีหลักการอย่างไร**

Agile เป็นวิธีการพัฒนาซอฟต์แวร์ที่ใช้วิธีการพัฒนาแบบ iterative และ incremental โดยที่การพัฒนาซอฟต์แวร์จะถูกแบ่งออกเป็น Sprint ซึ่งแต่ละ Sprint จะมีการวางแผน พัฒนา ทดสอบ และส่งมอบซอฟต์แวร์ให้กับผู้ใช้ โดยมีหลักการดังนี้

1. ความสำคัญของความเชื่อมั่น (Individuals and interactions over processes and tools) - การสื่อสารและการทำงานร่วมกันของทีมพัฒนาซอฟต์แวร์จะมีความสำคัญกว่าการทำงานตามกระบวนการและใช้เครื่องมือ
2. ความสำคัญของซอฟต์แวร์ที่ทำงานได้ (Working software over comprehensive documentation) - การสร้างซอฟต์แวร์ที่ทำงานได้จะมีความสำคัญกว่าการเขียนเอกสารอธิบายวิธีการทำงานของซอฟต์แวร์
3. ความสำคัญของการทำงานร่วมกัน (Customer collaboration over contract negotiation) - การทำงานร่วมกับลูกค้าเพื่อพัฒนาซอฟต์แวร์ที่ตอบโจทย์ลูกค้าจะมีความสำคัญกว่าการต่อรองเกี่ยวกับเงื่อนไขในสัญญา
4. ความสำคัญของการปรับปรุง (Responding to change over following a plan) - การตอบสนองต่อการเปลี่ยนแปลงและการปรับปรุงซอฟต์แวร์จะมีความสำคัญกว่าการทำตามแผนการพัฒนาเดิมๆ


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/70gaqjmhjo36c277j8nd.png)
ref: https://static.javatpoint.com/tutorial/software-engineering/images/software-engineering-agile-model.png

**ข้อดีข้อเสียของ Agile**

Agile เป็นวิธีการพัฒนาซอฟต์แวร์ที่เน้นการทำงานเป็นกลุ่มและการพัฒนาโดยไม่ต้องไปรองรับกับแผนกลวงๆ ที่ต้องเรียกคืนงบประมาณ โดยมีข้อดีและข้อเสียดังนี้

**ข้อดีของ Agile:**

1. สามารถเปลี่ยนแปลงและปรับปรุงซอฟต์แวร์ได้ง่าย เพราะมีการพัฒนาแบบ iterative หรือเรียกได้ว่าเป็นการพัฒนาซอฟต์แวร์ในแบบ Incremental
2. สามารถสร้างซอฟต์แวร์ที่ตอบโจทย์ลูกค้าได้มากขึ้น เพราะมีการส่งมอบผลงานอย่างสม่ำเสมอและเป็นระยะเวลาสั้นๆ ทำให้ลูกค้าสามารถตรวจสอบและให้ความคิดเห็นได้เร็วขึ้น
3. ทีมพัฒนามีความรับผิดชอบสูงกว่า เนื่องจากทีมมีส่วนร่วมในการตัดสินใจและวางแผนการทำงาน
4. มีความยืดหยุ่นในการทำงาน โดยไม่จำเป็นต้องทำซอฟต์แวร์ตามแผนที่เก็บไว้ตั้งแต่แรก แต่สามารถปรับเปลี่ยนแผนการทำงานได้ตลอดเวลา

**ข้อเสีย Agile**
ความยืดหยุ่นของ Agile ทำให้มีข้อเสียบ้างดังนี้

1. การวางแผนที่ไม่ชัดเจน: เนื่องจากโครงการ Agile มีการเปลี่ยนแปลงบ่อยๆ อาจทำให้การวางแผนที่ไม่สมบูรณ์ โครงการนั้นจึงอาจเสียเวลาและเงินทุนเพิ่มขึ้นในการปรับปรุงแก้ไขโครงการ
2. การบริหารโครงการ: การบริหารโครงการในวงการ Agile ต้องการความสามารถในการควบคุมงานที่ยืดหยุ่นและการควบคุมเวลาในการส่งมอบสินค้าหรือบริการให้กับลูกค้า
3. การพัฒนาทีม: การพัฒนาทีมเป็นเรื่องสำคัญในวงการ Agile ซึ่งต้องการความสามารถในการทำงานร่วมกัน การเรียนรู้ร่วมกันและการแก้ไขปัญหาร่วมกัน
4. การเปลี่ยนแปลง: การเปลี่ยนแปลงบ่อยๆ ทำให้สามารถปรับปรุงและปรับปรุงผลิตภัณฑ์ตามความต้องการของลูกค้าได้ แต่อาจทำให้การบริหารโครงการยากขึ้น

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