Giáo trình Công nghệ Phần mềm: Thiết kế, Kiểm thử và Bảo trì Phần mềm

Tổng quan về giáo trình

Giáo trình Công nghệ Phần mềm là tài liệu học thuật thuộc khối kiến thức chuyên ngành bắt buộc trong chương trình đào tạo bậc Đại học và Sau Đại học ngành Công nghệ Thông tin, Kỹ thuật Phần mềm và Hệ thống Thông tin. Tài liệu tập trung vào ba giai đoạn trọng yếu trong vòng đời phát triển phần mềm (Software Development Life Cycle - SDLC): Thiết kế chi tiết chương trình (Program Design), Kiểm thử phần mềm (Software Testing) và Bảo trì phần mềm (Software Maintenance).

Mục tiêu học tập của giáo trình nhằm trang bị cho người học:

  • Phương pháp luận và kỹ thuật thiết kế chi tiết giải thuật, cấu trúc dữ liệu theo hai hướng tiếp cận: tiếp cận cấu trúc hóa và tiếp cận hướng đối tượng (OOD).
  • Nguyên lý mô hình hóa hệ thống bằng ngôn ngữ UML và quy trình phát triển USDP (Unified Software Development Process).
  • Cơ sở lý thuyết và các kỹ thuật thiết kế trường hợp kiểm thử (test case) hộp trắng, hộp đen, cùng các cấp độ kiểm thử từ đơn vị, tích hợp đến kiểm thử hệ thống và chấp nhận.
  • Khung tiêu chuẩn quốc tế về bảo trì phần mềm (IEEE 1993, ISO/IEC 12207, ISO/IEC 14764) và mô hình đánh giá độ thuần thục bảo trì phần mềm $S^3M$.

Cấu trúc giáo trình được xây dựng theo trình tự logic chặt chẽ của kỹ nghệ phần mềm: từ đặc tả yêu cầu và thiết kế kiến trúc chuyển sang thiết kế môđun chi tiết, hiện thực hóa mã nguồn, tiến hành thẩm định/xác minh qua kiểm thử và quản lý sự tiến hóa của hệ thống trong giai đoạn vận hành. Điểm đặc sắc của tài liệu là việc kết hợp cân bằng giữa các nền tảng lý thuyết cổ điển (như sơ đồ Nassi, PAD của Hitachi, phương pháp Jackson, Warnier, độ phức tạp lặp McCabe) với các chuẩn mực công nghiệp hiện đại (UML, USDP, mô hình $S^3M$).


Nội dung kiến thức cốt lõi

Các chương và chủ đề chính

Tài liệu bao quát ba chương chuyên đề trọng tâm:

1. Chương 8: Thiết kế chương trình (Trang 101 – 125)

Chương này xác định hai nhiệm vụ cơ bản của thiết kế chi tiết: thiết kế giải thuật và thiết kế cấu trúc dữ liệu cho từng môđun. Nội dung phân hóa thành hai phương pháp luận:

  • Thiết kế cấu trúc hóa: Dựa trên ba cấu trúc điều khiển nền tảng (tuần tự, rẽ nhánh, lặp) và kỹ thuật khử lệnh GOTO để tránh tạo mã nguồn dạng spaghetti. Trình bày các công cụ biểu diễn giải thuật trực quan gồm: Lưu đồ Nassi (IBM đề xuất), Lưu đồ PAD (Hitachi đề xuất với trục chính thẳng đứng), Phương pháp phân cấp Jackson và Phương pháp Warnier.
  • Thiết kế hướng đối tượng (OOD): Khái niệm lớp, đối tượng, cơ chế truyền thông điệp (cài đặt qua gọi thủ tục), tính đóng gói (che giấu thông tin với các phạm vi truy cập public, private, protected, friend), quan hệ kế thừa (tổng quát hóa), quan hệ cấu thành (aggregation / "has-a") và tính đa hình (liên kết tĩnh, liên kết động, nạp chồng hàm, nạp chồng toán tử). Chương này giới thiệu quy trình OOD 5 bước, 5 khung nhìn kiến trúc UML, 8 loại biểu đồ chuẩn và quy trình hợp nhất USDP với mô hình kiến trúc phân tầng (Presentation Layer, Application Layer, Domain Layer, Database Layer).
  • Quy cách mã hóa: Các quy tắc viết mã sạch, tối ưu cấu trúc dữ liệu (sử dụng từ điển dữ liệu, định nghĩa cục bộ) và kiểm soát thuật toán (một đầu vào - một đầu ra, giới hạn phạm vi môđun trên một trang màn hình).

2. Chương 9: Kiểm thử phần mềm (Trang 127 – 139)

Chương 9 định nghĩa kiểm thử là tiến trình xem xét lại đặc tả, thiết kế và mã hóa nhằm phát hiện lỗi (dẫn chiếu quan điểm của Sue A. Conger trong The New Software Engineering). Nội dung gồm:

  • Phương pháp kiểm thử: Phân biệt kiểm thử tĩnh trên bàn (walkthrough, inspection) và kiểm thử động trên máy qua quy trình 9 bước.
  • Kỹ thuật thiết kế ca kiểm thử hộp đen: Phân đoạn tương đương (Equivalence Partitioning), Phân tích giá trị biên (Boundary Value Analysis) và Đoán nhận lỗi (Error Guessing).
  • Kỹ thuật thiết kế ca kiểm thử hộp trắng: Kỹ thuật kiểm thử theo lộ trình cơ bản (Basis Path Testing do Tom McCabe đề xuất), xây dựng đồ thị luồng chương trình (Control Flow Graph) và tính toán độ phức tạp lặp $V(G)$.
  • Các cấp độ kiểm thử: Kiểm thử đơn vị (Unit Test); Kiểm thử tích hợp (Integration Test) với 4 kỹ thuật: Dưới lên (Bottom-up), Trên xuống (Top-down), Cột trụ (Big-bang), Kẹp (Sandwich); Kiểm thử hệ thống (phục hồi, an toàn, gay cấn, hiệu năng); Kiểm thử chấp nhận (Acceptance Test / $\beta$-testing).

3. Chương 10: Bảo trì phần mềm (Trang 141 – 152)

Chương 10 phân tích giai đoạn vận hành sau chuyển giao:

  • Khái niệm và hình thái: Định nghĩa bảo trì theo IEEE (1993) và ISO/IEC 12207 (1995). Phân loại 4 hình thái bảo trì: Tu chỉnh (Corrective), Thích hợp (Adaptive), Cải tiến (Perfective) và Phòng ngừa (Preventive).
  • Tiêu chuẩn ISO/IEC 14764: Nhóm bảo trì thành hai luồng chính: Chỉnh sửa (Correction) và Nâng cao (Enhancement). Quy trình nghiệp vụ 6 bước từ tiếp nhận, phân tích, sửa đổi, kiểm chứng tính nhất quán (ngăn ngừa hiệu ứng lan sóng) đến lập biểu quản lý.
  • Mô hình thuần thục bảo trì phần mềm ($S^3M$): Được phát triển bởi Alain April, Jane Huffman Hayes, Alain Abran và Reiner Dumke (2004) nhằm khắc phục các hạn chế của CMM/CMMI đối với hoạt động bảo trì. Mô hình gồm 4 phạm vi quy trình, 18 KPA, 74 lộ trình và 443 thủ tục.

Kiến thức nền tảng được xây dựng

Giáo trình thiết lập hệ thống cơ sở lý thuyết chuẩn xác qua các công thức, mô hình và quy chuẩn:

1. Cơ sở toán học và độ phức tạp phần mềm (Tom McCabe)

Độ phức tạp lặp $V(G)$ trên đồ thị luồng chương trình $G$ được xác định bằng một trong ba phương pháp tương đương:

  • Công thức dựa trên số cung ($E$) và số nút ($N$): $$V(G) = E - N + 2$$
  • Công thức dựa trên số vùng phân cách bởi đồ thị luồng phẳng: $$V(G) = \text{Số vùng (Region)}$$
  • Công thức dựa trên số nút vị từ/điều kiện ($P$): $$V(G) = P + 1$$

Giá trị $V(G)$ xác định cận trên của số lượng ca kiểm thử độc lập tối thiểu cần thiết để bảo đảm mọi câu lệnh được thực thi ít nhất một lần.

2. Khung phân cấp mô hình thuần thục bảo trì phần mềm ($S^3M$)


Kỹ năng phát triển

Người học tiếp thu và rèn luyện các năng lực kỹ thuật và phân tích cụ thể:

  • Năng lực mô hình hóa và thiết kế: Chuyển đổi yêu cầu chức năng thành các biểu đồ tương tác UML (Sequence Diagram, Collaboration Diagram), biểu đồ lớp (Class Diagram) và phân rã hệ thống thành các tầng kiến trúc độc lập.
  • Năng lực tối ưu mã nguồn: Nhận diện và loại bỏ cấu trúc mã phức tạp, áp dụng các kỹ thuật che giấu thông tin, cấu trúc hóa dữ liệu bằng từ điển dữ liệu.
  • Năng lực thiết kế kiểm thử: Phân tích miền dữ liệu để xây dựng bộ kiểm thử biên, phân đoạn tương đương; xây dựng đồ thị luồng từ mã nguồn để trích xuất các đường đi độc lập và tính toán chỉ số $V(G)$.
  • Năng lực quản trị tiến hóa phần mềm: Thiết lập quy trình xử lý yêu cầu thay đổi (Maintenance Request - MR), phân tích tác động thay đổi mã nguồn, kiểm chứng hồi quy để loại trừ hiệu ứng gợn sóng (ripple effect), và thiết lập hồ sơ quản lý bảo trì theo chuẩn ISO/IEC 14764.

Phương pháp giảng dạy và học tập

Phương pháp tiếp cận sư phạm

Giáo trình kết hợp phương pháp diễn dịch lý thuyết với quy nạp thông qua các mô hình biểu diễn giải thuật trực quan và ví dụ mã nguồn đối chiếu. Nội dung giảng dạy đi từ việc thiết lập các tiên đề kỹ thuật (như 3 cấu trúc điều khiển cơ bản, các nguyên lý đóng gói hướng đối tượng) đến việc hiện thực hóa bằng các sơ đồ hình học và ngôn ngữ giả mã.

Hệ thống ví dụ thực hành và nghiên cứu tình huống

Tài liệu cung cấp chuỗi ví dụ thực tế phục vụ trực tiếp quá trình phân tích:

  • Ví dụ tối ưu hóa mã nguồn (Trang 103): Chuyển đổi chương trình điều khiển nhiệt độ (Time-on, Time-off, Temp, Setting, Switch, Heating-status) từ dạng spaghetti sử dụng 14 lệnh GOTO sang cấu trúc điều khiển chuẩn hóa dùng loop, câu lệnh khối case Switch of và các điều kiện rẽ nhánh lồng nhau có cấu trúc.
  • Ví dụ mô hình hóa lớp (Trang 107, 118): Thiết kế chi tiết cấu trúc lớp Employee (với các thuộc tính: name, dateOfBirth, employeeNo, department, salary, status và các phương thức: join(), leave(), retire(), changeDetails()), lớp CourseOffering, RegistrationManager trong bài toán đăng ký học phần.
  • Ví dụ kiểm thử hộp đen (Trang 130): Phân đoạn tương đương cho bài toán giải phương trình bậc hai $ax^2 + bx + c = 0$, phân chia không gian đầu vào thành các tập hệ số cho 2 nghiệm phân biệt, nghiệm kép hoặc vô nghiệm.
  • Ví dụ tính toán độ phức tạp lặp McCabe (Trang 134): Phân tích đồ thị luồng gồm 13 nút, xác định 6 lộ trình độc lập ($V(G) = 6$) làm căn cứ thiết lập 6 ca kiểm thử độc lập.

Điểm nổi bật và cập nhật

1. Chuẩn hóa theo các tiêu chuẩn quốc tế

Nội dung tài liệu được xây dựng hoàn toàn dựa trên các chuẩn mực công nghiệp và học thuật quốc tế:

  • Chuẩn IEEE (1993) về định nghĩa và phân loại 4 hình thái bảo trì phần mềm.
  • Tiêu chuẩn ISO/IEC 12207 (1995) về các tiến trình trong vòng đời phần mềm.
  • Tiêu chuẩn ISO/IEC 14764 về quy trình nghiệp vụ bảo trì phần mềm (phân chia thành Correction và Enhancement).

2. Tích hợp mô hình thuần thục bảo trì phần mềm chuyên sâu ($S^3M$)

Giáo trình chỉ rõ những giới hạn của các mô hình đánh giá quy trình truyền thống như CMM và CMMI (vốn tập trung vào quản lý dự án phát triển mới và xem bảo trì là hoạt động phụ trợ). Giáo trình cập nhật mô hình $S^3M$ do Alain April, Jane Huffman Hayes, Alain Abran và Reiner Dumke công bố năm 2004, cung cấp một khung tham chiếu hoàn chỉnh với 4 phạm vi quy trình, 18 KPA, 74 lộ trình và 443 thủ tục nhằm chuẩn hóa toàn diện hoạt động bảo trì tại doanh nghiệp.

3. Phương pháp tiếp cận đa diện đối với thiết kế giải thuật

Tài liệu không giới hạn ở lưu đồ khối truyền thống mà tổng hợp có hệ thống 4 ký pháp mô tả cấu trúc phân cấp và giải thuật:

  • Lưu đồ Nassi (IBM): Loại bỏ đường nối tùy tiện, thể hiện trực quan các khối lệnh ghép nối, chọn lựa và lặp.
  • Lưu đồ PAD (Hitachi): Bổ sung trục điều khiển chính thẳng đứng, làm rõ mức độ lồng nhau của các khối lệnh.
  • Phương pháp Jackson: Mô hình hóa quan hệ dữ liệu và điều khiển dạng cây phân cấp.
  • Phương pháp Warnier: Phân rã chức năng hệ thống theo cấu trúc móc nhọn trực quan (như ví dụ Hệ thống quản lý nhân sự).

Đối tượng sử dụng giáo trình

Nhóm đối tượng Mục đích sử dụng Yêu cầu tiên quyết
Sinh viên Đại học (Năm 3 – Năm 4) Học tập các học phần: Công nghệ Phần mềm, Kiểm thử và Đảm bảo Chất lượng Phần mềm, Thiết kế Hệ thống Hướng đối tượng. - Lập trình nâng cao (C++, Java)
- Cấu trúc Dữ liệu và Giải thuật
- Cơ sở Dữ liệu
Học viên Cao học Nghiên cứu chuyên sâu về các mô hình quy trình phần mềm, tối ưu hóa kiến trúc và mô hình trưởng thành bảo trì ($S^3M$, CMMI). - Công nghệ Phần mềm cơ sở
- Phương pháp Nghiên cứu Khoa học trong CNTT
Giảng viên Xây dựng đề cương chi tiết môn học, thiết kế hệ thống bài tập thực hành, bài tập lớn và ngân hàng câu hỏi đánh giá. - Nắm vững chuẩn đầu ra chương trình đào tạo ngành CNTT/KTPM
Kỹ sư Phần mềm & QA/Tester Tài liệu tra cứu tiêu chuẩn kỹ thuật về quy cách mã hóa, thiết kế test case hộp trắng/hộp đen, quy trình kiểm soát yêu cầu bảo trì. - Kinh nghiệm thực tế trong các dự án phát triển phần mềm

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

1. Giáo trình này phù hợp với đối tượng nào?

Giáo trình được biên soạn phục vụ sinh viên chuyên ngành Công nghệ Thông tin, Kỹ thuật Phần mềm từ năm thứ ba trở đi, học viên cao học, giảng viên phụ trách môn học và các kỹ sư phần mềm cần tài liệu chuẩn hóa về phương pháp thiết kế, kiểm thử và bảo trì hệ thống.

2. Cần chuẩn bị những kiến thức nền tảng nào trước khi học giáo trình này?

Người học cần hoàn thành các học phần nền tảng: Nhập môn lập trình, Lập trình hướng đối tượng, Cấu trúc dữ liệu và giải thuật, Cơ sở dữ liệu và Phân tích thiết kế hệ thống thông tin.

3. Điểm khác biệt cốt lõi của giáo trình so với các tài liệu nhập môn lập trình là gì?

Tài liệu không tập trung vào cú pháp của một ngôn ngữ lập trình cụ thể mà cung cấp phương pháp luận kỹ nghệ: các kỹ pháp thiết kế giải thuật (Nassi, PAD, Jackson, Warnier), quy trình hướng đối tượng với UML/USDP, cơ sở toán học của kiểm thử hộp trắng (Tom McCabe) và quy chuẩn bảo trì quốc tế (ISO/IEC 14764, mô hình $S^3M$).

4. Làm thế nào để tự học và nắm vững kiến thức trong giáo trình hiệu quả?

Người học nên kết hợp nghiên cứu lý thuyết với thực hành giải bài tập:

  • Chuyển đổi mã nguồn thực tế sang lưu đồ Nassi hoặc PAD.
  • Thực hành vẽ các biểu đồ UML cho bài toán quản lý thực tế theo 5 khung nhìn kiến trúc.
  • Xây dựng đồ thị luồng cho các đoạn mã cụ thể, tính độ phức tạp lặp $V(G)$ và viết bộ test case bao phủ toàn bộ lộ trình độc lập.
  • Áp dụng quy trình 6 bước bảo trì ISO/IEC 14764 vào các bài tập lớn hoặc dự án phần mềm mã nguồn mở.

5. Giáo trình có các công cụ và mô hình kỹ thuật bổ trợ nào được đề cập?

Giáo trình viện dẫn các công cụ và mô hình tiêu chuẩn gồm: Ngôn ngữ mô hình hóa UML, công cụ Rational Rose, quy trình phát triển hợp nhất USDP, ngôn ngữ mô tả chương trình PDL, các mô hình chuẩn quốc tế IEEE 1993, ISO/IEC 12207, ISO/IEC 14764, CMM/CMMI và mô hình độ thuần thục bảo trì $S^3M$.


Kết luận

Giáo trình Công nghệ Phần mềm cung cấp một hệ thống tri thức hoàn chỉnh, chuẩn xác và có tính hệ thống cao về ba giai đoạn cốt lõi trong kỹ nghệ phần mềm: Thiết kế, Kiểm thử và Bảo trì. Thông qua việc tích hợp các phương pháp luận kinh điển cùng các tiêu chuẩn quốc tế hiện đại, tài liệu thiết lập nền tảng lý thuyết vững chắc và kỹ năng thực hành chuẩn mực cho người học ngành Công nghệ Thông tin và Kỹ thuật Phần mềm.

Lộ trình học tập đề xuất:

  1. Giai đoạn 1: Nắm vững nguyên lý thiết kế cấu trúc hóa, khử mã spaghetti và làm chủ các kỹ pháp Nassi, PAD, Jackson, Warnier.
  2. Giai đoạn 2: Làm chủ thiết kế hướng đối tượng (OOD), 5 khung nhìn kiến trúc UML và quy trình hợp nhất USDP.
  3. Giai đoạn 3: Ứng dụng lý thuyết đồ thị luồng McCabe để thiết kế ca kiểm thử hộp trắng, kết hợp các kỹ thuật hộp đen và tổ chức kiểm thử đa tầng.
  4. Giai đoạn 4: Nghiên cứu quy trình quản lý bảo trì ISO/IEC 14764 và đánh giá năng lực bảo trì hệ thống theo khung mô hình thuần thục $S^3M$.