eXtreme Programming(XP) ฉบับย้อย่อ

XP วาดออกมาเป็นรูป จะได้ดังรูปข้างล่างนี้

ต่อไปนี้คือคำอธิบาย XP ในแบบย้อย่อ

  • Extreme Programming(XP) คือกฏระเบียบการทำงานพัฒนาซอฟแวร์ ที่จะเน้นความสนใจไปที่ คนในทีมทั้งหมด(Manager, Customer, XP Programmer และ XP Coach) เพื่อมุ่งไปสู่เป้าหมายร่วมกัน โดยผ่านหลักการคุณค่าของ XP
  • XP จะจัดเตรียมหลักการปฏิบัติ ที่เหมาะสมกับบริบทหรือสภาวะแวดล้อมภายในทีม XP เอง หลักการปฏิบัติของ XP ที่เลือกมา จะพิจารณาจากหลักการที่ต้อง ส่งเสริมให้ทีมเกิดความคิดสร้างสรรค์ เกิดพลังขับเคลื่อนในการเพิ่มผลผลิต อย่างมีคุณค่า มีคุณภาพ และจะต้องเป็นที่ยอมรับกันในทีมทั้งหมด
  • XP จะจัดการความสมดุลของการทำงานในทีมให้สอดคล้องกันเพื่อการตัดสินใจทางธุรกิจ และทางเทคนิค ผ่านการวางแผนโดย Planning Game
  • Customer(ลูกค้า) ใน XP มีหน้าที่เขียน User Stories, ให้ลำดับความสำคัญแก่ Stories รวมทั้งเขียน และดำเนินการทดสอบ(Acceptance Tests) เพื่ออธิบายว่า Stories ที่พัฒนาเป็นซอฟแวร์เสร็จแล้ว จะต้องเป็นยังไง ใน XP อาจจะมอบให้ผู้ใช้ เล่นบท Customer นี้ก็ได้ก็แล้วแต่ บางที่ก็จัดให้ Product Manager, Projects Manager หรือ Business Analysis เล่นบทเป็น Customer ก็ได้ ที่เรียกว่า On-site Customer (ทำหน้าที่คล้ายกับ ProductOwner ใน Scrum)
  • บทบาทของ XP Programmer มีทักษะทางเทคนิคที่กว้างขวาง หลากหลาย อันได้แก่ Design, Analysis, Programming, Database Analysis และ Hardware Infrastructure ได้ ทุกๆ XP Programmer สามารถแชร์ช่วยเหลือ และแบ่งปันความสามารถให้กันได้ (ใน Scrum เรียกว่า Team Development)
  • เกือบทุกๆกระบวนการใน XP กำหนดว่า XP Programmer ทุกคนจะต้องทำ Unit Test กับ code ของตนเองทุกครั้งเสมอ และจะต้องพัฒนา Unit Test ที่สามารถทำงานได้โดยอัตโนมัติสำหรับทุกสิ่งอย่างที่ตัวเองได้ code ไว้
  • XP Coach รับหน้าที่ขายบริการ ทุกอย่างที่จะทำให้ทีม Programmer สามารถพัฒนาซอฟแวร์ได้โดยสะดวกสบาย ไม่ติดขัด แทน Projects Manager เขาจะค่อยกำกับให้ทีม อยู่ในกรอบการปฏิบัติงานที่เป็น XP ส่วน Projects Manager ก็ทำหน้าที่เป็นผู้นำ หรือเจ้าของโครงการ และรับผิดชอบด้านกำลังคน กำลังทรัพย์ ให้พร้อมเพียงพอต่อทีม XP เพื่อพัฒนาซอฟแวร์ได้อยู่เสมอ (XP Coach ทำหน้าที่เหมือน ScrumMaster ใน Scrum)

ต่อไปนี้ คือ 12 หลักการปฏิบัติสำคัญของ XP

1. The Planning Game: Customer และ XP Programmer จะช่วยกันทำงานเพื่อคุณค่าสูงสุด และเร็วที่สุด ซึ่งเป็นผลดีต่อ Customer เอง
Planning Game โดยปกติแล้วทั้ง Customer และ XP Programmer จะแสดงบทบาทร่วมกัน ดังนี้

  • Customer จะเขียนรายการ feature ของซอฟแวร์ ที่ตัวเองต้องการ ให้อยู่ในรูปแบบของ User Stories ลงใน Story Card
  • Programmer จะประมาณ Story Card นั้นว่า จะใช้ความพยายามทำเท่าไร(size) และเมื่อลงมือทำแล้วจะใช้เวลา(duration)เท่าไรรวม Unit Test ด้วย ในการทำให้ Story Card นั้นเสร็จได้
  • Customer จะเข้ามาตัดสินใจจัดลำดับความสำคัญ(Prioritize) ให้ Story Card แล้วเลือก Story Card ที่สำคัญที่สุดไว้อันดับแรก แล้ว XP Programmer จะหยิบชิ้นบนสุดไปเรื่อยๆนำเข้า iteration ให้พอดีกับความยาว iteration อาจะเป็น 1, 2, ถึง 4 สัปดาห์แล้วแต่กำหนด เพื่อนำไปพัฒนาซอฟแวร์ต่อไป

2. Small Releases: เริ่มต้นด้วย Customer จะเป็นผู้เลือก set ของ feature ที่ให้อัตถะประโยชน์ที่ได้จากการใช้งาน feature สูงสุด นำเข้า iteration ที่ประมาณแล้วว่าใช้เวลาเร็วที่สุด เพื่อให้ได้ซอฟแวร์ออกมาใช้งานได้ก่อน แล้วก็ค่อยๆเพิ่ม feature set ใหม่ เข้าไปใน iteration ถัดไปได้เรื่อยๆจนกระทั้งจบโครงการ

3. System Metaphor: แต่ละ projects ต้องกำหนดนิยามความหมายของคำเฉพาะทางเทคนิคของ Customer ให้เข้าใจตรงกันก่อน เพื่อใช้สือสารกันได้ง่าย จำได้ง่าย และใช้เป็นระเบียบแบบแผนในการออกแบบได้ง่ายด้วย อาจจะใช้เทคนิค Ubiquitous Language ช่วยได้

4. Simple Design: พยายามออกแบบให้ง่ายๆ และทำงานได้ดีก่อน เพื่อให้งานสำเร็จออกมาเร็วที่สุด เพราะความต้องการของ Customer นั้นเปลี่ยนแปลงได้เสมอ ถ้าหากเขาได้ใช้ซอฟแวร์ก่อนไปทีละนิดก่อนเสร็จสมบูรณ์จริงทั้งหมด การเปลี่ยนแปลงใดๆที่จะเกิดขึ้นก็จะได้ไม่กระทบสิ่งที่ทำเสร็จไปแล้วมากนัก ดังนั้นควรจะออกแบบอะไรที่สนับสนุนความต้องการของ Customer จริงๆในขณะนั้น วันนั้นเท่านั้น แล้วปล่อยซอฟแวร์ออกมาให้ลูกค้าได้ทดลองใช้ให้เร็วที่สุด

5. Continuous Testing: ก่อนที่ programmer จะเพิ่ม feature ก็ควรทดลองคิดจิตนาการ แล้วเขียน test สำหรับทดสอบ feature นั้นให้ได้ก่อน
เพื่อเป็นการยืนยันว่า feature นั้นทำให้เสร็จได้แน่นอน เพราะเราสามารถเขียน test ให้มันได้แล้ว
การทดสอบใน XP มีสองแบบ ได้แก่

  • Unit Test ก็คือ การเขียน code เพื่อทดสอบแบบอัตโนมัติ ให้แต่ละ function ที่ programmer เขียนเสร็จแล้ว ดังนั้นทุกๆ function ก็จะมี code ทดสอบคู่กันไปด้วยกันเสมอ
  • Acceptance Tests เป็นความต้องการทดสอบ feature ที่ถูกเขียนขึ้นจาก Customer โดยปกติแล้วก็เป็นการทดสอบโดย Customer เอง ด้วยการใช้งานซอฟแวร์จริงๆกันไปเลย

6. Refactoring: Programmer จะต้องแก้ไข code ของตัวเองให้ดีขึ้นอยู่เสมอ เช่น logic ที่เขียน code ซ้ำๆกันก็จะถูกรวมไว้ที่เดียวกัน หรือ logic ที่ทำงานขึ้นอยู่กับบริบทของใครของมัน ก็จะถูกแยกออกไปอยู่ในสิ่งที่เป็นเจ้าของบริบทนั้นๆไป
เมื่อทำการ refactoring code เสร็จทุกครั้ง จะต้อง run ตัวทดสอบอัตโนมัติเสมอ เพื่อย้ำว่าซอฟแวร์ ยังคงทำงานได้ถูกต้องอยู่ตลอดเวลา

7. Pair Programming: ทุกๆ production code ถูกเขียนขึ้นมาโดย programmer สองคน ที่อยู่บนเครื่องเดียว สองคนนี้ก็จะ review และเขียน unit test ทดสอบ code ที่เขียนขึ้นมาของกัน และกัน

8. Collective Code Ownership: ไม่มีบุคคลใดเป็นเจ้าของ module ใดๆ คนเดียวได้ ทุกคนในทีมจะต้องคาดหวังได้ว่าจะสามารถทำงานบน codebase เดียวกันนี้ได้ตลอดเวลา

9. Continuous Integration(CI): การเปลี่ยนแปลงทั้งหมดจะถูกรวมอยู่ใน codebase อย่างน้อยทุกวัน การทดสอบจะต้องถูกต้อง 100% ทั้งก่อนและหลังการรวม(integration)

10. 40-Hour Work Week: programmer จะต้องกลับบ้านตรงเวลา และเมื่อไรก็ตามที่ programmer ทำงานล่วงเวลา แสดงว่าจะต้องมีบางสิ่งบางอย่างผิดพลาดเกิดขึ้นในกระบวนการ ดังนั้น ทีมจะต้องจัดการแก้ไขโดยทันที ซึ่งจะทำให้ programmer กลับบ้านตรงเวลา ต้องไม่มี overtime

11. On-site Customer: ทีม XP จะต้องเข้าถึงชีวิตการทำงานจริงๆของลูกค้าซึ่ง มันก็คือผู้ใช้งานจริงอยู่ในระบบนั่นเอง สำหรับซอฟแวร์ที่พัฒนาให้ลูกค้าหลายคนในองค์กรณ์ได้ใช้งานกัน จึงต้องมีตัวแทนของลูกค้าเข้ามาทำหน้าที่เป็น Customer
แทนผู้ใช้ทั้งหมด (โดยปกติ Product Manager จะเล่นบทบาทนี้)

12. Coding Standards: code ของทุกคนเป็นมาตรฐานเดียวกันหมด เป็นสิ่งทำให้การทำงานง้ายขึ้นมากๆ เมื่อทุกคนในทีมอ่าน code ที่มีรูปแบบการจัดการ และเขียน code ที่มีรูปแบบไปในทางเดียวกัน code ก็จะอ่านง่าย ค้นหาเพิ่มเติม แก้ไขได้ง่าย อ่านเข้าใจง่าย สอนกันง่าย เพราะทุกคนในทีมเข้าใจรูปแบบการเขียน code ไปในทางเดียวกันหมดแล้ว

จบแล้วครับ eXtreme Programming(XP) ฉบับย้อย่อ XP เป็นกรอบการทำงานแบบ Agile ครับ เทคนิคปฏิบัติงานที่ XP จัดเตรียมไว้ให้นั้น ใช้งานได้จริงๆ และมีประสิทธิภาพมากในการพัฒนาซอฟแวร์

หากว่ามีอะไรเพิ่มเติม แก้ไขข้อผิดพลาดใดๆ ผมจะเข้ามาเปลี่ยนแปลงบทความนี้ อยู่เรื่อยๆนะครับ

ขอบคุณครับ

#:P

Advertisements

#extreme-programmingxp