Khi bắt đầu làm việc trong ngành phát triển phần mềm, một trong những khái niệm nền tảng mà bạn cần nắm vững chính là Software Development Lifecycle (SDLC) - vòng đời phát triển phần mềm. Đây không chỉ là một quy trình máy móc mà còn là kim chỉ nam giúp team phát triển biến ý tưởng thành sản phẩm một cách có hệ thống.
SDLC là một framework mô tả các giai đoạn cần thiết để phát triển một phần mềm từ lúc thai nghén đến khi triển khai và bảo trì. Nó giống như một bản đồ hướng dẫn, giúp team không bị lạc lối giữa hàng trăm quyết định cần đưa ra mỗi ngày.
Tại sao SDLC lại quan trọng? Hãy tưởng tượng bạn xây một ngôi nhà mà không có bản vẽ thiết kế - bạn có thể xây được, nhưng khả năng cao là ngôi nhà sẽ lệch móng, tốn kém và không đáp ứng được nhu cầu thực tế. Phần mềm cũng vậy.
Waterfall là mô hình tuần tự, mỗi giai đoạn phải hoàn thành trước khi chuyển sang giai đoạn tiếp theo. Tưởng tượng nước chảy từ tầng trên xuống tầng dưới, không thể ngược dòng.
Ưu điểm:
Nhược điểm:
Khi nào nên dùng: Dự án có yêu cầu rõ ràng từ đầu, ít thay đổi, hoặc khi bạn đang phát triển cho lĩnh vực cần tuân thủ nghiêm ngặt các quy định.
Agile là triết lý phát triển linh hoạt, tập trung vào việc giao sản phẩm nhỏ, thường xuyên và có khả năng thích ứng với thay đổi. Agile có nhiều framework con như Scrum và Kanban.
Scrum chia công việc thành các sprint (thường 2-4 tuần), mỗi sprint tạo ra một phiên bản sản phẩm có thể demo. Bạn sẽ có các buổi họp daily standup (15 phút mỗi ngày), sprint planning, và retrospective để liên tục cải tiến.
Kanban tập trung vào luồng công việc liên tục, sử dụng bảng trực quan (board) với các cột như "To Do", "In Progress", "Done". Không có sprint cố định, công việc được pull dần theo năng lực của team.
Ưu điểm:
Nhược điểm:
Khi nào nên dùng: Khi yêu cầu chưa rõ ràng hoàn toàn, dự án cần feedback nhanh từ người dùng, hoặc bạn đang xây dựng sản phẩm công nghệ mới.
DevOps không thực sự là một mô hình SDLC độc lập mà là văn hóa và practices kết hợp phát triển (Dev) với vận hành (Ops). Mục tiêu là rút ngắn chu kỳ phát triển và giao hàng liên tục với chất lượng cao.
Nguyên tắc cốt lõi:
Ưu điểm:
Nhược điểm:
Khi nào nên dùng: Khi bạn cần deploy thường xuyên (nhiều lần/ngày), làm việc với cloud infrastructure, hoặc đang scale team lên quy mô lớn.
Bất kể mô hình nào, mọi SDLC đều trải qua các giai đoạn này (có thể với tần suất khác nhau):
Xác định scope, mục tiêu, nguồn lực và timeline. Với Waterfall, giai đoạn này rất chi tiết. Với Agile, planning xảy ra ở mỗi sprint.
Câu hỏi cần trả lời: Chúng ta đang giải quyết vấn đề gì? Ai là người dùng? Thành công được đo bằng gì?
Đào sâu vào nhu cầu của người dùng và business. Tạo các tài liệu như BRD (Business Requirement Document) và SRS (Software Requirements Specification).
Kỹ thuật hữu ích: User stories, use cases, interviews với stakeholders.
Chuyển yêu cầu thành kiến trúc hệ thống. Bao gồm thiết kế high-level (tổng thể hệ thống) và low-level (chi tiết từng module).
Output: Architecture diagrams, database schemas, API specifications.
Developers viết code thực sự. Giai đoạn này đi kèm với code review, unit testing và integration testing.
Best practices: Follow coding standards, sử dụng version control (Git), thường xuyên commit code.
Kiểm thử toàn diện (functional, performance, security testing) trước khi đưa ra production. Sau khi deploy, chuyển sang giai đoạn Maintenance - sửa bug, thêm tính năng, optimize.
Không có mô hình "tốt nhất" - chỉ có mô hình phù hợp nhất với context. Dưới đây là một số tiêu chí:
Chọn Waterfall nếu:
Chọn Agile/Scrum nếu:
Áp dụng DevOps khi:
Thực tế là: Nhiều tổ chức kết hợp các mô hình. Ví dụ, dùng Agile cho phát triển tính năng mới nhưng áp dụng cách tiếp cận Waterfall cho các module có compliance requirements. Hoặc chạy Scrum nhưng tích hợp DevOps practices để tự động hóa deployment.
Trong bài tiếp theo, chúng ta sẽ đi sâu vào Requirements Engineering - nghệ thuật khơi gợi và quản lý yêu cầu, một kỹ năng then chốt quyết định thành bại của dự án.
Bài viết thuộc series "From Zero to AI Engineer" - Module 1: Development Process