วันพฤหัสบดีที่ 24 กรกฎาคม พ.ศ. 2557

พัฒนาการกับวิธีพัฒนาซอฟท์แวร์สำหรับปัจจุบันและอนาคต

Agile Method

การพัฒนาซอฟต์แวร์
แบบ Agile (อไจล์) เป็นแนวคิดใหม่สำหรับการพัฒนาซอฟต์แวร์ที่ ให้งานสั้นลง 
ประหยัดเวลา และประหยัดงบประมาณอาจจะใช้คำใกล้เคียงคือการลองผิดลองถูกอย่างมีวินัย 
เพราะในวิธีที่เคยศึกษากันมาจะมีขั้นตอนอย่างละเอียดในการดำเนินการพัฒนาซอฟต์แวร์
ใช้เวลายาวนานหลายเดือน แต่ Agile ใช้เวลาแค่ 2-4 สัปดาห์ วิธีการพัฒนาซอฟท์แวร์แบบ Agile 
จะเน้นเรื่องการสื่อสารแบบตัวต่อตัว มากกว่าการใช้เอกสาร ทีมงานอย่างน้อยต้องประกอบด้วยโปรแกรมเมอร์กับลูกค้าจะกำหนดขอบเขตของระบบงาน เน้นให้พัฒนาซอฟต์แวร์มีความก้าวหน้าและเป็นไปตามมาตรฐานที่ได้วางไว้ ร่วมกันกับการสื่อสารกับลูกค้า ซึ่งจะมีเอกสารที่เกี่ยวข้องไม่มากนัก

กรณีศึกษาใช้ Agile Method

Scrum
Scrum เป็นรูปแบบการจัดการแบบที่แต่ละคนต่างผลักดันซึ่งกันและกันสามารถนำไปปรับ ใช้ในการบริหารจัดการและควบคุมทั้งโครงงานแบบทำซ้ำและแบบเพิ่มราย ละเอียดในแต่ละขั้นตอน การพัฒนาแบบ Scrum ผู้ใช้ระบบจะต้องทำงานร่วมกับทีมพัฒนาอย่างใกล้ชิด เพื่อที่จะระบุและจัดลำดับความสำคัญก่อนหลังของหน้าที่ของระบบ แล้วเก็บรวบรวมไว้ในรูปแบบที่เรียกว่า Product Backlog ข้อมูลที่อยู่ภายใน Product Backlog ประกอบด้วยลักษณะเด่น การแก้ไขข้อผิดพลาดต่างๆ และความต้องการของผู้ใช้ในส่วนอื่น ๆ เป็นต้น การส่งมอบงานของวิธี scrum จะเป็นชิ้นงานที่ทำงานได้บางส่วนที่เกิดจากการแบ่งงานทั้งงานออกเป็นส่วน ย่อยๆ โดยระยะเวลาระหว่างการส่งมอบงานจะอยู่ในช่วงประมาณ 30 วัน  ดังนั้น Scrum จึงเป็นกระบวนการพัฒนาที่อยู่บนพื้นฐานของ Sprint หมายถึงวิธีการที่ให้เราทำงานเป็นช่วง ๆ คือ ออมแรงไว้ก่อน แล้ว sprint เป็นช่วงๆตามหลักการ คือ 2-4 สัปดาห์

Scrum ประกอบไปด้วยสาระสำคัญ 3 อย่างคือ

1. ทีมงาน มีลักษณะที่สำคัญ 3 ประการคือ

- Scrum Team คือกลุ่มบุคคลที่ปฏิบัติงานจริงประมาณ  5 - 9 คน  แต่ละคนไม่ได้กำหนดงานตายตัว สามารถทดแทนกันได้เสมอ นอกจากนี้แต่ละคนในทีมงานมีหน้าที่ประเมินเวลาของงานที่ต้องทำ แบ่งงานและส่งงานกันเอง
 - Product Owner คือผู้ที่ทำหน้าที่จัดการเรื่อง product backlog   คิด รวบรวม เผยแพร่ให้ทุกคนรับรู้ ได้เห็น เพื่อให้คนในทีมเห็นแนวปฏิบัติในอนาคตว่ามีงานอะไรบ้าง ซึ่งบุคคลคนนี้จะเป็นคนเขียนรายละเอียดและความต้องการของผู้ใช้ด้วย
- Scrum Master คือผู้ที่ทำหน้าที่ดูแลทีมงาน เป็นโค้ชของทีมงาน เป็นคนที่รับ ผิดชอบคุณภาพของผลงาน จัดลำดับความสำคัญของงาน แตกงานให้ที่ประชุมตัดสินใจตามความเหมาะสม

2. กระบวนการทำงาน มีลักษณะที่สำคัญ 3 ประการคือ

- Backlog เป็นรายการของคุณลักษณะที่ต้องทำซึ่งรวมถึงความต้องการจากผู้ใช้  การแก้ไขข้อผิดพลาด และกำหนดคุณลักษณะพิเศษเฉพาะของตัวผลงานโดยคนที่ทำคือ product owner ซึ่งจะจัดลำดับคุณลักษณะตามความสำคัญ จัดรายการเพื่อนำเข้า sprint และจัดการกับรายละเอียดต่างๆของคุณลักษณะเหล่านั้น
- Sprint phase คือช่วงที่จะต้องทำงานซ้ำๆโดยมีกำหนดไม่เกิน 30 วัน ก่อนเริ่ม sprint ก็จะมีการนำ product backlog มาจัดลำดับความสำคัญเพื่อเลือกมาเป็น sprint backlog จากนั้น scrum team จะดู backlog และแตกเป็นงานย่อยๆออกมาและทำการประมาณเวลาที่ใช้ในแต่ละงาน หลังจากได้เวลาและต่อรองกันระหว่างทีมงานแล้ว ก็จะได้รายการของงานและรายการของ backlog
- Daily scrum มีลักษณะเป็นการประชุมอย่างไม่เป็นทางการ อาจเป็นการยืนคุยกัน โดยทุกๆวัน scrum master และ scrum team จะพบปะพูดคุยกันเพื่อทบทวนว่าเมื่อวานทำอะไรไปบ้าง และวันนี้จะทำอะไร มีการถกกันเพื่อแก้ไขปัญหาที่พบเมื่อวาน และจัดการกำหนดงานให้กับทีมงานแต่ละคน
- การสาธิตและการประเมินผลงาน จุดเด่นของ Scrum คือสามารถวัดผลการทำงานได้ มีผังการทำงานที่เรียบง่าย และธรรมดา แต่ทำให้เห็นภาพของ sprintได้อย่างชัดเจนโดยหลักการแล้วก็คือกราฟของงานโดยแกน y แทนจำนวนงานที่เหลือ ส่วนแกน x แทนวันแต่ละวันของ sprint โดยในแต่ละรายการจะมีการปรับเปลี่ยนกราฟ เพื่อแสดงให้เห็นภาพความคืบ หน้าของงาน หลังจากจบ sprint ก็จะเอากราฟนี้มาประเมินผลงานของทีมงาน
(เนื้อหาบางส่วนจาก ฝ่ายพัฒนาระบบคอมพิวเตอร์ ส่วนเทคโนโลยีสารสนเทศ มจร และ http://thumbsup.in.th/ )

จากเนื้อหาข้างบน ยังมีวิธีอีกมากมายสำหรับ software developer ที่จะหยิบจับเลือกวิธีการที่
เหมาะสมกับงานที่เราจะพัฒนาซอฟต์แวร์ให้สำเร็จลุล่วงไปได้ อาจจะใช้วิธีผสมผสานหลายๆ วิธี
เข้าด้วยกันเพื่อเกิดประสิทธิภาพและประสิทธิผลของเป้าหมายที่จะดำเนินก็เป็นได้