Giới thiệu

Trong quá trình thực hiện dự án, đặc biệt là các dự án phần mềm, chúng ta thường gặp khó khăn trong việc xác định đầy đủ và chính xác các yêu cầu của sản phẩm để có thể lập một kế hoạch hoàn chỉnh ngay từ đầu.

Điều này xuất phát từ việc có nhiều yếu tố có thể ảnh hưởng đến sản phẩm cuối cùng. Những yếu tố này có thể thay đổi mà chúng ta không thể dự đoán trước, chẳng hạn như môi trường kinh doanh, yêu cầu của dự án, yếu tố kỹ thuật và yếu tố con người.

Thay đổi và sự không chắc chắn là những điều khó tránh khỏi trong quá trình phát triển sản phẩm. Chúng ta không thể loại bỏ hoàn toàn những thay đổi này mà cần tìm cách thích ứng với chúng. Trong điều kiện như vậy, những phương pháp phát triển dựa quá nhiều vào việc dự đoán và lập kế hoạch ngay từ đầu có thể trở nên rủi ro.

Agile là gì?

Agile thực chất là một cách tư duy và tập hợp các giá trị, nguyên tắc nhằm giúp quá trình phát triển phần mềm nhanh chóng thích ứng và phản hồi với những thay đổi, từ đó tạo ra giá trị trong một môi trường liên tục biến động và không chắc chắn.

Agile là một cách tiếp cận trong phát triển phần mềm, đề cao việc phát triển lặp và kiểm thử liên tục trong suốt vòng đời phát triển phần mềm của dự án. Thay vì thực hiện các giai đoạn phát triển và kiểm thử một cách tuần tự như mô hình Waterfall, Agile chia quá trình phát triển thành các vòng lặp nhỏ, trong đó sản phẩm được phát triển, kiểm thử và nhận phản hồi liên tục.

Agile trong phát triển phần mềm được mô tả thông qua 4 giá trị và 12 nguyên tắc được nêu trong Tuyên ngôn Phát triển Phần mềm Linh hoạt (Manifesto for Agile Software Development), mà chúng ta sẽ tìm hiểu ở những phần tiếp theo.

Ban đầu, Agile được hình thành trong lĩnh vực phát triển phần mềm. Tuy nhiên, những tư tưởng về khả năng thích ứng, phản hồi nhanh và cải tiến liên tục của Agile sau đó đã được áp dụng sang nhiều lĩnh vực khác như quản lý dự án, nhân sự, marketing, quản trị và lãnh đạo.

Phát triển phần mềm theo Agile

Agile Software Development (phát triển phần mềm theo Agile) là thuật ngữ chung dùng để chỉ các phương pháp và kỹ thuật phát triển phần mềm dựa trên các giá trị và nguyên tắc của Agile.

Những tư tưởng cốt lõi của Agile được thể hiện trong Tuyên ngôn Phát triển Phần mềm Linh hoạt (Manifesto for Agile Software Development) thông qua 4 giá trị và 12 nguyên tắc. Từ những giá trị và nguyên tắc này, nhiều phương pháp tiếp cận và framework được phát triển để giúp các cá nhân và đội nhóm áp dụng Agile vào bối cảnh phát triển phần mềm thực tế.

Các phương pháp tiếp cận Agile thường đề cao việc lập kế hoạch thích ứng, phát triển lặp và tăng dần, chuyển giao phần mềm sớm, nhận phản hồi thường xuyên và cải tiến liên tục. Nhờ đó, đội ngũ có thể phản ứng linh hoạt hơn trước những thay đổi về yêu cầu, kỹ thuật và môi trường kinh doanh trong quá trình phát triển.

Agile không phải là một phương pháp cụ thể. Agile Software Development là cách gọi chung cho việc phát triển phần mềm dựa trên các giá trị và nguyên tắc Agile.

Tuyên ngôn phát triển phần mềm linh hoạt (Tuyên ngôn Agile)

Việc phát triển phần mềm theo Agile nhấn mạnh vào 4 giá trị cốt lõi:

  • Individuals and interactions over processes and tools: Cá nhân và sự tương tác hơn là quy trình và công cụ.
  • Working software over comprehensive documentation: Phần mềm hoạt động hơn là tài liệu đầy đủ.
  • Customer collaboration over contract negotiation: Cộng tác với khách hàng hơn là đàm phán hợp đồng.
  • Responding to change over following a plan: Phản hồi với sự thay đổi hơn là bám theo kế hoạch.

Bốn giá trị này không phủ nhận các giá trị ở bên phải, mà nhấn mạnh rằng trong quá trình phát triển phần mềm, các giá trị ở bên trái được ưu tiên hơn khi có sự đánh đổi.

12 Nguyên tắc phía sau tuyên ngôn Agile

Các nguyên tắc bao gồm:

  • Ưu tiên cao nhất của chúng tôi là thỏa mãn khách hàng thông qua việc chuyển giao sớm và liên tục các phần mềm có giá trị.
  • Chào đón việc thay đổi yêu cầu, thậm chí rất muộn trong quá trình phát triển. Các quy trình linh hoạt tận dụng sự thay đổi trong các lợi thế cạnh tranh của khách hàng.
  • Thường xuyên chuyển giao phần mềm chạy tốt tới khách hàng, từ vài tuần đến vài tháng, ưu tiên cho các khoảng thời gian ngắn hơn.
  • Nhà kinh doanh và nhà phát triển phải làm việc cùng nhau hàng ngày trong suốt dự án.
  • Xây dựng các dự án xung quanh những cá nhân có động lực. Cung cấp cho họ môi trường và sự hỗ trợ cần thiết, và tin tưởng họ để hoàn thành công việc.
  • Phương pháp hiệu quả nhất để truyền đạt thông tin tới nhóm phát triển trong nội bộ nhóm phát triển là hội thoại trực tiếp.
  • Phần mềm chạy tốt là thước đo chính của tiến độ.
  • Các quy trình linh hoạt thúc đẩy phát triển bền vững. Các nhà tài trợ, nhà phát triển và người dùng có thể duy trì một nhịp độ liên tục không giới hạn.
  • Liên tục quan tâm đến các kỹ thuật và thiết kế tốt để gia tăng sự linh hoạt.
  • Sự đơn giản – nghệ thuật tối đa hóa lượng công việc chưa xong – là căn bản.
  • Các kiến trúc tốt nhất, yêu cầu tốt nhất và thiết kế tốt nhất sẽ được làm ra bởi các nhóm tự tổ chức.
  • Nhóm phát triển sẽ thường xuyên suy nghĩ về việc làm sao để trở nên hiệu quả hơn, sau đó họ sẽ điều chỉnh và thay đổi các hành vi của mình cho phù hợp.

                                                    Nội dung 12 nguyên tắc Agile

Các phương pháp Agile

Agile không quy định một phương pháp hay quy trình cụ thể để áp dụng. Dựa trên các giá trị và nguyên tắc của Agile, có nhiều phương pháp tiếp cận, framework và kỹ thuật thực hành khác nhau được sử dụng trong thực tế, chẳng hạn như Scrum, Kanban, Extreme Programming (XP), Lean Software Development và Scrumban.

Tùy vào bối cảnh, đặc điểm và nhu cầu của dự án, đội ngũ có thể lựa chọn những phương pháp tiếp cận và framework khác nhau để áp dụng các giá trị và nguyên tắc Agile.

  • Scrum – framework để quản lý và phát triển sản phẩm phức tạp theo các vòng lặp.
  • Kanban – phương pháp quản lý dòng công việc, tập trung vào trực quan hóa và tối ưu luồng công việc.
  • XP (Extreme Programming) – phương pháp Agile tập trung mạnh vào các kỹ thuật phát triển phần mềm và chất lượng code.
  • Lean Software Development – áp dụng tư duy Lean vào phát triển phần mềm, tập trung vào loại bỏ lãng phí và tối đa hóa giá trị.
  • Scrumban – kết hợp một số đặc điểm của Scrum và Kanban.

Lợi ích khi áp dụng Agile

Việc áp dụng Agile giúp đội ngũ phát triển phần mềm thích ứng tốt hơn với những thay đổi trong quá trình phát triển. Thay vì cố gắng xác định và cố định toàn bộ yêu cầu ngay từ đầu, Agile khuyến khích phát triển theo từng vòng lặp nhỏ, thường xuyên nhận phản hồi và điều chỉnh sản phẩm.

Một số lợi ích thường được nhắc đến khi áp dụng Agile gồm:

  • Thích ứng tốt hơn với thay đổi: Có thể điều chỉnh yêu cầu và ưu tiên khi nhu cầu của khách hàng hoặc môi trường kinh doanh thay đổi.
  • Chuyển giao giá trị sớm: Sản phẩm được phát triển và chuyển giao từng phần thay vì phải chờ đến cuối dự án.
  • Nhận phản hồi thường xuyên: Khách hàng và các bên liên quan có nhiều cơ hội phản hồi trong quá trình phát triển.
  • Giảm rủi ro: Các vấn đề có thể được phát hiện sớm thông qua việc phát triển, kiểm thử và đánh giá thường xuyên.
  • Cải tiến liên tục: Đội ngũ thường xuyên đánh giá cách làm việc và tìm cách cải thiện quy trình cũng như sản phẩm.
  • Tăng sự phối hợp: Agile khuyến khích sự giao tiếp và hợp tác thường xuyên giữa các thành viên trong nhóm, khách hàng và các bên liên quan.

Một số báo cáo cũng đã nghiên cứu sự khác biệt về kết quả giữa các dự án áp dụng Agile và các phương pháp phát triển truyền thống. Chẳng hạn, Báo cáo CHAOS của Standish Group năm 2015 đưa ra các số liệu so sánh giữa các nhóm dự án áp dụng Agile và các dự án theo cách tiếp cận truyền thống.

Đặc điểm của các phương pháp Agile

Các phương pháp Agile có thể khác nhau về cách tổ chức công việc, nhưng thường có một số đặc điểm chung:

  • Tính lặp (Iterative): Quá trình phát triển được chia thành các vòng lặp ngắn. Trong mỗi vòng lặp, đội ngũ thực hiện các hoạt động cần thiết như lập kế hoạch, phân tích, thiết kế, phát triển và kiểm thử. Sau mỗi vòng lặp, đội ngũ có thể đánh giá kết quả và điều chỉnh kế hoạch cho vòng tiếp theo. Trong Scrum, các vòng lặp này được gọi là Sprint.
  • Tính tăng trưởng (Incremental): Mỗi vòng lặp tạo ra một phần gia tăng của sản phẩm. Các phần này được tích hợp dần để sản phẩm ngày càng hoàn thiện và có thể tạo ra giá trị sớm thay vì phải chờ đến cuối dự án.
  • Vòng phản hồi ngắn và khả năng thích ứng: Việc phát triển theo các vòng lặp ngắn giúp đội ngũ thường xuyên nhận phản hồi từ khách hàng và các bên liên quan, từ đó có thể điều chỉnh yêu cầu, ưu tiên và hướng phát triển khi cần thiết.
  • Giao tiếp và hợp tác thường xuyên: Agile đề cao sự giao tiếp và hợp tác giữa các thành viên trong nhóm, khách hàng và các bên liên quan. Việc trao đổi trực tiếp thường được ưu tiên khi phù hợp vì giúp thông tin được truyền đạt và phản hồi nhanh hơn.
  • Tập trung vào chất lượng: Chất lượng được quan tâm xuyên suốt quá trình phát triển thay vì chỉ được kiểm tra ở cuối dự án. Các kỹ thuật như Continuous Integration, Automated Testing, Pair Programming, Test-Driven Development (TDD) và Refactoring có thể được sử dụng để duy trì và cải thiện chất lượng phần mềm.
  • Tập trung vào giá trị: Đội ngũ thường xuyên đánh giá và ưu tiên những công việc mang lại nhiều giá trị hơn cho khách hàng và sản phẩm. Những công việc không cần thiết hoặc tạo ra ít giá trị có thể được loại bỏ hoặc trì hoãn.

Kết luận

Agile không phải là một quy trình hay framework cụ thể, mà là một cách tiếp cận trong phát triển phần mềm dựa trên 4 giá trị và 12 nguyên tắc được nêu trong Tuyên ngôn Phát triển Phần mềm Linh hoạt.

Điểm cốt lõi của Agile là khả năng thích ứng với thay đổi, tạo ra giá trị sớm, nhận phản hồi thường xuyên và liên tục cải tiến. Từ những giá trị và nguyên tắc này, nhiều phương pháp tiếp cận và framework khác nhau như Scrum, Kanban, XP và Lean Software Development được sử dụng để áp dụng Agile vào thực tế.

Hiểu được Agile là nền tảng để có thể hiểu rõ hơn cách các đội ngũ phát triển phần mềm tổ chức và quản lý công việc. Trong các bài viết tiếp theo, chúng ta sẽ đi sâu hơn vào từng phương pháp và cách chúng được áp dụng trong thực tế.

Tài liệu tham khảo

 

Bài viết khác

KANBAN

1. NGUỒN GỐC KANBAN: TỪ TOYOTA ĐẾN NGÀNH PHẦN MỀM 1.1. Bối cảnh ra đời tại Nhật Bản Sau Thế chiến thứ hai (1945), nền kinh tế Nhật Bản rơi vào tình trạng kiệt quệ với nguồn vốn hạn chế, tài nguyên thiên nhiên khan hiếm và cơ sở hạ tầng bị phá hủy. Ngành […]

SCRUM

Framework phát triển sản phẩm dựa trên Agile 3.1. Scrum ra đời để giải quyết vấn đề gì? Sau khi hiểu Agile, sẽ xuất hiện một câu hỏi: Agile nói rằng team cần phản hồi nhanh, thích nghi và liên tục cải tiến. Nhưng làm thế nào để tổ chức công việc thực tế? Đó […]

AGILE

2.1. Agile bắt đầu xuất hiện như thế nào? Trước năm 2001, nhiều phương pháp phát triển phần mềm đã được hình thành nhằm giải quyết những khó khăn của các dự án phần mềm truyền thống. Một số phương pháp tiêu biểu: Extreme Programming (XP) // lập trình cực hạn, tập trung vào phản […]

Waterfall: Tưởng đâu làm tuần tự là chill… ai ngờ kill

WATERFALL Mô hình phát triển phần mềm tuần tự 1.1. Trước Agile: thế giới phần mềm làm việc như thế nào? Trước khi các phương pháp Agile phổ biến, một tư duy phát triển thường gặp là: Muốn xây dựng một hệ thống lớn thì trước tiên phải lập kế hoạch thật kỹ, sau đó […]

TỔNG HỢP KIẾN THỨC GIT CƠ BẢN

TỔNG HỢP KIẾN THỨC GIT CƠ BẢN 1. Git là gì? Git là một hệ thống quản lý phiên bản phân tán (Distributed Version Control System – DVCS), được sử dụng để lưu trữ, quản lý và theo dõi những thay đổi trong mã nguồn, dữ liệu và các tệp tin của một dự án. […]

Làm việc hiệu quả : đẩy tiến độ công việc trong vùng xám và hoàn thành

Là một người chịu trách nhiệm 1 đôi nhóm xây dựng 1 tính năng, 1 công việc, hoặc là 1 thành viên của đội nhóm, bất kì ai cũng muốn mọi thứ rõ ràng. Thiết kế rõ ràng, quy trình rõ ràng, tính năng rõ ràng, mục đích đạt được rõ ràng v.v Trên thực […]

Leave a Reply

Your email address will not be published. Required fields are marked *