Mở Đầu
Xin chào tất cả mọi người , thời gian mình viết bài này là những ngày cuối cùng của Mayfest :v tầm này chắc không mong mỏi gì ăn mấy giải tương tác nữa rồi thôi cố hoàn thành để lấy quà thôi vì mình thấy năm nay quà Mayfest hấp dẫn quá. Thôi không lan man nữa bắt đầu vào chủ đề chính luôn nhé , trong bài viết này mình sẽ giới thiệu đến mọi người về một số mô hình phát triển phần mềm phổ biến, cùng bắt đầu luôn nhé.
Mô hình phát triển phần mềm là gì ?
Mô hình phát triển phần mềm là một khuôn khổ được sử dụng để quản lý và tổ chức quá trình phát triển phần mềm. Nó bao gồm các bước cụ thể để phát triển phần mềm và các hoạt động được thực hiện trong mỗi bước đó.
Có nhiều loại mô hình phát triển phần mềm khác nhau, bao gồm mô hình Waterfall, mô hình tăng trưởng ( Incremental Model), mô hình Spiral, mô hình Agile và nhiều mô hình khác. Mỗi loại mô hình có ưu điểm và hạn chế riêng, tùy thuộc vào yêu cầu và tình huống cụ thể của dự án phát triển phần mềm.
Một mô hình phát triển phần mềm thường bao gồm các giai đoạn chính như phân tích yêu cầu, thiết kế, lập trình, kiểm thử, triển khai và bảo trì. Mỗi giai đoạn này có các hoạt động và sản phẩm đầu ra khác nhau để đảm bảo rằng phần mềm được phát triển theo đúng yêu cầu và chất lượng mong muốn. Trong bài viết này mình sẽ giới thiệu về 4 mô hình đó là :
- Mô hình Waterfall
- Mô hình tăng trưởng ( Incremental Model)
- Mô hình xoắn ốc ( Spiral Model)
- Mô hình Agile
Mô hình Waterfall
Đây được coi như là mô hình phát triển phần mềm đầu tiên, mô hình này áp dụng tuần tự các giai đoạn của phát triển phần mềm. Đầu ra của giai đoạn trước là đầu vào của giai đoạn sau. Giai đoạn sau chỉ được thực hiện khi giai đoạn trước đã kết thúc. Đặc biệt không được quay lại giai đoạn trước để xử lý các yêu cầu khi muốn thay đổi.
-
Phân tich các yêu cầu và tài liệu đặc tả(Repuirements and Speccifications): Là giai đoạn xác định những đòi hỏi liên quan đến yêu cầu chức năng và phi chức năng mà phần mềm cần có. Giai đoạn này cần sự tham gia tích cực của khách hàng và sản phẩm đầu ra là một tài liệu được gọi là “ Bản đặc tả yêu cầu phần mềm”- và và nền tảng cho các hoạt động tiếp theo đến cuối dự án.
-
Phân thích & thiết kế hệ thống( System Analysis and Design): Là giai đoạn chỉ ra “ làm thế nào” để phần mềm đáp ứng những đòi hỏi mà khách hàng yêu cầu trong bản đặc tả yêu cầu phần mềm
-
Cài đặt và kiểm thử từng phần( Coding and Unit Test): Chuyển bản thiết kế phần mềm thành một tập hợp các chương trình hoặc đơn vị các chương trình sau đó tiến hành kiểm thử các đơn vị để phát hiện khiếm khuyết và sửa chữa.
-
Tích hợp và kiểm thử hệ thống( Testing): giai đoạn này sẽ tiến hành kiểm thử mã (code) đã được thực hiện, bao gồm kiểm thử tích hợp cho nhóm các thành phần và kiểm thử toàn hệ thống. Một khâu kiểm thử cuối cùng thường được thực hiện là nghiệm thu, với sự tham gia của khách hàng là vai trò chính để xác định phần mềm có đáp ứng được yêu cầu của họ hay không.
-
Cài đặt và bảo trì( Deployment and Maintenace): đây là giai đoạn cài đặt, cấu hình và hướng dẫn cho khách hàng. Giai đoạn này sửa chữa những lỗi của phần mềm( nếu có) và phát triển những thay đổi mới được khách hàng yêu cầu( như sửa đỏi, thêm , bớt chức năng/ đặc điểm của hệ thống)
Ưu điểm:
- Các giai đoạn được định nghĩa với đầu ra, đầu vào rõ ràng nên dễ phân công công việc, phân bổ chi phí, giám sát công việc
- Quá trình phát triển đơn giản nên phù hợp với những dự án có ít thay đổi.
- Giảm thiểu các lỗi mắc phải trong giai đoạn thiết kế
Nhược điểm:
- Ít linh hoạt, phạm vi điều chỉnh hạn chế
- Rất khó để đo lường sự phát triển trong từng giai đoạn
- Mô hình không thích hợp với những dự án dài, đang diễn ra, hay những dự án phức tạp, có nhiều thay đổi về yêu cầu trong vòng đời phát triển.
- Khó quay lại khi giai đoạn nào đó đã kết thúc
Mô hình tăng trưởng ( Incremental Model)
- Trong mô hình này thì spec được chia thành nhiều phần
- Chu kì được chia thành các module nhỏ, dễ quản lý
- Mỗi module sẽ đi qua các yêu cầu thiết kế, thực hiện,… như một vòng đời phát triển thông thường.
- Áp dụng cho những dự án có yêu cầu đã được mô tả, định nghĩa và hiểu một cách rõ ràng
- Có nhu cầu sớm về sản phẩm
Ưu điểm:
- Phần mềm phát triển một cách nhanh chóng trong suốt vòng đời phát triển
- Mô hình này linh hoạt hơn, ít tốn kém hơn để thay đổi phạm vi và yêu cầu
- Dễ dàng trong việc kiểm tra và sửa lỗi sự lặp lại nhỏ hơn
Nhược điểm:
- Cần lập plan và thiết kế tốt
- Cần một định nghĩa rõ ràng và đầy đủ của toàn bộ hệ thống trước khi nó có thể được chia nhỏ và được xây dựng từng bước
- Tổng chi phí là cao hơn so với mô hình thác nước.
Mô hình xoắn ốc ( Spiral Model)
Mô hình này bao gồm các vòng lặp, mỗi vòng lặp bao gồm các giai đoạn giống như mô hình Waterfall (phân tích, thiết kế, lập trình, kiểm thử), nhưng được thực hiện theo cách linh hoạt hơn. Ở mỗi vòng lặp, sản phẩm phần mềm được phát triển, kiểm thử, đánh giá và các yêu cầu mới được thêm vào hoặc sửa đổi.
Cần xác định các mục tiêu, các lựa chọn thay thế, hoặc các ràng buộc cho mỗi chu kì xoắn ốc
Xác thực việc đạt được mục tiêu và kế hoạch cho chu kỳ tiếp theo
Ưu điểm:
- Rất phù hợp với dự án có nguy cơ cao và giảm thiểu rủi ro, đối phó với những thay đổi trong quá trình thực hiện dự án
- Dự đoán về thời hạn và chi phí sát với thực tế
- Linh hoạt để thích nghi với các yêu cầu mới, và đảm bảo chất lượng sản phẩm phần mềm
Nhược điểm:
- Phân tích rủi ro khá tốn kém, chủ yếu áp dụng cho dự án lớn, có tiềm lực về tài chính.
- Yêu cầu thay đổi thường xuyên dẫn đến lặp vô hạn, phức tạp, cần có đội ngũ chuyên gia về phân tích rủi ro.
- Chưa được áp dụng rộng rãi như mô hình thác nước.
Mô hình Agile
Agile là một phương pháp phát triển phần mềm linh hoạt và tập trung vào việc cung cấp sản phẩm cho khách hàng trong thời gian ngắn nhất có thể. Phương pháp phát triển phần mềm Agile là một tập hợp các phương pháp phát triển lặp và tăng dần trong đó các yêu cầu, giải pháp được phát triển thông qua sự liên kết cộng tác giữa các nhóm tự quản và liên chức năng. Agile giúp các nhà phát triển phần mềm đáp ứng nhanh chóng các yêu cầu thay đổi của khách hàng và đảm bảo chất lượng sản phẩm phần mềm.
Phương pháp Agile có nhiều khái niệm và kỹ thuật, nhưng các kỹ thuật chính bao gồm:
-
Sprints: Agile sử dụng các đợt phát triển ngắn gọi là sprints, thường kéo dài từ 1 đến 4 tuần. Mỗi sprint tập trung vào việc phát triển các tính năng hoặc chức năng cụ thể của sản phẩm phần mềm.
-
Sản phẩm trung gian: Agile sử dụng các sản phẩm trung gian để đánh giá tiến độ và đưa ra phản hồi. Sản phẩm trung gian này có thể là các phiên bản demo, các bản vẽ hoặc các tài liệu mô tả.
-
Daily report: Agile sử dụng daily report để giúp các thành viên trong nhóm phát triển phần mềm cập nhật tình hình và giải quyết các vấn đề nhanh chóng.
-
Scrum Master: Scrum Master là người đảm nhận vai trò quản lý và hỗ trợ cho nhóm phát triển phần mềm trong quá trình áp dụng phương pháp Scrum của Agile.
Ưu điểm:
- Tiếp cận thực tế trong quá trình phát triển phần mềm
- Tăng cường tình thần làm việc nhóm và trao đổi công việc hiệu quả
- Các chức năng được xây dựng nhanh chóng và rõ ràng
- Yêu cầu tài nguyên là tối thiểu
- Dễ dàng bổ sung, thay đổi yêu cầu
- Cung cấp sớm và hiệu quả các giải pháp làm việc
- Mô hình tuyệt vời trong môi trường thường thay đổi đều đặn
- Quy tắc tối thiểu, tài liệu dễ hiểu, dễ sử dụng
- Cho phép phát triển và phân phối đồng thời trong bối cảnh được lên kế hoạch tổng thể.
- Ít hoặc đôi khi không cần lập kế hoạch
- Dễ quản lý
- Tạo ra sự linh hoạt cho các nhà phát triển
Nhược điểm:
- Không thích hợp để xử lý các phụ thuộc phức tạp.
- Có nhiều rủi ro về tính bền vững, khả năng bảo trì và khả năng mở rộng.
- Quản lý phân phối nghiêm ngặt quy định phạm vi, chức năng được phân phối và các điều chỉnh để đáp ứng thời hạn.
- Phụ thuộc vào kỹ năng của người phát triển phần mềm
- Tài liệu được thực hiện ở giai đoạn sau
- Cần một team có kinh nghiệm
- Phụ thuộc rất nhiều vào sự tương tác của khách hàng, vì vậy nếu khách hàng không rõ ràng, nhóm có thể bị điều khiển sai hướng.
- Chuyển giao công nghệ cho các thành viên mới trong nhóm có thể khá khó khăn do thiếu tài liệu.
Kết Luận
Trên đây là một số mô hình phát triển phần mềm phổ biến mà mình biết, hy vọng sẽ giúp ích được cho các bạn, Các bạn có thắc mắc ay bổ sung gì cho bài viết của mình thì hãy comment xuống bên dưới để mình được biết nhé, còn nếu thấy bài viết hữu ích thì hãy cho mình một upvote nhé biết đâu đấy bài viết của mình lại được lên trending, cảm ơn các bạn rất nhiều.