วันพฤหัสบดีที่ 19 มีนาคม พ.ศ. 2552

Agile Software Development

การพัฒนา Software อีกรูปแบบหนึ่ง (เอ้ะทำไมมันเยอะจังนะ เฮ้อ จะจำหมดมั้ยเนี่ย)
Agile Software Development


วิธี การพัฒนาซอฟแวร์แบบ Aglie โดยมากจะเป็นการพยายามลดความเสี่ยง โดยพัฒนาซอฟแวร์ในรูปแบบของ timebox สั้นๆ เรียกว่า iteration ตั้งแต่ 1 ถึง 4 สัปดาห์

แต่ละ iteration เปรียบเสมือน software project ของม้นเองซึ่งประกอบไปด้วย task ต่างๆที่จำเป็นให้เสร็จงาน ซึ่งอาจจะประกอบไปด้วยการ planing, requirements analysis, design, coding, testing, และการทำเอกสาร

agile software project พยายามที่จะ release ซอฟแวร์ออกมาทุกๆ iteration และเมื่อจบแต่ละ iteration จะมีการประเมินผลด้วย

การ ทำงานแบบ agile จะนิยมการติดต่อสื่อสารแบบ realtime คือการคุยกันน่าต่อน่า แทนที่จะเป็นการเขียนเอกสาร โดยทีมงานจะทำงานร่วมกันภายใต้ bullpen ซึ่งประกอบไปด้วยคนที่เกี่ยวข้องกับการทำซอฟแวร์ให้เสร็จ อย่างน้อยได้แก่ programmer และ customer (product manager, business analysts, actual customer) หรืออาจจะรวมถึง tester, interaction designers, technical writers, manager ด้วย

มีการเขียนเอกสารเฉพาะเท่าที่จำเป็นเพื่อให้สามารถติดต่อประสานงานได้

สรุป

เป็น การแบ่ง pharse software โดยทำให้เสร็จทีละ pharse ไป และแต่ละ pharse ก็เปรียบเสมือน project ย่อยๆ ที่มี task ภายในให้ project สำเร็จอันได้แก่ การวางแผนงาน การวิเคราะห์ความต้องการ การออกแบบระบบ การพัฒนาระบบ การตรวจสอบ และการทำเอกสาร แต่ละ pharse จะมี function งานใหม่ๆออกมา

เปรียบเทียบระหว่าง Adaptive และ Predictive

CODE
<--Agile--> <--Iterative--> <--Waterfall-->
<----|-------------|----------------|----->
Adaptive Predictive


ภาพข้างบน แสดงให้เห็นว่า Agile มีความยืดหยุ่นต่อการทำงานมากกว่าวิธีการแบบอื่น

Adaptive methods เป็นวิธีการที่มุ่งเน้นให้สามารถปรับตัวกับการเปลี่ยนแปลงได้รวดเร็ว หาก project มีการเปลี่ยนแปลง ทีมงานก็จะมีการเปลี่ยนแปลงเพื่อให้เข้ากับการเปลี่ยนแปลงนั้นเช่นกัน การทำงานจะมุ่งเน้นที่ปัจจุบันเป็นหลัก

Predictive methods มุ่งเน้นที่การวางแผนงานอนาคตในรายละเอียด สามารถระบุได้ถึงงานและช่วงระยะเวลาที่แน่นอนในอนาคต วิธีการนี้จะยากที่จะรับการเปลี่ยนแปลง แผนงานถูกวางขึ้นสำหรับเป้าหมายเริ่มต้น และหากมีการเปลี่ยนเป้าหมาย หมายถึงต้องเริ่มใหม่ทั้งหมด ซึ่งวิธีนี้จะมีการทำ chang control board เพื่อป้องกันการเปลี่ยนแปลง

ความแตกต่างกับ waterfall model

การ ทำงานแบบ waterfall model จะต้องรอให้แต่ละระบบเสร็จสิ้นงานครบถ้วนและจึงมีการทำ integration test ในแต่ละ cycle และหากระบบมีขนาดใหญ่หรือมีความซับซ้อนมากๆ จะต้องใช้ความพยายามในการทดสอบการเชื่อมต่อกันระหว่างระบบกันเป็นอย่างมาก และเป็นเหตุผลหนึ่งที่ทำให้ project fail เนื่องจากแต่ละระบบย่อยๆไม่สามารถเชื่อมต่อการทำงานกันได้จริง

ส่วน agile จะเป็นการทำงานแบ่ง pharse โดยจำกัด feature และ function งานไว้ เมื่อจบงานใน pharse สั้น ก็จะมีการเชื่อมต่อกันระหว่างระบบในบาง feature หรือ function งานเท่านั้น ทำให้ระยะเวลาการทดสอบน้อย และความเสี่ยงต่อการผิดพลาดน้อยกว่ามาก อีกทั้งเมื่องานเสร็จสิ้นก็นำระบบไปใช้จริงเป็นการทดสอบระบบจริงก่อนที่จะมี การเชื่อ
มต่อแบบเต็มทีต่อไป

บางทีมที่ใช้การพัฒนาซอฟแวร์แบบ agile ก็ใช้ waterfall model ในระดับเล็กๆ ทำวนๆกันๆไป

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
timebox คือช่วงระยะเวลาที่จะทำงานให้เสร็จ task โดยวันสิ้นสุดจะไม่ถูกเลื่อนเด็ดขาด แต่หากทีมงานไม่สามารถทำงานให้เสร็จได้ตาม deadline ที่กำหนดแสดงว่า task นั้น fail ซึ่งจะ cancel หรือ rescheduled ก็ได้

บางกรณีก็สามารถให้ทีมงานสามารถปรับเปลี่ยนขอบเขตการทำงานเพื่อให้เสร็จตาม deadline ได้

ที่มา http://www.narisa.com/blog/bomber/index.php?&st=10
เวบนี้เป็น blog ของพี่ bomber มีสาระเยอะดีครับ