วันพฤหัสบดีที่ ๑ พฤศจิกายน พ.ศ. ๒๕๕๐

ทีนี่ถึงคราวของ Agile

อาจารย์ได้เกริ่นนำว่าสัปดาห์หน้าจะนำเสนอเรื่อง Agile ผมทดลองค้นหา keyword คำว่า Agile ดูปรากฏว่ามีคนพูดถึงเรื่องนี้กันมากพอสมควร เพื่อเป็นการไม่ให้เสียเวลาเปล่าเมื่อค้นหาเจอจึงขอเขียนใน blog เพื่อจะได้ไม่ลืมและเพื่อได้ถ่ายทอดไปยังลูกศิษย์และเพื่อน ๆ ตลอดจนผู้อ่านด้วย

Agile เป็น Software Development Modelling อีกโมเดลหนึ่งในหลาย ๆ โมเดลที่มีเป้าหมายในด้านความ "รวดเร็ว ยืดหยุ่น พร้อมรับกับความเปลี่ยนแปลง" พยายามลดความเสี่ยงของการพัฒนาซอฟต์แวร์ โดยการทำ Time box สั้น ๆ เรียกว่า iteration ซึ่งได้กล่าวไว้แล้วในเรื่อง extreme programming การพัฒนาโดยใช้โมเดลนี้จะต้องทำไปเรื่อย ๆ ไม่ต้องหยุดแม้มีอะไรมากระทบ เมื่อมีการเปลี่ยนแปลงสามารถเปลี่ยนแปลงได้อย่างรวดเร็ว ทีมพัฒนาจะต้องมีพูดคุยสื่อสารกันมากกว่าการใช้เครื่องมือ การทำงานจะยึดที่ผลที่ได้หมายถึงซอฟต์แวร์เป็นหลัก ให้ความสำคัญกับความพึงพอใจของลูกค้า ส่งมอบซอฟต์แวร์อย่างต่อเนื่อง และยอมรับข้อกำหนดที่เปลี่ยนแปลง ผู้ใช้หรือลูกค้าและทีมพัฒนาต้องทำงานร่วมกัน โปรแกรมเมอร์ไปทำงานที่ site ของลูกค้าและต้องเจอทุกวันจนงานจะแล้วเสร็จ ให้ใช้พูดกันต่อหน้า ไม่ต้องใช้โทรศัพท์หรืออีเมล์ การทำงานต้องปล่อยให้ทีมพัฒนาตัดสินใจเองได้

Agile Methodologies

  • Agile UP
  • XP (eXtreme Programming)
  • FDD (Feature Driven Development)
  • Scrum

เทคนิคการพัฒนาแบบ Agile

  • Agile model driven development(AMDD)
  • Code Refactor เป็นการแก้ไขคำสั่งซอฟต์แวร์เดี่ยวนั้นและ design เปลี่ยนเอง
  • Pair Programming (อ่านในตอนที่แล้ว)
  • Test Driven Development(TDD)เป็นเทคนิคการเขียน test case ก่อนที่จะเขียนชุดคำสั่ง

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

๒ ความคิดเห็น:

Unknown กล่าวว่า...

ผมสนใจเรื่องFeature-Driven Development(FDD)กำลังศึกษาอยู่ครับ ท่านอาจารย์ช่วยแนะนำให้หน่อยครับผม
ขอบพระคุณอย่างสูงครับ

thai-diy กล่าวว่า...

ต้องตอบกันยาวพอสมควร ครับ

ผมจะพยายามอธิบายด้วยภาษาที่ไม่เป็นวิชาการมากนักนะครับ

เริ่มจากต้องเข้าใจว่าเมื่อเราจะรับจ้างพัฒนาซอฟต์แวร์ใด ๆ ให้กับผู้ว่าจ้าง สิ่งที่เราเรียนมาในแบบดั้งเดิมที่เขาใช้กันคือ วงจรการพัฒนาซอฟต์แวร์หรือ SDLC จะใช้โมเดลของ water fall ที่มี 6-7 ขั้นตอน(บางตำรา)ได้แก่ 1. ศึกษาความเป็นไปได้เบื้องต้น 2. วิเคราะห์ 3. ออกแบบ 4. พัฒนา 5. นำไปปฏิบัติ นำไปใช้ 6. ทดสอบ บำรุงรักษา (อย่าเอาไปอ้างอิงเพื่อตอบข้อสอบ)
โมเดลที่กล่าวมานี้ มีนักคอมพิวเตอร์เขามองว่ายังไม่ใช่คำตอบที่ดีที่สุด จึงได้มีโมเดลที่เขาลองปฏิบัติหรือสร้างขึ้นมาใหม่เรื่อย ๆ แม้แต่ agile ก็ยังมีคนบอกว่ายังไม่ดีที่สุด ยังพยายามคิดไปได้เรื่อย ๆ

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

จะเห็นว่ากระบวนการศึกษา Business logic ของ Agile ให้ความสำคัญสูงมาก ซึ่งจากประการณ์ของนักโปรแกรมเมอร์ทั่ว ๆ ไปจะเจอปัญหาเหมือน ๆ กันคือ ต้องแก้ไขโปรแกรมกันอยู่เรื่อย ๆ และเสียเวลากับในเรื่องดังกล่าวมาก

รายละเอียดศึกษาเพิ่มเติมจากลิงค์ด้านล่างนะครับ

http://en.wikipedia.org/wiki/Feature_Driven_Development

และที่ลิงค์ของ Agile โดยตรงครับ

http://www.agilemodeling.com/essays/fdd.htm