12/08/2018, 14:35

Scrum trong Agile

Trong ngành công nghiệp phần mềm, phương thức sản xuất phần mềm có một vai trò vô cùng quan trọng, nó quyết định cấu trúc tổ chức, qui trình phát triển, khả năng thành công của các dự án. Trong những năm gần đây SCRUM nổi lên như một phương thức tổ chức sản xuất ưu việt được nhiều công ty phần mềm ...

Trong ngành công nghiệp phần mềm, phương thức sản xuất phần mềm có một vai trò vô cùng quan trọng, nó quyết định cấu trúc tổ chức, qui trình phát triển, khả năng thành công của các dự án. Trong những năm gần đây SCRUM nổi lên như một phương thức tổ chức sản xuất ưu việt được nhiều công ty phần mềm áp dụng và thành công.

1 - Scrum là gì?

SCRUM là một phương thức phát triển phần mềm chỉ ra cách để nhóm phát triển làm việc một cách hiệu quả để tạo ra sản phẩm phần mềm. Với nguyên tắc chủ đạo là chia nhỏ phần mềm cần sản xuất ra thành các phần nhỏ độc lập để phát triển, dễ dàng lấy ý kiến khách hàng và thay đổi cho phù hợp ngay trong quá trình phát triển để đảm bảo sản phẩm release đáp ứng những gì khách hàng mong muốn.

SCRUM vận hành dựa trên đặc tính tự nhiên của người phát triển nên rất dễ hiểu, dễ áp dụng, tạo nên tính tương tác cao giữa những lập trình viên trong nhóm và cùng nhau tạo ra những sản phẩm tốt thay vì chịu sự áp đặt từ bên ngoài.

2 - Một số đặc điểm của SCRUM:

  • Tập trung vào sản phẩm, sản phẩm mới là đích cuối cùng chứ không phải qui trình.

  • Thích ứng nhanh với sự thay đổi yêu cầu

  • Nhấn mạnh vai trò của nhóm phát triển, nhóm phát triển mới là người đưa ra giải pháp và thực hiện nó.

  • Tạo nên sự tương tác cao giữa khách hàng và nhóm phát triển sản phẩm để mang đến sản phẩm đúng với yêu cầu của khách hàng.

3 - Các vai trò trong scrum

3.1 - Product Owner:

Product Owner là người sở hữu sản phẩm, hiểu rõ nhất về sản phẩm và các yêu cầu của sản phẩm. Thông thường vai trò này được đảm nhiệm bởi khách hàng. Trong trường hợp khách hàng không có người thực hiện việc này thì có thể người đóng vai trò Business Analyst của công ty phần mềm hoặc của đơn vị tư vấn sẽ thực hiện vai trò này. Product Owner chịu trách nhiệm về yêu cầu đầu ra của sản phẩm và là người chấp nhận sản phẩm.

Product Owner sẽ chịu trách nhiệm trong các công việc sau:

Quản lý Product Backlog: Product Owner là người chịu trách nhiệm chính trong việc xây dựng, hiệu chỉnh và duy trì Product Backlog. Product Backlog lưu trữ các User Stories, mỗi User Story có thể là một chức năng mới, có thể là một lỗi phát sinh hoặc cũng có thể là một số công việc liên quan khác.

Định nghĩa Sprint Backlog: Product Owner chịu trách nhiệm Review, xác định thứ tự ưu tiên và hiểu rất rõ về backlog nên sẽ là thành phần quan trọng trong cuộc họp Sprint Planning. Product Owner cũng là người thông qua cuối cùng cho Sprint Backlog.

Giám sát thường xuyên quá trình xây dựng các Stories: Trong quá trình phát triển các chức năng nếu cần bất kỳ sự thay đổi nào thì Product Owner luôn chịu trách nhiệm chính trong việc thông qua các thay đổi đó.

Xét duyệt các chức năng được đưa ra trong mỗi phiên bản: Product Owner còn chịu trách nhiệm xét duyệt các chức năng có trong mỗi phiên bản Release. Điều này bao gồm việc kiểm tra các chức năng có đáp ứng được các yêu cầu hay không? Có qua được qui trình kiểm thử không? Có đảm bảo chất lượng và khả năng sử dụng hay không?

Sắp xếp các giai đoạn Release (PSI/release: Potentially Shippable Increment): Trong quá trình phát triển theo SCRUM, dự án sẽ liên tục Release theo từng giai đoạn và Product Owner có vai trò quan trọng trong việc sắp xếp thời gian, các chức năng Release cũng như phối hợp Demo cho khách hàng, các nhà đầu tư.

Tham gia và chuẩn bị cho quá trình hoạch định: Như một thành viên mở rộng của bộ phận quản lý, Product Owner có trách nhiệm trong việc phối hợp để hoạch định quá trình xây dựng sản phẩm, ước lượng, sắp xếp các sự kiện ra mắt sản phẩm.

Ngoài ra, tùy theo từng dự án, product owner có thể tham gia xây dựng tầm nhìn, chiến lược, hoạch định các kế hoạch liên quan cho sản phẩm.

Một số yêu cầu kỹ năng cơ bản của Product Owner như sau:

– Phải có kinh nghiệm về sản phẩm sẽ phát triển

– Có kiến thức tốt về quản lý, công nghệ bao gồm cả kiến trúc, thiết kế v.v..

– Hiểu rõ nhu cầu, chức năng của sản phẩm, mức độ ưu tiên của sản phẩm.

– Có kỹ năng lãnh đạo và giải quyết vấn đề

– Phải có kỹ năng giao tiếp tốt cả với khách hàng và nhóm dự án

– Có khả năng dẫn dắt, động viên nhóm dự án làm việc để họ phấn đầu hoàn thành dự án đúng mục tiêu đề ra.

3.2 - Scrum Master

Scrum Master là người chịu trách nhiệm giúp mọi người hiểu được SCRUM và thức hiện đúng các yêu cầu của SCRUM.

Công việc chính của Scrum Master như sau:

– Đảm bảo cho qui trình Scrum được tuân thủ

– Đảm bảo sự tương tác hợp lý giữa PO, Team và Management

– Bảo vệ và động viên Team

– Hỗ trợ công tác tổ chức (như họp, hạ tầng v.v..)

– Hỗ trợ Team tập trung vào công việc và đạt mục tiêu của Sprint hiện tại

– Làm việc với PO

– Training về Sprint cho Team, PO, Management và tổ chức

– Đấu tranh để phát triển một team có năng suất cao

– Hỗ trợ các hoạt động như Team building, phát triển kỹ năng cho các thành viên, xây dựng feedback v.v..

– Phát hiện và giải quyết các vấn đề

Các kỹ năng cần thiết của Srum Master:

– Am hiểu về SCRUM và các qui trình của SCRUM

– Có kỹ năng về quản lý, lãnh đạo, xử lý tình huống, giải quyết các mâu thuẩn, động viên, phát huy khả năng làm việc của người khác

– Có kiến thức cơ bản về kỹ thuật

3.3 - Development Team

Development Team chịu trách nhiệm chính trong việc phát triển sản phẩm. Development Team bao gồm các kỹ sư phần mềm làm việc cùng nhau. Tùy theo yêu cầu của từng dự án mà kỹ năng của các thành viên trong team cũng khác nhau.

Trách nhiệm của Development Team:

– Hiểu rõ yêu cầu, phân tích, thiết kế, coding sản phẩm

– Làm việc với PO để nắm rõ yêu cầu, đề xuất giải pháp, yêu cầu thay đổi các stories

– Tham dự các cuộc họp Kick off, Sprint Planning, Sprint Review, Dialy Scrum Meeting

– Nhận công việc, ước lượng và chịu trách nhiệm với công việc của mình về chất lượng, thời hạn hoàn thành

– Sửa lỗi và đóng góp cải tiến sản phẩm

– Hiểu rõ và tuân thủ Scrum Process

Yêu cầu kỹ năng của Development Team:

– Hiểu và áp dụng được Scrum

– Có các kỹ năng về phân tích thiết kế, ngôn ngữ lập trình, cơ sở dữ liệu được yêu cầu của một kỹ sư phần mềm

– Có kỹ năng làm việc nhóm

4 - Các sự kiện diễn ra trong scrum

  • Sprint: là những chu kỳ nhỏ để phát triển sản phẩm. Mỗi sprint sẽ tập trung phát triển những chức năng cụ thể nào đó và hoàn hiện nó vào cuối mỗi sprint. Thời gian của mỗi sprint được thống nhất, thường ít nhất là 2 tuần và không dài hơn 4 tuần.

  • Sprint planning meeting: Diễn ra vào đầu mỗi sprint. Thành phần tham gia bao gồm product owner, scrum master và nhóm phát triển. Trong buổi họp này product owner sẽ trình bày mục tiêu và các công việc cần làm trong sprint. Sau đó đội phát triển sẽ thảo luận, đặt câu hỏi cũng như ước lượng thời gian và định ra những công việc cần phải làm,...

  • Daily scrum meeting: Sau buổi họp lên kế hoạch cho sprint, nhóm sẽ bắt tay vào công việc phát triển và vào đầu mỗi ngày sẽ có cuộc họp ngắn. Buổi họp này thường diễn ra ngắn khoảng 15 phút, cố định về thời gian, địa điểm họp. Trong cuộc họp này, từng người trong nhóm phát triển lần lượt báo cáo để trả lời cho 3 câu hỏi sau: Hôm qua đã làm gì? Hôm nay sẽ làm gì? Có khó khăn trở ngại gì không?

  • Scrum Master là người chịu trách nhiệm giải quyết hoặc tìm giải pháp cho những khó khăn, trở ngại mà nhóm gặp phải và đảm bảo là nó được giải quyết sớm nhất có thể để nhóm có thể hoàn thành công việc.

  • Họp sơ kết sprint: Vào cuối mỗi Sprint, nhóm sẽ trình bày những phần mình đã làm được trong Sprint hay còn gọi là demo trên sản phẩm thật. Thành phần tham dự là tất cả những ai quan tâm đến sản phẩm. Cuộc họp sẽ giúp đánh giá xem nhóm có đạt được mục tiêu đề ra ở buổi họp kế hoạch Sprint hay không.

  • Họp cải tiến sprint: Buổi họp này thường diễn ra ngay sau buổi họp sơ kết Sprint và mất tầm khoảng 1-2 giờ thảo luận. Trong buổi họp nhóm sẽ đánh giá những việc mình đã làm và cách để làm cho nó tốt hơn. Về cơ bản, buổi họp sẽ xoay quanh trả lời những câu hỏi: Những việc nào chúng ta nên bắt đầu làm ? Những việc nào chúng ta không nên làm tiếp? Những việc nào chúng ta nên duy trì?

  • Sau khi có được danh sách những việc “cần bắt đầu làm”, “không nên làm tiếp”, “nên duy trì làm tiếp”, nhóm sẽ thống nhất chọn ra vài thứ mà nhóm sẽ tập trung để cải tiến trong Sprint kế tiếp. Kết quả thực thi những cải tiến này sẽ được thảo luận trong buổi họp cải tiến của Sprint sau.

5 - Các công cụ trong scrum

  • Product Backlog: Là một danh sách các đầu mục công việc cần phải làm để phát triển sản phẩm. Những đầu mục này thường được mô tả dưới dạng các câu chuyện người dùng (user story). Vd như “Là người dùng, tôi muốn xem lại danh sách các sản phẩm đã chọn trong giỏ hàng để tôi có thể biết được tôi đã chọn những gì”.

  • Sprint Backlog: Là một danh sách các đầu mục công việc mà nhóm cam kết hoàn thành trong sprint. Trong thời gian diễn ra sprint, nhóm phát triển sẽ chỉ tập trung vào danh sách này và cập nhật tiến độ hoàn thành của chúng.

  • Biểu đồ Burndown (Burndown chart): Được dùng để theo dõi tiến độ của sprint hay của dự án. Không giống như biểu đồ Gantt chart (biểu đồ Gantt cho thấy ai làm việc gì và mất bao nhiêu thời gian để hoàn thành) thì biểu đồ Burndown sẽ cho thấy nhóm còn bao nhiêu thời gian để hoàn thành công việc đã được định ra lúc đầu. Biểu đồ Burndown đi xuống là một dấu hiệu tốt cho tiến độ hoàn thành công việc.

  • Bảng công việc: Được dùng để hiển thị những “câu chuyện người dùng” trong sprint, những công việc nào cần làm cho “câu chuyện” đó, trạng thái của chúng cũng như những ghi chú cần thiết khác. Bạn nên lưu ý “Bảng công việc” theo đúng nghĩa của nó là công việc được biểu diễn trên một tấm bảng trắng. Nhóm sẽ dùng những sticky note nhiều màu sắc để ghi thông tin và dán lên trên tấm bảng đó. Việc đó sẽ giúp nhóm cập nhật thông tin một cách trực quan và nhanh hơn. Tuy nhiên, có một số dự án do đội phát triển không cùng một nơi thì có thể dùng công cụ để thể hiện “Bảng công việc” nhưng bản chất thì không thay đổi.

Nguồn tham khảo:

https://vntesters.com/tong-quan-scrum/

https://vi.wikipedia.org/wiki/Scrum_(mô_hình_phát_triển_phần_mềm)

http://ecci.com.vn/tim-hieu-ve-agile-scrum

https://docs.google.com/document/d/1Woav-WLo-ot6OgOiOyuCql7YvXOUS3CujDnwQPOKbkU/edit

0