Iterative Development
Iterative Development คือ การแบ่งงานเป็น iteration หรือ phase ที่มีเวลาจำกัดประมาณ 2-6 สัปดาห์ โดยจะมีลักษณะเป็น “timeboxed” คือถ้าเราตั้งเวลาเอาไว้เท่าไรจะต้องทำงานให้เสร็จภายในเวลาเท่านั้นห้ามเกิน แต่ถ้าหากทำไม่เสร็จสามารถลดสโครปงานลงแล้วใส่ใน iteration ถัดไปได้ ซึ่งการทำงานแบบ iteration ใช้หลักการในการวางแบบแผนงานก่อนที่จะเริ่มทำ iteration และเป็นการกระจายความเสี่ยงระหว่าง phase แต่ความเสี่ยงยังคงเท่าเดิม
ข้อดีของการทำงานแบบ Iterative
- ทำงานได้สำเร็จมากขึ้นและตัวโปรแกรมมีปัญหาน้อยลง
- จัดการความเสี่ยงได้ตั้งแต่เนิ่นๆ
- ลดความซับซ้อนของตัวระบบ เพราะได้ทำการแบ่งงานเป็นระบบย่อยๆ ทำให้ทำงานง่ายขึ้น
- ได้รับ feedback และการทดลองใช้ได้เร็ว ทำให้ได้ระบบที่ตรงกับความต้องการของผู้ใช้มากขึ้น
ข้อเสียของการทำงานแบบ Iterative
- เกิด Bottle necking คือ ถ้า phase แรกทำงานล่าช้าจะทำให้ขึ้น phase 2ไม่ได้
- มักจะ Over-commitment เพราะการ estimate ทำงานได้ยาก เพราะแต่ละ phase จะเกี่ยวเนื่องต่อกัน
- หลุดจาก end goal ได้ง่าย เพราะทุกคนในทีมจะเน้นไปที่การจบ phase แต่จะยังใช้งานไม่ได้ จะต้องทำให้จบทั้งโปรเจ็คก่อน
Incremental Model
Incremental Model หรือโมเดลแบบก้าวหน้า เป็นโมเดลที่วิวัฒนาการมาจากโมเดล น้ำตก เนื่องจากโมเดลน้ำตกมีข้อเสียตรงที่จะต้องดำเนินการขั้นตอนให้เสร็จสิ้นก่อนจึงจะ ดำเนินการขั้นตอนต่อไป ซึ่งหากเป็นโครงการพัฒนาซอฟต์แวร์ที่มีขนาดใหญ่อาจต้องใช้เวลามาก ทำให้มีความเสี่ยงสูงกับโอกาสที่จะต้องย้อนกลับไปเริ่มต้นโครงการใหม่ทั้งหมด หากมีการวางแผนจัดการที่ไม่ดีพอ หลักการของ Incremental Model คือ การแบ่งระบบงานออกเป็นระบบ ย่อยต่างๆ โดยระบบย่อยเรียกว่า Increment ซึ่งเปรียบเสมือนกับโครงการขนาดเล็ก (Mini-Project) โดยจะทำการพัฒนาระบบงานที่เป็นงานหลักของระบบก่อน จากนั้นจึงพัฒนาต่อเติมในแต่ละ Increment ตามลำดับ จนกระทั่งได้ระบบงานที่เสร็จสมบูรณ์
ขั้นตอนการทำงานของโมเดลแบบก้าวหน้า ประกอบด้วย
- การศึกษาความเป็นไปได้ของระบบ จากนั้นจะทำการตรวจสอบความถูกต้อง ของการศึกษาความเป็นไปได้ เมื่อผลของการศึกษาความเป็นไปได้ของการพัฒนาระบบมีความ เหมาะสมในการพัฒนาระบบก็จะดำเนินการขั้นตอนต่อไป
- การวางแผนและการกำหนดความต้องการ ในขั้นตอนนี้จะทำการวางแผนใน การพัฒนาระบบและกำหนดความต้องการต่างๆ ของระบบ จากนั้นจะทำการตรวจสอบความ ถูกต้องของข้อกำหนดความต้องการ
- ขั้นตอนการออกแบบระบบ (Product Design) โดยแตกระบบเป็นระบบย่อย พัฒนาและตรวจสอบระบบย่อยทีละระบบ ในขั้นตอนนี้จะเกิดความก้าวหน้าของระบบ (Increment) โดยแต่ละรอบของการพัฒนาระบบย่อยประกอบด้วยขั้นตอนการทำ งาน 5 ขั้นตอน และมีทวนซ้ำในแต่ละความก้าวหน้าของระบบย่อย ซึ่งขั้นตอนการทำงานของแต่ละรอบประกอบด้วย
- การออกแบบรายละเอียดของระบบย่อย พร้อมทั้งตรวจสอบความถูกต้อง
- เขียนโปรแกรมและทดสอบโปรแกรมหน่วยย่อยต่างๆ (Unit Testing)
- นำโปรแกรมย่อยต่างๆ มาประกอบรวมกัน (Integration)และตรวจสอบ ความถูกต้องของผลิตภัณฑ์ (Product Verification) ว่าทำงานได้อย่างถูกต้องหรือไม่
- การนำระบบไปใช้งานจะมีการทดสอบระบบ (System Testing)ว่าระบบ ทำงานได้อย่างถูกต้องและเป็นไปตามความต้องการของผู้ใช้หรือไม่
- ขั้นตอนการดำเนินงานและบำรุงรักษา จะเป็นการทบทวนเพื่อตรวจสอบ ความถูกต้อง ว่าระบบตรงตามความต้องการของผู้ใช้หรือไม่ (Revalidation)