Bối cảnh và vấn đề nghiên cứu

Trong bối cảnh ngành công nghệ thông tin và công nghiệp phần mềm phát triển nhanh chóng, các yêu cầu kỹ thuật và nghiệp vụ từ thị trường ngày càng trở nên đa dạng và phức tạp. Để xây dựng các hệ thống phần mềm đạt chất lượng cao, tối ưu hóa chi phí và bàn giao đúng tiến độ, việc nắm vững các quy trình phát triển cũng như nhận diện sớm các rủi ro phát sinh là yêu cầu tiên quyết đối với các kỹ sư và nhà quản lý dự án.

Đề tài "Tìm hiểu về phân loại và các vấn đề trong phát triển phần mềm" được thực hiện bởi nhóm sinh viên chuyên ngành Công nghệ Kỹ thuật Điện tử - Viễn thông, Khoa Công nghệ Thông tin, Trường Đại học Công nghệ Giao thông Vận tải (năm 2023) dưới sự hướng dẫn của TS. Đỗ Xuân Thu. Nghiên cứu xuất phát từ các lý do thực tiễn:

  1. Nhu cầu cấp thiết về việc chuẩn hóa hiểu biết đối với các quy trình phát triển phần mềm nhằm thích ứng với sự thay đổi của thị trường công nghệ.
  2. Xây dựng bước đệm về kỹ năng kỹ thuật, phương pháp lập kế hoạch, quản lý tiến độ, xử lý lỗi và kiểm soát tính ổn định của hệ thống trong quản trị dự án.
  3. Chia sẻ tài liệu tổng hợp có hệ thống cho cộng đồng học tập và phát triển phần mềm.

Mục tiêu và nhiệm vụ nghiên cứu của đề tài bao gồm:

  1. Hệ thống hóa các tiêu chí phân loại phát triển phần mềm dựa trên mô hình vòng đời, mục tiêu phát triển, phạm vi dự án, đối tượng sử dụng và quy mô triển khai.
  2. Phân tích chi tiết đặc điểm, quy trình, ưu nhược điểm và phạm vi ứng dụng của ba mô hình phát triển phần mềm tiêu biểu: Waterfall, Agile và DevOps.
  3. Nhận diện và phân tích 10 vấn đề rủi ro phổ biến trong quá trình phát triển phần mềm làm ảnh hưởng đến tiến độ, ngân sách và chất lượng sản phẩm.
  4. Đề xuất các giải pháp kỹ thuật và biện pháp quản trị tương ứng để giảm thiểu tác động tiêu cực của các vấn đề đã nhận diện.

Đối tượng nghiên cứu là các phương pháp luận phát triển phần mềm (SDLC), các mô hình kiến trúc dự án và các vấn đề quản lý phát sinh trong chu trình phần mềm. Phạm vi nghiên cứu tập trung vào cơ sở lý thuyết tổng quan, phân tích so sánh các mô hình và khảo sát các trường hợp ứng dụng thực tế trong quản trị doanh nghiệp cũng như ứng dụng cá nhân tại thời điểm năm 2023.

Cơ sở lý thuyết và phương pháp

Đề tài vận dụng khung lý thuyết về vòng đời phát triển phần mềm (Software Development Life Cycle - SDLC), kết hợp các mô hình quy trình chuẩn trong kỹ thuật phần mềm:

  • Mô hình Thác nước (Waterfall Model): Được Winston Royce giới thiệu năm 1970, đại diện cho phương pháp tiếp cận tuần tự tuyến tính.
  • Tuyên ngôn và nguyên tắc Agile: Dựa trên Tuyên ngôn phát triển phần mềm linh hoạt (Agile Manifesto) với 4 giá trị cốt lõi, 12 nguyên tắc định hướng và các khung làm việc như Scrum, Kanban, Extreme Programming (XP), Feature-Driven Development (FDD), Dynamic Systems Development Method (DSDM), và Crystal Method.
  • Mô hình DevOps: Dựa trên các định nghĩa chuẩn từ Atlassian, Amazon Web Services (AWS) và Microsoft, kết hợp giữa phát triển (Development) và vận hành (Operations) thông qua tự động hóa và tích hợp/chuyển giao liên tục (CI/CD).
  • Phân loại phần mềm theo quy mô và đối tượng: Khung phân loại dựa trên phần mềm đóng gói cơ bản, phần mềm tùy chỉnh (Custom Software), hệ thống quản trị doanh nghiệp (ERP, CRM, BI, SCM, HR) và các ứng dụng cá nhân/giáo dục.

Phương pháp nghiên cứu được nhóm tác giả sử dụng:

  • Phương pháp thu thập và tổng hợp tài liệu: Thu thập thông tin từ các tài liệu chuẩn hóa về kỹ thuật phần mềm, tài liệu hướng dẫn kỹ thuật của các hãng công nghệ lớn (Microsoft, Amazon, Atlassian) và các nghiên cứu chuyên ngành.
  • Phương pháp phân tích - so sánh logic: Lập bảng phân tích đối chiếu song song giữa các mô hình (Waterfall và Agile, phần mềm cơ bản và phần mềm tùy chỉnh) dựa trên các tiêu chí: tính linh hoạt, chi phí, quản lý phạm vi, thời gian bàn giao và mức độ tham gia của khách hàng.
  • Phương pháp nghiên cứu tình huống (Case Study): Phân tích quy trình triển khai phần mềm doanh nghiệp qua các sản phẩm thực tế như BRAVO, OOC-digiiMS, cũng như các ứng dụng quản lý cá nhân và giáo dục (ACheckin, Kiến Guru).

Nguồn dữ liệu của đề tài là dữ liệu thứ cấp từ tài liệu học thuật chuyên ngành kỹ thuật phần mềm và các báo cáo thực tiễn trong ngành công nghiệp CNTT.

Nội dung chính theo từng phần

1. Phân loại phát triển phần mềm theo mô hình vòng đời

Phần đầu tiên của đề tài tập trung làm rõ ba mô hình phát triển phần mềm kinh điển và hiện đại:

  • Mô hình Waterfall (Thác nước): Là quy trình thiết kế tuần tự nối tiếp qua 6 giai đoạn rõ ràng: Phân tích yêu cầu, Thiết kế hệ thống, Thực hiện (Lập trình), Kiểm thử hệ thống, Triển khai hệ thống và Bảo trì hệ thống. Giai đoạn sau chỉ được thực hiện khi giai đoạn trước đã hoàn tất hoàn toàn. Mô hình này thích hợp cho các dự án có yêu cầu cố định từ đầu, ít rủi ro kỹ thuật, phạm vi nhỏ hoặc các dự án đòi hỏi phê duyệt hồ sơ nghiêm ngặt. Hạn chế cốt lõi của Waterfall là khả năng thích ứng kém với thay đổi, kiểm thử bị trì hoãn tới giai đoạn cuối khiến chi phí sửa lỗi tăng cao.
  • Mô hình Agile: Là phương thức phát triển linh hoạt dựa trên nguyên tắc phân đoạn vòng lặp (iterative) và tăng trưởng (incremental). Đề tài làm rõ 7 đặc điểm cốt lõi của Agile: Tính lặp, Tính tăng trưởng & tiến hóa, Tính thích nghi, Nhóm tự tổ chức & liên chức năng, Quản lý tiến trình thực nghiệm, Giao tiếp trực diện và Phát triển dựa trên giá trị. Nhóm nghiên cứu cũng hệ thống hóa 7 bước thực hiện quy trình Agile: từ xác định tầm nhìn, xây dựng lộ trình, lập kế hoạch từng giai đoạn, phân tích yêu cầu, triển khai, kiểm thử đến bàn giao.
  • Mô hình DevOps: Được xác định là sự kết hợp giữa con người, quy trình và công cụ nhằm tự động hóa các khâu giữa nhóm phát triển và nhóm vận hành. Vòng đời DevOps gồm 4 giai đoạn chính: Lập kế hoạch (Planning), Phát triển (Development), Chuyển giao (Delivery) và Bảo trì phần mềm (Software maintenance). Tốc độ phát triển trong DevOps được tối ưu hóa nhờ: Tự động hóa vòng đời, Tích hợp liên tục và Chuyển giao liên tục (CI/CD), Cơ sở hạ tầng dưới dạng mã (Infrastructure as Code - IaC), Kiểm soát phiên bản và tích hợp trải nghiệm người dùng (UX) xuyên suốt.

Bảng so sánh giữa mô hình Waterfall và Agile được tổng hợp trong tài liệu:

Tiêu chí so sánh Mô hình Waterfall Mô hình Agile
Kế hoạch & Thời gian Lên kế hoạch dài hạn, xác định mốc thời gian cố định cho toàn bộ dự án Lập kế hoạch ngắn hạn theo từng sprint/iteration, lịch trình điều chỉnh linh hoạt
Sự tham gia của khách hàng Tham gia chủ yếu ở giai đoạn xác định yêu cầu ban đầu và nghiệm thu cuối Tương tác và phản hồi liên tục xuyên suốt tất cả các giai đoạn
Ngân sách dự án Thường được dự toán cố định ngay từ đầu Linh hoạt, dự toán và điều chỉnh theo từng giai đoạn phát sinh
Khả năng tiếp nhận thay đổi Không khuyến khích thay đổi, phản ứng chậm khi có biến động Sẵn sàng thích nghi và cải tiến liên tục theo phản hồi thực tế
Quy trình kiểm soát chất lượng Kiểm thử được dồn vào giai đoạn cuối của chu trình Kiểm thử được thực hiện liên tục và song song trong từng phân đoạn
Cơ cấu nhóm làm việc Phân chia vai trò, trách nhiệm và cấp bậc rõ ràng, cứng nhắc Nhóm tự tổ chức, liên chức năng, chia sẻ trách nhiệm bình đẳng

2. Phân loại theo mục tiêu, phạm vi và đối tượng sử dụng

Tài liệu tiếp tục phân tích các tiêu chí phân loại khác trong kỹ thuật phần mềm:

  • Theo mục tiêu phát triển:
    • Phát triển phần mềm cơ bản: Tập trung giải quyết một bài toán đơn lẻ với các chức năng tối giản, thời gian ngắn, sử dụng các ngôn ngữ như Python, JavaScript, Ruby (ví dụ: máy tính bỏ túi, danh bạ, danh sách công việc To-Do, máy tính BMI).
    • Phát triển phần mềm tùy chỉnh (Custom Software): Xây dựng giải pháp chuyên biệt theo yêu cầu của một tổ chức, hỗ trợ khả năng mở rộng quy mô, tích hợp sâu vào hệ thống sẵn có và đảm bảo bảo mật cao. Tuy nhiên, hình thức này đòi hỏi chi phí đầu tư lớn, thời gian phát triển dài và rủi ro nếu chọn sai đối tác phát triển.
  • Theo phạm vi dự án: Phân tích tầm quan trọng của việc thống nhất phạm vi (Project Scope) và các sản phẩm bàn giao trung gian (tài liệu thiết kế, tài liệu hướng dẫn, cấu hình máy chủ). Việc xác định phạm vi rõ ràng giúp doanh nghiệp tối ưu hóa nguồn lực, kiểm soát ngân sách và phòng ngừa các công việc phát sinh không cần thiết.
  • Theo đối tượng sử dụng:
    • Phần mềm di động: Phát triển chuyên biệt trên hệ điều hành Android (Google Play Store), iOS (Apple App Store) hoặc các ứng dụng đa nền tảng dựa trên công nghệ web (HTML, CSS, JavaScript).
    • Phần mềm máy tính: Xây dựng ứng dụng cục bộ chạy trên máy tính cá nhân bằng các ngôn ngữ như Java, C++, C#, Python; giúp xử lý dữ liệu phức tạp với độ chính xác cao và tối ưu hóa tác vụ văn phòng.

3. Phân loại theo quy mô dự án: Phần mềm doanh nghiệp và cá nhân

  • Phần mềm doanh nghiệp: Đóng vai trò nâng cao hiệu quả vận hành, tích hợp dữ liệu và hỗ trợ ra quyết định. Các phân hệ chính gồm: Hoạch định nguồn lực doanh nghiệp (ERP), Quản lý quan hệ khách hàng (CRM), Nghiệp vụ thông minh (BI), Quản lý chuỗi cung ứng (SCM) và Quản lý nguồn nhân lực (HR). Nhóm tác giả đưa ra quy trình 5 bước triển khai phần mềm doanh nghiệp:
    1. Xác định vấn đề và đặt mục tiêu;
    2. Lựa chọn nhà cung cấp phù hợp;
    3. Xây dựng và điều chỉnh hệ thống;
    4. Triển khai dùng thử và đồng bộ dữ liệu;
    5. Đánh giá và hoàn thiện hệ thống trên diện rộng. Đề tài phân tích hai ví dụ thực tế: Hệ thống quản trị doanh nghiệp BRAVO (tập trung vào tính năng quản lý quy trình WorkFlow, phân quyền người dùng) và giải pháp OOC-digiiMS (tính linh hoạt cao, bảo mật mạnh mẽ).
  • Phần mềm cá nhân: Hướng tới việc hỗ trợ học tập, rèn luyện và quản lý đời sống. Đề tài khảo sát các phần mềm giáo dục trực tuyến (hỗ trợ ôn luyện, bài tập phân hóa từ lớp 1 đến lớp 12 như Kiến Guru), phần mềm quản lý chi tiêu cá nhân (thống kê thu chi, quét hóa đơn, nhắc nhở định kỳ) và phần mềm lập kế hoạch công việc (ACheckin với tính năng tạo checklist, quản lý lịch họp và phân công nhiệm vụ).

4. Nhận diện các vấn đề thường gặp và giải pháp khắc phục

Phần thứ hai của đề tài tổng hợp 10 vấn đề rủi ro kỹ thuật và quản trị dự án phần mềm phổ biến, đồng thời đưa ra các giải pháp cụ thể:

STT Vấn đề rủi ro Nguyên nhân & Tác động Giải pháp khắc phục
1 Ước lượng không chính xác Đánh giá thấp độ dài dự án và các mốc kỹ thuật; dẫn đến trễ hạn và đội chi phí. Ưu tiên các hạng mục công việc trước mắt; áp dụng Tech Spikes (dành thời gian giải quyết trước các vấn đề kỹ thuật phức tạp để loại bỏ rủi ro).
2 Thay đổi phạm vi (Scope Creep) Yêu cầu thay đổi liên tục sau khi đã thống nhất khung thời gian ban đầu. Áp dụng các vòng lặp phát triển ngắn (Agile Iteration); chỉ thực hiện một công việc ưu tiên duy nhất tại một thời điểm.
3 Tương tác người dùng kém Người dùng cuối không chấp nhận sản phẩm hoặc gặp khó khăn khi thao tác. Thực hiện khảo sát người dùng, làm việc với nhóm tập trung (focus groups), phát hành thường xuyên các bản thử nghiệm beta.
4 Kỳ vọng các bên liên quan Sự khác biệt về mục tiêu giữa chủ doanh nghiệp, nhà đầu tư và đội ngũ phát triển. Duy trì kênh giao tiếp minh bạch, tổ chức các cuộc họp định kỳ, tuân theo phương thức làm việc Agile (Agile Way of Working).
5 Code chất lượng kém Lập trình vội vã, thiếu kiểm thử gây nợ kỹ thuật (technical debt) và khó bảo trì. Thiết lập Tiêu chí chấp nhận của người dùng (UAC), thực hiện Code Review, ban hành chuẩn coding rõ ràng và bố trí Giám đốc sản phẩm giám sát.
6 Năng suất kém Kế hoạch làm việc quá tải dẫn đến kiệt sức hoặc thiếu động lực làm việc. Cải thiện văn hóa doanh nghiệp, lập kế hoạch dài hạn khả thi, tăng cường sự đồng hành của Giám đốc sản phẩm với đội ngũ phát triển.
7 Quản lý rủi ro không đầy đủ Không nhận diện và lập phương án dự phòng cho các rủi ro phát sinh. Xây dựng chiến lược giảm thiểu rủi ro ngay từ đầu, đưa tham số rủi ro vào ước lượng và sử dụng Sổ đăng ký rủi ro (Risk Register).
8 Ít sự tham gia của bên liên quan Khách hàng phản hồi chậm, làm đình trệ quá trình nghiệm thu. Ký thỏa thuận rõ ràng về thời gian phản hồi cho quy trình Thử nghiệm chấp nhận người dùng (UAT), làm rõ mục tiêu từng giai đoạn.
9 Thiếu hụt nguồn nhân lực Thành viên nhóm rời dự án đột xuất mà không chuyển giao đầy đủ tri thức. Duy trì cập nhật tài liệu kỹ thuật liên tục, chuẩn bị tài liệu hướng dẫn bàn giao đầy đủ cho nhân sự mới.
10 Thiếu quyền sở hữu (Ownership) Không phân định rõ cá nhân/bộ phận chịu trách nhiệm khi xảy ra lỗi hệ thống. Quy định rõ trách nhiệm của từng cá nhân từ đầu dự án, ghi chép biên bản cuộc họp và phân công nhiệm vụ cụ thể qua các kênh liên lạc minh bạch.

Kết quả và đóng góp

Đề tài đã đạt được các kết quả cụ thể:

  • Hệ thống hóa toàn diện các mô hình phát triển phần mềm: Cung cấp bức tranh phân loại đa chiều từ mô hình truyền thống (Waterfall) đến linh hoạt (Agile với các biến thể Scrum, Kanban, XP, FDD, DSDM, Crystal) và hiện đại (DevOps với quy trình CI/CD và IaC).
  • Bộ hướng dẫn triển khai thực tế: Phác thảo quy trình 5 bước để lựa chọn và áp dụng phần mềm quản trị doanh nghiệp (ERP, CRM), đồng thời chỉ ra các tiêu chuẩn lựa chọn phần mềm cá nhân và giáo dục.
  • Khung giải pháp xử lý 10 rủi ro kinh điển: Xây dựng danh mục đối chiếu các vấn đề quản lý và kỹ thuật kèm biện pháp xử lý có tính ứng dụng cao (sử dụng Tech Spikes, UAC, Sổ đăng ký rủi ro, phân định Ownership).
  • Đóng góp về mặt phương pháp: Tạo lập tài liệu tham khảo có cấu trúc rõ ràng cho sinh viên khối kỹ thuật điện tử - viễn thông và công nghệ thông tin trong việc tiếp cận các khái niệm quản trị dự án phần mềm.

Hạn chế và hướng nghiên cứu tiếp

  • Hạn chế:
    • Nghiên cứu dừng lại ở mức độ tổng quan lý thuyết và phân tích tài liệu thứ cấp, chưa có số liệu thực nghiệm đo lường định lượng (như thống kê tỷ lệ % lỗi thực tế trong một dự án phần mềm cụ thể hoặc khảo sát diện rộng trên tập mẫu doanh nghiệp).
    • Phần phân tích kỹ thuật chưa đi sâu vào việc xây dựng hệ thống hay viết mã nguồn thực tế cho một ứng dụng cụ thể.
  • Hướng nghiên cứu tiếp:
    • Áp dụng các quy trình Agile/DevOps đã tổng hợp vào việc xây dựng một sản phẩm phần mềm viễn thông hoặc ứng dụng cụ thể để kiểm chứng hiệu quả quản lý tiến độ.
    • Nghiên cứu sâu hơn về việc tích hợp trí tuệ nhân tạo (AI) và máy học (ML) vào tự động hóa quy trình kiểm thử và quản trị rủi ro trong vòng đời DevOps.

Giá trị tham khảo

Tài liệu là nguồn tham khảo hữu ích cho:

  • Sinh viên ngành CNTT và CNKT Điện tử - Viễn thông: Sử dụng làm tài liệu ôn tập và định hướng phương pháp luận cho môn học Kỹ thuật phần mềm, Quản lý dự án CNTT hoặc chuẩn bị cho đồ án tốt nghiệp.
  • Các nhóm phát triển phần mềm khởi nghiệp hoặc nhóm sinh viên làm bài tập lớn: Tham khảo các nguyên tắc tổ chức nhóm tự quản, quy trình chạy Sprint trong Agile, các bước lập kế hoạch và biểu mẫu quản lý rủi ro để vận hành dự án nhóm hiệu quả.
  • Các nhà quản lý dự án mới: Sử dụng bảng đối chiếu 10 rủi ro và các công cụ quản trị (Risk Register, Tech Spikes, UAC) để thiết lập quy trình kiểm soát chất lượng phần mềm ngay từ giai đoạn đầu.

Câu hỏi thường gặp

1. Điểm khác biệt mấu chốt giữa phương pháp Kanban và Scrum trong mô hình Agile là gì?
Trong khi cả hai phương pháp đều sử dụng bảng trực quan để quản lý công việc, điểm khác biệt chính là Scrum chia nhỏ dự án thành các chu kỳ cố định gọi là sprint (thường kéo dài 1-4 tuần) và chỉ lập kế hoạch cho từng sprint tại một thời điểm. Ngược lại, Kanban quản lý luồng công việc liên tục bằng cách chia nhiệm vụ thành ba cột trực quan: "Việc cần làm", "Việc làm" và "Hoàn thành" mà không bắt buộc phải cố định khung thời gian theo sprint.

2. Khái niệm "Tech Spikes" được đề xuất trong tài liệu nhằm mục đích gì?
Tech Spikes là giải pháp dành một khoảng thời gian chuyên biệt để nhóm kỹ thuật tập trung nghiên cứu, giải quyết trước các vấn đề kỹ thuật phức tạp hoặc kiến trúc thiết kế chưa quen thuộc. Việc áp dụng Tech Spikes giúp loại bỏ sớm các rủi ro tiềm ẩn trước khi đưa ra ước lượng chính xác về thời gian và chi phí cho toàn bộ dự án.

3. Theo tài liệu, 4 giai đoạn chính trong vòng đời phát triển phần mềm DevOps là gì?
Vòng đời DevOps bao gồm 4 giai đoạn: Lập kế hoạch (Planning), Phát triển (Development), Chuyển giao (Delivery) và Bảo trì phần mềm (Software maintenance). Quy trình này vận hành khép kín với các cơ chế tự động hóa và tích hợp/chuyển giao liên tục (CI/CD).

4. Khi nào một dự án phần mềm nên ưu tiên lựa chọn mô hình Thác nước (Waterfall) thay vì Agile?
Mô hình Waterfall nên được ưu tiên khi: yêu cầu của dự án đã được xác định rõ ràng và ổn định ngay từ đầu, dự án có mức độ rủi ro thấp, môi trường làm việc ít biến động, quy mô dự án nhỏ/đơn giản (như website tĩnh), hoặc khi khách hàng và các bên liên quan yêu cầu phải phê duyệt toàn bộ thiết kế và sản phẩm hoàn chỉnh theo từng mốc cố định.

5. Giải pháp nào được đưa ra để khắc phục tình trạng "Nợ kỹ thuật" (Technical Debt) do code chất lượng kém?
Nhóm nghiên cứu đề xuất các giải pháp: xây dựng Tiêu chí chấp nhận của người dùng (UAC) rõ ràng, thực hiện quy trình đánh giá mã nguồn (Code Review), thiết lập bộ tiêu chuẩn lập trình chuẩn hóa, kiểm tra toàn diện tất cả các đoạn mã và chỉ định một Giám đốc Sản phẩm chuyên trách để giám sát chất lượng kỹ thuật xuyên suốt dự án.

Kết luận

Báo cáo bài tập lớn "Tìm hiểu về phân loại và các vấn đề trong phát triển phần mềm" của nhóm sinh viên Trường Đại học Công nghệ GTVT đã hệ thống hóa một cách khoa học các mô hình vòng đời phần mềm từ Waterfall, Agile đến DevOps. Tài liệu cũng phân tích chi tiết các tiêu chí phân loại phần mềm theo mục tiêu, phạm vi và quy mô ứng dụng từ cấp độ cá nhân đến doanh nghiệp lớn. Đặc biệt, việc chỉ ra 10 vấn đề rủi ro then chốt cùng các giải pháp quản trị thực tế mang lại giá trị tham khảo thiết thực cho việc học tập và thực hành quản lý dự án phần mềm.