Làm việc nhóm
* Xác định quy trình, khối lượng cơng việc và phân công lao động
* Kiểm tra, đánh giá
CXC V Kỹ năng điều hành cuộc họp, thảo luận
* Đánh giá chung về vấn đề họp, thảo * Tiến hành các bước trong cuộc hợp,
CXCI luận thảo luận
* Chuẩn bị * Bắt đầu cuộc họp
* Đưa ra và phân tích từng chủ đề * Lập kế hoạch hành động
* Bế mạc cuộc họp
4 Ứng dụng trong lĩnh vực phát triển phần mềm CNTT —Phương pháp phát triển phần mềm linh hoạt Phương pháp phát triển phần mềm linh hoạt
1. Tổng quan về Agile
- Agile được hiểu đơn giản là một phương pháp phát triển phần mềm linh hoạt, là một hướng tiếp cận cụ thể cho việc quản lý dự án phần mềm. Nó gồm một q trình làm việc tương tác và tích hợp để có thể đưa sản phẩm đến tay người dùng càng nhanh càng tốt.
- Những phương pháp phát triển phần mềm theo cách truyền thống ngày càng bộc lộ nhiều nhược điểm và tỷ lệ các dự án thất bại cao trong thời kỳ bùng phát của ngành cơng nghệ. Nhận ra vấn đề đó, một số cá nhân và cơng ty riêng lẻ đã đưa ra các phương pháp phát triển phần mềm hiện đại hơn và khác nhau để thích ứng với tình hình mới.
- Vào năm 2001, bản tuyên ngôn Agile (Agile Manifesto) đã được thống nhất và ra đời bởi một nhóm người có uy tính trong phát triển phần mềm:
a) Cá nhân và Sự tương tác hơn là quy trình và cơng cụ
CXCII + Đặt trọng tâm vào con người và sự tương hỗ giữa những thành viên trong team.
Nếu dự án có những thành viên có năng lực, chịu làm việc cùng nhau thì sẽ mang đến thành công cho dự án.
CXCIII + Thành viên trong nhóm cần:
• Tơn trọng giá trị của mỗi cá nhân
• Trung thực trong truyền thơng
• Minh bạch về dữ liệu, hoạt động, quyết định
• Tin tưởng sự hỗ trợ của mỗi cá nhân với nhóm
Làm việc nhóm
• Cam kết với nhóm và các mục tiêu của nhóm
b) Phần mềm Chạy tốt hơn là Tài liệu Đầy đủ
CXCIV + Thực ra đứng với góc độ khách hàng thì khách hàng chỉ quan tâm đến sản phẩm có hoạt động được tốt hay khơng. Trong khi việc tạo và cập nhật tài liệu mất nhiều thời gian và được cho là buồn tẻ.
CXCV + Vậy chúng ta không nên tập trung quá nhiều cho việc khơng cần thiết mà nên
dành thời gian đó để trao đổi để hiểu thêm về công việc phải làm.
CXCVI + Chúng ta đừng hiểu lầm là làm Agile là không viết tài liệu. Y tưởng là chỉ viết
những gì mà mọi người cần đọc.
c) Cộng tác với Khách hàng hơn là Thương thảo Hợp đồng
CXCVII + Nhấn mạnh việc để khách hàng tham gia vào quá trình phát triển phần mềm
CXCVIII + Khách hàng có thể giúp định hình sản phẩm phần mềm đang được tạo ra CXCIX + Khách hàng có vị trí đặc biệt trong đội hình phát triển
d) Phản hồi với Thay đổi hơn là Bám sát Kế hoạch
CC+ Phản hồi với thay đổi là điều cần thiết cho việc tạo ra một sản phẩm làm hài lòng khách hàng cũng như mang lại những giá trị kinh doanh.
CCI + Tìm kiếm sự phản hồi của khách hàng trong suốt dự án để có thể kết hợp thơng tin phản hồi và thông tin mới ngay khi sản phẩm đang được phát triển.
CCII + Tích hợp sẵn những tiến trình thay đổi các kế hoạch trong một khoảng thời gian đều đặn dựa trên những thơng tin phản hồi từ phía khách hàng.
2. Đặc trưng Agile
- Tính lặp (Iterative)
• Dự án sẽ được thực hiện trong các phân đoạn lặp đi lặp lại.
• Các phân đoạn (được gọi là Iteration hoặc Sprint) thường có khung thời gian ngắn (từ một đến bốn tuần)
- Tính tiệm tiến (Incremental) và tiến hóa (Evolutionary)
• Cuối mỗi phân đoạn là các phần nhỏ của sản phẩm cuối cùng.
• Các phần nhỏ này thường là đầy đủ, có khả năng chạy tốt, được kiểm thử cẩn thận và có thể sử dụng ngay
• Theo thời gian, phân đoạn này tiếp nối phân đoạn kia, các phần chạy được này sẽ được tích lũy, lớn dần lên cho tới khi toàn bộ yêu cầu của khách hàng được thỏa mãn.
- Tính thích ứng (hay thích nghi - adaptive)
CCIII Do các phân đoạn chỉ kéo dài trong một khoảng thời gian ngắn, và việc lập kế
hoạch cũng được điều chỉnh liên tục, nên các thay đổi trong quá trình phát triển (yêu cầu thay đổi, thay đổi công nghệ, thay đổi định hướng về mục tiêu v.v.) đều có thể được đáp ứng theo cách thích hợp .
Làm việc nhóm
- Nhóm tự tổ chức và liên chức năng
• Cấu trúc nhóm agile thường là liên chức năng (cross-functionality) và tự tổ chức (self-organizing).
Làm việc nhóm
• Các nhóm này tự thực hiện lấy việc phân công công việc mà không dựa trên các mơ tả cứng về chức danh
• Các thành viên nhóm cộng tác với nhau để ra quyết định, theo dõi tiến độ, giải quyết các vấn đề mà không chờ mệnh lệnh của các cấp quản lý.
- Quản lý tiến trình thực nghiệm (Empirical Process Control)
• Ra các quyết định dựa trên các dữ liệu thực tiễn
• Việc phân nhỏ dự án thành các phân đoạn ngắn góp phần gia tăng các điểm mốc để nhóm phát triển thu thập dữ kiện cho phép điều chỉnh các chiến lược phát triển của mình.
• Agile rút ngắn vịng đời phản hồi (short feedback life cycle) để dễ dàng thích nghi và gia tăng tính linh hoạt.
- Giao tiếp trực diện (face-to-face communication)
• Đánh giá cao hơn việc giao tiếp trực diện thay vì gián tiếp thơng qua giấy tờ.
• Khuyến khích nhóm phát triển trực tiếp nói chuyện với khách hàng để hiểu rõ hơn về cái khách hàng thực sự cần, thay vì phụ thuộc nhiều vào các loại văn bản.
• Phát triển thói quen và cơ chế trao đổi trực diện thường xuyên (một trong các cơ chế thường thấy là các cuộc họp tập trung hàng ngày).
- Phát triển dựa trên giá trị (value-based development)
• Nguyên tắc “phần mềm chạy tốt chính là thước đo của tiến độ”
• Loại bỏ đi các công việc dư thừa không trực tiếp mang lại giá trị cho sản phẩm.
• Giúp khách hàng tối ưu hóa được giá trị của dự án
• Gia tăng đáng kể độ hài lòng của khách hàng
3. Phương pháp Scrum
- Scrum là một “bộ khung làm việc” cơ bản để tiếp cận những công việc phức tạp. Dựa trên bộ khung này, nhóm làm việc có thể áp dụng những quy trình, kỹ thuật khác nhau cho cơng việc của mình... Nó là một thành viên của họ Agile.
- Giá trị cốt lõi của Scrum
• Minh bạch: Thông tin liên quan tới quá trình phát triển phải minh bạch và thơng suốt.
• Các cơng cụ và cuộc họp trong Scrum luôn đảm bảo thơng tin được minh bạch cho các bên.
• Thanh tra: Truy xét kĩ càng, liên tục là cơ chế khởi đầu cho việc thích nghi và cải tiến liên tục trong Scrum.
• Thích nghi: Phản hồi lại các thay đổi một cách tích cực
- Ba vai trị
• Product Owner: Là người chịu trách nhiệm về sự thành công của dự án, người định nghĩa các yêu cầu và đánh giá cuối cùng đầu ra của các nhà phát triển phần mềm.
• Scrum Master: Là người có hiểu biết sâu sắc, và đảm bảo nhóm có thể làm việc hiệu quả với Scrum.
Làm việc nhóm
• Development Team: Một nhóm liên chức năng, tự quản lý để tiến hành chuyển đổi các yêu cầu được tổ chức trong danh sách yêu cầu (requirement) của dự án thành
chức năng của hệ thống.
4. eXtreme Programming (XP)
- eXtreme Programming (XP) là một phương pháp phát triển phần mềm hướng đến việc nâng cao chất lượng phần mềm và khả năng đáp ứng với thay đổi yêu cầu người dùng.
- Các giá trị của XP
CCIV + Giao tiếp (Communication): Trao đổi trực diện hằng ngày
CCV + Tính đơn giản (Simplicity): Chỉ làm những gì cần thiết, khơng hơn CCVI + Phản hồi (Feedback):
• Cam kết liên tục bàn giao các phần mềm chạy tốt vào cuối cácphân đoạn ngắn.
• Lắng nghe phản hồi từ các bên và thực hiện các điều chỉnh cần thiết.
CCVII + Tơn trọng (Respect): Mỗi người đều đóng vai trị vào việc tạo ra các giá trị không kể công việc như thế nào.
CCVIII + Can đảm (Courage): Ln nói đúng về tiến độ và ước lượng
- Các nguyên tắc cơ bản của XP
CCIX + Phản hồi nhanh (Rapid Feedback)
CCX Luôn lắng nghe phản hồi từ nhiều phía, lấy phản hồi một cách nhanh nhất, tìm
hiểu chúng và đưa những hiểu biết đó vào trong hệ thống nhanh nhất có thể. Lập trình viên có thể học được cách thiết kế, lập trình, kiểm thử tốt nhất trong phạm vi từng phút chứ không phải hàng ngày, tuần hoặc thậm chí hàng tháng.
CCXI + Giả định đơn giản (Assume Simplicity)
• Đối xử với các vấn đề như thể chúng có thể giải quyết bằng những giải pháp đơn giản nhất
• Thay đổi tiệm tiến (Incremental Change)
• Khơng thay đổi cả “lố”, mà chỉ thay đổi một ít trong thiết kế, chức năng. CCXII + Sống chung với thay đổi (Embracing Change)
• Chiến thuật tốt nhất là tôn trọng tất cả các khả năng trong khi giải quyết các vấn đề áp lực nhất.
• Cơng việc chất lượng cao (Quality Work)
• Phải ln đầu tư để có được chất lượng cơng việc cao nhất, đến mức “hoàn hảo”