Waterfall vs Agile trong phát triển phần mềm di động
Bài đăng này đã không được cập nhật trong 7 năm
Đây là một bài viết của tác giả Ellina, Marketing Specialist. Trong quá trình học về BrSE thì mình có đọc để tìm hiểu về các phương thức phát triển và thấy nội dung của bài này rất hữu ích. Hy vọng nó giúp ích được cho những bạn nào cần.
Agile và Waterfall là hai phương thức phát triển phần mềm thu hút được sự chú ý trong thời gian gần đây.
Xét về đặc tính của 2 phương thức này có thể thấy việc so sánh hai phương thức là chuyện đương nhiên. Đã có rất nhiều phân tích chuyên môn đã được tiến hành, cũng như rất nhiều sách đã được phát hành, nhưng vẫn còn rất nhiều tranh cãi liên quan đến việc sử dụng phương thức nào trong phát triển.
Bài viết sẽ đưa ra những khác biệt của 2 hình thức Agile và Waterfall, cũng như trong trường hợp nào thì sẽ sử dụng hình thức nào là hợp lý nhất.
Trước hết hãy tìm hiểu khái quát thế nào là Agile và Waterfall.
Waterfall
Waterfall là một hình thức phát triển phần mềm rất trực quan, và là hệ thống quản lý phát triển phần mềm rất cổ điển. Tất cả những mốc thời gian quan trọng trong quá trình phát triển đều được lên kế hoạch chặt chẽ và cụ thể ngay từ trước khi bắt đầu, và sẽ không được thay đổi trong suốt quá trình phát triển. Do đó hình thức này thường được sử dụng cho các dự án dài hạn đòi hỏi được kế hoạch chi tiết và cẩn thận. Hình thức này được ứng dụng trong rất nhiều lãnh vực như chế tạo máy móc, đóng thuyền hay ngành công nghiệp vũ trụ. Hình thức phát triển Waterfall cũng thường được ứng dụng trong phát triển phần mềm, ví dụ như những phần mềm lớn đang sử dụng hệ thống ERP hay đã có sự yêu thích nhất định, hay phát triển version mới của OS…
Agile
Tuy nhiên, nếu là những dự án cần đưa vào những kỹ thuật mới, hay cần thường xuyên thay đổi cách làm trong quá trình phát triển, thì cần phải đối phó như thế nào? Thực tế trong ngành phát triển phần mềm di động, với tốc độ phát triển cao độ, cần phải phát triển frameworks mới liên tục theo chu kỳ 6 tháng một.
Với những môi trường như vậy, để phát triển phần mềm, cần phải ứng biến xem sẽ quyết định sử dụng hình thức phát triển nào. Đó là lý do Agile ra đời. So với Waterfall thì Agile là một hình thức phát triển rất linh hoạt.
"Scrum" là đại diện tiêu biểu của phát triển phần mềm theo hình thức Agile. Có thể nói "Scrum" là cách giải quyết lý tưởng với một ngành công nghiệp có tốc độ biến hóa cao như ngành công nghiệp phần mềm di dộng.
Với hình thức phát triển "Scrum", để có thể đến gần với kết quả cuối cùng, các công việc sẽ được phân tích và sửa theo từng mốc thời gian. Các nhóm trong cùng 1 project (ví dụ, nhóm phát triển, nhóm test, ...) sẽ liên kết chặt chẽ với nhau, tiến hành lặp đi lặp lại việc phát triển các tính năng để đạt được sản phẩm hoàn thiện. Việc có thể đảm bảo được quá trình phát triển, và có thời gian để sửa lỗi, không chỉ đối với khách hàng mà đối với end user thì đây cũng là những ưu điểm lớn. Với phương thức phát triển "Scrum", sự đoàn kết của các thành viên trong quá trình phát triển sẽ trở thành động lực lớn khi tiến hành công việc. Ngoài ra, việc có thể tùy cơ ứng biến theo yêu cầu của khách hàng cũng giúp tạo dựng niềm tin với khách hàng.
Ưu điểm và nhược điểm
Vậy thì 2 hình thức phát triển này có những ưu và nhược điểm gì?
Ưu điểm của Waterfall
- Đơn giản. Hình thức phát triển Waterfall đơn giản nên dễ hiểu, trừ những trường hợp ngoại lệ thì hầu hết các công ty đều áp dụng hình thức này.
- Chất lượng cao. Waterfall có quy tắc đối với tất cả các công đoạn, từ các thao tác kỹ thuật, nhập dữ liệu cho đến kiểm thử. Waterfall ưu tiên cho chất lượng sản phẩm chứ không phải thời gian và chi phí.
- Ổn định. Một khi đã quyết định specs của sản phẩm thì hầu như sẽ không thay đổi nữa.
- Có cấu tạo và khả năng áp dụng rộng rãi nên có thể bắt đầu project với chi phí thấp.
- Không nhất thiết phải có sự tham gia của end user trong quá trình phát triển.
Nhược điểm của Waterfall
- Hầu hết nhược điểm của Waterfall đều là mặt trái của những ưu điểm kể trên. Ví dụ, quá trình phát triển sử dụng Waterfall có thời gian dài và tốn rất nhiều chi phí.
- Waterfall là phương thức phát triển "tự thắt cổ mình" (tiếng Nhật: 自分の首を絞める) vì nó đòi hỏi tất cả. từ spec, tính năng đến chất lượng, đều phải ở mức độ cao, dẫn đến việc sẽ phải tạo documents với số lượng khổng lồ. Hơn thế, những document kỹ thuật thường có xu hướng khó hiểu đối với end user.
- Trước khi bắt tay vào công việc, việc đầu tiên phải làm sẽ là nghiên cứu thật kỹ các chú ý phát triển hay yêu cầu thiết kế.
- Không có tính linh hoạt, không thể thay đổi sau khi đã quyết định.
Ưu điểm của Agile
- Là phương thức phát triển sáng tạo vì vừa có thể thay đổi vừa có tính tương tác. Cứ theo chu kỳ 1 tuần hoặc 2 tuần (sprint), có thể bổ sung hoặc thay đổi phương hướng của project. Hoặc là có thể thêm người vào team (developer, QA,vv) (Ví dụ: project bị thay đổi theo hướng mở rộng hơn tưởng tượng nên đòi hỏi về kỹ thuật cũng cao hơn, thì có thể bổ sung thêm 1 team mới để xử lý các vấn đề mới phát sinh trong khi team cũ vẫn đang tiếp tục công việc của mình)
- Đặc trưng của Agile là có thể tùy biến, nhưng tùy biến này cũng nằm trong quá trình phát triển nên nó sẽ không làm ảnh hưởng gì đến toàn bộ quá trình.
- Agile có lẽ là phương thức phát triển có thể tạo ra sản phẩm demo nhanh nhất. Nhờ đó mà việc đánh giá và test cũng sẽ được tiến hành sớm hơn.
- Có thể thảo luận với end user và áp dụng những feedback đó vào quá trình phát triển.
- Có thể nắm bắt được các giai đoạn phát triển cũng như tiến độ của project nhờ vào timebox.
Nhược điểm của Agile
- Agile có một nhược điểm chí mạng. Phương thức phát triển Agile, vì có thể thay đổi theo từng giai đoạn nên sẽ thực hiện lặp lại việc thử nghiệm bằng nhiều kỹ thuật. Do đó nếu không có sự liên kết và quy định rõ ràng về spec và thiết kế của sản phẩm thì chất lượng của sản phẩm cuối cùng sẽ không đủ tiêu chuẩn. Với những người mới bắt đầu làm hay những doanh nghiệp muốn tiến hành công việc mà không có Project Manager, rất dễ rơi vào vấn đề nghiêm trọng này.
- Ngoài ra, cách thức phát triển này cũng có thể sẽ hạn chế khả năng mở rộng của project trong tương lai. Nếu là project nhỏ thì có thể chỉnh sửa được, nhưng cũng project đó mà mở rộng quy mô lớn hơn thì có thể sẽ không thể bao quát được hết.
- Nếu thường xuyên phải sửa chữa, hoặc có nhiều yêu cầu kỹ thuật thay đổi thì nguy cơ không thể hoàn thành project sẽ xảy ra. Không thể hình dung được sản phẩm kết quả sẽ phải như thế nào, hay không thể đạt được kết quả như mong muốn, nếu là team có ít kinh nghiệm thì sẽ bị ngưng trệ.
Tổng kết
Theo bạn thì phương thức phát triển nào ưu việt hơn?
Phương thức nào cũng có ưu và nhược. Hầu hết trong các trường hợp, có thể chọn phát triển sản phẩm theo phương thức nào cũng được.
Xu hướng của thế giới là dựa vào spec của project và input data để quyết định sẽ sử dụng phương thức nào. Việc lựa chọn phương thức phát triển sẽ thay đổi dựa vào nhiều yếu tố như kỹ thuật, thời gian, chất lượng của sản phẩm cuối…
Phương pháp quản lý dự án thích hợp nhất trong phát triển mobile software sẽ dựa trên có yếu tố cơ bản sau:
- Tính chất của Project
- Spec của sản phẩm
- Input data và xu hướng của Client (quyết định dựa trên tương tác giữa khách hàng, developer...)
- Quy mô và mức độ quan trọng của sản phẩm
Có thể không cần phải giới hạn trong một phương thức phát triển, nếu có thể kết hợp những ưu điểm của cả Waterfall và Agile vào thành một phương thức phát triển thì cũng là một ý kiến không tồi phải không? Dựa vào kinh nghiệm cũng như những yếu tố trên của project để tìm ra cách thức phát triển tối ưu nhất.
Nguồn
Bài gốc: https://erminesoft.com/agile-vs-waterfall/ Bản dịch tiếng Nhật: https://techacademy.jp/magazine/12072
All rights reserved