-----
Ở phần trước đã đề cập, để làm ra một phần mềm, cần trải qua 6 công đoạn là: [1] Lấy và phân tích yêu cầu, [2] Thiết kế, [3] Lập trình, [4] Kiểm thử, [5] Triển khai, [6] Vận hành và Bảo trì.
Tuy nhiên, trong thực tế, tùy thuộc vào quy mô và tính chất của dự án, người ta sẽ có cách thức tổ chức các công đoạn theo nhiều cách khác nhau.
Chúng ta cùng tìm hiểu một số cách thức tổ chức các công đoạn của quá trình phát triển phần mềm. Mỗi cách thức tổ chức được gọi là một Mô hình phát triển phần mềm.
Có rất nhiều mô hình phát triển phần mềm, ví dụ:
- Mô hình thác nước
- Mô hình chữ V
- Mô hình xoắn ốc
- Mô hình hợp nhất
- Mô hình tiếp cận lặp
- Mô hình nguyên mẫu
- Mô hình Scrum
- Mô hình Kanban
- Mô hình XP
Chúng ta cùng tìm hiểu một số mô hình.
2.1 Mô hình Thác nước
- Đặc điểm: Đây là mô hình tuần tự, các giai đoạn phát triển diễn ra theo một trình tự tuyến tính, từ trên xuống dưới như một dòng thác. Mỗi giai đoạn phải được hoàn thành trước khi chuyển sang giai đoạn tiếp theo và không có sự quay lại.
- Áp dụng: Phù hợp với các dự án có yêu cầu ổn định, đã được xác định rõ ràng ngay từ đầu và không có khả năng thay đổi. Ví dụ: các dự án phát triển phần mềm nhúng hoặc các dự án quốc phòng.
Công việc cụ thể của mỗi công đoạn:
[1] Lấy và phân tích yêu cầu
Giai đoạn này xác định phần mềm phải làm gì.
Công việc cụ thể:
- Làm việc trực tiếp với khách hàng để xác định các tính năng, giao diện và hiệu suất
- Sử dụng các kỹ thuật như phỏng vấn, khảo sát hoặc viết user stories
- Phân loại yêu cầu thành nhóm chức năng và phi chức năng
- Xây dựng tài liệu Đặc tả yêu cầu phần mềm (SRS - Software Requirements Specification)
Công cụ sử dụng:
- Các phần mềm soạn thảo văn bản (Word, Google Docs), Confluence
[2] Thiết kế
Chuyển các yêu cầu thành bản vẽ kỹ thuật
Công việc cụ thể:
- Thiết kế kiến trúc hệ thống (Client-Server, Microservices...)
- Thiết kế cơ sở dữ liệu, thuật toán và giao diện người dùng
- Vẽ sơ đồ lớp UML (UML Class Diagrams)
Công cụ sử dụng:
- Enterprise Architect, Visual Paradigm, Lucidchart (vẽ UML); Figma (thiết kế UI/UX)
[3] Lập trình
Sử dụng ngôn ngữ lập trình để viết mã, dựa trên bản thiết kế.
Công việc cụ thể:
- Viết mã theo tiêu chuẩn: SOLID, DRY, KISS
- Đặt tên biến/hàm theo chuẩn và viết chú thích đầy đủ
- Xây dựng hệ thống kiểm thử tự động (Unit test) song song khi lập trình
Công cụ sử dụng:
- VS Code, Cursor, IntelliJ
- Quản lý phiên bản bằng Git
[4] Kiểm thử
Tìm và sửa lỗi để đảm bảo phần mềm chạy đúng và ổn định.
Công việc cụ thể:
- Kiểm thử ở nhiều cấp độ: Unit, Integration, System, Acceptance
- Áp dụng kiểm thử hộp đen (Black-box) và hộp trắng (White-box)
Công cụ sử dụng:
- Selenium, JMeter, Postman (kiểm thử API)
[5] Triển khai
Cài đặt phần mềm vào môi trường thực tế và bàn giao cho khách hàng.
Công việc cụ thể:
- Đóng gói phần mềm
- Thiết lập luồng tích hợp và triển khai liên tục (CI/CD)
- Hướng dẫn khách hàng sử dụng sản phẩm
Công cụ sử dụng:
- Docker, Jenkins, GitHub Actions
- Các dịch vụ Cloud (AWS, Azure)
[6] Vận hành và bảo trì
Theo dõi, sửa lỗi phát sinh và nâng cấp hệ thống.
Công việc cụ thể:
- Sửa lỗi, cấu hình phần mềm để thích nghi với môi trường mới và hoàn thiện tính năng
- Tái cấu trúc mã nguồn (refactoring)
Công cụ sử dụng:
- Các hệ thống giám sát (monitoring) như Grafana, Prometheus
2.2 Mô hình chữ V
- Đặc điểm: Là một biến thể của mô hình thác nước, mô hình chữ V nhấn mạnh việc kiểm thử được thực hiện song song với các giai đoạn phát triển. Mỗi giai đoạn phát triển sẽ tương ứng với một giai đoạn kiểm thử cụ thể.
- Áp dụng: Phù hợp cho các dự án yêu cầu độ tin cậy cao, ví dụ như các hệ thống y tế hoặc các hệ thống kiểm soát công nghiệp.
2.3 Mô hình tiếp cận lặp
- Đặc điểm: Mô hình này chia dự án thành nhiều lần lặp (iteration) nhỏ. Mỗi lần lặp sẽ tạo ra một phiên bản sản phẩm có thể hoạt động được, bổ sung thêm tính năng qua mỗi lần lặp.
- Áp dụng: Dành cho các dự án mà yêu cầu không rõ ràng ngay từ đầu, hoặc khi cần phát hành sản phẩm sớm để lấy ý kiến phản hồi từ người dùng.
2.4 Mô hình Agile/Scrum
- Đặc điểm: Là một trong những mô hình Agile phổ biến nhất. Scrum dựa trên việc chia dự án thành các chu kỳ phát triển ngắn (thường 1-4 tuần) gọi là Sprint. Trong mỗi Sprint, đội nhóm sẽ hoàn thành một tập hợp các tính năng được ưu tiên.
- Áp dụng: Phù hợp với các dự án có yêu cầu thường xuyên thay đổi và cần sự linh hoạt, nơi mà sự hợp tác chặt chẽ giữa các thành viên và với khách hàng là yếu tố then chốt.
2.5 Bài tập và câu hỏi
Bài tập 2a. Vẽ lại sơ đồ các mô hình: Thác nước, chữ V, Tăng trưởng lặp và Agile/Scrum.
Bài tập 2b. Mô tả công việc của mỗi công đoạn, công cụ sử dụng của mô hình Thác nước
Câu hỏi 2.1 Về mô hình Thác nước. Phát biểu nào không đúng?
A. Mỗi giai đoạn phải được hoàn thành trước khi chuyển sang giai đoạn tiếp theo và không có sự quay lại
B. Không phù hợp với các dự án có yêu cầu ổn định, đã được xác định rõ ràng ngay từ đầu và không có khả năng thay đổi
C. Đây là mô hình tuần tự, các giai đoạn phát triển diễn ra theo một trình tự tuyến tính, từ trên xuống dưới như một dòng thác
D. Phù hợp với các dự án có yêu cầu ổn định, đã được xác định rõ ràng ngay từ đầu và không có khả năng thay đổi
-----
Bài sau:



