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 requirements |
| 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 perform 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
- Mỗi phase thường cần hoàn thành và được duyệt trước khi đi tiếp. Quay lại vẫn có thể xảy ra, chỉ là càng quay muộn thì chi phí càng đau
- Waterfall hợp hơn khi phạm vi và yêu cầu tương đối ổn định, đầu ra của từng phase cần kiểm soát chặt
- Kích thước dự án không tự quyết định dùng Waterfall hay Agile. Context, hợp đồng, rủi ro và cách tổ chức mới là thứ quyết định
- Sản phẩm Waterfall vẫn có thể được nâng cấp sau khi bàn giao. Điểm khác nằm ở cách tổ chức thay đổi, không phải lệnh cấm thêm tính năng
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
- Agile chấp nhận chuyện requirement thay đổi và dùng feedback sau từng phần nhỏ để điều chỉnh
- Dự án nhỏ hay lớn đều có thể làm Agile nếu team thực sự làm việc theo kiểu lặp và tăng trưởng; không phải cứ dự án to là tự động Agile
- Mỗi vòng lặp nên tạo ra một increment dùng được. Release ngay hay chưa lại là quyết định khác
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 Owner chịu trách nhiệm tối đa hóa giá trị sản phẩm và quản lý Product Backlog. PO có thể tự viết backlog item hoặc làm cùng BA và team
- Business Analyst có thể giúp phân tích, làm rõ requirement và business rule, nhưng Scrum không bắt buộc phải có role BA
- Product Backlog là danh sách công việc có thứ tự của sản phẩm. Nó không chỉ là chỗ ném requirement đã “kỹ thuật hoá” vào rồi để đấy
Sau đó, các vòng lặp sẽ bắt đầu được thực hiện:
- Trong Sprint Planning, cả Scrum Team bàn mục tiêu sprint và chọn phần Product Backlog phù hợp. Developer là người lập kế hoạch biến các item đó thành increment
- Scrum không giao việc planning riêng cho “vị trí cao tầng”. Nếu manager hoặc lead có mặt thì họ vẫn không nên biến Sprint Planning thành buổi chia task từ trên xuống
- Độ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
Scrum Master giúp team hiểu và áp dụng Scrum, gỡ impediment và cải thiện cách team làm việc. Có lúc họ đặt lịch hay book phòng thật, nhưng đấy là việc phụ; Scrum Master không phải thư ký cuộc họp hay người đứng giám sát từng thành viên.
Để 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: Sự kiện 15 phút cho Developer kiểm tra tiến độ hướng tới Sprint Goal và điều chỉnh kế hoạch. Team có thể trao đổi thêm sau đó, nhưng đừng tính luôn cuộc họp dài một tiếng vào Daily Scrum
- 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ì?