Sự ra đời của phương pháp phát triển phần mềm Agile

Các phần mềm tạo ra ngày càng phức tạp và có quy mô lớn hơn dẫn đến nhiều khó khăn trong việc xây dựng và quản lý một dự án phần mềm. Chính vì vậy, việc tìm kiếm và phát triển những phương pháp và công cụ quản lý dự án phần mềm tốt hơn là một điều tất yếu.

Chúng ta đã biết rất nhiều phương pháp giúp xác định được đường hướng xây dựng và phát triển phần mềm, ví dụ như một số quy trình: Mô hình thác nước, mô hình xoắn ốc, mô hình làm bản mẫu,… Trong đó mô hình thác nước (water fall) có thể coi là một mô hình truyền thống trong quy trình phát triển phần mềm.

(https://d2myx53yhj7u4b.cloudfront.net/sites/default/files/waterfall%402x.png)

Về cơ bản, mô hình này sẽ trải qua từng giai đoạn từ thu thập và phân tích yêu cầu dự án, thiết kế, xây dựng, kiểm tra và cuối cùng là bảo trì. Những giai đoạn này được thực hiện tuần tự từ lúc bắt đầu cho tới lúc kết thúc dự án. Với việc sử dụng mô hình thác nước, có rất nhiều vấn đề mà đội ngũ thực hiện dự án phần mềm phải đối mặt. Một trong những vấn đề tiêu biểu đó là: Từ giai đoạn thu thập và phân tích yêu cầu dự án, sau đó lập kế hoạch cho đến khi phần mềm được thực hiện xong thì khách hàng mới có sản phẩm để sử dụng. Dẫn đến việc khách hàng có rất ít cơ hội góp ý, thay đổi có ý nghĩa trong quá trình xây dựng phần mềm. Và việc thay đổi kế hoạch sẽ dẫn tới tiêu tốn nhiều chi phí.

Chính sự hạn chế từ những phương pháp truyền thống mà cần có một phương pháp hay quy trình phát triển phần mềm mới ra đời. Và quy trình phát triển phần mềm linh hoạt Agile đã phần nào đáp ứng được yêu cầu ấy. 

Agile là gì?

Phương pháp phát triển Agile (Agile Development Method) ra đời từ đầu những năm 90, với ý tưởng khắc phục những nhược điểm của mô hình truyền thống cụ thể là mô hình thác nước. Agile là tên gọi chung để chỉ các phương pháp phát triển nhanh. “Agile” có nghĩa là nhanh nhẹn, khéo léo trong hành động.

Agile Software Development (phương pháp phát triển phần mềm linh hoạt) với mục tiêu là phần mềm phải có khả năng biến đổi, phát triển và tiến hóa theo thời gian mà không cần phải làm lại từ đầu. Phương thức này tập trung vào tính đơn giản: tạo ra một phần mềm thật đơn giản đáp ứng đúng yêu cầu của khách hàng hôm nay và sẵn sàng cho những thay đổi vào ngày mai.

Phương pháp Agile cố gắng cực tiểu hóa rủi ro bằng cách phát triển phần mềm trong những khung thời gian ngắn và sự cộng tác chặt chẽ với khách hàng. Mỗi bước lặp (iteration) giống như phát triển một phần mềm hoàn chỉnh, cũng gồm có lấy yêu cầu, làm phân tích thiết kế, lập trình, kiểm thử, viết tài liệu. Điểm nổi bật là khả năng sửa chữa biến đổi phần mềm ngay cả khi dự án đã bắt đầu.

Điểm quan trọng làm nên sự khác biệt của Agile so với các mô hình truyền thống đó là: các mô hình truyền thống là mô hình theo kế hoạch, còn mô hình Agile thì không nhất thiết phải tuân theo kế hoạch, nó có thể có những bước đột phá để tạo ra một phần mềm hiệu quả nhất.

Có 4 tính chất trọng tâm của Agile đó là:

  • Cá nhân và tương tác hơn là quy trình và công cụ
  • Phần mềm hoạt động được hơn là việc thu thập tài liệu để phát triển
  • Hợp tác với khách hàng hơn là thương thuyết hợp đồng
  • Phản ứng theo thay đổi hơn là theo sát kế hoạch

(https://viblo.asia/p/kiem-thu-agile-va-vai-tro-cua-kiem-thu-vien-agile-z3NVRkqpG9xn)

SCRUM – Quy trình cụ thể theo hướng Agile

Scrum là một phương pháp luận được viết bởi Ken Schwaber và Mide Beedle. Thuật ngữ Scrum được đưa ra dựa trên một bài viết của Takeuchi và Nonaka (1986) mà trong đó giới thiệu một quy trình phát triển phần mềm nhanh có khả năng thích nghi.

Phương pháp phát triển phần mềm Scrum được biết đến như một phương pháp quản lý nâng cao, áp dụng cho các hệ thống hiện có. Do đó, có thể áp dụng Scrum với các phương pháp phát triển phần mềm khác.

Ý tưởng chính của Scrum là cho rằng việc phát triển một hệ thống cần phải quản lý một loạt các đại lượng như yêu cầu, thời gian, tài nguyên hay công nghệ dùng để phát triển, mà những đại lượng này hoàn toàn có thể thay đổi trong quá trình phát triển. Từ đó cho thấy quá trình phát triển dự án mang tính không ổn định, phức tạp và khó đoán trước. Do đó, cần phải có một quy trình phát triển có tính linh hoạt cao để có thể đáp ứng được những thay đổi này, và sản phẩm đầu ra phải có tính ứng dụng cao đáp ứng nhu cầu khách hàng. 

Đặc điểm:

  • Linh động trong việc đưa ra kết quả – nội dung được đưa ra phụ thuộc vào môi trường.
  • Linh động trong việc lập lịch – việc đưa ra có thể sớm hơn hoặc muộn hơn kế hoạch.
  • Đội ngũ phát triển phần mềm nhỏ – đội nhỏ được chia thành các nhóm nhỏ, một dự án phần mềm có thể có nhiều nhóm nhỏ cùng nhau phát triển.
  • Thảo luận thường xuyên – quá trình thực hiện của từng nhóm thường xuyên được xem xét thảo luận.
  • Tính cộng tác – trong quá trình thực hiện dự án, việc cộng tác giữa các thành viên với nhau và với đối tác được coi trọng.

Agile truyền thống liệu đã lạc hậu?

Tuy nhiên, Agile truyền thống đã ra đời từ rất lâu, đã mang lại rất nhiều thay đổi tích cực cho việc phát triển các dự án phần mềm. Nhưng qua năm tháng, thế giới luôn thay đổi, và một số tính chất của Agile đã không còn phù hợp với môi trường hiện tại.

Modern Agile là một cách tiếp cận mới và rộng hơn so với Agile truyền thống. Modern Agile không chỉ được áp dụng riêng cho việc phát triển phần mềm mà còn được áp dụng trong các dự án thuộc lĩnh vực khác.

Modern Agile là gì?

Để làm rõ Modern Agile là gì, đây là khái niệm được mô tả trên website của Modern Agile (http://modernagile.org/): “Trong thập kỷ qua, các công ty trong ngành công nghiệp phần mềm đã phát hiện ra những cách đơn giản hơn, chắc chắn hơn, hợp lý hơn để áp dụng Agile. Những cách tiếp cận hiện đại này tập trung vào việc tạo ra những kết quả vượt trội. Với những cách tiếp cận hiện đại, Modern Agile có ý nghĩa hơn nhiều so với phương pháp Agile truyền thống.”

Modern Agile có 4 tính chất trọng tâm:

(https://medium.com/agile-insights/modern-agile-what-is-it-and-why-is-it-a-great-thing-66ae7821a722)

  • Làm mọi người trở nên thật tuyệt vời (Make people awesome)

Điều này có nghĩa là khiến cho người người liên quan tới dự án/sản phẩm như người dùng, đồng nghiệp, quản lý, các bên liên quan,… trở nên tuyệt vời hơn. Tuy nhiên, làm sao để những người trong hệ sinh thái của chúng ta trở nên tuyệt vời? Có rất nhiều thứ chúng ta có thể làm để có được điều này. Ví dụ như, nếu đồng nghiệp cảm thấy không được vui, hãy làm cho họ vui. Nếu khách hàng thấy hài lòng với giá trị mà chúng ta mang lại, bằng cách nào để cải thiện và nâng cao hơn nữa. Khiến cho công ty trở thành nơi mà bạn muốn đến làm mỗi ngày…

  • Đảm bảo an toàn là điều kiện tiên quyết

Khi mọi người cảm thấy an toàn, họ sẽ có nền tảng để tạo nên những giá trị tuyệt vời. An toàn ở đây bao gồm cả an toàn vật lý và an toàn tâm lý. Đây là một tính chất hết sức quan trọng của Modern Agile.

Bên cạnh sự an toàn của con người, còn có sự an toàn của sản phẩm. Sản phẩm có dễ bị hư hỏng không, có gây nguy hiểm cho người dùng không?…

  • Cung cấp giá trị liên tục

Điều này có nghĩa là tạo ra giá trị và đưa tới tay khách hàng nhanh nhất có thể. Đó là việc chia nhỏ công việc, sản phẩm thành những phần nhỏ hơn để bàn giao nhanh hơn và một cách liên tục.

  • Trải nghiệm và học nhanh chóng

Việc này rất quan trọng để bạn, công ty bạn tách biệt khỏi các đối thủ cạnh tranh. Nguyên tắc này nói về việc phải trải nghiệm và học hỏi từ những trải nghiệm này. Điều này sẽ cung cấp cho chúng ta những phương tiện để làm ra những thứ khiến mọi người trở nên tuyệt vời.

Bốn nguyên tắc của Modern Agile được hiểu một cách dễ hiểu như thế này: Nếu bạn cảm thấy an toàn khi thất bại, bạn sẽ có được trải nghiệm và sẽ gặt hái được những bài học một cách nhanh chóng. Điều này cho phép bạn tạo ra và phân phối những giá trị tới khách hàng nhanh hơn và liên tục hơn. Từ đó khiến cho mọi người trở nên tuyệt vời hơn.

Kết luận

Những nguyên tắc của Agile/Scrum truyền thống là rất tốt và vẫn còn được áp dụng hiệu quả trong quá trình xây dựng và phát triển phần mềm. Tuy nhiên, những cách tiếp cận mới của Modern Agile không loại bỏ đi giá trị của Agile truyền thống, mà chỉ bổ sung những tính chất quan trọng sao cho phù hợp với điều kiện, môi trường hiện tại, không chỉ trong phạm vi ngành công nghiệp phần mềm mà còn trong những lĩnh vực khác nữa. Hãy chọn cho dự án/công ty mình một hướng đi phù hợp và đem lại hiệu quả tốt nhất nhé.


Bài viết liên quan