Tổng quan luận án
Dự đoán lỗi phần mềm (Software Defect Prediction - SDP) là một nhánh nghiên cứu quan trọng trong kỹ thuật phần mềm, tập trung vào việc áp dụng các kỹ thuật học máy và học sâu nhằm xác định sớm các mô-đun mã nguồn (như gói, lớp, tệp tin, phương thức hoặc hàm) có khả năng chứa lỗi trước khi tiến hành các giai đoạn kiểm thử hoặc phát hành. Luận án tiến sĩ kỹ thuật của nghiên cứu sinh Hà Thị Minh Phương, với tiêu đề "Dự đoán lỗi phần mềm dựa trên mã nguồn", được thực hiện tại Trường Đại học Bách khoa – Đại học Đà Nẵng dưới sự hướng dẫn khoa học của PGS. Nguyễn Thanh Bình và TS. Lê Thị Mỹ Hạnh vào năm 2026.
Tính cấp thiết của luận án bắt nguồn từ thực trạng phát triển phần mềm hiện đại, nơi các hệ thống phần mềm đóng vai trò cốt lõi trong các hạ tầng trọng yếu như an ninh quốc gia, điều khiển không lưu, lưới điện và các ứng dụng doanh nghiệp. Theo các số liệu được tác giả tổng hợp từ Arar và cộng sự [1] cũng như Ainapure và cộng sự [2], hoạt động kiểm thử và đảm bảo chất lượng phần mềm chiếm khoảng 23% tổng chi phí của các dự án. Rana và cộng sự [3] chỉ ra rằng kiểm thử là một trong những công đoạn tiêu tốn nhiều thời gian và ngân sách nhất khi các kỹ sư phải tập trung phần lớn thời gian vào việc kiểm tra tính đúng đắn của mã nguồn. Báo cáo năm 2022 từ Consortium for IT Software Quality (CISQ) [4] công bố chi phí dành cho chất lượng phần mềm tại Hoa Kỳ đã lên tới 2.410 tỷ USD. Với tốc độ tăng trưởng kho mã nguồn khoảng 7% mỗi năm và mức lương nhân sự ngành công nghệ thông tin tăng khoảng 3% mỗi năm, chi phí tìm và khắc phục lỗi vào năm 2020 ước tính đạt 607 tỷ USD. Nghiên cứu của Đại học Cambridge [5] cũng xác nhận lập trình viên phải dành từ 30% đến 50% thời gian làm việc chỉ để tìm kiếm và sửa lỗi. Các giải pháp kiểm thử toàn diện, kiểm thử thủ công và phân tích tĩnh bộc lộ nhiều hạn chế về mặt tài nguyên và không tận dụng được tri thức từ lịch sử dự án, đòi hỏi một sự chuyển dịch sang kiểm thử có trọng tâm dựa trên dự đoán lỗi.
Khoảng trống nghiên cứu được luận án nhận diện bao gồm ba vấn đề chính:
- Tập dữ liệu độ đo phần mềm có số chiều lớn, tồn tại nhiều đặc trưng dư thừa hoặc không liên quan đến khả năng phát sinh lỗi, làm tăng chi phí tính toán và làm giảm hiệu suất của mô hình học máy.
- Dữ liệu phần mềm gặp phải hiện tượng mất cân bằng lớp nghiêm trọng (số lượng mô-đun không lỗi áp đảo số lượng mô-đun có lỗi), khiến các mô hình phân loại có xu hướng dự đoán thiên vị lớp đa số. Các phương pháp lấy mẫu truyền thống như SMOTE, Borderline-SMOTE, ADASYN hoặc Random Oversampling thường gây ra hiện tượng quá khớp do tạo ra các mẫu nội suy thiếu tính đa dạng, trong khi Random Under-Sampling lại làm mất mát thông tin quan trọng.
- Các mô hình dựa trên độ đo thủ công (như McCabe, Halstead, CK, MOOD) chỉ phản ánh các đặc tính bề mặt mà không mô tả được cấu trúc cú pháp và ngữ nghĩa chuyên sâu của mã nguồn. Trong khi đó, các mô hình học sâu tuần tự (RNN, LSTM, Bi-LSTM) gặp hiện tượng suy giảm thông tin khi xử lý các quan hệ phụ thuộc xa trong chuỗi mã lệnh dài và hạn chế về khả năng tính toán song song.
Mục tiêu tổng quát của luận án là phân tích các hạn chế hiện hữu, từ đó đề xuất và phát triển các kỹ thuật học máy và học sâu nhằm nâng cao hiệu suất dự đoán lỗi phần mềm thông qua hai hướng tiếp cận bổ trợ: tối ưu hóa dữ liệu đầu vào cho các mô hình dựa trên độ đo và trích xuất đặc trưng ngữ nghĩa từ mã nguồn.
Luận án thiết lập bốn mục tiêu cụ thể:
- Mục tiêu 1: Hệ thống hóa cơ sở lý thuyết, quy trình chuẩn và các phương pháp nghiên cứu dự đoán lỗi phần mềm trong và ngoài nước.
- Mục tiêu 2: Nghiên cứu, đánh giá và đề xuất các phương pháp lựa chọn đặc trưng (filter, wrapper, metaheuristic) nhằm loại bỏ đặc trưng dư thừa, giảm chiều dữ liệu và nâng cao chất lượng dữ liệu đầu vào.
- Mục tiêu 3: Giải quyết vấn đề mất cân bằng lớp bằng cách kết hợp phương pháp lựa chọn đặc trưng (RFE, Autoencoders) với mạng sinh đối kháng (GAN) và các biến thể sinh dữ liệu dạng bảng.
- Mục tiêu 4: Nghiên cứu và xây dựng mô hình học sâu khai thác cấu trúc cú pháp và ngữ nghĩa của mã nguồn thông qua cây cú pháp trừu tượng (AST), kỹ thuật nhúng FastText và kiến trúc Transformer.
Các câu hỏi nghiên cứu (Research Questions - RQ) được đặt ra và giải quyết trong luận án bao gồm:
- Câu hỏi nghiên cứu 3.1: Các biến thể của GAN có hiệu quả như thế nào trong việc lấy mẫu dữ liệu để xử lý mất cân bằng lớp trong dự đoán lỗi phần mềm?
- Câu hỏi nghiên cứu 3.2: Trong số các kỹ thuật hiện hành, biến thể nào của GAN vượt trội hơn trong việc xử lý mất cân bằng dữ liệu trong dự đoán lỗi phần mềm?
- Câu hỏi nghiên cứu 4.1: Mô hình FastText-Transformer được đề xuất có vượt trội hơn so với các mô hình dự đoán lỗi hiện nay đối với bài toán dự đoán lỗi trong cùng một dự án (Within-Project Defect Prediction - WPDP) không?
- Câu hỏi nghiên cứu 4.2: Mô hình FastText-Transformer được đề xuất có vượt trội hơn so với các mô hình dự đoán lỗi hiện nay đối với bài toán dự đoán lỗi liên dự án (Cross-Project Defect Prediction - CPDP) không?
Đối tượng nghiên cứu của luận án là các phương pháp và kỹ thuật trong dự đoán lỗi phần mềm, các thuật toán lựa chọn đặc trưng, kỹ thuật xử lý mất cân bằng lớp, phương pháp biểu diễn mã nguồn, mô hình nhúng từ và các kiến trúc học máy, học sâu. Phạm vi nghiên cứu tập trung vào các dự án phần mềm được phát triển bằng ngôn ngữ lập trình Java, sử dụng các bộ dữ liệu chuẩn quốc tế gồm NASA (với các tập CM1, PC1, KC1, KC2, JM1), PROMISE và Apache.
Tổng quan tài liệu và vị trí của luận án
Luận án tiến hành khảo cứu có hệ thống các công trình nghiên cứu trong lĩnh vực dự đoán lỗi phần mềm, phân chia theo các nhóm giải pháp chính:
Đối với hướng tiếp cận dựa trên độ đo phần mềm truyền thống, các công trình đặt nền móng gồm hệ thống độ đo Halstead [11] dựa trên số lượng toán tử và toán hạng; độ đo McCabe [12] dựa trên độ phức tạp chu trình; bộ độ đo Chidamber và Kemerer (CK) [13] tập trung vào cấu trúc hướng đối tượng (kế thừa, kết nối, gắn kết); và hệ thống độ đo MOOD [14] đo lường tính đa hình và bao gói. Các mô hình học máy tiêu biểu được áp dụng để phân loại mô-đun lỗi gồm Naive Bayes (NB) [15], Support Vector Machine (SVM) [16], Cây quyết định (Decision Tree - DT) [17], Rừng ngẫu nhiên (Random Forest - RF) [18], AdaBoost [82], Extra Trees [81], Gradient Boosting [83], HistGradient Boosting [84] và mạng nơ-ron truyền thẳng đa tầng (MLP).
Về các phương pháp xử lý dữ liệu số chiều cao, các nghiên cứu chia thành ba nhóm: filter [52], wrapper [53] và embedded [54]. Bên cạnh các kỹ thuật truyền thống như Information Gain, Chi-square, Correlation Coefficient [55], Forward Selection, Backward Elimination, Recursive Feature Elimination (RFE) [56] và LASSO [57], các thuật toán tối ưu hóa bầy đàn và tiến hóa (metaheuristics) được triển khai bao gồm Genetic Algorithm (GA), Particle Swarm Optimization (PSO) [58], Artificial Bee Colony (ABC) [22], Artificial Butterfly Optimization (ABO), Harris Hawks Optimization (HHO), Atom Search Optimization (ASO), Manta Ray Foraging Optimization (MRFO), Pathfinder Algorithm (PFA), Poor And Rich Optimization (PRO), Equilibrium Optimizer (EO), Slime Mold Algorithm (SMA) và Generalized Normal Distribution Optimization (GNDO). Về giảm chiều dữ liệu qua trích xuất đặc trưng, các nghiên cứu sử dụng PCA, LDA, KPCA và mạng Autoencoder [59].
Về vấn đề mất cân bằng lớp, các nghiên cứu trước đây chủ yếu tập trung vào các phương pháp lấy mẫu nội suy cục bộ như SMOTE [31, 32], Borderline-SMOTE, ADASYN hoặc kỹ thuật kết hợp như SMOTETomek [65]. Tuy nhiên, các kỹ thuật này bộc lộ nhược điểm làm tăng nguy cơ quá khớp. Để giải quyết hạn chế này, một số nghiên cứu bắt đầu ứng dụng mạng sinh đối kháng (GAN) nhằm học phân phối xác suất thực tế của lớp thiểu số để sinh các mẫu nhân tạo đa dạng.
Đối với hướng tiếp cận dựa trên đặc trưng cú pháp và ngữ nghĩa của mã nguồn bằng học sâu:
- Qiao và Wang [62] sử dụng học sâu tạo đặc trưng cho dự đoán lỗi kịp thời (JIT).
- Ma và cộng sự [63] phát triển kỹ thuật MODE phân tích trạng thái nơ-ron.
- Hellendoorn và cộng sự [64] xây dựng mô hình DEEPTYPE dự đoán chú thích kiểu.
- Lin và cộng sự [34] ứng dụng mạng Bi-LSTM trên cây cú pháp trừu tượng (AST) để phát hiện hàm lỗi.
- Gupta và cộng sự [35] giới thiệu DeepFix sử dụng mạng nơ-ron nhiều lớp kết hợp cơ chế tập trung chú ý (attention).
- Zhou và cộng sự [36] đề xuất mạng LSTM-BT kết hợp cấu trúc hai chiều và cây.
- Cheng và cộng sự [65] đề xuất mô hình GCN2defect dựa trên mạng phụ thuộc lớp kết hợp SMOTETomek.
- Yan và cộng sự [66] dùng GCN nhúng luồng điều khiển cho phân loại mã độc.
- Khleel và Nehéz [67] tích hợp BiLSTM với kỹ thuật lấy mẫu tăng cường.
- Pornprasit và cộng sự [68] phát triển DeepLineDP định vị lỗi ở mức dòng mã.
- Lucija và cộng sự [69] dùng GCN xử lý toàn bộ cấu trúc nút và cạnh của AST.
- Wang và cộng sự [70] đề xuất mạng GH-LSTMs kết hợp thông tin AST với độ đo PROMISE.
- Batool và cộng sự [71] so sánh LSTM, BiLSTM và RBFN trên tập độ đo CK.
- Ahmed Abdu và cộng sự [72] đề xuất mô hình DH-CNN khai thác đồ thị luồng điều khiển (CFG), đồ thị phụ thuộc dữ liệu (DDG) và AST.
- Zhou và cộng sự [73] kết hợp CNN và CGCN trên 21 dự án nguồn mở.
- Rafi và cộng sự [74] đề xuất mô hình DepGraph dựa trên GNN trên bộ dữ liệu Defects4j.
Vị trí của luận án: Luận án không tách rời hai hướng nghiên cứu (độ đo và ngữ nghĩa) mà đặt chúng trong một lộ trình hoàn chỉnh: giai đoạn đầu tập trung tối ưu hóa triệt để dữ liệu dạng bảng cho mô hình dựa trên độ đo bằng cách kết hợp có hệ thống giữa phương pháp lựa chọn đặc trưng (RFE, Autoencoders) và mạng sinh đối kháng (các biến thể GAN), giai đoạn sau giải quyết triệt để rào cản mất ngữ cảnh của các mô hình tuần tự bằng việc xây dựng mô hình FastText-Transformer khai thác sâu cấu trúc AST.
Cơ sở lý thuyết và phương pháp nghiên cứu
Khung lý thuyết và mô hình toán học
Bài toán dự đoán lỗi phần mềm được mô hình hóa dưới dạng một bài toán phân loại nhị phân: với một tệp mã nguồn $f$, hàm phân loại $predict(f)$ gán nhãn giá trị 1 nếu tệp có chứa lỗi và 0 nếu tệp không chứa lỗi:
$$\operatorname{predict}(f) = \begin{cases} 1 & \text{Nếu tệp } f \text{ có chứa lỗi} \ 0 & \text{Ngược lại} \end{cases}$$
Trong nhóm độ đo hướng đối tượng, luận án hệ thống hóa các công thức toán học xác định chất lượng thiết kế:
- Chỉ số ẩn thuộc tính (Attribute Hiding Factor - AHF):
$$AHF = \frac{\sum_{i=1}^{TC} \sum_{a=1}^{A_d(C_i)} (1 - V(A_{ai}))}{\sum_{i=1}^{TC} A_d(C_i)}$$
Trong đó $TC$ là tổng số lớp, $A_d(C_i)$ là số thuộc tính khai báo trong lớp $C_i$, và mức độ hiển thị $V(A_{ai})$ được xác định qua hàm kiểm tra truy cập $is_visible(A_{ai}, C_j)$.
- Chỉ số kế thừa phương thức (Method Inheritance Factor - MIF):
$$MIF = \frac{\sum_{i=1}^{TC} M_i(C_i)}{\sum_{i=1}^{TC} M_a(C_i)}$$
- Chỉ số đa hình (Polymorphism Factor - PF):
$$PF = \frac{\sum_{i=1}^{TC} M_o(C_i)}{\sum_{i=1}^{TC} [M_n(C_i) \times DC(C_i)]}$$
Trong đó $M_o(C_i)$ là số phương thức ghi đè, $M_n(C_i)$ là số phương thức mới và $DC(C_i)$ là số lớp con kế thừa của lớp $C_i$.
- Tỷ lệ tái sử dụng (Reuse Ratio - U) và Tỷ lệ chuyên biệt hóa (Specialization Ratio - S):
$$U = \frac{\text{Số lớp cha}}{\text{Tổng số lớp}}, \quad S = \frac{\text{Số lớp cha}}{\text{Số lớp con}}$$
Đối với mô hình học máy:
- Random Forest: Sai số tổng quát hóa $PE^*$ được chặn trên bởi công thức liên quan đến hệ số tương quan $\rho$ và độ mạnh $s$:
$$PE^* \le \frac{\rho(1 - s^2)}{s^2}$$
với hàm biên $mg(X, Y)$ xác định mức độ chênh lệch số phiếu bầu giữa nhãn đúng và nhãn sai.
- AdaBoost: Kết hợp tuyến tính $M$ bộ phân loại yếu $y_m(x)$ với trọng số $\alpha_m$:
$$Y_M(x) = \operatorname{sign}\left(\sum_{m=1}^{M} \alpha_m y_m(x)\right)$$
- Gradient Boosting: Xây dựng chuỗi cây quyết định cộng gộp $F_n(x_t) = \sum_{i=1}^n f_i(x_t)$ nhằm cực tiểu hóa hàm mất mát khả vi $L(y_t, F(x_t))$.
Phương pháp nghiên cứu và quy trình thực nghiệm
Luận án áp dụng phương pháp nghiên cứu thực nghiệm định lượng trên máy tính. Quy trình gồm 7 bước chuẩn:
- Thu thập dữ liệu từ các kho lưu trữ mở.
- Tiền xử lý dữ liệu (chuẩn hóa dữ liệu, loại bỏ giá trị dị biệt, mã hóa).
- Lựa chọn đặc trưng và cân bằng dữ liệu.
- Trích xuất đặc trưng cú pháp, ngữ nghĩa (đối với học sâu).
- Xây dựng và huấn luyện mô hình dự đoán.
- Đánh giá hiệu suất trên tập kiểm thử độc lập.
- Tinh chỉnh siêu tham số và kiểm định thống kê.
Các kỹ thuật lấy mẫu dựa trên GAN được triển khai gồm: VanillaGAN, Conditional GAN (CTGAN), Wasserstein GAN with Gradient Penalty (WGANGP), CopulaGAN và Tabular GAN (TGAN).
Mô hình học sâu đề xuất (FastText-Transformer) thực hiện phân tích mã nguồn Java thành cây cú pháp trừu tượng (AST), chọn lọc các nút cú pháp đại diện, sử dụng Gensim FastText để tạo vector nhúng cho từng token, sau đó đưa qua các khối Transformer Encoder tích hợp cơ chế tự chú ý (self-attention) đa đầu để nắm bắt quan hệ phụ thuộc dài.
Dữ liệu và độ đo đánh giá
- Dữ liệu thử nghiệm: Bộ dữ liệu NASA MDP (CM1, PC1, KC1, KC2, JM1), kho PROMISE (gồm các dự án phần mềm hướng đối tượng) và kho Apache.
- Độ đo hiệu năng: Ma trận nhầm lẫn (Confusion Matrix), Độ chính xác tổng thể (Accuracy - Acc), Độ chuẩn xác (Precision - P), Độ thu hồi (Recall - R), F1-score, Diện tích dưới đường cong ROC (AUC) và Hệ số tương quan Matthews (MCC).
- Phân tích thống kê: Áp dụng các kiểm định thống kê phi tham số để so sánh sự khác biệt có ý nghĩa giữa mô hình đề xuất và các phương pháp đối sánh.
Nội dung chính theo từng chương
Chương 1: Tổng quan dự đoán lỗi phần mềm
Chương 1 cung cấp nền tảng lý thuyết toàn diện về kỹ thuật dự đoán lỗi phần mềm. Tác giả làm rõ bản chất của lỗi phần mềm, chỉ ra các nguyên nhân dẫn đến lỗi trong quy trình phát triển và phân tích vai trò chiến lược của việc phát hiện lỗi sớm. Quy trình chuẩn 7 bước của bài toán SDP được phân tích chi tiết. Tác giả phân loại sâu sắc hai hướng tiếp cận chính: dự đoán dựa trên đặc trưng độ đo truyền thống (McCabe, Halstead, CK, MOOD) và dự đoán dựa trên ngữ nghĩa, cú pháp mã nguồn. Chương này trình bày chi tiết cơ sở toán học và cơ chế vận hành của 7 thuật toán học máy: Random Forest, Extra Trees, AdaBoost, Gradient Boosting, HistGradient Boosting, XGBoost và MLP. Đồng thời, ba thách thức cốt lõi của lĩnh vực được định hình: dữ liệu nhiều chiều dư thừa, mất cân bằng lớp nghiêm trọng, và sự thiếu hụt thông tin ngữ nghĩa trong các độ đo thủ công.
Chương 2: Nâng cao khả năng dự đoán lỗi phần mềm bằng các phương pháp lựa chọn đặc trưng
Chương 2 giải quyết thách thức dữ liệu có số chiều cao và chứa nhiều thuộc tính dư thừa. Tác giả tiến hành khảo sát và đánh giá thực nghiệm các phương pháp lựa chọn đặc trưng thuộc nhóm filter, wrapper và đặc biệt là các thuật toán metaheuristic. Trong không gian tìm kiếm, các giải pháp lựa chọn đặc trưng được mã hóa dưới dạng vector nhị phân, trong đó mỗi bit đại diện cho việc giữ lại (1) hoặc loại bỏ (0) một đặc trưng độ đo.
Thực nghiệm được triển khai trên các tập dữ liệu từ kho PROMISE với các bộ phân loại Random Forest, Extra Trees và AdaBoost. Kết quả thực nghiệm tại Bảng 2.3, 2.4 và 2.5 cho thấy việc loại bỏ các đặc trưng không liên quan giúp giảm đáng kể chi phí tính toán đồng thời duy trì hoặc cải thiện giá trị AUC của mô hình. Bảng 2.6 tổng hợp độ quan trọng của các đặc trưng, chỉ ra các nhóm độ đo có ảnh hưởng lớn nhất đến khả năng xuất hiện lỗi. Kiểm định thống kê tại Bảng 2.7 xác nhận sự vượt trội có ý nghĩa của các tập đặc trưng tối ưu hóa bằng metaheuristic so với việc sử dụng toàn bộ tập đặc trưng ban đầu.
| Thành phần nghiên cứu |
Chi tiết kỹ thuật triển khai trong Chương 2 |
| Không gian biểu diễn |
Vector nhị phân ${0, 1}^d$ đại diện cho việc chọn hoặc bỏ thuộc tính |
| Thuật toán tìm kiếm |
Các thuật toán metaheuristic (GA, PSO, ABC, HHO, SMA, EO, GNDO...) |
| Mô hình phân loại đánh giá |
Random Forest (RF), Extra Trees (ET), AdaBoost (Ada) |
| Nguồn dữ liệu thực nghiệm |
Kho dữ liệu PROMISE (các dự án phần mềm mã nguồn mở Java) |
| Độ đo đánh giá chính |
AUC (Area Under the Curve), Ma trận nhầm lẫn, Độ quan trọng đặc trưng |
| Kiểm định thống kê |
Kiểm định so sánh hiệu năng giữa phương pháp đề xuất và baseline |
Chương 3: Kết hợp các kỹ thuật lựa chọn đặc trưng và lấy mẫu dữ liệu trong dự đoán lỗi phần mềm
Chương 3 tập trung vào giải pháp kết hợp hai giai đoạn: tối ưu hóa không gian đặc trưng trước, sau đó thực hiện cân bằng dữ liệu. Tác giả phân tích hạn chế của các phương pháp sinh mẫu truyền thống (SMOTE, ADASYN) khi thường tạo ra các mẫu nội suy nằm quá gần biên hoặc gây nhiễu, dẫn đến hiện tượng quá khớp. Để khắc phục, tác giả đề xuất ứng dụng mạng đối kháng sinh (GAN) và các biến thể chuyên biệt cho dữ liệu dạng bảng.
Quy trình đề xuất gồm: áp dụng kỹ thuật loại bỏ đặc trưng đệ quy (Recursive Feature Elimination - RFE) hoặc mạng Autoencoders để rút gọn chiều dữ liệu; tiếp đó, sử dụng các biến thể GAN gồm VanillaGAN, CTGAN, WGANGP, CopulaGAN và TGAN để sinh dữ liệu nhân tạo cho lớp thiểu số (lớp có lỗi). Thử nghiệm được thực hiện trên 5 tập dữ liệu phần mềm chuẩn của NASA gồm CM1, PC1, KC1, KC2 và JM1.
| Mô hình GAN / Lấy mẫu |
Đặc điểm kiến trúc và cấu hình thử nghiệm trong Chương 3 |
| VanillaGAN |
Mạng sinh và mạng phân biệt cơ bản với hàm mất mát minimax |
| CTGAN |
Thiết kế chuyên biệt cho dữ liệu dạng bảng có phân bố đa phương thức |
| WGANGP |
Sử dụng khoảng cách Wasserstein kết hợp phạt đạo hàm (Gradient Penalty) |
| CopulaGAN |
Tích hợp hàm copula để học phân phối biên tích lũy của các thuộc tính |
| TGAN |
Mạng đối kháng sinh dữ liệu bảng sử dụng mạng nơ-ron tuần tự (LSTM) |
| Phương pháp đối chứng |
Không lấy mẫu, Lấy mẫu ngẫu nhiên, SMOTE, Borderline-SMOTE, ADASYN |
| Bộ phân loại kiểm thử |
Random Forest, XGBoost, AdaBoost, HGBoost, MLP, Extra Trees |
Kết quả thực nghiệm chi tiết từ Bảng 3.1 đến Bảng 3.12 chỉ ra rằng việc kết hợp RFE hoặc Autoencoder với CTGAN, WGANGP và VanillaGAN mang lại hiệu suất vượt trội so với các phương pháp lấy mẫu truyền thống trên hầu hết các bộ phân loại (đặc biệt là RF và XGBoost). Kết quả trả lời Câu hỏi nghiên cứu 3.1 và 3.2 khẳng định CTGAN và WGANGP là các biến thể GAN có hiệu quả cao nhất trong việc tạo ra phân phối mẫu chân thực, giúp cải thiện rõ rệt giá trị AUC và F1-score. Các Bảng kiểm định thống kê từ 3.13 đến 3.17 chứng minh các cải tiến này đạt mức ý nghĩa thống kê cao.
Chương 4: Dự đoán lỗi phần mềm dựa trên học sâu
Chương 4 trình bày đóng góp về mô hình học sâu FastText-Transformer nhằm khai thác trực tiếp cú pháp và ngữ nghĩa của mã nguồn mà không phụ thuộc vào các độ đo thủ công. Quy trình xử lý gồm:
- Phân tích mã nguồn Java của các dự án phần mềm thành cây cú pháp trừu tượng (AST).
- Lọc và chọn các nút AST quan trọng phản ánh cấu trúc điều khiển, kiểu dữ liệu, lời gọi hàm và phép toán.
- Chuyển đổi cây AST thành chuỗi token ngữ cảnh.
- Sử dụng mô hình FastText (triển khai qua thư viện Gensim) để học biểu diễn nhúng vector (Token Embedding) cho các token, bảo toàn thông tin hình thái từ và cấu trúc dưới từ.
- Đưa ma trận nhúng vào mô hình Transformer Encoder với cơ chế tự chú ý đa đầu để học các mối quan hệ phụ thuộc tầm xa giữa các thành phần mã lệnh.
| Thành phần mô hình |
Chi tiết thiết lập kỹ thuật trong Chương 4 |
| Biểu diễn đầu vào |
Cây cú pháp trừu tượng (AST) trích xuất từ mã nguồn Java |
| Chọn lọc nút AST |
Lựa chọn các nút đại diện cho cú pháp và ngữ nghĩa (Bảng 4.1) |
| Kỹ thuật nhúng từ |
Gensim FastText Token Embedding |
| Kiến trúc phân loại |
Transformer Encoder với Multi-Head Self-Attention |
| Mô hình đối sánh |
FastText-LSTM, DP-Transformer, DTL-DP, Seml, DBN-CP, TCA+ |
| Kịch bản thực nghiệm |
Dự đoán trong cùng dự án (WPDP) và dự đoán liên dự án (CPDP) |
| Bộ dữ liệu kiểm thử |
Tập dữ liệu Apache và các tập mã nguồn từ PROMISE |
Thực nghiệm được tiến hành trên các tập dữ liệu Apache và PROMISE:
- Trả lời Câu hỏi nghiên cứu 4.1 (WPDP): Kết quả so sánh tại Bảng 4.6 và Hình 4.6 cho thấy FastText-Transformer đạt F1-score và AUC cao hơn rõ rệt so với các mô hình DTL-DP, Seml, DBN-CP và FastText-LSTM.
- Trả lời Câu hỏi nghiên cứu 4.2 (CPDP): Kết quả tại Bảng 4.7 chứng minh mô hình FastText-Transformer duy trì hiệu suất ổn định và vượt trội so với các phương pháp chuyển giao tri thức như TCA+ và DBN-CP khi dự đoán lỗi trên các dự án chưa từng thấy.
- Bảng 4.8 và 4.9 cung cấp kiểm định thống kê khẳng định sự khác biệt có ý nghĩa khoa học.
- Bảng 4.10 phân tích chi phí thời gian huấn luyện và kiểm thử giữa FastText-LSTM và FastText-Transformer, chỉ ra rằng nhờ khả năng tính toán song song của cơ chế self-attention, Transformer đạt tốc độ huấn luyện nhanh hơn đáng kể so với cấu trúc tuần tự của LSTM trên dữ liệu quy mô lớn.
Kết quả và những đóng góp mới
Luận án đã đạt được các kết quả khoa học cụ thể và đóng góp mới sau đây:
- Đóng góp về phương pháp lựa chọn đặc trưng: Đã phân tích, đánh giá và so sánh có hệ thống hiệu quả của các kỹ thuật lựa chọn đặc trưng filter, wrapper và metaheuristic trên các bộ dữ liệu độ đo phần mềm. Nghiên cứu xác lập cơ sở thực nghiệm khẳng định việc tối ưu hóa tập đặc trưng giúp loại bỏ nhiễu, giảm chiều dữ liệu và cải thiện độ chính xác phân loại của các mô hình học máy.
- Đóng góp về xử lý dữ liệu mất cân bằng bằng mạng GAN: Đề xuất và đánh giá việc ứng dụng các biến thể mạng đối kháng sinh dạng bảng (VanillaGAN, CTGAN, WGANGP, CopulaGAN, TGAN) vào bài toán dự đoán lỗi phần mềm. Kết quả thực nghiệm chứng minh các mô hình sinh dữ liệu đối kháng có khả năng mô phỏng phân phối đa chiều của các thuộc tính phần mềm tốt hơn các phương pháp nội suy truyền thống.
- Đóng góp về giải pháp tích hợp tối ưu hóa dữ liệu: Đề xuất quy trình kết hợp tuần tự giữa phương pháp lựa chọn đặc trưng (RFE, Autoencoders) và các mô hình sinh dữ liệu GAN (đặc biệt là CTGAN, WGANGP và VanillaGAN). Sự kết hợp này giải quyết đồng thời hai thách thức: dư thừa số chiều và mất cân bằng lớp, tạo ra tập dữ liệu huấn luyện có tính đại diện cao, nâng cao độ ổn định và khả năng khái quát hóa của các mô hình phân loại (RF, XGBoost, Extra Trees, AdaBoost, HGBoost, MLP).
- Đóng góp về mô hình học sâu biểu diễn mã nguồn: Đề xuất và xây dựng thành công kiến trúc mô hình FastText-Transformer dựa trên cây cú pháp trừu tượng (AST). Bằng cách kết hợp khả năng biểu diễn từ của FastText với cơ chế tự chú ý của Transformer, mô hình tự động nắm bắt các đặc trưng cú pháp và ngữ nghĩa phức tạp cũng như các phụ thuộc xa trong mã nguồn, giải quyết nhược điểm của các mạng tuần tự (RNN, LSTM) và vượt trội so với các mô hình đối sánh trong cả hai kịch bản WPDP và CPDP.
Kiến nghị và giải pháp ứng dụng: Luận án đề xuất quy trình kỹ thuật hoàn chỉnh có thể tích hợp vào các công cụ kiểm thử phần mềm tự động, hệ thống tích hợp liên tục (CI/CD) nhằm hỗ trợ các kỹ sư phần mềm tự động rà soát, định vị sớm các mô-đun rủi ro cao, tối ưu hóa việc phân bổ nguồn lực kiểm thử và giảm thiểu chi phí bảo trì dự án.
Hạn chế và hướng nghiên cứu tiếp
Dựa trên các nội dung được tác giả trình bày và các mối đe dọa đến tính tin cậy (threats to validity) trong văn bản, luận án tồn tại một số phạm vi giới hạn:
- Về ngôn ngữ lập trình: Toàn bộ các thử nghiệm mô hình học sâu và phân tích cú pháp AST mới chỉ tập trung thực hiện trên mã nguồn ngôn ngữ Java. Khả năng khái quát hóa của mô hình trên các ngôn ngữ lập trình khác (như C/C++, Python, C#) chưa được đánh giá trong khuôn khổ luận án.
- Về dữ liệu thử nghiệm: Dữ liệu thực nghiệm chủ yếu lấy từ các kho lưu trữ công khai (NASA MDP, PROMISE, Apache). Mặc dù đây là các tập dữ liệu chuẩn mực, chúng có thể chưa phản ánh đầy đủ mọi đặc thù phát triển của các dự án phần mềm thương mại khép kín hoặc các hệ sinh thái phần mềm vi dịch vụ hiện đại.
- Về tài nguyên tính toán: Việc huấn luyện các biến thể GAN và mô hình học sâu Transformer đòi hỏi hạ tầng tính toán cao hơn đáng kể so với việc huấn luyện các mô hình học máy truyền thống trên tập độ đo có sẵn.
Hướng nghiên cứu tiếp theo được xác định:
- Mở rộng việc đánh giá mô hình FastText-Transformer trên các ngôn ngữ lập trình đa dạng khác.
- Nghiên cứu tích hợp thêm các dạng biểu diễn đồ thị mã nguồn như đồ thị luồng điều khiển (CFG) và đồ thị luồng dữ liệu (DFG) vào kiến trúc học sâu.
- Triển khai thử nghiệm mô hình trong môi trường phát triển phần mềm công nghiệp thực tế.
Giá trị tham khảo
Luận án mang lại các giá trị tham khảo học thuật và ứng dụng thực tiễn:
- Đối với nghiên cứu sinh và học viên cao học chuyên ngành Khoa học máy tính và Kỹ thuật phần mềm: Luận án cung cấp bức tranh tổng quan toàn diện về lý thuyết đo lường phần mềm, các hệ thống độ đo hướng đối tượng kèm công thức toán học chi tiết, cùng khung phương pháp luận kết hợp giữa khoa học dữ liệu và kỹ thuật phần mềm.
- Đối với giảng viên và nhà nghiên cứu: Chương 2 và Chương 3 là tài liệu tham khảo chi tiết về quy trình thực nghiệm tiền xử lý dữ liệu phức tạp (kết hợp metaheuristic, Autoencoder và GAN dạng bảng) có đối sánh kiểm định thống kê chuẩn mực.
- Đối với các kỹ sư đảm bảo chất lượng (QA) và quản lý dự án phần mềm: Chương 4 cung cấp giải pháp kỹ thuật cụ thể về cách ứng dụng kiến trúc Transformer và biểu diễn AST để xây dựng công cụ phát hiện lỗi tự động, hỗ trợ phân loại mức độ rủi ro của các tệp mã nguồn trong quy trình kiểm thử phần mềm.
Câu hỏi thường gặp
1. Tại sao luận án đề xuất kết hợp lựa chọn đặc trưng với kỹ thuật lấy mẫu GAN thay vì áp dụng riêng lẻ từng phương pháp?
Trong tập dữ liệu lỗi phần mềm dạng bảng, việc chỉ áp dụng lựa chọn đặc trưng không thể giải quyết được tình trạng mất cân bằng nghiêm trọng giữa số lượng mô-đun không lỗi và mô-đun có lỗi. Ngược lại, nếu chỉ áp dụng các kỹ thuật sinh mẫu trên không gian dữ liệu ban đầu có số chiều lớn, các đặc trưng nhiễu hoặc dư thừa sẽ làm sai lệch phân phối xác suất mà mô hình sinh học được. Do đó, việc lựa chọn đặc trưng trước (bằng RFE hoặc Autoencoders) giúp làm sạch và tối ưu hóa không gian biểu diễn, tạo điều kiện thuận lợi để các mạng GAN học chính xác phân phối thực tế của lớp thiểu số và sinh ra các mẫu nhân tạo chất lượng cao.
2. Các biến thể GAN nào được đánh giá trong luận án và biến thể nào cho kết quả vượt trội?
Luận án tiến hành cài đặt và đánh giá 5 biến thể mạng đối kháng sinh gồm: VanillaGAN, CTGAN (Conditional GAN), WGANGP (Wasserstein GAN with Gradient Penalty), CopulaGAN và TGAN (Tabular GAN). Kết quả thử nghiệm trên 5 bộ dữ liệu của NASA cho thấy CTGAN và WGANGP thể hiện hiệu suất vượt trội nhất về các chỉ số AUC và F1-score khi kết hợp với các bộ phân loại như Random Forest và XGBoost, vượt xa các phương pháp lấy mẫu truyền thống như SMOTE hay ADASYN.
3. Mô hình FastText-Transformer giải quyết những hạn chế nào của các mạng học sâu tuần tự (RNN, LSTM)?
Các mạng tuần tự như RNN hay LSTM xử lý chuỗi token theo từng bước thời gian nối tiếp, dẫn đến hiện tượng suy giảm hoặc tiêu biến thông tin ngữ cảnh khi khoảng cách giữa các câu lệnh trong mã nguồn quá xa. Đồng thời, cấu trúc tuần tự ngăn cản việc tính toán song song, làm tăng chi phí thời gian huấn luyện. Mô hình FastText-Transformer sử dụng cơ chế tự chú ý (self-attention), cho phép đánh giá trực tiếp mối liên hệ giữa mọi cặp token trong mã nguồn bất kể khoảng cách vị trí, đồng thời hỗ trợ tính toán song song hoàn toàn, giúp rút ngắn thời gian huấn luyện và nắm bắt chính xác các quan hệ phụ thuộc ngữ nghĩa phức tạp.
4. Luận án thực hiện đánh giá thực nghiệm trên các bộ dữ liệu nào và thuộc ngôn ngữ lập trình nào?
Luận án tập trung thực nghiệm trên các dự án phần mềm được phát triển bằng ngôn ngữ lập trình Java. Các bộ dữ liệu chuẩn quốc tế được khai thác bao gồm kho NASA MDP (các tập dữ liệu CM1, PC1, KC1, KC2, JM1), kho dữ liệu PROMISE (chứa các dự án hướng đối tượng với các độ đo CK, McCabe, Halstead) và kho lưu trữ mã nguồn của các dự án thuộc tổ chức Apache.
5. Những hệ thống độ đo phần mềm nào được luận án hệ thống hóa công thức toán học?
Luận án đã hệ thống hóa các nhóm độ đo truyền thống gồm độ đo McCabe (độ phức tạp chu trình), độ đo Halstead (toán tử và toán hạng), và nhóm độ đo hướng đối tượng bao gồm: Chỉ số ẩn thuộc tính (AHF), Số lớp con (NOC), Độ sâu cây kế thừa (DIT), Chỉ số kế thừa phương thức (MIF), Số phương thức bị ghi đè (NMO), Chỉ số đa hình (PF), Tỷ lệ tái sử dụng (U) và Tỷ lệ chuyên biệt hóa (S).
Kết luận
Luận án tiến sĩ "Dự đoán lỗi phần mềm dựa trên mã nguồn" của nghiên cứu sinh Hà Thị Minh Phương đã giải quyết một cách có hệ thống các thách thức kỹ thuật cốt lõi trong lĩnh vực đảm bảo chất lượng phần mềm. Công trình đã chứng minh tính hiệu quả của việc tối ưu hóa dữ liệu dạng bảng thông qua sự kết hợp giữa kỹ thuật lựa chọn đặc trưng và các mô hình sinh dữ liệu đối kháng GAN. Đồng thời, luận án đã đề xuất thành công mô hình học sâu FastText-Transformer khai thác cấu trúc cây cú pháp trừu tượng, mang lại khả năng nắm bắt ngữ nghĩa và cú pháp mã nguồn vượt trội so với các phương pháp truyền thống trên cả hai bài toán dự đoán trong cùng dự án và liên dự án. Các kết quả nghiên cứu cung cấp cơ sở lý thuyết và giải pháp thực nghiệm vững chắc, đóng góp thiết thực cho sự phát triển của các công cụ kiểm thử phần mềm tự động trong kỹ thuật phần mềm hiện đại.