Tổng quan nghiên cứu

Theo thống kê từ ngành kỹ nghệ phần mềm, chi phí dành cho hoạt động kiểm thử thường chiếm từ 40% đến 50% tổng ngân sách phát triển của một dự án công nghệ thông tin. Nếu lỗi logic không được phát hiện sớm ở giai đoạn kiểm thử đơn vị, chi phí khắc phục khi hệ thống đã đi vào vận hành thực tế có thể tăng vọt từ 10 đến 20 lần. Thách thức lớn nhất hiện nay là các phương pháp kiểm thử hộp đen thông thường chỉ kiểm tra chức năng tại tầng giao diện mà không thể bao quát toàn bộ các ngóc ngách logic phức tạp bên trong mã nguồn.

Nhằm giải quyết triệt để vấn đề trên, đề tài tập trung nghiên cứu ứng dụng kỹ thuật ma trận đồ thị trong phương pháp kiểm thử hộp trắng. Mục tiêu cụ thể là toán học hóa đồ thị dòng điều khiển thành cấu trúc ma trận kề, từ đó tự động hóa việc tính toán độ phức tạp chu trình McCabe, xác định chính xác tập đường cơ bản và xây dựng các ca kiểm thử tối ưu.

Nghiên cứu được thực hiện tại Trường Đại học Công nghệ Thông tin và Truyền thông – Đại học Thái Nguyên trong giai đoạn năm 2020, tập trung vào phạm vi kiểm thử đơn vị cho các cấu trúc lệnh rẽ nhánh và vòng lặp phức tạp. Về mặt ý nghĩa thực tiễn, việc ứng dụng ma trận đồ thị giúp cắt giảm từ 30% đến 40% thời gian thiết kế ca kiểm thử thủ công, đồng thời đảm bảo tỷ lệ bao phủ đạt 100% các câu lệnh và nhánh rẽ độc lập của chương trình.

Cơ sở lý thuyết và phương pháp nghiên cứu

Khung lý thuyết áp dụng

Nghiên cứu được xây dựng dựa trên nền tảng lý thuyết kiểm thử đường cơ sở của Tom McCabe đề xuất năm 1976 và lý thuyết kiểm thử cấu trúc của Boris Beizer công bố năm 1995. Hệ thống lý thuyết tập trung vào các khái niệm cốt lõi:

Thứ nhất, đồ thị dòng điều khiển là đồ thị có hướng mô tả mạch thực thi của chương trình, trong đó mỗi đỉnh đại diện cho một khối lệnh và mỗi cung biểu diễn sự chuyển giao quyền điều khiển.

Thứ hai, độ phức tạp chu trình McCabe, ký hiệu V(G), xác định giới hạn trên của số lượng đường dẫn độc lập tuyến tính trong chương trình. Giá trị này được tính toán dựa trên số cung E, số nút N và số nút vị tự P theo công thức V(G) = E - N + 2 hoặc V(G) = P + 1.

Thứ ba, ma trận kiểm thử là một ma trận vuông nhị phân kích cỡ N x N biểu diễn mối quan hệ liên kết giữa các nút. Ngoài ra, nghiên cứu còn kết hợp lý thuyết kiểm thử dòng dữ liệu thông qua lộ trình định nghĩa - sử dụng (du-path), chiến lược kiểm thử nhánh và toán tử quan hệ (BRO), cùng kỹ thuật kiểm thử đột biến với chỉ số tỷ lệ đột biến MS = 100 * D / (N - E).

Phương pháp nghiên cứu

Nguồn dữ liệu thực nghiệm được thu thập từ 4 mô-đun mã nguồn tiêu chuẩn trong lập trình cấu trúc, điển hình là thủ tục tính giá trị trung bình Procedure average xử lý mảng dữ liệu 100 phần tử cùng các đơn vị chương trình từ code_1 đến code_4.

Về cỡ mẫu và phương pháp chọn mẫu, nghiên cứu áp dụng phương pháp chọn mẫu có chủ đích với 4 đơn vị chương trình chứa hơn 60 dòng lệnh phức hợp và 14 nút điều khiển tiêu biểu. Mẫu được chọn đại diện đầy đủ cho các cấu trúc lập trình cơ bản gồm tuần tự, rẽ nhánh điều kiện lồng nhau (If-Else), và vòng lặp While.

Phương pháp phân tích chính là phân tích cấu trúc kết hợp đại số ma trận. Lý do lựa chọn phương pháp này là vì việc phân tích đồ thị bằng hình vẽ trực quan rất dễ nhầm lẫn khi mã nguồn phình to. Khi chuyển đổi đồ thị thành ma trận kề A, hệ thống có thể tính toán đại số các tổng hàng Ti để suy ra độ phức tạp V(G), đồng thời sử dụng ma trận lũy thừa A^2 để truy vết chính xác các con đường gồm 2 cạnh liên tiếp. Toàn bộ quy trình thử nghiệm và đối soát thuật toán được hoàn thành đồng bộ trong giai đoạn 2019 - 2020.

Kết quả nghiên cứu và thảo luận

Những phát hiện chính

Quá trình thực nghiệm kỹ thuật ma trận đồ thị trên các mô-đun phần mềm đã mang lại 4 kết quả then chốt:

Thứ nhất, thuật toán ma trận đồ thị đã xác định chính xác tuyệt đối độ phức tạp chu trình V(G) = 4 cho mô-đun mẫu gồm 9 nút, 3 nút vị tự và 11 cung. Kết quả tính toán thông qua công thức đại số ma trận hoàn toàn trùng khớp 100% với phương pháp đếm số miền phẳng hình học.

Thứ hai, kỹ thuật gộp các câu lệnh tuần tự liên tiếp thành một nút đơn (như gom cặp lệnh 2-3 và 4-5) đã giúp thu gọn kích thước ma trận từ 14 x 14 xuống còn 9 x 9. Bước tối ưu này giúp tiết kiệm 35.7% không gian lưu trữ và giảm đáng kể độ phức tạp tính toán của thuật toán.

Thứ ba, thông qua ma trận tích A^2, hệ thống tự động nhận diện chính xác các liên kết 2 bước chuyển tiếp, hỗ trợ sinh ra đầy đủ 4 ca kiểm thử thuộc tập đường cơ bản, giúp phát hiện thành công 2 lỗi logic tiềm ẩn nằm sâu trong cấu trúc rẽ nhánh của mô-đun code_2 và code_3.

Thứ tư, khi kiểm thử vòng lặp While với 5 giá trị biên đặc thù gồm không lặp, lặp 1 lần, lặp 2 lần, lặp giá trị trung bình m và lặp tối đa 100 lần, độ bao phủ nhánh rẽ đạt mức 95%, cao hơn vượt trội so với phương pháp kiểm thử ngẫu nhiên chỉ đạt khoảng 45%.

Thảo luận kết quả

Nguyên nhân chính giúp kỹ thuật ma trận đồ thị đạt hiệu quả vượt trội là nhờ việc chuyển đổi bài toán hình học trực quan thành bài toán tính toán số học trên hàng và cột. Việc tính giá trị Ti = tổng hàng trừ đi 1 cho phép máy tính xác định chính xác các nút vị tự rẽ nhánh mà không phụ thuộc vào cảm tính của kiểm thử viên.

So với phương pháp kiểm thử phân lớp tương đương hay đoán lỗi của hộp đen, kỹ thuật ma trận đồ thị giúp giảm thiểu 60% các ca kiểm thử dư thừa nhưng vẫn đảm bảo thực thi mọi câu lệnh ít nhất một lần.

Dữ liệu thực nghiệm của nghiên cứu được trình bày mạch lạc thông qua hệ thống bảng biểu trực quan: Bảng ma trận kề A kích thước 9 x 9 biểu diễn luồng điều khiển; Bảng tính tổng hàng Ti xác định 3 điểm quyết định; Bảng liệt kê chi tiết 4 tập đường cơ bản từ a đến d; và Biểu đồ so sánh độ bao phủ mã nguồn thể hiện rõ kỹ thuật ma trận đồ thị đạt độ bao phủ cấu trúc 100%, vượt trội hơn hẳn mức 70% của phương pháp bao phủ câu lệnh đơn thuần khi gặp các biểu thức điều kiện phức hợp.

Đề xuất và khuyến nghị

Nhằm tối ưu hóa hiệu quả của kỹ thuật ma trận đồ thị trong thực tế phát triển phần mềm, 4 giải pháp trọng tâm được đề xuất như sau:

Thứ nhất, tích hợp tự động hóa: Các doanh nghiệp phần mềm cần xây dựng và tích hợp module phân tích ma trận đồ thị trực tiếp vào quy trình tích hợp liên tục (CI/CD). Mục tiêu là tự động trích xuất mã nguồn, sinh ma trận kề và tạo 100% tập đường cơ bản trong vòng 6 tháng tới, do đội ngũ Kỹ sư Đảm bảo chất lượng (QA/QC) và DevOps chủ trì thực hiện.

Thứ hai, chuẩn hóa chiến lược kiểm thử kết hợp: Nhóm phát triển backend cần phối hợp ma trận đồ thị với kỹ thuật kiểm thử đột biến (Mutation Testing) nhằm nâng tỷ lệ diệt đột biến MS lên mức trên 85% trong năm 2026, giúp phát hiện sớm các lỗi sơ suất do lập trình viên tạo ra tại các biểu thức điều kiện logic.

Thứ ba, đào tạo và chuyển giao chuyên môn: Các Trưởng nhóm kỹ thuật (Tech Lead) và các cơ sở đào tạo công nghệ thông tin cần tổ chức các khóa huấn luyện chuyên sâu về phân tích độ phức tạp chu trình V(G) cho 100% kỹ sư lập trình mới trong thời gian 3 tháng đầu làm việc, nhằm chuẩn hóa tư duy viết mã nguồn có cấu trúc rõ ràng, dễ kiểm thử.

Thứ tư, nghiên cứu mở rộng thuật toán: Các viện nghiên cứu và nhóm tác giả cần tiếp tục phát triển thuật toán ma trận đồ thị mở rộng cho các hàm xử lý bất đồng bộ và kiến trúc vi dịch vụ (microservices), hướng tới mục tiêu giảm 25% thời gian chạy kiểm thử hồi quy trong giai đoạn 2026 - 2027.

Đối tượng nên tham khảo luận văn

Nội dung và kết quả nghiên cứu của luận văn mang lại giá trị thiết thực cho 4 nhóm đối tượng chính:

Nhóm 1 - Kỹ sư kiểm thử phần mềm (QA/QC Engineers): Nắm bắt phương pháp toán học hóa để tự động hóa việc thiết kế test case cho kiểm thử đơn vị, loại bỏ hoàn toàn việc bỏ sót các nhánh rẽ điều kiện ẩn trong mã nguồn phức tạp.

Nhóm 2 - Lập trình viên (Software Developers): Sử dụng mô hình đồ thị dòng và độ phức tạp McCabe để tự đánh giá cấu trúc mã nguồn của chính mình, tối ưu hóa các khối lệnh lồng nhau trước khi chuyển giao sản phẩm, giảm thiểu nợ kỹ thuật cho dự án.

Nhóm 3 - Giảng viên và Nghiên cứu sinh ngành Khoa học Máy tính: Sử dụng công trình làm tài liệu tham khảo giảng dạy môn Kiểm thử phần mềm và Kỹ nghệ phần mềm, đồng thời làm cơ sở phát triển các đề tài nghiên cứu mở rộng về lý thuyết đồ thị ứng dụng.

Nhóm 4 - Quản lý dự án công nghệ (Project Managers & Tech Leads): Có cơ sở khoa học định lượng để đánh giá độ phức tạp logic của các mô-đun phần mềm, từ đó ước lượng chính xác nguồn lực, thời gian và chi phí cần thiết cho giai đoạn kiểm thử.

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

Kỹ thuật ma trận đồ thị khác biệt như thế nào so với việc vẽ đồ thị dòng điều khiển thông thường? Đồ thị dòng điều khiển biểu diễn luồng thực thi bằng hình ảnh trực quan nên rất khó xử lý tự động khi số lượng dòng lệnh lớn. Ma trận đồ thị chuyển đổi các đỉnh và cung thành ma trận vuông nhị phân N x N, cho phép thuật toán máy tính tự động tính toán tổng hàng Ti và xác định độ phức tạp V(G) = 4 một cách chính xác mà không cần thao tác vẽ hình thủ công.

Làm thế nào để tính độ phức tạp chu trình McCabe thông qua ma trận kiểm thử? Từ ma trận kiểm thử A, người kiểm thử tính tổng các phần tử trên từng hàng rồi trừ đi 1 để có giá trị Ti cho mỗi hàng. Độ phức tạp chu trình chính bằng tổng các giá trị Ti cộng thêm 1, tức là V(G) = P + 1. Ví dụ, trong mô-đun tính trung bình mẫu, tổng các giá trị Ti bằng 3, suy ra chương trình có đúng 4 đường dẫn cơ bản độc lập.

Ma trận tích A^2 đóng vai trò gì trong quá trình thiết kế ca kiểm thử? Khi thực hiện nhân ma trận kiểm thử A với chính nó để tạo ma trận tích A^2, giá trị tại mỗi ô ở hàng i cột j sẽ cho biết chính xác số lượng con đường gồm đúng 2 cung nối từ nút i đến nút j. Điều này hỗ trợ đắc lực cho việc phát hiện các chu trình lặp ngắn và các cấu trúc rẽ nhánh 2 bước chuyển tiếp.

Kỹ thuật ma trận đồ thị có xử lý hiệu quả các vòng lặp lồng nhau phức tạp không? Hoàn toàn hiệu quả. Ma trận đồ thị mô hình hóa các vòng lặp thông qua các cung quay lui về nút điều kiện. Khi kết hợp với chiến lược kiểm thử vòng lặp 5 giá trị biên gồm 0 lần, 1 lần, 2 lần, m lần và tối đa 100 lần, kỹ thuật này kiểm soát toàn diện mọi tình huống mà không làm bùng nổ số lượng ca kiểm thử.

Vì sao kiểm thử hộp trắng bằng ma trận đồ thị không thể thay thế hoàn toàn kiểm thử hộp đen? Kiểm thử hộp trắng tập trung kiểm tra cấu trúc mã nguồn hiện có để đạt độ bao phủ 100% câu lệnh, nhưng không thể phát hiện các tính năng bị lập trình viên bỏ sót so với tài liệu đặc tả ban đầu. Do đó, quy trình chuẩn luôn đòi hỏi sự kết hợp đồng thời giữa phương pháp hộp đen và hộp trắng.

Kết luận

Công trình nghiên cứu về kỹ thuật ma trận đồ thị trong kiểm thử hộp trắng đã đạt được các đóng góp học thuật và ứng dụng thực tiễn nổi bật:

  • Hệ thống hóa toàn diện cơ sở lý thuyết về kiểm thử hộp trắng, đồ thị dòng điều khiển và đại số ma trận trong kỹ nghệ phần mềm.
  • Xây dựng thành công quy trình toán học hóa thuật toán tính độ phức tạp chu trình McCabe V(G) = 4 với độ chính xác tuyệt đối 100%.
  • Tối ưu hóa kích thước ma trận kiểm thử giảm 35.7% thông qua kỹ thuật gộp nút tuần tự, nâng cao hiệu năng xử lý của thuật toán.
  • Thực nghiệm thành công trên 4 mô-đun phần mềm thực tế, sinh ra đầy đủ tập đường cơ bản và phát hiện kịp thời 2 lỗi logic tiềm ẩn.
  • Đặt nền móng vững chắc cho việc tự động hóa thiết kế ca kiểm thử đơn vị trong các môi trường phát triển phần mềm hiện đại.

Đóng góp chính của luận văn là đã chuyển hóa thành công lý thuyết đồ thị phức tạp thành công cụ ma trận có tính ứng dụng cao cho kiểm thử tự động. Kế hoạch tiếp theo trong giai đoạn 2026 - 2027 là hoàn thiện công cụ phần mềm tích hợp trực tiếp vào quy trình CI/CD của doanh nghiệp. Các kỹ sư phần mềm và nhóm phát triển chất lượng nên áp dụng ngay kỹ thuật ma trận đồ thị để tối ưu hóa quy trình kiểm thử đơn vị, giảm thiểu rủi ro lỗi và nâng cao chất lượng toàn diện của sản phẩm phần mềm.