TỔNG QUAN HỌC THUẬT VÀ PHÂN TÍCH NỘI DUNG: GIÁO TRÌNH KIỂM THỬ PHẦN MỀM

Thông tin thư mục:

  • Tên giáo trình: Giáo trình Kiểm thử phần mềm
  • Tác giả: Phạm Ngọc Hùng, Trương Anh Hoàng, Đặng Văn Hưng
  • Đơn vị công tác: Bộ môn Công nghệ Phần mềm, Khoa Công nghệ Thông tin, Trường Đại học Công nghệ – Đại học Quốc gia Hà Nội
  • Thời gian xuất bản: Tháng 5 năm 2014
  • Cấp độ đào tạo: Đại học và Cao học

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

Giáo trình Kiểm thử phần mềm của nhóm tác giả Phạm Ngọc Hùng, Trương Anh Hoàng và Đặng Văn Hưng được biên soạn để phục vụ môn học "Kiểm thử và đảm bảo chất lượng phần mềm" (Software Testing and Quality Assurance) – một học phần chuyên ngành bắt buộc hoặc tự chọn cốt lõi trong chương trình đào tạo Cử nhân, Kỹ sư và Thạc sĩ ngành Công nghệ phần mềm và Công nghệ thông tin.

Mục tiêu học tập của giáo trình nhằm cung cấp hệ thống tri thức hoàn chỉnh từ nền tảng toán học hàn lâm đến các kỹ thuật thực hành chuẩn công nghiệp. Sinh viên và học viên sau khi hoàn thành chương trình có khả năng phân biệt rõ ràng các khái niệm nền tảng (lỗi, sai, thất bại, sự cố theo chuẩn IEEE); áp dụng các phương pháp phân tích tĩnh và động để khảo sát mã nguồn; thiết kế tập ca kiểm thử (test cases) tối ưu cho các mức kiểm thử đơn vị, tích hợp, hệ thống và chấp nhận; đồng thời nắm bắt được các mô hình kiểm thử tự động hiện đại.

Cấu trúc giáo trình gồm 10 chương chuyên đề được phân bổ tuần tự theo quy trình kỹ thuật phần mềm. Cách tiếp cận của tài liệu là kết hợp chặt chẽ giữa mô hình hóa hình thức (formal modeling) với việc giải quyết các bài toán kỹ thuật cụ thể.

Điểm đặc sắc của giáo trình nằm ở việc xây dựng cơ sở toán học rời rạc (lý thuyết tập hợp, quan hệ, logic mệnh đề, lý thuyết đồ thị và mạng Petri) làm công cụ diễn giải bản chất của việc kiểm thử. Mọi phương pháp kiểm thử chức năng và cấu trúc đều được đối chiếu trực tiếp trên hệ thống các bài toán chuẩn (như bài toán phân loại tam giác, bài toán hàm NextDate, hệ thống rút tiền tự động ATM và bộ điều khiển cần gạt nước ô tô).


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

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

Nội dung 10 chương của giáo trình được tổ chức theo mạch phát triển logic chặt chẽ:

  1. Chương 1 – Tổng quan về kiểm thử: Định nghĩa hệ thống thuật ngữ chuẩn IEEE về Lỗi (Error), Sai (Fault), Thất bại (Failure) và Sự cố (Incident). Phân biệt Kiểm chứng (Verification) và Thẩm định (Validation). Mô hình hóa không gian kiểm thử thông qua biểu đồ Venn ba tập hợp: tập hành vi đặc tả ($S$), tập hành vi cài đặt ($P$) và tập hành vi kiểm thử ($T$). Giới thiệu thang đo 10 mức nghiêm trọng của lỗi theo Boris Beizer [Bor84] và 4 mức kiểm thử trong mô hình thác nước.
  2. Chương 2 – Một số ví dụ: Trình bày chi tiết đặc tả, sơ đồ khối và mã nguồn cài đặt bằng ngôn ngữ C cho các bài toán kinh điển: Bài toán tam giác (Triangle problem – trích dẫn từ [Gru73]), bài toán hàm NextDate, hệ thống rút tiền tự động (ATM) và bộ điều khiển gạt nước ô tô.
  3. Chương 3 – Cơ sở toán rời rạc cho việc kiểm thử: Thiết lập công cụ hình thức gồm lý thuyết tập hợp (phân hoạch, quan hệ), miền xác định, logic vị từ, lý thuyết đồ thị định hướng (đồ thị cô đọng, đồ thị chu trình), máy hữu hạn trạng thái (FSM) và mạng Petri (Petri net).
  4. Chương 4 – Khảo sát đặc tả và mã nguồn: Các kỹ thuật kiểm thử tĩnh (Static testing) gồm duyệt đặc tả mức cao/thấp, phản biện hình thức (Formal review), phản biện chéo (Peer review), chuẩn lập trình và danh sách các hạng mục kiểm tra mã nguồn (checklist).
  5. Chương 5 – Kiểm thử chức năng (Hộp đen): Các kỹ thuật thiết kế ca kiểm thử hộp đen: Phân tích giá trị biên (Boundary Value Testing – biên thường, biên mạnh, biên tổ hợp), Phân lớp tương đương (Equivalence Partitioning – yếu, mạnh), Kiểm thử bảng quyết định (Decision Table) và Kiểm thử tổ hợp (Pairwise testing, Ma trận trực giao $L_4(2^3)$).
  6. Chương 6 – Kiểm thử dòng điều khiển (Hộp trắng): Xây dựng đồ thị dòng điều khiển (Control Flow Graph – CFG), các tiêu chuẩn bao phủ dựa trên độ đo $C_1$ (bao phủ câu lệnh), $C_2$ (bao phủ nhánh), $C_3$ (bao phủ điều kiện/đường đi) và kiểm thử vòng lặp trên các hàm mẫu foo, average.
  7. Chương 7 – Kiểm thử dòng dữ liệu: Xây dựng đồ thị dòng dữ liệu (DFG), phân loại các trạng thái biến dựa trên cặp định nghĩa – sử dụng (def(i), c-use, p-use), phân tích chuỗi bất thường dữ liệu và kỹ thuật kiểm thử dựa trên lát cắt chương trình (Slice-based testing, mạng tinh thể lattice trên hàm ReturnAverage).
  8. Chương 8 – Kiểm thử dựa trên mô hình (Model-Based Testing - MBT): Sinh ca kiểm thử tự động từ Máy hữu hạn trạng thái (FSM), Ôtômat đơn định hữu hạn trạng thái (DFA), Biểu đồ trạng thái Statecharts và Máy trạng thái UML; giới thiệu công cụ Spec Explorer.
  9. Chương 9 – Kiểm thử tự động và công cụ hỗ trợ: Kiến trúc của một bộ kiểm thử tự động, phân tích ưu nhược điểm và giới thiệu các công cụ hỗ trợ: CFT4CUnit (cho CUnit) và JDFT (kiểm thử dòng dữ liệu cho Java).
  10. Chương 10 – Kiểm thử tích hợp, hệ thống & chấp nhận: Các chiến lược tích hợp (Top-down, Bottom-up, Sandwich, Đồ thị gọi hàm, Đôi một, Láng giềng); Kiểm thử chất lượng hệ thống (Load test, Stress test, Spike test, Endurance test); Kiểm thử chấp nhận (Alpha, Beta, ATDD, BDD) và Kỹ thuật kiểm thử hồi quy (Regression testing).

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

Giáo trình hình thành nền tảng lý thuyết vững chắc thông qua ba khối tri thức:

  • Khung lý thuyết hình thức: Sử dụng biểu đồ Venn $(S, P, T)$ để giải thích bản chất toán học của các dạng sai lệch: miền $S \setminus P$ (sai do bỏ sót yêu cầu), miền $P \setminus S$ (sai do cài đặt thừa/nhiệm vụ ngoại lai), và miền tối ưu $S \cap P \cap T$ (phần hành vi vừa được đặc tả, vừa được cài đặt và được kiểm thử đầy đủ).
  • Nguyên lý kiểm thử cấu trúc và dòng dữ liệu: Xác lập mối quan hệ bao hàm giữa các độ đo kiểm thử, quy tắc phân tích cặp định nghĩa - sử dụng (def-use association), và cơ chế phân mảnh chương trình (program slicing).
  • Mô hình hóa kiểm thử hệ thống: Ứng dụng lý thuyết ôtômat và máy chuyển trạng thái nhằm mô tả hành vi hệ thống phức tạp, cho phép xác định đường đi thực thi (execution path) và sinh đầu ra mong đợi tự động.

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical skills): Xây dựng kịch bản kiểm thử, vẽ và phân tích đồ thị CFG/DFG, tính toán độ bao phủ mã nguồn theo các độ đo $C_1, C_2, C_3$, thực thi kiểm thử tự động bằng CFT4CUnit và JDFT.
  • Kỹ năng phân tích (Analytical skills): Phân tích miền giá trị để thiết lập bảng quyết định cho logic phức tạp, chia lớp tương đương, phát hiện các điểm bất thường dữ liệu tĩnh và phân tích lát cắt chương trình.
  • Năng lực thực hành chuyên môn (Practical competencies): Thực hiện quy trình phản biện mã nguồn theo danh mục chuẩn, thiết kế kế hoạch kiểm thử tải/quá tải cho hệ thống, và thiết lập quy trình kiểm thử hồi quy khi bảo trì phần mềm.

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 áp dụng phương pháp tiếp cận diễn dịch kết hợp quy nạp: bắt đầu từ việc chuẩn hóa các tiên đề toán học và khái niệm lý thuyết, sau đó quy chiếu trực tiếp vào các mô hình mã nguồn cụ thể. Tác giả sử dụng sơ đồ đối sánh liên tục giữa kiểm thử chức năng (hướng dữ liệu vào/ra) và kiểm thử cấu trúc (hướng đường đi thực thi của mã lệnh), giúp người học nhận thức rõ tính bổ trợ lẫn nhau giữa hai phương pháp.

Hệ thống bài tập và nghiên cứu tình huống (Case studies)

Toàn bộ các kỹ thuật kiểm thử xuyên suốt giáo trình đều được áp dụng đồng nhất trên các ca nghiên cứu thực nghiệm:

  • Bài toán tam giác: Dùng để kiểm chứng phương pháp phân tích biên, phân lớp tương đương, bảng quyết định, độ đo dòng điều khiển và độ đo dòng dữ liệu.
  • Hàm NextDate: Minh họa cho việc xử lý các ràng buộc logic phức tạp giữa các biến phụ thuộc (ngày, tháng, năm nhuận).
  • Hệ thống rút tiền tự động ATM: Mô hình hóa kiểm thử tích hợp, kiểm thử dựa trên biểu đồ chuyển trạng thái FSM và kiểm thử hệ thống.
  • Bộ điều khiển gạt nước ô tô: Ứng dụng bảng quyết định trong việc điều khiển đa trạng thái dựa trên vị trí chốt và núm vặn.
Tên bài toán / Case study Đặc tả dữ liệu đầu vào Kỹ thuật kiểm thử áp dụng chính Mục tiêu minh họa học thuật
Bài toán Tam giác (Triangle Problem) 3 số nguyên dương $a, b, c \in [1, 20000]$ BVT, Phân lớp tương đương, Độ đo $C_1, C_2, C_3$, Lát cắt chương trình Minh họa sự thiếu hụt đặc tả, so sánh kiểm thử hộp đen vs hộp trắng trên mã nguồn C
Hàm Ngày kế tiếp (NextDate) Ngày, tháng, năm (xử lý logic năm nhuận, ngày cuối tháng) Biên tổ hợp, Bảng quyết định, Phân lớp tương đương mạnh Xử lý các biến đầu vào có quan hệ ràng buộc logic phụ thuộc phức tạp
Hệ thống rút tiền ATM Thao tác người dùng, giao dịch thẻ, mã PIN, số dư Kiểm thử dựa trên mô hình (FSM/DFA), Kiểm thử tích hợp, Kiểm thử hệ thống Kiểm thử luồng tương tác đa màn hình và tích hợp các mô-đun chức năng
Bộ điều khiển gạt nước Vị trí cần gạt, vị trí núm xoay, cảm biến tốc độ Bảng quyết định (Decision Table), Ma trận trực giao Xử lý logic điều khiển đa điều kiện trong các hệ thống nhúng

Phương pháp đánh giá và hướng dẫn tự học

  • Đánh giá năng lực: Thực hiện qua việc giải các bài tập hình thức ở cuối mỗi chương, thiết kế ma trận ca kiểm thử hoàn chỉnh cho một đoạn mã nguồn, vẽ đồ thị dòng điều khiển/dữ liệu và xác định tập đường đi độc lập.
  • Chỉ dẫn tự học: Người học cần đối chiếu lý thuyết toán học tại Chương 3 trước khi đọc các chương kỹ thuật; sau đó chạy thử các đoạn mã mẫu bằng ngôn ngữ C được cung cấp trong Chương 2 để quan sát trực tiếp mối liên hệ giữa cấu trúc lệnh và tập ca kiểm thử sinh ra.

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

  • Chuẩn hóa thuật ngữ theo IEEE: Khắc phục tình trạng không thống nhất thuật ngữ trong kỹ nghệ phần mềm bằng việc đối chiếu và chuẩn hóa hệ thống thuật ngữ kiểm thử theo tiêu chuẩn của IEEE (Viện Kỹ nghệ Điện và Điện tử) sang tiếng Việt (như cặp khái niệm Verification - Thẩm định và Validation - Kiểm chứng).
  • Phân loại bất thường toàn diện: Kết hợp chuẩn phân loại bất thường phần mềm của IEEE [IEE93] với hệ thống 10 mức phân loại sai theo độ nghiêm trọng của Boris Beizer [Bor84] (từ mức 1: lỗi chính tả nhẹ đến mức 10: dịch họa lây lan).
  • Cập nhật các hướng nghiên cứu hiện đại: Giới thiệu kỹ thuật kiểm thử dựa trên lát cắt (Slice-based testing), kiểm thử dựa trên mô hình (Model-Based Testing - MBT) theo quy trình của Kansomkeat & Rivepiboon [KJ02], Boghdady et al. [BBH05], và các phương pháp phát triển Agile định hướng kiểm thử như ATDD (Acceptance Test Driven Development), BDD (Behavior Driven Development).
  • Đối chiếu học thuật sâu sắc: Phân tích trực diện cuộc tranh luận giữa quan điểm của Robert Poston [Pos91] (hoài nghi tính thực tế của kiểm thử cấu trúc) và Edward Miller [Mil91] (khẳng định hiệu quả phát hiện lỗi gấp đôi khi độ bao phủ nhánh đạt $\ge 85%$), từ đó đưa ra kết luận trung hòa về sự cần thiết phải kết hợp cả hai phương pháp.
  • Tích hợp công cụ tự động: Cung cấp thông tin kiến trúc và giao diện vận hành của các công cụ chuyên dụng như CFT4CUnit, JDFT và Microsoft Spec Explorer.

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

  • Sinh viên đại học: Sinh viên năm thứ 3 và năm thứ 4 theo học các ngành Công nghệ Phần mềm, Công nghệ Thông tin, Hệ thống Thông tin, Kỹ thuật Máy tính.
  • Học viên cao học & Nghiên cứu sinh: Người theo học chương trình Thạc sĩ, Tiến sĩ ngành Khoa học Máy tính và Kỹ thuật Phần mềm cần nắm vững cơ sở toán học hình thức để thực hiện các đề tài nghiên cứu về tự động hóa kiểm thử, phân tích mã nguồn và kiểm chứng mô hình (Model Checking).
  • Kiến thức tiên quyết (Prerequisites):
    • Ngôn ngữ lập trình C/C++ hoặc Java cơ bản.
    • Cấu trúc dữ liệu và giải thuật.
    • Toán rời rạc (Lý thuyết đồ thị, Logic mệnh đề, Lý thuyết tập hợp).
    • Nhập môn Kỹ nghệ phần mềm.
  • Giảng viên: Sử dụng giáo trình làm đề cương bài giảng chuẩn cho học phần Kiểm thử phần mềm, khai thác hệ thống hình vẽ (CFG, DFG, FSM) và bảng dữ liệu mẫu phục vụ công tác biên soạn đề thi, bài tập lớn.
  • Kỹ sư công nghiệp (Reference): Dùng làm tài liệu tham khảo cho kỹ sư kiểm thử phần mềm (QA/QC/Tester) và lập trình viên nhằm chuẩn hóa quy trình thiết kế kiểm thử đơn vị và kiểm thử tích hợp trong doanh nghiệp.

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

1. Giáo trình này phù hợp với ai?

Tài liệu được biên soạn phục vụ trực tiếp cho sinh viên đại học chuyên ngành Công nghệ thông tin/Công nghệ phần mềm từ năm thứ ba trở lên, học viên cao học, giảng viên giảng dạy học phần kiểm thử và các kỹ sư phần mềm cần tài liệu đối soát lý thuyết chuyên sâu.

2. Cần kiến thức nền nào để học tốt giáo trình?

Người học cần nắm vững kỹ năng lập trình hướng thủ tục và hướng đối tượng (đặc biệt là C và Java), hiểu biết về cấu trúc dữ liệu và giải thuật cơ bản, cùng kiến thức nền về toán rời rạc (tập hợp, quan hệ, logic hình thức, đồ thị).

3. Điểm khác biệt của giáo trình này so với các tài liệu kiểm thử thông thường là gì?

Khác với các tài liệu chỉ thiên về hướng dẫn sử dụng công cụ kiểm thử thương mại, giáo trình này tập trung vào cơ sở toán học hình thức, phân tích sâu các thuật toán sinh ca kiểm thử, các độ đo bao phủ dòng điều khiển/dòng dữ liệu ($C_1, C_2, C_3$, def-use) và kỹ thuật lát cắt chương trình.

4. Làm sao để tự học và nghiên cứu giáo trình hiệu quả?

Người học nên đọc song song nội dung lý thuyết với việc phân tích mã nguồn các bài toán mẫu ở Chương 2; tự vẽ lại các đồ thị dòng điều khiển (CFG), đồ thị dòng dữ liệu (DFG) và giải toàn bộ các bài tập phân hoạch kiểm thử chức năng trước khi chuyển sang các chương về kiểm thử tự động.

5. Giáo trình có cung cấp các bảng dữ liệu và tiêu chuẩn đối chiếu không?

Giáo trình cung cấp đầy đủ hệ thống bảng phân loại sai lầm phần mềm theo chuẩn IEEE, bảng phân loại mức độ nghiêm trọng theo Boris Beizer, bảng ma trận trực giao $L_4(2^3)$, các bảng chuyển trạng thái FSM, cùng danh mục thuật ngữ đối chiếu Anh – Việt chuẩn hóa.


Kết luận

Giáo trình Kiểm thử phần mềm của các tác giả Phạm Ngọc Hùng, Trương Anh Hoàng và Đặng Văn Hưng là công trình học thuật chuẩn mực, cung cấp một hệ thống tri thức hoàn chỉnh từ nền tảng toán học rời rạc, kỹ thuật phân tích tĩnh, phương pháp kiểm thử chức năng/cấu trúc, cho đến các mô hình kiểm thử tự động và kiểm thử hệ thống nâng cao.

Lộ trình tiếp cận kiến thức đề xuất:

  1. Giai đoạn 1 (Cơ sở lý thuyết): Nắm vững các khái niệm lỗi/sai/thất bại và công cụ toán rời rạc tại Chương 1, Chương 2 và Chương 3.
  2. Giai đoạn 2 (Kỹ thuật kiểm thử đơn vị): Thực hành phương pháp khảo sát mã nguồn, kiểm thử hộp đen, kiểm thử dòng điều khiển và dòng dữ liệu tại Chương 4, Chương 5, Chương 6 và Chương 7.
  3. Giai đoạn 3 (Mô hình hóa và nâng cao): Nghiên cứu kiểm thử dựa trên mô hình, ứng dụng công cụ tự động hóa và triển khai kiểm thử tích hợp, hệ thống tại Chương 8, Chương 9 và Chương 10.

Nguồn tài liệu bổ trợ: Người học có thể tham khảo bổ sung các tiêu chuẩn IEEE (như IEEE 729-1983, IEEE 1044-1993), các công trình nghiên cứu kinh điển của Myers [Mye75], Beizer [Bor84], Poston [Pos90, Pos91], Miller [Mil91], cùng tài liệu đặc tả công cụ Microsoft Spec Explorer.