What ‘s an AGILE ?
คือการพัฒนา Software แบบที่ไม่ต้องกลัวสภาพแวดล้อม
(Rapid and flexible response to change)
เดิมทีการพัฒนา Software มักจะเป็นขั้นตอนประมาณว่า
- เก็บ Requirements จากลูกค้า + ประเมินความเป็นไปได้ + ประเมิน Resource ที่ต้องใช้
- Design ส่วนต่างๆของ Software ผ่าน Diagram นั่นนู่นนี่
- Implementation หรือจะเรียกว่า Coding ก็ได้ ตาม Design
- Verification ทดสอบและยืนยันสิว่าทำงานถูกต้องตาม Requirement หรือไม่
ขั้นตอนที่กล่าวมา มันเหมาะสมกับ Project ที่มี Requirement ชัดเจน แน่นอนแล้ว ทำตาม Document นั่นแหละ แต่ๆๆๆ ถ้า Project คุณต้องพบเจอกับ
- การเปลี่ยนแปลง Requirement ตลอดเวลา
- User ไม่รู้ว่าตัวเองต้องการอะไร
- User อยากได้ระบบที่ใช้งานได้เร็วที่สุด (ยังไม่ครบฟังก์ชันก็ได้)
- ความสัมพันธ์ในทีมค่อนข้างแย่ (คุยกับ code และ document เท่านั้น)
- ไม่รู้ว่าคนอื่นภายในทีมกำลังทำอะไรกันอยู่
นี่แหละ Agile คือคำตอบ
Agile เป็นรูปแบบหนึ่งในการพัฒนา Software ซึ่งคำแถลงอุดมการณ์แห่งอไจล์ (Agile Manifesto) รุปจะมี 4 ข้อเป็นหลักในการปฏิบัติดังนี้
- ซอฟต์แวร์ที่นำไปใช้งานได้จริง มากกว่าเอกสารที่ครบถ้วนสมบูรณ์
– เน้นความพึงพอใจของลูกค้าที่มีต่อ Software ซึ่งมีคุณภาพตั้งแต่เริ่มจนจบ
– ส่งมอบ Software ที่ใช้งานได้จริงอย่างสม่ำเสมอต่อลูกค้า
- การตอบรับกับการเปลี่ยนแปลง มากกว่าการทำตามแผนที่วางไว้
ยอมรับการเปลื่ยนแปลงความต้องการของลูกค้าแม้ในช่วงท้ายของการพัฒนาเพราะ Agile เข้าใจความต้องการที่เปลี่ยนแปลงได้ตลอดตามสถานการณ์ของลูกค้าในการแข่งขันกับคู่แข่ง
- ร่วมมือทำงานกับลูกค้า มากกว่าการต่อรองให้เป็นไปตามสัญญา
มีการพูดคุยกับฝ่ายลูกค้ากับฝ่ายพัฒนาอย่างสม่ำเสมอเพื่อให้มั่นใจว่าสิ่งที่กำลังทำนั้นเป็นสิ่งที่ฝ่ายลูกค้าต้องการจริงๆ
- คนและการมีปฎิสัมพันธ์กัน มากกว่าการทำตามขั้นตอนและเครื่องมือ
การพูดคุยกันในทีม คือสิ่งสำคัญ เพื่อเป็นการถ่ายทอดข้อมูลให้กันและกัน ว่าใครทำอะไรอยู่ ปัญหาที่พบเจอในทีมคืออะไร โดยเน้นการพูดคุยซึ่งหน้าเป็นสำคัญ
มารู้จักกับ Waterfall ว่าคืออะไร
เปรียบเสมือน การก่อสร้าง ที่ต้องมีการทำงานทีละขั้นตอน ซึ่งหมายความว่าต้องทำในแต่ละขั้นตอนให้เสร็จสมบูรณ์ นักพัฒนาจึงจะเริ่มทำในขั้นตอนต่อไป และนักพัฒไม่สามารถย้อนกลับไปแก้ไขในขั้นตอนที่เสร็จไปแล้วได้ เพราะฉะนั้นการดำเนินงานต้องเป็นไปอย่างระมัดระวังเพราะถ้าหากเกิดข้อผิดพลาดจำเป็นต้องกลับไปที่จุดเริ่มต้น
ขั้นตอนการพัฒนาแบบ Waterfall Model
- Requirement เป็นขั้นตอนในการเก็บความต้องการของผู้ใช้โปรแกรมว่า ผู้ใช้โปรแกรมต้องการโปรแกรมอะไร ทำงานอย่างไร
- Analysis เป็นขั้นตอนในการเอาความต้องการของผู้ใช้มาวิเคราะห์ถึงความเป็นไปได้และความเหมาะสม
- Design ออกแบบการทำงานของ Software ว่าควรเป็นไปในทิศทางใด (เลือกใช้อัลกอริทึม)
- Coding เป็นขั้นตอนของการเขียนโปรแกรมตามที่เราออกแบบมา
- Testing เป็นขั้นตอนในการเอาโปรแกรมที่เขียนเสร็จแล้วมาทำการทดสอบหาข้อผิดพลาด
- Maintenance เป็นขั้นตอนในการดูแลผู้ใช้โปรแกรมว่ามีปัญหาในการใช้งานหรือไม่อย่างไร พร้อมให้คำปรึกษาและรับฟังข้อคิดเห็นเพื่อจะนำมาพัฒนาโปรแกรมในรุ่นถัดไป
ข้อดี
water fall model มีการแบ่งกระบวนการเป็น การนิยามความต้องการ การออกแบบภายนอก การออกแบบภายใน การเขียนโปรแกรม และการทดสอบ แต่ละกระบวนการถูกตัดขาดออกจากกัน ทำให้ง่ายในการควบคุมความคืบหน้าในการพัฒนา พัฒนาระบบได้ตรงตามเวลาที่กำหนด
ข้อเสีย
- ต้องรอให้การออกแบบทั้งหมดเสร็จสมบูรณ์ก่อน จึงจะเริ่มเขียนโปรแกรมได้
- ต้องจัดทำเอกสารมาก ทำให้สิ้นเปลืองเวลา
- ผู้ใช้งานต้องรอให้ระบบงานทั้งหมดเสร็จก่อน จึงจะใช้งานได้ ไม่สามารถนำระบบบางส่วนมาใช้งานก่อน
- เครื่องมือที่ช่วยในการพัฒนาซอฟแวร์ในปัจุบัน มักรวมหลายขั้นตอนเข้าด้วยกัน จึงไม่เหมาะกับการพัฒนาแบบ water fall model
เมื่อคุณควรใช้?
- ทราบตัวจุดหมายที่แน่ชัดว่าในสุดท้ายแล้วจะเป็นอย่างไร
- เมื่อลูกค้าจะไม่ได้มีความสามารถในการเปลี่ยนขอบเขตของโครงการหลังจากที่ได้เริ่ม
- เมื่อเวลาไม่ใช่กุญแจหลักที่จะนำไปสู่ความสำเร็จ
เนื่องจากในปัจจุบัน Waterfall มีข้อเสียเยอะทำให้เกิดข้อเสียมากมายจึงมีการแก้ปัญหานี้โดยการปรับปรุงเป็น New Waterfall Model ดังนี้
จากภาพ Diagram ด้านบนคือการทำงานแบบใหม่ของ New Waterfall Model เป็นการทำงานที่ทุกขั้นตอนเชื่อมถึงกันสามารถแก้ไขได้อยู่เรื่อยๆ เพื่อตอบสนองข้อเสียที่ Waterfall model เคยมี
โดยการทำงานในแต่ละขั้นตอนมีดังนี้
อ้างอิ้ง
http://www.base36.com/2012/12/agile-waterfall-methodologies-a-side-by-side-comparison/
http://hayaak.com/%E0%B9%80%E0%B8%82%E0%B9%89%E0%B8%B2%E0%B9%83%E0%B8%88-agile-%E0%B9%83%E0%B8%99-%E0%B9%84%E0%B8%A1%E0%B9%88%E0%B8%81%E0%B8%B5%E0%B9%88%E0%B8%9A%E0%B8%A3%E0%B8%A3%E0%B8%97%E0%B8%B1%E0%B8%94/
[Software Dev] Agile, Scrum คืออะไรนะ ?