Các quy trình làm phần mềm mà developer cần biết

Chúng ta cứ ngộ nhận rằng việc phát triển một sản phẩm phần mềm là chỉ cần tập trung vào code và code là được. Thực tế, phát triển phần mềm là một quy trình chuẩn, từ khâu lấy requirements, lên design, viết code, testing, sau cùng là bảo trì.

Do đó, trong lịch sử của ngành làm phần mềm, người ta đã nghĩ ra nhiều phương pháp và quy trình khác nhau để tối ưu hoá việc phát triển phần mềm. Hai qui trình nổi tiếng nhất có thể kể đến là Waterfall và Agile. Thế nào là Waterfall? Thế nào là Agile? Hai quy trình này khác nhau như thế nào? Có nên biết cả hai quy trình này không? Anh em hãy cùng mình tìm hiểu nhé.

Phát triển theo Waterfall (mô hình thác nước)

Waterfall ModelWaterfall Model

Waterfall còn được biết đến với cái tên Linear Sequential Life Cycle Model(Mô hình vòng đời tuần tự tuyến tính). Nghĩa là, việc phát triển phần mềm phải tuần tự. Một công đoạn chỉ có thể bắt đầu khi các công đoạn trước đó hoàn thành. Chẳng hạn, trước khi nhảy vào công đoạn Implementation (Coding), dự án phải trải qua 2 công đoạn là Requirements (lấy yêu cầu từ khách hàng) và Design (Thiết kế).

Phát triển theo Agile

Agile ModelAgile Model

Agile là phương pháp phát triển phần mềm theo hướng lặp lại và tăng cường (iterative & incremental). Trong Agile, các công đoạn làm phần mềm được thực hiện song song với nhau theo các chu trình nhỏ(sprint) và lặp lại cho tới khi hoàn thiện phần mềm.

Sự khác biệt giữa mô hình Agile và Waterfall

Agile vs WaterfallAgile vs Waterfall

  • Agile chia vòng đợi phát triển thành các chu trình nhỏ(sprint). Waterfall chia quy trình thành các công đoạn(pharse).

  • Agile cho phép và khuyến khích khách hàng thay đổi yêu cầu tại bất cứ thời điểm nào trong quá trình phát triển. Trong khi đối với Waterfall, khách hàng chỉ có thể thay đổi đặc tả trước khi phát triển phần mềm.

  • Trong Agile, các bước requirements, design, implementation, testing, maintenace được lặp lại(iterative) với mỗi sprint. Còn các phare trong Waterfall chỉ được thực hiện một lần duy nhất.

  • Vì việc testing được thực hiện thường xuyên trong mỗi sprint nên Agile đảm bảo được phần mềm ít lỗi hơn so với việc chỉ test một lần duy nhất trong pharse Testing của Waterfall.

  • Trong Agile, sau mỗi sprint(từ 2–4 tuần), một phiên bản release chạy được của phần mềm được demo cho khách hàng. Trong khi Waterfall, khách hàng phải đợi cho tới khi công đoạn cuối cùng hoàn tất mới thấy được phẩn mềm thực tế hoạt động

  • Agile thích hợp với các dự án vừa và nhỏ, cực kì hữu dụng khi requirement từ khách hàng chưa rõ ràng. Trong khi Waterfall thích hợp với các dự án lớn hơn và requirement đã được chốt chắc chắn.

Sự kết hợp giữa Agile và Waterfall

Cả Agile và Waterfall đều là các phương pháp phát triển phần mềm hay, có các ưu nhược điểm khác nhau. Trong thực tế, quá trình làm ra một sản phẩm phần mềm khó mà tuân theo nghiêm ngặt một phương pháp nào cả. Ta phải hiểu cả 2 phương pháp để linh hoạt sử dụng trong các tình huống khác nhau, thậm chí kết hợp chúng lại để tối ưu quy trình.

Agile + WaterfallAgile + Waterfall

Chẳng hạn ta có thể tách 2 phare requirement và maintain ra để thực hiện theo Waterfall. Còn 3 khâu ở giữa (design, coding, testing) thực hiện theo Agile. Việc kết hợp như vậy sẽ giúp:

  • Có cái nhìn tổng quan hơn về dự án khi requirement đã được xác định rõ ràng

  • Tăng tốc độ phát triển phần mềm, vì mỗi sprint chỉ còn 3 step.

Lời kết

Cả Agile và Waterfall đều là các phương pháp phát triển phần mềm hiện đại mà bất cứ developer nào cũng cần phải nắm rõ để sử dụng hiệu quả trong quá trình phát triển phẩn mềm.