Agile
Duy Văn | 22/11/2024
Mình muốn nói về Agile càng sớm càng tốt, vì dù sao nó cũng là một kiến thức nền tảng cần biết. Cần biết để nắm quá trình làm việc sẽ thế nào thôi, chứ khi nào phải tham gia một dự án Agile rồi thì mới rõ nó thế nào.

Bên trên là sơ đồ Agile, nhìn vào nó lần đầu thì khả năng cao bạn sẽ không hiểu nó là gì. Vì bản chất những tấm ảnh mô tả Agile đều cần đi kèm thuyết minh, tức là dùng trong thuyết trình chẳng hạn, cần nhìn vào nó, có một người đứng mô tả quá trình thì mới hiểu được và hôm nay mình sẽ là người làm việc này.
Khái niệm
Waterfall
Đầu tiên, để hiểu đầy đủ về Agile, thì chúng ta trước tiên hãy nói một chút về Waterfall. Waterfall cũng là một mô hình phát triển, được dùng rất nhiều trong quá khứ, bản chất của nó chính là sự ứng dụng một cách nguyên thuỷ SDLC, hay nói chính xác hơn, nó chính là một phương pháp đưa SDLC vào thực tế với ít thay đổi về thiết kế nhất.
Để giải thích kỹ hơn, dưới đây là so sánh giữa SDLC và Waterfall
| SDLC | Waterfall |
|---|---|
| 1. Gather requirements and analysis | 1. Gather and analyze requirments |
| 2. Design software product | 2. Plan the project |
| 3. Implement the software | 3. Design the software |
| 4. Test the software | 4. Implement the software |
| 5. Deploy the software | 5. Test the software |
| 6. Maintain the software | 6. Deploy the software and perfrom Acceptance Test |
| 7. Maintain the software |
Nhìn một lần thôi biết ngay, một bên là một chuỗi hoạt động mang tính lý thuyết, còn một bên là một chuỗi hoạt động sẽ được thực hiện một cách thực tế.
Hai cái này là một mà ?
You don’t say
Rõ ràng quá, thế nên bên trên mình mới đề cập Waterfall là sự ứng dụng nguyên thuỷ của SDLC, nó bê nguyên cơ sở lý thuyết của SDLC vào và áp dụng ít nhất có thể số thay đổi về thiết kế kỹ thuật.
Các đặc điểm của Waterfall là như sau:
- Nó đi từ trên đi xuống, từng bước một, không bỏ qua bước nào
- Waterfall sẽ không quay trở lại sửa bất cứ cái gì hết, tức là ví dụ, một khi đã đi hết bước 4 - Implement, sẽ không bao giờ có chuyện quay lại để sửa code trừ khi sửa bug
- Dẫn tới: Thời điểm hiện tại, nó chỉ có thể áp dụng vào các dòng dự án có yêu cầu được chốt hạ từ đầu dự án, tức là các yêu cầu của khách hàng về sản phẩm phần mềm sẽ không đổi trong quá trình thực hiện
- Dẫn tới: Áp dụng cho những dự án có kích cỡ vừa và nhỏ
- Đầu ra của Waterfall là các sản phẩm phần mềm không có thêm tính năng sau khi đi vào vận hành, được bàn giao một lần và sẽ chỉ được duy trì (maintain) ở mức độ sửa lỗi
Typical question: What is Waterfall model? - Mô hình Waterfall là gì?
Sự khác biệt của Agile
Tuy không thể nói Agile được tạo ra để lấp các điểm yếu của Waterfall, nhưng cũng có thể nói rằng do nhu cầu phát triển sản phẩm phần mềm tại thời điểm hiện tại mà Agile đã ra đời.
Bản chất của Agile cũng là một phương pháp áp dụng SDLC vào thực tế, nhưng với thiết kế rất đặc biệt, thay vì đi qua quá trình SDLC một lần, Agile làm nhiều lần, cụ thể

Quá trình phát triển sản phẩm của Agile sẽ tách sản phẩm ra thành rất nhiều phần nhỏ, tương ứng với đó là tách quá trình phát triển ra thành những vòng lặp (sprint) nhỏ để phát triển các phần đó. Mỗi một vòng lặp là cả một quy trình:
- Planning: Lên kế hoạch
- Developing: Phát triển
- Testing: Kiểm thử
- Demoing: Trình bày cho khách hàng
- Deploy: Bàn giao cho khách hàng (Có thể không có)
Mỗi vòng lặp sẽ phát triển một hoặc một vài tính năng nhất định của sản phẩm, dần dần theo thời gian qua nhiều vòng lặp thì sản phẩm sẽ được hoàn thiện. Chính vì thế, các đặc điểm của Agile là:
- Mỗi vòng lặp là một quá trình phát triển đầy đủ một hoặc một số tính năng của sản phẩm cuối
- Agile cho phép thay đổi tính năng, mã nguồn về sau bằng cách thêm yêu cầu và xử lý yêu cầu này trong một sprint trong tương lai
- Dẫn đến, Agile áp dụng cho các dự án có thể có yêu cầu thay đổi trong quá trình thực hiện
- Dẫn đến, áp dụng được cho các dự án lớn, cần nhiều thời gian để thực hiện. Cũng như các dự án phát triển mang tính liên tục (liên tục thêm tính năng, đi vào vận hành)
- Sản phẩm đầu ra của Agile là các sản phẩm phần mềm có thể có thêm tính năng mới, hoặc có thể được phát triển không giới hạn, được duy trì (maintain) ở sửa lỗi và bổ sung tính năng
Typical question: What is Agile model? - Mô hình Agile là gì?
Typical question: What are the differences between Agile and Waterfall? - Sự khác biệt giữa Agile và Waterfall là gì?
Typical question: What are the advantages of Agile? What makes it so special? - Ưu điểm của Agile là gì? Điều gì làm cho nó đặc biệt?
Cụ thể về Agile
Quay trở lại hình ảnh bên trên nhưng to hơn

Đầy đủ ý tưởng của một quá trình Agile là như sau:
- Product Ownder (một role quan trọng trong quá trình phát triển phần mềm) sẽ định ra những yêu cầu về mặt câu từ, những yêu cầu này nêu bật những gì khách hàng (hay chủ sở hữu) sản phẩm muốn có ở sản phẩm
- Business Analyst sẽ biến các yêu cầu này thành những tài liệu mang tính kỹ thuật để cho đội dự án có thể hiểu
- Các yêu cầu này sau khi đã được “kỹ thuật hoá” sẽ được đẩy lên Product Backlog - nôm na là danh sách các yêu cầu của sản phẩm giúp đội dự án theo dõi
Sau đó, các vòng lặp sẽ bắt đầu được thực hiện:
- Đội dự án bao gồm team developer, team test (QA), các dẫn đội (leads) và quản lý dự án (Project Manager) sẽ quyết định sprint này sẽ thực hiện những yêu cầu nào
- Những vị trí cao tầng (leads và manager) sẽ đưa ra kế hoạch của sprint (sprint planning) bao gồm thời gian, khối lượng công việc
- Đội project bắt tay vào thực hiện các yêu cầu, Dev thì đi code, Tester thì đi kiểm thử, v.v…
- Khi đến deadline, hoặc gặp điều kiện ngừng test, sản phẩm sẽ được trình bày cho khách hàng
- Sau khi hoàn thiện các công đoạn cuối, sản phẩm sẽ được bàn giao cho khách hàng
- Đội dự án ngồi lại họp, rút ra kinh nghiệm
Toàn bộ quá trình sẽ được theo dõi bởi một role là Scrum Master, role này cũng phụ trách một số vấn đề như lên lịch họp, book phòng họp, v.v… Nội dung chính của role này chính là đảm bảo hành động của các thành viên đội dự án, cũng như các sự kiện diễn ra đúng theo tiêu chuẩn của Agile.
Để hiểu thêm về điều kiện ngừng test, đọc bài viết Test Plan
Để hiểu thêm về cách một tester tham gia vào Agile, đọc bài viết Test Process
Trong đó, mình muốn lưu ý về một số sự kiện sẽ diễn ra trong một quá trình Agile:
- Planning phase: Là phần lên kế hoạch mình đã nêu ở trên
- Daily Scrum: Diễn ra trong quá trình thực hiện vòng lặp, kéo dài 30 phút - 1 tiếng mỗi ngày để các thành viên đội dự án trao đổi về việc mình đang làm, sẽ làm, vấn đề đang gặp
- Review phase: Là phần demo cho khách hàng xem mình đã nêu ở trên
- Retrospective: Diễn ra ở cuối sprint, họp rút kinh nghiệm, hiểu mình đã làm gì tốt hay chưa tốt để rút kinh nghiệm về sau.
Theo kinh nghiệm mình được truyền đạt, khâu Retrospective thường bỏ qua hoặc diễn ra chớp nhoáng một cách không chính thức - informal (các thành viên trao đổi qua mail hoặc team chat)
Typical question: What are the events in Agile? - Các sự kiện trong Agile là gì?
Typical question: What is the role of Scrum Master? - Vai trò của Scrum Master là gì?
Typical question: What is the role of Product Owner? - Vai trò của Product Owner là gì?