Waterfall là gì?

Waterfall hay còn gọi là mô hình thác nước, là một mô hình phát triển phần mềm theo hướng tuần tự. Có nghĩa là một dự án sẽ được chia thành nhiều giai đoạn và team sẽ thực hiện lần lượt từng giai đoạn, thường phải hoàn thành bước trước rồi mới chuyển sang bước tiếp theo. Điểm đặc trưng của Waterfall là team cố gắng xác định rõ yêu cầu và kế hoạch của sản phẩm ngay từ đầu. Sau khi thống nhất được sản phẩm cần làm gì, team mới tiến hành thiết kế, lập trình, kiểm thử và triển khai. Vì vậy, Waterfall phù hợp với cách làm mà mọi thứ được chuẩn bị và lên kế hoạch tương đối đầy đủ trước khi bắt đầu phát triển.

Các giai đoạn của Waterfall

Một dự án Waterfall thường trải qua các giai đoạn chính gồm Requirement, Design, Development, Testing, Deployment và Maintenance.

Requirement là giai đoạn tìm hiểu và xác định sản phẩm cần làm gì. Team sẽ làm việc với khách hàng hoặc stakeholder để thu thập yêu cầu và xác định phạm vi của dự án.

Design là lúc team quyết định hệ thống sẽ được xây dựng như thế nào dựa trên những yêu cầu đã có. Có thể bao gồm kiến trúc hệ thống, database, API, giao diện và các thành phần kỹ thuật khác.

Development là giai đoạn developer bắt đầu viết code và xây dựng sản phẩm theo yêu cầu và thiết kế đã được thống nhất.

Testing là lúc tester kiểm tra sản phẩm để tìm bug và xác nhận các chức năng có hoạt động đúng theo requirement hay không.

Deployment là quá trình đưa sản phẩm lên môi trường thực tế để người dùng có thể sử dụng.

Cuối cùng là Maintenance, tức quá trình bảo trì, sửa lỗi và xử lý những vấn đề phát sinh sau khi sản phẩm đã được triển khai.

Mô hình Waterfall là gì? Cách áp dụng Waterfall vào quản lý dự án

Cách thức hoạt động của Waterfall

Waterfall hoạt động theo một quy trình tương đối cố định. Ban đầu, team dành thời gian để tìm hiểu và thống nhất yêu cầu. Sau đó những yêu cầu này được chuyển thành thiết kế, rồi developer dựa trên thiết kế để xây dựng sản phẩm. Khi phần phát triển hoàn thành, sản phẩm mới được đưa sang kiểm thử và sau khi đạt yêu cầu thì được triển khai.

Điểm cần hiểu ở đây là các giai đoạn có sự phụ thuộc vào nhau. Requirement ảnh hưởng đến Design, Design ảnh hưởng đến Development và Development là cơ sở cho Testing.

Vì vậy, nếu một yêu cầu quan trọng bị thay đổi khi team đã đi đến giai đoạn phát triển hoặc kiểm thử thì việc thay đổi có thể khá tốn kém. Team có thể phải sửa lại thiết kế, code và thực hiện kiểm thử lại.

Ưu và nhược điểm của Waterfall

Waterfall có ưu điểm là quy trình rõ ràng, dễ theo dõi và dễ lập kế hoạch. Vì các yêu cầu và phạm vi của dự án thường được xác định từ đầu nên team có thể biết mình cần làm gì, làm theo thứ tự nào và dự kiến hoàn thành từng giai đoạn ra sao. Waterfall cũng phù hợp với những dự án có yêu cầu ổn định và thường chú trọng documentation, giúp việc quản lý và bàn giao dự án dễ dàng hơn.

Tuy nhiên, Waterfall có hạn chế lớn ở khả năng thích nghi với thay đổi. Khi dự án đã đi qua một giai đoạn, việc quay lại thay đổi những quyết định trước đó có thể ảnh hưởng đến nhiều phần đã hoàn thành. Bên cạnh đó, khách hàng thường nhận được feedback về sản phẩm khá muộn, nên nếu team hiểu sai yêu cầu ngay từ đầu thì vấn đề có thể chỉ được phát hiện sau khi đã tốn nhiều thời gian và chi phí để phát triển.

Vì vậy, Waterfall có thể phù hợp với những dự án yêu cầu rõ ràng, ổn định và ít thay đổi, nhưng sẽ gặp khó khăn hơn với những sản phẩm cần liên tục thử nghiệm, nhận feedback và thay đổi trong quá trình phát triển.

Bài viết khác

BÀI 5: TÌM HIỂU CHUYÊN SÂU VỀ LANGUAGE SWITCHING TRONG FLUTTER

1. Language Switching là gì? Trong một ứng dụng hỗ trợ nhiều ngôn ngữ, việc có sẵn các bản dịch chưa đủ để tạo ra trải nghiệm đa ngôn ngữ hoàn chỉnh. Ứng dụng còn cần xác định ngôn ngữ nào sẽ được sử dụng và cho phép thay đổi ngôn ngữ khi cần thiết. […]

TÌM HIỂU CHUYÊN SÂU VỀ UTC & LOCAL TIME CONVERSION TRONG FLUTTER

1. UTC & Local Time Conversion là gì? Trong một ứng dụng Flutter, thời gian xuất hiện ở rất nhiều chức năng như ngày tạo tài khoản, thời gian đặt hàng, lịch sử giao dịch, lịch hẹn, thời gian gửi thông báo và thời hạn của chương trình khuyến mãi. Khi ứng dụng chỉ chạy […]

TÌM HIỂU CHUYÊN SÂU VỀ DATE / NUMBER / CURRENCY FORMATTING TRONG FLUTTER

1. Date / Number / Currency Formatting là gì? Trong một ứng dụng Flutter, dữ liệu thường được lưu trữ và xử lý dưới dạng số, ngày giờ hoặc các kiểu dữ liệu có cấu trúc. Tuy nhiên, dữ liệu dùng để tính toán không nhất thiết giống với cách dữ liệu được hiển thị […]

TÌM HIỂU CHUYÊN SÂU VỀ LOCALIZATION (l10n) TRONG FLUTTER

1. Localization (l10n) là gì? Khi một ứng dụng được sử dụng ở nhiều quốc gia, sự khác biệt không chỉ nằm ở ngôn ngữ mà còn ở cách người dùng đọc ngày tháng, số, tiền tệ, đơn vị đo lường và các thông tin trên giao diện. Ví dụ, một ứng dụng bán hàng […]

TÌM HIỂU CHUYÊN SÂU VỀ INTERNATIONALIZATION (i18n) TRONG FLUTTER

1. Internationalization (i18n) là gì? Trong quá trình phát triển ứng dụng, lập trình viên thường xây dựng giao diện bằng một ngôn ngữ ban đầu, chẳng hạn như tiếng Việt. Khi ứng dụng được sử dụng bởi người dùng ở nhiều quốc gia, việc chỉ hỗ trợ một ngôn ngữ có thể khiến người […]

TÌM HIỂU CHUYÊN SÂU VỀ APP RELEASE & DEPLOYMENT TRONG FLUTTER

1. App Release & Deployment là gì? Trong quá trình phát triển ứng dụng Flutter, sau khi hoàn thành các chức năng, lập trình viên cần đưa ứng dụng đến người dùng thực tế. Ví dụ, một nhóm đã xây dựng xong ứng dụng bán hàng với những chức năng như đăng nhập, xem sản […]