Nguồn: The Art of Agile Development by J Shore & S Warden.
Phần tiếp theo của: Agile Development: Giới thiệu Extreme Programming
Phần tiếp theo của: Agile Development: Giới thiệu Extreme Programming
Một đội dự án XP làm việc cùng nhau trong một không gian mở không có các phòng riêng hoặc vách ngăn. Vào đầu mỗi vòng lặp, đội tổ chức một cuộc họp kéo dài từ 2 đến 4 giờ để tổng kết những công việc vừa hoàn thành và lập kế hoạch cho phần việc tiếp theo. Hàng ngày, cả đội tham gia một cuộc họp ngắn từ 5 đến 10 phút thảo luận về công việc trong ngày. Ngoài hai kiểu họp chính thức này, từng thành viên tự lập kế hoạch làm việc cho mình. Hình thức “tự tổ chức” (self-organization) là một đặc điểm chung của các dự án theo triết lí Agile.
Trong một dự án phần mềm, những hiểu biết về sản phẩm luôn được nắm giữ bởi nhiều cá nhân. XP thừa nhận thực tế này bằng cách tạo ra một nhóm làm việc hỗn hợp với đầy đủ các vai trò cần thiết. Một đội dự án XP thường bao gồm các thành viên sau đây:
Đại diện khách hàng (onsite customer): Chịu trách nhiệm xác định các yêu cầu (requirement) cho phần mềm. Công việc quan trọng nhất của người này là lập kế hoạch. Khi bắt đầu dự án, đại diện khách hàng xác định các tính năng (feature/story) cần có của phần mềm, tìm cách nhóm các tính năng này thành các phần nhỏ có thể phát triển và bàn giao lần lượt và định ra lịch trình bàn giao từng phần. Trong quá trình thực hiện dự án, đại diện khách hàng nhận phản hồi từ các thành viên khác và điều chỉnh kế hoạch cho phù hợp.
Nhiệm vụ thứ hai của đại diện khách hàng là giúp các lập trình viên hiểu các yêu cầu chi tiết cho sản phẩm. Trong các dự án XP, tài liệu đặc tả (SRS) chỉ là công cụ trợ giúp cho đại diện khách hàng mà thôi. Người này sẽ đóng vai trò một tài liệu “sống”, luôn sẵn sàng trả lời các câu hỏi từ các lập trình viên.
Đại diện khách hàng không nhất thiết phải là khách hàng thật mà chỉ cần là một thành viên hiểu rõ các yêu cầu của phần mềm. Thực nghiệm cho thấy giữa hai nhóm có chất lượng lập trình viên tương đương nhau thì nhóm có sự tham gia của khách hàng tạo ra sản phẩm tốt hơn hẳn. Nếu khách hàng không thể đến ngồi ở văn phòng của bạn, hãy đưa đội dự án của bạn đến ngồi cùng với khách hàng!
Thực nghiệm cũng cho thấy tỉ lệ hai đại diện khách hàng cho ba lập trình viên là phù hợp. Tất nhiên, tỉ lệ này phụ thuộc vào độ phức tạp của sản phẩm. Hãy ghi nhớ rằng khối lượng công việc của các đại diện khách hàng là rất lớn bởi họ luôn phải “chạy trước” các lập trình viên.
Người quản lí sản phẩm (product manager/owner): Người này chịu trách nhiệm định hướng cho dự án và sản phẩm, bao gồm các công việc: Xác định các tính năng của sản phẩm và thứ tự ưu tiên của chúng, hướng dẫn đại diện khách hàng, làm việc với các bên liên quan đến dự án (stakeholder), đánh giá tiến độ dự án và giải quyết các vấn đề về tổ chức. Ngoài ra, người quản lí sản phẩm còn chịu trách nhiệm đưa sản phầm ra thị trường, bao gồm các việc quảng cáo, bán hàng và hỗ trợ khách hàng.
Người quản lí sản phầm phải am hiểu thị trường và các lợi ích mà phần mềm sẽ mang đến cho khách hàng. Đồng thời, người này phải có khả năng cộng tác và thoả hiệp với các đòi hỏi đa dạng, nhiều khi mâu thuẫn nhau, từ các cá nhân có quyền lợi liên quan đến dự án. Người quản lí sản phẩm phải được trao đủ quyền lực để có thể nói không với các yêu cầu không phù hợp. Một dự án chỉ nên có duy nhất một người quản lí sản phầm nhằm đảm bảo tính thống nhất cho định hướng của dự án.
Các chuyên gia nghiệp vụ (Domain Expert): Các lập trình viên ít khi hiểu biết tường tận về một lĩnh vực cụ thể nào đó, ví dụ như tài chính hay hoá học. Bởi vậy, XP yêu cầu sự tham gia của các chuyên gia hiểu rõ lĩnh vực chuyên môn của phần mềm đang được phát triển, chẳng hạn như các chuyên gia phân tích tài chính hay các nhà nghiên cứu hoá học. Những người này sẽ nghiên cứu nghiệp vụ của phần mềm để sẵn sàng trả lời câu hỏi của các lập trình viên.
Trong các dự án nhỏ, người quản lí sản phẩm thường kiêm luôn vai trò chuyên gia nghiệp vụ.
Người thiết kế giao diện (Interaction Designer): Giao diện người dùng (user interface) là bộ mặt của sản phẩm. Người dùng thường đánh giá chất lượng phần mềm thông qua chất lượng giao diện mà họ tương tác hàng ngày. Nhiệm vụ của người thiết kế giao diện là tìm hiểu mong muốn của khách hàng cũng như thói quen làm việc thường ngày của họ và từ đó thiết kế bộ mặt của sản phẩm.
Đừng nhầm lẫn giữa người thiết kế giao diện và người thiết kế đồ họa (graphic designer). Người thiết kế giao diện nghiên cứu tương tác giữa người dùng và sản phẩm. Trong khi đó người thiết kế đồ họa tạo ra các thành phần cụ thể như âm thanh, hình ảnh hay cách bố trí giao diện (layout).
Lập trình viên (Programmer): Nếu nhiệm vụ của người đại diện khách hàng là tối đa hóa giá trị của sản phẩm thì nhiệm vụ của các lập trình viên là tối thiểu hóa chi phí bằng việc lập trình theo cách hiệu quả nhất. Nhiệm vụ của các lập trình viên trong dự án XP là:
Ước lượng thời gian và nguồn lực cần thiết để thực hiện các chức năng của phần mềm, từ đó trợ giúp đại diện khách hàng trong việc lập kế hoạch. Lập trình viên cũng trao đổi trực tiếp với đại diện khách hàng để làm rõ các yêu cầu của phần mềm.
Các lập trình viên làm việc theo cặp (pair programming) và sử dụng phương pháp phát triển dựa trên test (test-driven development). Mỗi lập trình viên có trách nhiệm viết test, viết và tối ưu hóa mã nguồn, thiết kế và liên tục cải tiến thiết kế của chương trình. Mã nguồn được xem là sở hữu tập thể, tất cả các lập trình viên đều có quyền và nghĩa vụ sửa các lỗi mà họ phát hiện ra, bất kể lỗi đó do ai gây ra. Chuẩn lập trình (coding standard) đóng vai trò thiết yếu hỗ trợ cho cách làm việc này. Các lập trình viên liên tục tích hợp mã nguồn vào hệ thống và test một cách cẩn thận nhằm đảo bảo rằng phần mềm đủ tiêu chuẩn để đóng gói và bàn giao cho khách hàng vào cuối mỗi chu kì phát triển. Các lập trình viên chỉ viết tài liệu khi cần thiết nhằm trợ giúp cho việc bảo trì phần mềm trong tương lai.
Trong đội lập trình cần có một số thành viên có kinh nghiệm thiết kế phần mềm, có trách nhiệm hướng dẫn các lập trình viên khác. Đội cũng cần các thành viên có kinh nghiệm về các lĩnh vực cụ thể như cơ sở dữ liệu hay bảo mật.
Thực nghiệm cho thấy một dự án XP nên có từ 4 đến 10 lập trình viên.
Tester: Các dự án XP nói chung không cần nhiều tester. Các lập trình viên được trông đợi sẽ chuyển giao các chương trình gần như không có lỗi cho tester. Các chương trình test tự động (automated test) cũng làm giảm số lượng tester cần thiết.
Các dự án XP thường có tỉ lệ tester/lập trình viên từ 1/4 đến 1/6. Một số dự án còn không có tester mà sử dụng đại diện khách hàng và lập trình viên vào vai trò này!
Quản lí dự án/Hướng dẫn viên (Project Manager/Coach): Là những người có kinh nghiệm về XP, làm nhiệm vụ giúp đỡ các thành viên khác thực hiện các quy tắc của XP cũng như giao tiếp với các cá nhân bên ngoài dự án.
Các thành viên khác: Hãy nhớ rằng có rất nhiều người có lợi ích liên quan đến dự án nhưng không làm việc cùng đội dự án. Họ là những người dùng cuối, lãnh đạo cấp cao, phòng nhân sự…(gọi chung là các stakeholder). Những người này dù không “lộ mặt” nhưng đều có ảnh hưởng đến thành công của dự án. Người quản lí sản phẩm phải thấu hiểu được những yêu cầu rất đa dạng của đội ngũ này.
Một dự án XP không nhất thiết phải có đầy đủ các thành viên nói trên, hoặc ngược lại có thể sử dụng thêm các thành viên khác nếu cần. Một thành viên trong dự án có thể đảm nhiệm nhiều vai trò cũng lúc. Chẳng hạn, người quản lí sản phẩm có thể đồng thời là chuyên gia nghiệp vụ hoặc quản lí dự án. Đại diện khách hàng có thể kiêm vai trò thiết kế giao diện. Các lập trình viên có thể làm công việc của tester.
Một dự án XP thường có từ 4 đến 10 lập trình viên. Một dự án có 6 lập trình viên thường cần 4 đại diện khách hàng, 1 tester và 1 người quản lí sản phẩm, tổng cộng là 12 thành viên. Nếu số lập trình viên là 10, sẽ cần đến 6 đại diện khách hàng, 3 tester và một người quản lí sản phẩm, hợp thành một nhóm 20 người. Đây cũng là con số tối đa của một dự án XP thông thường.
Kích thước nhóm lớn sẽ gây khó khăn cho việc giao tiếp giữa các thành viên. Bởi vậy, XP khuyến khích tuyển dụng các thành viên có kinh nghiệm thay vì tăng số lượng người.
Trong một dự án phần mềm, những hiểu biết về sản phẩm luôn được nắm giữ bởi nhiều cá nhân. XP thừa nhận thực tế này bằng cách tạo ra một nhóm làm việc hỗn hợp với đầy đủ các vai trò cần thiết. Một đội dự án XP thường bao gồm các thành viên sau đây:
Đại diện khách hàng (onsite customer): Chịu trách nhiệm xác định các yêu cầu (requirement) cho phần mềm. Công việc quan trọng nhất của người này là lập kế hoạch. Khi bắt đầu dự án, đại diện khách hàng xác định các tính năng (feature/story) cần có của phần mềm, tìm cách nhóm các tính năng này thành các phần nhỏ có thể phát triển và bàn giao lần lượt và định ra lịch trình bàn giao từng phần. Trong quá trình thực hiện dự án, đại diện khách hàng nhận phản hồi từ các thành viên khác và điều chỉnh kế hoạch cho phù hợp.
Nhiệm vụ thứ hai của đại diện khách hàng là giúp các lập trình viên hiểu các yêu cầu chi tiết cho sản phẩm. Trong các dự án XP, tài liệu đặc tả (SRS) chỉ là công cụ trợ giúp cho đại diện khách hàng mà thôi. Người này sẽ đóng vai trò một tài liệu “sống”, luôn sẵn sàng trả lời các câu hỏi từ các lập trình viên.
Đại diện khách hàng không nhất thiết phải là khách hàng thật mà chỉ cần là một thành viên hiểu rõ các yêu cầu của phần mềm. Thực nghiệm cho thấy giữa hai nhóm có chất lượng lập trình viên tương đương nhau thì nhóm có sự tham gia của khách hàng tạo ra sản phẩm tốt hơn hẳn. Nếu khách hàng không thể đến ngồi ở văn phòng của bạn, hãy đưa đội dự án của bạn đến ngồi cùng với khách hàng!
Thực nghiệm cũng cho thấy tỉ lệ hai đại diện khách hàng cho ba lập trình viên là phù hợp. Tất nhiên, tỉ lệ này phụ thuộc vào độ phức tạp của sản phẩm. Hãy ghi nhớ rằng khối lượng công việc của các đại diện khách hàng là rất lớn bởi họ luôn phải “chạy trước” các lập trình viên.
Người quản lí sản phẩm (product manager/owner): Người này chịu trách nhiệm định hướng cho dự án và sản phẩm, bao gồm các công việc: Xác định các tính năng của sản phẩm và thứ tự ưu tiên của chúng, hướng dẫn đại diện khách hàng, làm việc với các bên liên quan đến dự án (stakeholder), đánh giá tiến độ dự án và giải quyết các vấn đề về tổ chức. Ngoài ra, người quản lí sản phẩm còn chịu trách nhiệm đưa sản phầm ra thị trường, bao gồm các việc quảng cáo, bán hàng và hỗ trợ khách hàng.
Người quản lí sản phầm phải am hiểu thị trường và các lợi ích mà phần mềm sẽ mang đến cho khách hàng. Đồng thời, người này phải có khả năng cộng tác và thoả hiệp với các đòi hỏi đa dạng, nhiều khi mâu thuẫn nhau, từ các cá nhân có quyền lợi liên quan đến dự án. Người quản lí sản phẩm phải được trao đủ quyền lực để có thể nói không với các yêu cầu không phù hợp. Một dự án chỉ nên có duy nhất một người quản lí sản phầm nhằm đảm bảo tính thống nhất cho định hướng của dự án.
Các chuyên gia nghiệp vụ (Domain Expert): Các lập trình viên ít khi hiểu biết tường tận về một lĩnh vực cụ thể nào đó, ví dụ như tài chính hay hoá học. Bởi vậy, XP yêu cầu sự tham gia của các chuyên gia hiểu rõ lĩnh vực chuyên môn của phần mềm đang được phát triển, chẳng hạn như các chuyên gia phân tích tài chính hay các nhà nghiên cứu hoá học. Những người này sẽ nghiên cứu nghiệp vụ của phần mềm để sẵn sàng trả lời câu hỏi của các lập trình viên.
Trong các dự án nhỏ, người quản lí sản phẩm thường kiêm luôn vai trò chuyên gia nghiệp vụ.
Người thiết kế giao diện (Interaction Designer): Giao diện người dùng (user interface) là bộ mặt của sản phẩm. Người dùng thường đánh giá chất lượng phần mềm thông qua chất lượng giao diện mà họ tương tác hàng ngày. Nhiệm vụ của người thiết kế giao diện là tìm hiểu mong muốn của khách hàng cũng như thói quen làm việc thường ngày của họ và từ đó thiết kế bộ mặt của sản phẩm.
Đừng nhầm lẫn giữa người thiết kế giao diện và người thiết kế đồ họa (graphic designer). Người thiết kế giao diện nghiên cứu tương tác giữa người dùng và sản phẩm. Trong khi đó người thiết kế đồ họa tạo ra các thành phần cụ thể như âm thanh, hình ảnh hay cách bố trí giao diện (layout).
Lập trình viên (Programmer): Nếu nhiệm vụ của người đại diện khách hàng là tối đa hóa giá trị của sản phẩm thì nhiệm vụ của các lập trình viên là tối thiểu hóa chi phí bằng việc lập trình theo cách hiệu quả nhất. Nhiệm vụ của các lập trình viên trong dự án XP là:
Ước lượng thời gian và nguồn lực cần thiết để thực hiện các chức năng của phần mềm, từ đó trợ giúp đại diện khách hàng trong việc lập kế hoạch. Lập trình viên cũng trao đổi trực tiếp với đại diện khách hàng để làm rõ các yêu cầu của phần mềm.
Các lập trình viên làm việc theo cặp (pair programming) và sử dụng phương pháp phát triển dựa trên test (test-driven development). Mỗi lập trình viên có trách nhiệm viết test, viết và tối ưu hóa mã nguồn, thiết kế và liên tục cải tiến thiết kế của chương trình. Mã nguồn được xem là sở hữu tập thể, tất cả các lập trình viên đều có quyền và nghĩa vụ sửa các lỗi mà họ phát hiện ra, bất kể lỗi đó do ai gây ra. Chuẩn lập trình (coding standard) đóng vai trò thiết yếu hỗ trợ cho cách làm việc này. Các lập trình viên liên tục tích hợp mã nguồn vào hệ thống và test một cách cẩn thận nhằm đảo bảo rằng phần mềm đủ tiêu chuẩn để đóng gói và bàn giao cho khách hàng vào cuối mỗi chu kì phát triển. Các lập trình viên chỉ viết tài liệu khi cần thiết nhằm trợ giúp cho việc bảo trì phần mềm trong tương lai.
Trong đội lập trình cần có một số thành viên có kinh nghiệm thiết kế phần mềm, có trách nhiệm hướng dẫn các lập trình viên khác. Đội cũng cần các thành viên có kinh nghiệm về các lĩnh vực cụ thể như cơ sở dữ liệu hay bảo mật.
Thực nghiệm cho thấy một dự án XP nên có từ 4 đến 10 lập trình viên.
Tester: Các dự án XP nói chung không cần nhiều tester. Các lập trình viên được trông đợi sẽ chuyển giao các chương trình gần như không có lỗi cho tester. Các chương trình test tự động (automated test) cũng làm giảm số lượng tester cần thiết.
Các dự án XP thường có tỉ lệ tester/lập trình viên từ 1/4 đến 1/6. Một số dự án còn không có tester mà sử dụng đại diện khách hàng và lập trình viên vào vai trò này!
Quản lí dự án/Hướng dẫn viên (Project Manager/Coach): Là những người có kinh nghiệm về XP, làm nhiệm vụ giúp đỡ các thành viên khác thực hiện các quy tắc của XP cũng như giao tiếp với các cá nhân bên ngoài dự án.
Các thành viên khác: Hãy nhớ rằng có rất nhiều người có lợi ích liên quan đến dự án nhưng không làm việc cùng đội dự án. Họ là những người dùng cuối, lãnh đạo cấp cao, phòng nhân sự…(gọi chung là các stakeholder). Những người này dù không “lộ mặt” nhưng đều có ảnh hưởng đến thành công của dự án. Người quản lí sản phẩm phải thấu hiểu được những yêu cầu rất đa dạng của đội ngũ này.
Một dự án XP không nhất thiết phải có đầy đủ các thành viên nói trên, hoặc ngược lại có thể sử dụng thêm các thành viên khác nếu cần. Một thành viên trong dự án có thể đảm nhiệm nhiều vai trò cũng lúc. Chẳng hạn, người quản lí sản phẩm có thể đồng thời là chuyên gia nghiệp vụ hoặc quản lí dự án. Đại diện khách hàng có thể kiêm vai trò thiết kế giao diện. Các lập trình viên có thể làm công việc của tester.
Một dự án XP thường có từ 4 đến 10 lập trình viên. Một dự án có 6 lập trình viên thường cần 4 đại diện khách hàng, 1 tester và 1 người quản lí sản phẩm, tổng cộng là 12 thành viên. Nếu số lập trình viên là 10, sẽ cần đến 6 đại diện khách hàng, 3 tester và một người quản lí sản phẩm, hợp thành một nhóm 20 người. Đây cũng là con số tối đa của một dự án XP thông thường.
Kích thước nhóm lớn sẽ gây khó khăn cho việc giao tiếp giữa các thành viên. Bởi vậy, XP khuyến khích tuyển dụng các thành viên có kinh nghiệm thay vì tăng số lượng người.
Tài liệu tham khảo
Sách: The Art of Agile Development by James Shore and Shane Warden.
Web: http://agilemanifesto.org/
Sách: The Art of Agile Development by James Shore and Shane Warden.
Web: http://agilemanifesto.org/
No comments:
Post a Comment