การพัฒนาซอฟต์แวร์แบบเอจายล์ (Agile Software Development) เป็นรูปแบบหนึ่งของวิธีพัฒนาซอฟต์แวร์ ที่คำนึงถึงความยืดหยุ่น และปรับเปลี่ยนได้ตามความต้องการของผู้พัฒนา โดยมีการแบ่งช่วงการทำงานออกเป็นระยะสั้น ๆ ซึ่งการใช้เทคนิค Agile อาจจะต้องมีการเปลี่ยนแปลงทางวัฒนธรรมภายในองค์กร (Cultural Shift) เสียก่อน เพราะวิธีการนี้เน้นการส่งมอบส่วนประกอบย่อยของซอฟต์แวร์ที่ใช้งานได้ก่อน มากกว่าการโฟกัสที่ภาพรวมของทั้งโปรแกรม
ปัจจุบันนี้ การพัฒนาซอฟต์แวร์ Agile ได้กลายเป็นหนึ่งในวิธีที่นิยมมากที่สุดในการพัฒนาซอฟต์แวร์ แทนที่วิธีการเดิมอย่าง Waterfall ที่เคยนิยมกันมา อย่างไรก็ตาม ตัว Agile เองก็อาจจะถูกแทนที่ด้วย DevOps ซึ่งกำลังได้รับความนิยมเพิ่มมากขึ้นในปัจจุบัน
ข้อดีของการพัฒนาซอฟต์แวร์แบบ Agile (เอจายล์) คือ ช่วยให้ทีมสามารถทำงานร่วมกันได้อย่าง "คล่องตัว" เพราะตามปกติแล้ว ในขั้นตอนการพัฒนาอาจมีความเปลี่ยนแปลงเกิดขึ้นอยู่ตลอดเวลา ซึ่งกระบวนการทำงานแบบ Agile สามารถปรับเปลี่ยนขั้นตอนการพัฒนาได้ง่ายกว่ามาก
นอกจากนี้ การพัฒนาซอฟต์แวร์แบบ Agile ยังส่งเสริมวัฒนธรรมการทำงานร่วมกันภายในองค์กร เพราะทีมต่าง ๆ จะได้ทำงานร่วมกัน และเข้าใจบทบาทของตัวเองมากขึ้น สุดท้าย บริษัทที่การพัฒนาซอฟต์แวร์แบบ Agile ในการพัฒนาซอฟต์แวร์ สามารถมั่นใจได้ว่าจะได้ซอฟต์แวร์ที่มีคุณภาพ เพราะเนื่องจากมีการทดสอบอยู่ตลอดทุกขั้นตอนของการพัฒนา ซึ่งทำให้สามารถปรับเปลี่ยนแก้ไขได้รวดเร็ว และยังช่วยแจ้งเตือนทีมงานถึงปัญหาที่อาจจะเกิดขึ้นได้
ภาพจาก : https://workforce.caspercollege.edu/training-programs/full-stack-software-developer/
วงจรการพัฒนาซอฟต์แวร์แบบ Agile เป็นที่นิยมมากในปัจจุบัน เนื่องจากเน้นความคล่องตัว ปรับตัวได้ตามความต้องการ และส่งมอบซอฟต์แวร์ที่ใช้งานได้จริงให้กับลูกค้าอย่างต่อเนื่อง เราลองมาทำความรู้จักกับแต่ละขั้นตอนของวงจรนี้กัน
วางแผนก่อนลงมือทำ ขั้นตอนแรกคือการมองหาโอกาสทางธุรกิจที่ซอฟต์แวร์ตัวใหม่จะช่วยตอบโจทย์ ทีม ประเมินทั้งระยะเวลา ทีมงาน และทรัพยากรที่จำเป็นสำหรับการพัฒนา จากนั้นจึงนำข้อมูลเหล่านี้มาพิจารณาความคุ้มค่า ความเป็นไปได้ทางเทคนิค และเศรษฐศาสตร์ เพื่อเลือกโปรเจคที่เหมาะสมที่สุด
ปูพื้นฐานสู่การพัฒนา เมื่อได้แนวคิดที่ชัดเจนแล้วขั้นตอนต่อมาคือการจัดตั้งทีมหาเงินทุนสนับสนุน และหารือความต้องการเบื้องต้นกับลูกค้า ขั้นตอนนี้สำคัญมากเพราะเป็นการวางรากฐานให้ทีมและลูกค้าเข้าใจตรงกัน รวมถึงการสร้างตารางเวลาที่ชัดเจน กำหนดช่วงเวลาการทำงานแต่ละรอบ (Sprint) โดยแต่ละ sprint จะมีเวลาประมาณ 2-4 อาทิตย์ เป้าหมายของแต่ละ sprint คือการมีซอฟต์แวร์ที่ใช้งานได้เบื้องต้น ทีมจะนำฟีเจอร์ที่สำคัญที่สุดมาพัฒนาให้เสร็จก่อน
ลงมือพัฒนาจริงหลังจากวางแผน และเตรียมการเสร็จ ถึงเวลาลงมือสร้างซอฟต์แวร์ ในขั้นตอนนี้ ทีมจะเริ่มเขียนโปรแกรม, ออกแบบระบบ และทดสอบคุณภาพ โดยอาศัยความต้องการที่ได้รับมา รวมถึง Feedback จากลูกค้าอย่างต่อเนื่อง วงจรการพัฒนาแบบ Agile จะแบ่งเป็นรอบย่อย ๆ (Iteration) แต่ละรอบจะต่อยอดกันไป โดยนำสิ่งที่เรียนรู้จากรอบที่ผ่านมาปรับปรุง และพัฒนาซอฟต์แวร์ให้ดียิ่งขึ้น
ส่งมอบซอฟต์แวร์เวอร์ชันใหม่ เมื่อสิ้นสุดแต่ละ sprint ทีมจะนำเสนอซอฟต์แวร์ที่พัฒนาเสร็จในรอบนั้นให้กับลูกค้า ขั้นตอนนี้จะมีการทดสอบคุณภาพครั้งสุดท้าย, แก้ไขปัญหาที่พบ, ปรับเอกสารคู่มือ และสุดท้ายคือการปล่อยซอฟต์แวร์เวอร์ชันสุดท้าย (Final) ออกไปใช้งานจริง
ดูแล และให้บริการหลังจากปล่อยใช้งานแล้ว ทีมจะเข้าสู่ขั้นตอนการดูแลรักษาซอฟต์แวร์ แก้ไขปัญหาที่ผู้ใช้พบเจอ รวมถึงการสอนผู้ใช้ให้สามารถใช้งานซอฟต์แวร์ได้อย่างมีประสิทธิภาพ ขั้นตอนนี้จะกินเวลาไปจนกว่าจะยุติการสนับสนุน หรือยุติการใช้งานซอฟต์แวร์
เมื่อซอฟต์แวร์นั้นล้าสมัยไม่ตอบโจทย์ความต้องการอีกต่อไป หรือมีการพัฒนาเวอร์ชันใหม่ที่ดียิ่งขึ้น ก็จะถึงเวลาที่ต้องยุติการใช้งานระบบ ขั้นตอนนี้รวมไปถึงการแจ้งลูกค้า, ย้ายข้อมูล และยุติการใช้งานระบบอย่างปลอดภัย โดยทั่วไปจะทำเมื่อต้องเปลี่ยนระบบใหม่ หรือระบบล้าสมัย
ภาพจาก : https://www.techtarget.com/searchsoftwarequality/definition/agile-software-development
หัวใจสำคัญของวงจร Agile คือการทำงานร่วมกันระหว่างทีมพัฒนา และลูกค้า การปรับตัวได้ตามความต้องการที่เปลี่ยนแปลงไป และการส่งมอบคุณค่าให้กับลูกค้าอย่างต่อเนื่อง โดยแบ่งงานเป็นชิ้นเล็ก ๆ เพื่อทำงานเป็นรอบย่อย ๆ และรับฟัง Feedback อยู่เสมอ ทำให้ซอฟต์แวร์ที่ได้ตรงใจผู้ใช้งาน ตอบโจทย์ธุรกิจ และสามารถปรับเปลี่ยนไปตามยุคสมัยได้
ในปี ค.ศ. 2001 (พ.ศ. 2544) บุคลากรที่เชี่ยวชาญด้านการพัฒนาซอฟต์แวร์จำนวน 17 คน ได้มารวมตัวกันเพื่อหารือเกี่ยวกับแนวคิดการพัฒนาซอฟต์แวร์ที่มีขนาดเล็ก ซึ่งนำไปสู่การสร้างประกาศของ Agile หรือว่า Agile Manifesto ซึ่งได้ระบุคุณค่าหลักทั้ง 4 ประการของ Agile แม้ว่าจะมีการถกเถียงกันว่า Agile Manifesto มีประโยชน์น้อยลงแล้วหรือไม่ ? แต่มันก็ยังคงเป็นหัวใจสำคัญของแนวทางการพัฒนาซอฟต์แวร์แบบ Agile อยู่ดีซึ่งประกอบไปด้วย
ภาพจาก : https://www.linkedin.com/pulse/what-4-principles-agile-chicago-management-training-instit-kmacf/
การทำงานร่วมกันเป็นทีมสำคัญกว่าแค่ทำตามกฎ หรือใช้เครื่องมือที่เหนือชั้น ทีมต้องปรับตัวได้ตามความต้องการของลูกค้า กระบวนการที่ยุ่งยากซับซ้อนจะทำให้ตอบสนองลูกค้าได้ช้าลง
Agile เน้นสร้างซอฟต์แวร์ที่ใช้งานได้จริง แทนที่จะมัวเสียเวลาเขียนเอกสารเป็นจำนวนมาก แม้เอกสารก็ยังมีความจำเป็น แต่การพัฒนาซอฟต์แวร์ Agile จะเน้นเฉพาะเอกสารที่จำเป็นต่อการทำงานจริง ๆ เท่านั้น
Agile เน้นทำงานร่วมมือกับลูกค้า แทนที่จะมานั่งต่อรองกัน ลูกค้าจะได้มีส่วนร่วมตลอดทั้งโปรเจค ไม่ใช่แค่ตอนเริ่ม และจบ ทำให้ทีมพัฒนาเข้าใจความต้องการลูกค้าได้ชัดเจน เช่น ลูกค้าอาจจะมาร่วมทดสอบตัวอย่างซอฟต์แวร์เป็นระยะ ๆ หรือเข้าร่วมประชุมทีมเพื่อให้แน่ใจว่าโปรเจคตรงตามความต้องการ
การพัฒนาซอฟต์แวร์ Agile พร้อมรับการเปลี่ยนแปลง เพราะมันช่วยให้ปรับปรุงโปรเจค และเพิ่มคุณค่าให้กับซอฟต์แวร์ได้ Agile แบ่งการทำงานเป็นรอบย่อย ๆ ทำให้การเปลี่ยนแปลงทำได้ง่าย ทีมสามารถปรับกระบวนการทำงานให้เหมาะกับตัวเองได้
ในประกาศของการพัฒนาซอฟต์แวร์ Agile ยังระบุหลักการสำคัญ 12 ประการสำหรับกระบวนการพัฒนาไว้ด้วย
เป้าหมายของทุกวิธีการ Agile คือ การยอมรับและปรับตัวต่อการเปลี่ยนแปลง ในขณะเดียวกันก็ส่งมอบซอฟต์แวร์ที่ใช้งานได้อย่างมีประสิทธิภาพสูงสุด แต่ละวิธีการนั้นมีความแตกต่างกันในการกำหนดขั้นตอนการพัฒนาซอฟต์แวร์ วิธีการ Agile ที่ใช้กันอย่างแพร่หลายมากที่สุด มีดังนี้
Scrum เป็นวิธีการจัดการโปรเจคแบบ Agile ที่คล่องตัว และใช้งานง่าย ผู้จัดการโครงการสามารถนำวิธีการนี้ไปใช้เพื่อควบคุมโปรเจคต่างๆ ที่แบ่งเป็นรอบย่อย ๆ และมีการปรับเปลี่ยนเพิ่มขึ้นเรื่อย ๆ
Scrum เน้นการทำงานเป็นทีม เจ้าของผลิตภัณฑ์จะสร้างรายการสิ่งที่ต้องทำ (Product Backlog) ซึ่งเป็นเหมือนลิสต์รายการต่าง ๆ ที่ต้องทำเพื่อสร้างซอฟต์แวร์ที่ใช้งานได้สำเร็จ รายการนี้จะรวมไปถึงการแก้ไขบั๊ก (Bug) เพิ่มฟีเจอร์ใหม่ ๆ และข้อกำหนดอื่น ๆ ที่จำเป็น ทีมงานจะร่วมกันพิจารณา และจัดลำดับความสำคัญของแต่ละอย่างในรายการ
เมื่อทีม และเจ้าของผลิตภัณฑ์เห็นตรงกันเรื่องลำดับความสำคัญแล้ว ทีมที่ประกอบด้วยผู้เชี่ยวชาญหลากหลายสาขาจะมารับช่วงต่อ โดยทุกคนจะร่วมมือกันสร้างซอฟต์แวร์ทีละส่วน (Sprint) ซึ่งแต่ละส่วนมักจะใช้เวลาประมาณ 30 วัน หลังจากจบแต่ละ Sprint ทีมจะนำรายการ Product Backlog มาทบทวน ปรับเปลี่ยนลำดับความสำคัญอีกครั้ง เพื่อเลือกสิ่งที่จะทำต่อใน Sprint ถัดไป
Scrum ได้รับความนิยมมากเพราะว่าใช้งานง่าย ช่วยให้ทำงานได้อย่างมีประสิทธิภาพ และสามารถปรับใช้ร่วมกับวิธีการ Agile อื่น ๆ ได้อีกด้วย
เป็นอีกวิธีการพัฒนาซอฟต์แวร์แบบแบ่งเป็นรอบย่อย ๆ ที่เน้นให้ทีมทำงานร่วมกันเพื่อส่งมอบงานให้กับลูกค้า Lean มีความยืดหยุ่น และปรับเปลี่ยนไปตามสถานการณ์ ไม่มีกฎตายตัว โดยหลักการสำคัญของ Lean Software Development นั่นก็คือ การเรียนรู้เพิ่มเติมอยู่เสมอ , เสริมสร้างพลังให้ทีม , ทำงานด้วยความซื่อสัตย์ , ลดความสูญเปล่า , เข้าใจภาพรวม , ตัดสินใจช้าที่สุดเท่าที่จำเป็น และส่งมอบผลิตภัณฑ์ให้เร็วที่สุด
Lean เน้นการรับฟังความคิดเห็นจากลูกค้า และโปรแกรมเมอร์อย่างรวดเร็ว เพื่อให้กระบวนการพัฒนาซอฟต์แวร์รวดเร็ว และมีประสิทธิภาพ แทนที่จะมีผู้สั่งงานเบอร์ใหญ่ Lean จะมอบอำนาจการตัดสินใจให้กับทีมงานขนาดเล็ก เพื่อลดความสูญเปล่า Lean จะให้ผู้ใช้เลือกฟีเจอร์ที่จำเป็นจริง ๆ สำหรับระบบ จัดลำดับความสำคัญ แล้วค่อย ๆ พัฒนา และส่งมอบงานเป็นชุดเล็ก ๆ
Lean ยังสนับสนุนให้เขียนโปรแกรมทดสอบ (Unit test) ควบคู่ไปกับการเขียนโค้ด เพื่อให้แน่ใจว่าทุกคนในทีมทำงานได้อย่างมีประสิทธิภาพสูงสุด
เป็นวิธีการพัฒนาซอฟต์แวร์แบบมีวินัยเน้นความรวดเร็ว และการส่งมอบงานอย่างต่อเนื่อง XP ส่งเสริมให้ลูกค้ามีส่วนร่วมมากขึ้น ได้รับ Feedback กลับมาเร็ว มีการวางแผน และทดสอบอย่างต่อเนื่อง ทำงานเป็นทีมอย่างใกล้ชิด โดยจะส่งมอบซอฟต์แวร์ค่อนข้างถี่ ทุก ๆ 1-3 อาทิตย์ เป้าหมายคือเพื่อให้ซอฟต์แวร์มีคุณภาพดี และตอบสนองต่อความต้องการของลูกค้าที่อาจมีการเปลี่ยนแปลงได้
หัวใจสำคัญของ XP คือ การสื่อสาร, การรับฟังฟีดแบ็ค, ความเรียบง่าย และความกล้าที่จะลองสิ่งใหม่ ลูกค้าจะทำงานร่วมกับทีมพัฒนา เพื่อกำหนด และจัดลำดับความสำคัญของฟีเจอร์ต่าง ๆ ที่ต้องการ แต่เป็นหน้าที่ของทีมที่จะต้องพัฒนาฟีเจอร์ที่สำคัญที่สุด ให้เป็นซอฟต์แวร์ที่ใช้งานได้จริง และผ่านการทดสอบในแต่ละช่วง XP เป็นวิธีการที่ช่วยให้ทีมทำงานได้อย่างมีประสิทธิภาพ โดยมีกรอบการทำงานที่ยืดหยุ่น ช่วยให้มั่นใจได้ว่าจะได้ซอฟต์แวร์คุณภาพสูงออกมานั่นเอง
Crystal เป็นวิธีการพัฒนาซอฟต์แวร์แบบ Agile ที่ยืดหยุ่น และปรับเปลี่ยนได้ตามความต้องการของแต่ละโปรเจคมากที่สุด Crystal เน้นที่คน และการทำงานร่วมกันภายในทีม โดยคำนึงถึงความสำคัญของระบบที่กำลังพัฒนา Crystal เข้าใจว่าแต่ละโปรเจคมีความแตกต่างกัน ดังนั้น Crystal จึงไม่ได้มีกฎตายตัว แต่จะมีแนวทางย่อย ๆ อย่าง Crystal Orange, Crystal Clear และ Crystal Yellow ซึ่งแต่ละแนวทางก็จะมีจุดเด่นที่ต่างกัน ขึ้นอยู่กับความสำคัญของโปรเจค ขนาดของทีม และความซับซ้อนของระบบ
เหมือนกับวิธีการ Agile อื่น ๆ Crystal เน้นการส่งมอบซอฟต์แวร์ที่ใช้งานได้บ่อยครั้ง ให้ลูกค้ามีส่วนร่วม, ปรับเปลี่ยนได้ตามสถานการณ์ และลดขั้นตอนที่ไม่จำเป็น หัวใจสำคัญของ Crystal คือ การสื่อสาร การทำงานเป็นทีม และความเรียบง่าย
Kanban เป็นวิธีการจัดการกระบวนการทำงานแบบ Agile ที่เน้นให้มองเห็นภาพรวมได้ง่าย ช่วยให้ทีมบริหารการสร้างผลิตภัณฑ์ได้อย่างคล่องตัว โดยยังคงส่งมอบงานได้อย่างต่อเนื่อง ลดความเครียดในกระบวนการพัฒนาซอฟต์แวร์ Kanban ได้รับความนิยมในกลุ่มทีมที่ใช้ Lean software development ด้วย
Kanban มีหลักการพื้นฐาน 3 ข้อ:
คล้ายกับ Scrum เทคนิค Kanban ถูกออกแบบมาเพื่อให้ทีมทำงานร่วมกันได้อย่างมีประสิทธิภาพ Kanban เน้นการทำงานร่วมมืออย่างต่อเนื่อง และพยายามปรับกระบวนการทำงานให้ดีที่สุด เพื่อส่งเสริมการเรียนรู้และพัฒนาอย่างต่อเนื่องภายในทีม
DSDM (Dynamic Systems Development Method) เป็นวิธีการพัฒนาซอฟต์แวร์ที่เน้นความรวดเร็ว ถูกสร้างขึ้นมาเพื่อตอบสนองความต้องการกรอบการทำงานกลางในอุตสาหกรรม DSDM มีหลักการสำคัญ 8 ข้อ ซึ่งการละเลยข้อใดข้อหนึ่งอาจส่งผลต่อความสำเร็จของโปรเจค หลักการเหล่านี้มีดังนี้
DSDM ยอมรับว่าการแก้ไขงานเป็นเรื่องปกติ และทุกการเปลี่ยนแปลงควรสามารถย้อนกลับได้ ความสำคัญของระบบจะถูกแบ่งตามกฎ MoSCoW ดังนี้
ภาพจาก : https://www.techtarget.com/searchsoftwarequality/definition/MoSCoW-method
ใน DSDM ไม่ใช่ทุกความต้องการที่จะเป็นสิ่งสำคัญ แต่ละรอบการพัฒนา ควรมีพื้นที่สำหรับฟีเจอร์ที่สำคัญน้อยกว่า เพื่อให้ทีมสามารถโฟกัสกับฟีเจอร์ที่มีความสำคัญสูงก่อนได้อย่างเต็มที่
เป็นวิธีการพัฒนาซอฟต์แวร์ที่ผสมผสานแนวคิดที่ดีที่สุดของวิศวกรรมซอฟต์แวร์ เช่น การพัฒนาตามฟีเจอร์, การมอบหมายเจ้าของโค้ด และการสร้างโมเดลของระบบ เพื่อให้เกิดกระบวนการทำงานที่สั้น มีการสร้างโมเดล และทำงานร่วมกันได้อย่างราบรื่น
FDD เริ่มต้นด้วยการกำหนดภาพรวมของโมเดล ซึ่งจะช่วยสร้างรายการฟีเจอร์ต่าง ๆ จากนั้น FDD จะแบ่งการทำงานเป็นรอบย่อย ๆ โดยแต่ละรอบใช้เวลาประมาณ 2 อาทิตย์ เน้นการวางแผน, ออกแบบ และสร้างฟีเจอร์ทีละฟีเจอร์ ถ้าฟีเจอร์ไหนใช้เวลานานเกิน 2 อาทิตย์ ก็ควรจะแบ่งฟีเจอร์นั้นออกเป็นฟีเจอร์ที่เล็กกว่า
จุดเด่นของ FDD คือความสามารถในการปรับขนาดให้เหมาะสมกับทีมงานได้ ไม่ว่าจะเป็นทีมขนาดเล็กหรือใหญ่ โดยอาศัยแนวคิด "Just Enough Design Initially (JEDI)" ซึ่งหมายความว่า ไม่จำเป็นต้องออกแบบทุกอย่างลงรายละเอียดตั้งแต่แรก ออกแบบให้พอดีต่อการเริ่มต้นการพัฒนา แล้วค่อย ๆ ออกแบบเพิ่มเติมไปทีละน้อย
การพัฒนาโปรแกรมแบบ Agile เป็นแนวทางที่เน้นความยืดหยุ่น และการส่งมอบผลิตภัณฑ์เป็นชิ้น ๆ เพื่อให้สามารถปรับเปลี่ยน และแก้ไขปัญหาได้อย่างรวดเร็ว ประโยชน์ของ Agile ได้แก่ การเพิ่มประสิทธิภาพในการทำงานร่วมกัน และการส่งมอบผลิตภัณฑ์คุณภาพสูงที่ผ่านการทดสอบอย่างต่อเนื่อง
แนวทาง Agile ช่วยเพิ่มความคล่องตัวและประสิทธิภาพในการพัฒนา แต่ก็ต้องการการบริหารจัดการที่ดีเพื่อไม่ให้เกิดความเครียด และปัญหาจากการส่งมอบงานในระยะเวลาสั้นๆ
|