Waterfall là gì?

Mô hình 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 trong đó quá trình phát triển được chia thành các giai đoạn với những nhiệm vụ và mục tiêu khác nhau. Các giai đoạn được thực hiện theo một trình tự tương đối cố định, trong đó đầu ra của một giai đoạn thường là cơ sở để thực hiện giai đoạn tiếp theo.

Trong mô hình Waterfall, giai đoạn sau thường chỉ bắt đầu khi giai đoạn trước đã hoàn thành các mục tiêu chính. Do đặc điểm này, các yêu cầu, thiết kế và kế hoạch của dự án cần được xác định tương đối đầy đủ và chính xác từ sớm. Các giai đoạn được triển khai theo hướng từ trên xuống dưới, giống như dòng nước chảy xuống của một thác nước, từ đó mô hình này có tên gọi là Waterfall.

Waterfall từng được sử dụng rộng rãi trong ngành công nghiệp phần mềm. Tuy nhiên, mô hình này có những hạn chế khi yêu cầu thường xuyên thay đổi hoặc dự án có mức độ không chắc chắn cao. Vì vậy, các phương pháp tiếp cận Agile ngày càng được sử dụng phổ biến trong những bối cảnh phù hợp.

Các giai đoạn của mô hình Waterfall

Một mô hình Waterfall đơn giản có 6 giai đoạn:

  • Phân tích yêu cầu
  • Thiết kế hệ thống
  • Thực hiện (xây dựng)
  • Kiểm thử hệ thống
  • Triển khai
  • Bảo trì

Phân tích yêu cầu

Đây là giai đoạn đầu tiên trong các dự án waterfall với mục đích xác định và phân tích tất cả các nhu cầu kinh doanh, các yêu cầu từ người dùng đối với sản phẩm, các ràng buộc và rủi ro đi kèm.

Thiết kế hệ thống

Từ những yêu cầu được xác định, nhóm dự án tạo ra thiết kế cho sản phẩm càng cụ thể càng tốt để đáp ứng tất cả các yêu cầu đó, bao gồm cả thiết kế phần cứng, thiết kế phần mềm, ngôn ngữ lập trình, lưu trữ dữ liệu. Nếu bước này gặp vấn đề thì rất có thể phải quay lại bước phân tích yêu cầu để thực hiện lại.

Thực hiện (xây dựng)

Khi hệ thống đã được thiết kế đầy đủ và cụ thể, các module chức năng của sản phẩm sẽ được thực hiện trong giai đoạn này dựa trên bản kế hoạch trước đó và các tài liệu hướng dẫn quy trình để đáp ứng các yêu cầu và thiết kế đã được xác định ở các giai đoạn trước. Đây là giai đoạn mà các nhiệm vụ công việc được thảo luận ở bước Thiết kế hệ thống được tiến hành và cũng là giai đoạn mà đội ngũ lập trình sẽ là nguồn lực chủ yếu được sử dụng.

Kiểm thử hệ thống

Trước khi được đưa vào sử dụng thực tế, hệ thống cần được kiểm thử để đảm bảo đáp ứng các yêu cầu đã xác định. Dự án của doanh nghiệp cũng không ngoại lệ. Đây được coi là giai đoạn căng thẳng nhất trong mô hình, bởi vì một số ý tưởng thú vị ở giai đoạn đầu có thể bị loại bỏ lúc này. Nếu phát hiện lỗi hoặc vấn đề nghiêm trọng, nhóm có thể phải quay lại các giai đoạn trước để điều chỉnh thiết kế hoặc mã nguồn, từ đó làm tăng thời gian và chi phí của dự án.

Ở giai đoạn này, thường sẽ là công việc của đội ngũ QA và tester nhằm tìm kiếm và báo cáo các lỗi trong hệ thống cần được xử lý. Việc này bao gồm tất cả các hoạt động kiểm thử tính năng và phi tính năng. Đây là giai đoạn cực kỳ quan trọng nhằm đảm bảo hệ thống được kiểm tra đầy đủ, các mục tiêu thiết kế và chức năng người dùng yêu cầu được đáp ứng và các nhu cầu kinh doanh được giải quyết.

Triển khai hệ thống

Đây là giai đoạn mà sản phẩm được triển khai vào môi trường mà người dùng có thể bắt đầu sử dụng được. Hay nói cách khác là giai đoạn mà sản phẩm thực sự đi vào hoạt động. Trong giai đoạn này, nhóm dự án cần đảm bảo các yếu tố như: môi trường đang hoạt động, không có lỗi trên server, các tiêu chí test đã được đáp ứng hoặc kiểm tra lại môi trường sau khi ứng dụng được triển khai để đảm bảo sản phẩm không gặp vấn đề….

Bảo trì hệ thống

Đây là giai đoạn cuối cùng của quá trình, trong đó nhóm dự án tập trung giải quyết các vấn đề của khách hàng. Trong các dự án phần mềm, đây thường là giai đoạn các bản được phát hành để cập nhật và sửa lỗi. Trong một số trường hợp, việc bảo trì có thể diễn ra cho đến khi khách hàng hài lòng. Mặt khác, nếu sản phẩm được tung ra thị trường, việc bảo trì có thể tiếp tục vô thời hạn.

Lưu ý rằng ngay cả khi nhóm dự án đã đầu tư nguồn lực đáng kể vào quy trình kiểm soát chất lượng, vẫn sẽ có một số lỗi sai bị “bỏ quên”. Thông thường, một số vấn đề sẽ chỉ được ghi nhận khi có khách hàng tích cực sử dụng sản phẩm, dịch vụ và cung cấp phản hồi.

Đặc điểm của Waterfall

Waterfall có một số đặc điểm nổi bật:

  • Phát triển tuần tự: Các giai đoạn được tổ chức theo một trình tự tương đối cố định. Giai đoạn sau thường bắt đầu khi giai đoạn trước đã hoàn thành các mục tiêu chính.
  • Yêu cầu được xác định sớm: Phần lớn yêu cầu và phạm vi của sản phẩm được xác định tương đối đầy đủ ngay từ đầu dự án.
  • Lập kế hoạch chi tiết: Dự án thường được lập kế hoạch tương đối cụ thể trước khi bắt đầu triển khai.
  • Khả năng thích ứng với thay đổi thấp hơn: Khi yêu cầu thay đổi sau khi dự án đã chuyển sang các giai đoạn sau, việc điều chỉnh thường phức tạp và tốn nhiều thời gian, chi phí hơn.
  • Phản hồi thường đến muộn: Người dùng hoặc khách hàng thường nhận được sản phẩm hoàn chỉnh hoặc gần hoàn chỉnh ở các giai đoạn sau, do đó một số vấn đề có thể chỉ được phát hiện khi dự án đã tiến xa.
  • Tài liệu và đầu ra của từng giai đoạn: Mỗi giai đoạn thường tạo ra các tài liệu hoặc sản phẩm đầu ra làm cơ sở cho giai đoạn tiếp theo.
  • Phù hợp với môi trường có tính dự báo cao: Waterfall phù hợp hơn với những dự án có yêu cầu tương đối ổn định, phạm vi rõ ràng và quy trình phát triển có thể dự đoán tương đối tốt.

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

Ưu điểm

  • Quy trình rõ ràng: Các giai đoạn được tổ chức theo trình tự tương đối cố định, giúp các thành viên dễ hiểu quy trình và trách nhiệm của mình.
  • Dễ quản lý tiến độ: Mục tiêu và đầu ra của từng giai đoạn tương đối rõ ràng, thuận tiện cho việc lập kế hoạch và theo dõi tiến độ.
  • Dễ kiểm soát chất lượng: Các yêu cầu và tiêu chí đầu vào, đầu ra của từng giai đoạn được xác định tương đối rõ ràng.
  • Tài liệu hóa đầy đủ: Các giai đoạn thường tạo ra tài liệu và sản phẩm đầu ra rõ ràng, thuận lợi cho việc bàn giao và bảo trì hệ thống.
  • Phù hợp với yêu cầu ổn định: Waterfall phù hợp với những dự án có yêu cầu và phạm vi tương đối rõ ràng, ít thay đổi.

Nhược điểm

  • Khó thích ứng với thay đổi: Khi yêu cầu thay đổi ở các giai đoạn sau, việc điều chỉnh có thể phức tạp và tốn nhiều thời gian, chi phí.
  • Phản hồi thường đến muộn: Người dùng thường chỉ có thể trải nghiệm sản phẩm ở các giai đoạn sau, khiến một số vấn đề có thể được phát hiện muộn.
  • Rủi ro từ sai sót ban đầu: Sai sót trong yêu cầu hoặc thiết kế có thể ảnh hưởng đến nhiều giai đoạn phía sau.
  • Giá trị được chuyển giao chậm: Người dùng thường phải chờ đến các giai đoạn sau mới có thể sử dụng sản phẩm hoàn chỉnh.

Agile và Waterfall khác nhau như thế nào?

Agile là một cách tiếp cận trong phát triển phần mềm dựa trên các giá trị và nguyên tắc đề cao khả năng thích ứng với thay đổi, phát triển lặp và tăng dần, phản hồi thường xuyên và cải tiến liên tục.

Trong khi đó, Waterfall là một mô hình phát triển phần mềm theo hướng tuần tự, trong đó các giai đoạn được tổ chức theo một trình tự tương đối cố định và các yêu cầu thường được xác định tương đối đầy đủ từ sớm.

Sự khác biệt chính giữa hai cách tiếp cận nằm ở cách chúng xử lý sự thay đổi và phản hồi trong quá trình phát triển:

Waterfall Agile
Cách phát triển Tuần tự Lặp và tăng dần
Yêu cầu Xác định tương đối đầy đủ từ sớm Có thể thay đổi trong quá trình phát triển
Phản hồi Thường đến ở các giai đoạn sau Thường xuyên trong quá trình phát triển
Khả năng thích ứng Thấp hơn Cao hơn
Giá trị chuyển giao Thường đến muộn Có thể được chuyển giao sớm và liên tục

Khi nào nên sử dụng Waterfall và khi nào nên sử dụng Agile?

Waterfall

Waterfall có thể phù hợp khi:

  • Yêu cầu của dự án tương đối rõ ràng và ổn định.
  • Phạm vi dự án có thể xác định tương đối đầy đủ từ đầu.
  • Công nghệ và quy trình phát triển tương đối ổn định, có tính dự báo cao.
  • Dự án yêu cầu tài liệu hóa và quy trình kiểm soát chặt chẽ.
  • Chi phí thay đổi yêu cầu ở các giai đoạn sau cần được hạn chế.

Agile

Agile có thể phù hợp khi:

  • Yêu cầu của dự án có khả năng thay đổi trong quá trình phát triển.
  • Dự án có mức độ không chắc chắn cao.
  • Cần nhận phản hồi thường xuyên từ khách hàng hoặc người dùng.
  • Sản phẩm cần được phát triển và cải tiến liên tục.
  • Đội ngũ cần có khả năng điều chỉnh ưu tiên dựa trên phản hồi và tình hình thực tế.

Không nên lựa chọn Waterfall hay Agile chỉ dựa trên quy mô của dự án. Yếu tố quan trọng hơn là mức độ ổn định của yêu cầu, mức độ không chắc chắn và nhu cầu phản hồi, thay đổi trong quá trình phát triển.

 

Kết luận

Waterfall là một mô hình phát triển phần mềm theo hướng tuần tự, trong đó các giai đoạn được tổ chức theo một trình tự tương đối cố định và các yêu cầu, kế hoạch thường được xác định tương đối đầy đủ từ sớm. Cách tiếp cận này giúp quy trình phát triển rõ ràng, dễ lập kế hoạch và kiểm soát, nhưng đồng thời hạn chế khả năng thích ứng khi yêu cầu thay đổi hoặc dự án có mức độ không chắc chắn cao.

Ngược lại, Agile đề cao khả năng thích ứng với thay đổi, phát triển lặp và tăng dần, phản hồi thường xuyên và cải tiến liên tục.

Vì vậy, không thể kết luận rằng Agile luôn tốt hơn Waterfall. Việc lựa chọn cách tiếp cận nào phụ thuộc vào đặc điểm của dự án, đặc biệt là mức độ ổn định của yêu cầu, mức độ không chắc chắn và nhu cầu phản hồi trong quá trình phát triển.

Qua việc tìm hiểu Waterfall và so sánh với Agile, có thể thấy sự khác biệt cốt lõi giữa hai cách tiếp cận nằm ở cách chúng tổ chức quá trình phát triển và ứng phó với sự thay đổi.

Nguồn tham khảo

Bài viết khác

Scrum là gì?

Scrum là gì? Scrum là một framework được sử dụng để phát triển và quản lý các sản phẩm trong môi trường phức tạp, đặc biệt phổ biến trong phát triển phần mềm. Scrum cung cấp một cấu trúc làm việc giúp các thành viên trong nhóm phối hợp với nhau, thường xuyên kiểm tra […]

Agile

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ừ […]

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 đó […]

Leave a Reply

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