Agile là gì và quy trình phát triển phần mềm Agile

08/10/2019

Agile là một quy trình phát triển phần mềm mà chúng ta sẽ tìm hiểu về khái niệm cùng những nội dung liên quan đến quy trình này chi tiết trong bài viết này.

Agile thường bị mọi người hiểu nhầm rằng đây là một quy trình không có yêu cầu, thiết kế sẽ được tìm ra trong quá trình phát triển và bất cứ điều gì xa vời kiểu như cuộc họp lập kế hoạch là đơn giản không cần bàn tới. Dưới đây mình sẽ chấm dứt những quan niệm sai lầm đó.

Thông thường những người mới thực hành phát triển theo Agile và Scrum không chỉ gặp khó khăn để nhận thấy những việc cần phải làm mà còn khó trong việc làm thế nào để biết những việc họ đang làm có đúng hay không. Nếu không thực hiện các Sprint với những người có kinh nghiệm, sẽ rất khó để hiểu được sự ảnh hưởng của những thỏa hiệp trong quá trình phát triển dự án thực tế.

Không thể nói rằng thế giới doanh nghiệp hiện nay đã hoàn toàn được tái tổ chức với Scrum. Có thể một vài công ty phần mềm thương mại đã làm điều đó nhưng phần lớn các công ty khác chưa hiểu được tầm quan trọng của nó trong quá trình phát triển phần mềm.

Agile là gì?

Tìm hiểu bản tuyên ngôn Agile

Để hiểu rõ về Agile chúng ta sẽ đi tìm hiểu bản tuyên ngôn Agile. Nền tảng của phát triển phần mềm và quản lý dự án linh hoạt là tuyên ngôn Agile(Agile manifesto). Bản tuyên ngôn Agile được tạm dịch:

“Chúng tôi đã phát hiện ra những phương pháp phát triển phần mềm tốt hơn bằng cách thực hiện và giúp đỡ những người khác thực hiện nó. Qua công việc này chúng tôi đã đi đến việc đánh giá cao:

+ Cá nhân và sự tương tác hơn là quy trình và công cụ

+ Phần mềm chạy tốt hơn là tài liệu đầy đủ

+ Cộng tác với khách hàng hơn là đàm phán hợp đồng

+ Đáp ứng với sự thay đổi hơn là sát kế hoạch”

Cùng với bốn giá trị trên, tuyên ngôn Agile còn có mười hai nguyên lý mà chắc hẳn nhà phát triển phần mềm nào cũng biết và chúng ta có thể dễ dàng tìm kiếm được. Các nguyên lý tập trung đề cao khách hàng, chất lượng phần mềm, kỹ thuật và đề cao làm việc nhóm. Vậy Agile là gì?

+ Hiệu quả, nhanh chóng thích ứng được những thay đổi

+ Giao tiếp hiệu quả giữa các bên liên quan

+ Đưa khách hàng vào trong team của mình

+ Kiểm soát được công việc thực hiện

+ Năng suất: nhanh chóng

Khi bạn thực sự hiểu được ý nghĩa của bản Tuyên ngôn Agile thì bạn đã đặt chân vào việc thích ứng với Scrum khi cần thiết mà không ngược lại nền tảng cơ bản của Agile.

Ta thấy rằng trọng tâm Agile nghiêng về phía phát triển phần mềm

Quy trình Agile diễn ra như thế nào?

Trước khi tìm hiểu về nội dung quy trình Agile, chúng ta cần biết được những vấn đề liên quan để thực hiện quy trình phát triển phần mềm này đạt hiệu quả.

2.1. Nhiệm vụ của quy trình Agile

Quy trình phát triển phần mềm Agile được tiến hành như sau:

+ Được điều khiển bởi những mô tả của khách hàng về những gì yêu cầu

+ Nhận ra rằng kế hoạch là ngắn

+ Phát triển phần mềm lặp đi lặp lại với sự nhấn mạnh vào hoạt động xây dựng

+ Cung cấp nhiều “số gia phần mềm”

+ Điều chỉnh những thay đổi xảy ra

2.2. Điều kiện của nhóm team Agile

Để tiến hành quy trình phát triển phần mềm Agile cần có một nhóm các IT cùng làm việc. Những điểm quan trọng giữa những người trong một team Agile bao gồm:

+ Năng lực

+ Phổ biến chung

+ Sự cộng tác

+ Khả năng tự quyết định

+ Khả năng giải quyết vấn đề mở

+ Sự tin tưởng và tôn trọng lẫn nhau

+ Tự tổ chức

2.3. Quy trình Agile diễn ra như thế nào?

Quy trình Agile được sử dụng rộng rãi nhất là quy trình Extreme Programming(XP). Chúng ta sẽ tìm hiểu về quy trình này để nắm rõ hơn về Agile:

a. Kế hoạch XP

 + Bắt đầu với việc tạo ra “user stories”

 + Agile team đánh giá từng story và gán cho nó 1 giá (cost)

 + Các story được nhóm chuyển giao thành một increment chuyển giao

 + Một cam kết được thực hiện vào ngày chuyển giao

 + Sau increment đầu tiên “project velocity” được sử dụng để xác định số ngày cho những increment khác.

b. XP thiết kế

 + Tuân theo nguyên tắc KIS (đơn giản hóa quá trình, truyền đạt thông tin quan trọng)

 + Khuyến khích sử dụng CRC cards (phác thảo nhanh chóng một số ý tưởng rồi mỗi ý tưởng sẽ đưa ra một kịch bản hợp lý của tính toán, mỗi nhà phát triển đảm nhận vai trò của một hoặc nhiều lớp)

 + Khuyến khích “refactoring”- tính lặp trong thiết kế

c. XP kiểm thử

+ Tất cả các unit tests được thực hiện hàng ngày

 + “Acceptance tests” được định nghĩa bởi khách hàng và được dùng để đánh giá chức năng mà khách hàng nhìn thấy.

Trên đây, bạn đã có đầy đủ những thông tin cần biết để thực hiện quy trình phát triển phần mềm để giúp thực hiện hiệu quả, đúng tiến độ về thời gian và chất lượng.

Tìm hiểu về khung quy trình SCRUM

Có thể hiểu đơn giản Scrum như trong môn bóng bầu dục, là một cách để tái khởi động trận đấu khi xảy ra sự cố hoặc khi bóng đã ra ngoài cuộc chơi. Ý tưởng ở đây là để giữ cho trận đấu  (pháp triển phần mềm) được tiếp tục. Scrum như một khung quy trình dành cho việc quản lý và phát triển dự án phần mềm đơn lẻ. Scrum là một phần của phong trào Agile và dựa trên ý tưởng một nhóm sẽ hiệu quả hơn nếu các thành viên được phép tự tổ chức và trao quyền để làm những công việc của họ theo cách phù hợp nhất.

3.1. Đặc điểm phân biệt quy trình Scrum

Để phân biệt quy trình Scrum, chúng ta dựa vào các đặc điểm sau đây:

+ Công việc phát triển được chia thành các gói

+ Kiểm thử và tài liệu được thực hiện trong quá trình phát triển sản phẩm

+ Công việc trong “sprints” được bắt nguồn từ một “backlog” của các yêu cầu hiện tại

+ Thường xuyên có các cuộc gọi ngắn và đôi khi tiến hành không chính quy

+ “Demo” (trình diễn) được giao cho khách hàng với time-box xảy ra

Vì Scrum không thể sử dụng được trong những hoàn cảnh không có sự thích ứng,nên việc có kiến thức nền tảng tốt về phong trào và quy trình Agile sẽ giúp bạn biết cách thích ứng Scrum với môi trường của mình.

3.2. Scrum hoạt động thế nào??

Nhóm Scrum nên là liên chức năng, bao gồm một ScrumMaster, một Product Owner và nhóm phát triển, với tất cả kỹ năng cần thiết( như thu thập yêu cầu, thiết kế, lập trình và kiểm thử) để xây dựng phần mềm.

Mặc dù trong thời gian đầu việc lập kế hoạch phát hành là không bắt buộc trong Scrum, nhưng thời gian đã chứng minh là nó rất hữu ích trong việc giúp nhiều nhóm Scrum trở nên hiệu quả hơn. Bởi thế nên khuyến khích Product Owner ( chủ sản phẩm) hãy cùng làm việc với nhóm trong buổi lập kế hoạch phát hành mặc dù nó là việc khó khăn, bởi điều đó yêu cầu Product Owner  (chủ sản phẩm) phải nghiên cứu sản phẩm trước buổi họp lập kế hoạch.

Product Owner (chủ sản phẩm) càng biết nhiều về sản phẩm, thì càng có thể giúp nhóm nhiều hơn, Mục tiêu của việc lập kế hoạch phát hành là để nhóm xác định tất cả các phát hành mà sản phẩm phần mềm đó nên có, có thể kèm theo lịch trình chuyển giao.

3.3. Điều quan trọng trong quy trình Scrum

Trong quy trình Scrum, điều quan trọng mà bạn cần phải chú ý tới bao gồm:

+ Tốc độ của nhóm (team velocity) là một khái niệm cần thiết trong Scrum mặc dù nó không được coi là có giá trị hoặc là một thao tác. Tốc độ của nhóm là tổng số điểm (point) của các User Story hoặc hạng mục trong Product Backlog mà nhóm có thể chuyển giao trong một Sprint.

+ Đảm bảo chất lượng: trong Scrum việc kiểm thử rất quan trọng và có sự thay đổi về bản chất, bạn sẽ muốn xây dựng mối quan hệ tốt với nhóm Đảm bảo chất lượng (QA)

+ Quản lý vận hành: là những người tham gia vào việc điều khiển moi hoạt động tiền sản xuất. Bạn phải có cơ hội giải thích với họ điều bạn cần để mã nguồn chuyển giao và cuối mỗi Sprint sẽ thỏa mãn kỳ vọng của họ. Bản chất chính của Scrum là cung cấp nhiều bản phát hành phần mềm hơn, thường là trong nhiều bản cập nhật nhỏ hơn, ngược lại với lượng những bản cập nhật mà nhóm vận hành sẽ cần xử lý

3.4. Lợi thế của quy trình Scrum

Quy trình Scrum có những lợi thế riêng của mình trong Agile, cụ thể như sau:

+ Cơ chế giảm thiểu rủi ro

+ Quy trình làm phần mềm tinh gọn hơn

+ Quy trình quản lý dự án phần mềm có chức năng thích ứng hơn

+ Một khung là việc dựa trên một nhóm tổ chức, động lực, quyền sở hữu và niềm tự hào

Như vậy Scrum là một phương pháp Agile, một khung quản lý dự án phổ biến dùng để phát triển sản phẩm, phần mềm.

TẠI SAO AGILE VÀ SCRUM MANG LẠI HIỆU QUẢ TRONG QUẢN LÝ DỰ ÁN PHẦN MỀM?

Mặc dù Agile và đặc biệt là Scrum có thể khó triển khai, nhưng thực tế chức minh nó thực sự mang lại hiệu quả nếu triển khai đúng cách. Lý do khiến cho Agile và Scrum mang lại hiệu quả cao hơn trong việc quản lý và phát triển dự án:

+ Một cơ chế giảm thiểu rủi ro mang tính hệ thống: Tất cả những người chịu trách nhiệm lập kế hoạch và thực hiện dự án đều biết tầm quan trọng của việc giảm thiểu mức độ rủi ro hoặc sự bấp bênh tới mức 0 hoặc ít nhất có thể.

Trong khi chúng ta có tới bốn cách để đối phó với rủi ro (né tránh, chuyển nhượng, chấp nhận và giảm thiểu), thông thường người quản lý dự án phải chọn cách cuối cùng là giảm thiểu rủi ro. Đây là chỗ mà Scrum tỏ ra vượt trội với chu kỳ thanh tra và thích nghi thường xuyên.

+ Một vòng đời phát triển phần mềm tinh gọn hơn

+ Quy trình quản lý dự án có khả năng thích ứng hơn. Không giống như quy trình tuần tự trong môi trường thác nước (waterfall) coi tính ổn định dự án là nền tảng, Scrum có sự thay đổi được coi là bất biến

+ Một khung quy trình phát triển và quản lý dự án dựa trên động lực và niềm tự hào cá nhân. Hơn bất cứ điều gì khác, điều này có thể là một trong những nguyên lý mạnh mẽ nhất của Agile và Scrum. Tâm điểm mới không phải là việc có người quản lý ra lệnh cho các thành viên những gì họ cần phải làm mà là để cho các nhóm tự quyết định họ phải làm thế nào để hoàn thà công việc của nhóm.

SCRUM AGILE

Scrum là một phần của Agile. Chúng ta cùng tìm hiểu sâu hơn về khía cạnh này dưới đây.

Scrum: phải tuân thủ đúng nguyên tắc tuân theo khi thực thành phát triển phần mềm theo , có các cuộc phân chia công đoạn, công việc phải có một cấu trúc nhất định.

Agile: tập nguyên lý định hướng của Agile không áp đặt để làm việc, liên tục thay đổi cải tiến, lối tư  duy không ràng buộc.Các rủi ro có thể đến với Agile, nhưng chúng ta có thể cố gắng tối thiểu hóa chứ không loại bỏ hết chúng được.Agile khi bắt đầu sản phẩm cuối cùng chưa biết rõ ràng, khách hàng sẽ có những thay đổi trong quá trình thực hiện dự án, chúng ta có thể dự đoán nhiều loại thay đổi trong suốt dự án. Agile phát triển phần mềm theo các vòng lặp.

Như vậy, Scrum là Agile nhưng ngược lại không hoàn toàn là Agile. Agile là triết lý còn Scrum là cách để hiện thực hóa triết lý Agile. Scrum là con đường thực hiện Agile, nên giữa chúng rất giống nhau. Cả hai đều tập trung và xuất phần mềm đều đặn và nhanh nhất theo một quy trình lặp lại cũng như chấp nhận thay đổi. Sự minh bạch và liên tục cải tiến được cả 2 quy trình này chấp nhận.

KHI NÀO SỬ DỤNG AGILE, KHI NÀO SỬ DỤNG SCRUM

Vì 2 quy trình phát triển phần mềm này có những điểm khác biệt nên chúng ta không thể đồng nhất thành một. Tùy vào từng trường hợp cụ thể mà người ta sẽ lựa chọn quy trình Agile hay quy trình Scrum. 

6.1. Khi nào sử dụng Scrum

Trong những trường hợp sau, người ta sẽ áp dụng quy trình Scrum trong phát triển phần mềm:

+ Khi các dự án mà có nhiều điểm chưa rõ ràng

+ Khi project team cần được tự do vận hành

+ Cần release software thường xuyên

+ Nhóm scrum với vai trò được phân định rõ ràng, mỗi thành phần làm việc với mục đích rõ ràng

+ Scum đối phó với change rất hiệu quả vì thế team có thể dễ dàng đối ứng với các yêu cầu hay chức năng mới thông qua process.

6.2. Khi nào sử dụng Agile

Còn sử dụng quy trình Agile trong các trường hợp sau đây:

+ Khi nhu cầu từ khách hàng và giải pháp phần mềm thay đổi thường xuyên

+ Khi cần cộng tác chặt chẽ với khách hàng, cung cấp các phản hồi nhanh, khách hàng nắm rõ hơn những gì họ muốn

+ Khi mà giải pháp không rõ từ đầu và phạm vi không xác định rõ

+ Có thể bẻ nhỏ thành từng phần và được thực thi trong những phân đoạn lặp ngắn

+ Những thay đổi phút chót có thể quản lý được

+ Những sai sót mang lại những bài học chứ không mang lại thảm họa.

Agile là gì? Phẩm chất của Scrum Master

Tìm hiểu 7 phẩm chất của Scrum Master

Đây là một trong những vai trò quan trọng nhất của dự án Scrum, cho dù ai đó thích hay không thích thì một số người vẫn kỳ vọng Scrum Master không chỉ trong việc giúp nhóm gỡ bỏ các trở ngại mà còn hỗ trợ họ giải quyết các xung đột và đưa nó trở thành một nhóm có hiệu suất cao.

Dưới đây là bảy phẩm chất của một người Scrum Master cần phải có để có thể đủ khả năng lãnh đạo nhóm thực hiện kế hoạch phát triển phần mềm thành công gồm:

7.1. Có kiến thức chuyên sâu về cả lý thuyết lẫn thực hành Scrum

Kiến thức về Scrum được coi là phẩm chất đầu tiên mà Scrum phải có. Ngoài kiến thức lý thuyết về Scrum thậm chí ngay cả khi có chứng chỉ xác nhận, việc có kiến thức thực hành Scrum thu được từ trải nghiệm là tốt nhất cho vai trò ScrumMaster.

Như bạn biết, Scrum có vẻ đơn giản về lý thuyết nhưng việc triển khai thực tế là khá là thách thức, đặc biệt nếu công ty bạn đang làm việc không tổ chức lại hoạt động theo hướng Scrum.

7.2. Có tố chất tốt của một lãnh đạo kiểu phục vụ

Vì Scum là một phần của phong trào Agile và dựa trên ý tưởng một nhóm sẽ đạt hiệu quả hơn nếu các thành viên được phép tự tổ chức và trao quyền để làm những công việc của họ theo cách phù hợp nhất. Vì vậy Scrum Master cần là người hiểu và tin tưởng rằng vai trò lãnh đạo kiểu phục vụ là tố chất rất quan trọng

Mặt khác, một trong những vai trò quan trọng nhất của Scrum Master là phục vụ nhóm phát triển trong suốt Sprint thông qua việc gỡ bỏ các trở ngại nhiều nhất có thể để bảo vệ họ càng nhiều càng tốt trước những phiền toái từ bên ngoài.

7.3. Có kỹ năng tốt về mặt tổ chức

Các Product Owner sẽ dựa vào ScrumMaster để được trợ giúp tổ chức các cuộc họp theo yêu cầu của Scrum nhằm thu được những lợi ích từ Scrum để triển khai công việc của họ. Các cuộc họp mà Scrum Master cần giúp tổ chức: Lập Kế Hoạch Phát Hành, Lập kế hoạch Sprint, Họp Scrum hàng ngày, Sơ kết Sprint và họp cải tiến Sprint.

Nếu không có sự trợ giúp từ ScrumMaster, nhóm phát triển và Product Owner sẽ khó khăn trong việc ghi chép lại toàn bộ các cuộc họp trong khi họ đang cố gắng tập trung vào công việc của mình.

7.4. Có kỹ năng tốt về giao tiếp

ScrumMaster của một dự án sẽ phải giao tiếp với nhiều người bao gồm thành viên của nhóm phát triển, các nhóm khác, các nhà quản lý kinh doanh, quản lý kỹ thuật và Product Owner để giúp họ hiểu những lợi ích và yêu cầu của Scrum.

Một khía cạnh ít được biết đến trong vai trò ScrumMaster đó là trợ giúp Product Owner trong việc chuẩn bị và tham dự các cuộc họp để báo cáo với quản lý, điều này rõ ràng đòi hỏi Scrum Master cần giao tiếp giỏi.

7.5. Có kỹ năng thuyết trình tuyệt vời

Do giao tiếp là một trong những kỹ năng quan trọng nhất của Scrum Master nên kỹ năng thuyết trình là một kỹ năng khác mà Scrum Master cần có để thành công. Dù sử dụng PowerPoint hay bất cứ công cụ thuyết trình nào để truyền thông cho những thành viên còn lại của tổ chức thì việc Scrum Master cần trau dồi kỹ năng thuyết trình càng nhiều càng tốt.

7.6. Có kỹ năng giải quyết xung đột

Trừ khi bạn đủ may mắn để làm việc trong một công ty mà mọi người đều yêu quý nhau hoặc nơi mà Scrum đã chứng minh được sự thành công bằng việc không có sự xung đột giữa các cá nhân, nếu không nhóm của bạn có thể trải nghiệm với những xung đột.Một trong những kỹ năng mà Scrum Master nên làm là hoàn toàn giúp các thành viên giải quyết các xung đột của họ để không gây ảnh hưởng đến khả năng chuyển giao của nhóm.Đây là một khía cạnh khác ít được biết tới trong vai trò lãnh đạo của Scrum Master. Khía cạnh này thường không được thảo luận nhưng trong thực tiễn lại là thứ mà Scrum Master được kỳ vọng sẽ trợ giúp để giữ cho nhóm tiến về phía trước.

7.7. Có kỹ năng phát triển nhân lực tuyệt vời

Đây là một kỹ năng khác mà Scrum Master nên có để giúp hướng dẫn và phát triển nhóm thành nhóm có hiệu suất cao. Điều này hầu như được thực hiện thông qua việc khích lệ và thử thách gián tiếp.

Tóm lại, Agile và Scrum là các quy trình phát triển phần mềm tiện ích mà mỗi công ty cần hướng đến. Nếu bạn là một người yêu thích và có đam mê với kỹ thuật phần mềm thì đây là những hiểu biết căn bản bạn cần phải nắm rõ. Chúc bạn thành công với những gì mình đưa ra.

>>> Xem thêm các bài viết:

Tin liên quan