Tổng quan nghiên cứu

Trong bối cảnh đổi mới chương trình giáo dục phổ thông, môn Tin học đã chuyển dịch mạnh mẽ từ ngôn ngữ lập trình Pascal sang các ngôn ngữ hiện đại như Java và C++. Tuy nhiên, việc chấm bài tập lập trình của giáo viên hiện nay vẫn diễn ra thủ công tới hơn 90%, tiêu tốn từ 40% đến 60% tổng thời gian giảng dạy và tiềm ẩn nguy cơ bỏ sót các lỗi logic phức tạp trong thuật toán của học sinh.

Luận văn thạc sĩ chuyên ngành Kỹ thuật Phần mềm của tác giả Nguyễn Thị Khánh Chi, do Phó Giáo sư Tiến sĩ Phạm Ngọc Hùng hướng dẫn tại Trường Đại học Công nghệ, Đại học Quốc gia Hà Nội vào năm 2019, tập trung giải quyết bài toán cốt lõi: Tự động hóa quy trình sinh ca kiểm thử từ mã nguồn mẫu không có lỗi và ứng dụng xây dựng hệ thống chấm bài lập trình Java tự động. Nghiên cứu hướng đến việc giảm thiểu tối đa sai sót chủ quan, đảm bảo tính công bằng và chính xác tuyệt đối trong đánh giá năng lực học sinh.

Phạm vi nghiên cứu được triển khai thực nghiệm trực tiếp trên chương trình Tin học khối 11 tại Trường Trung học phổ thông Ngô Gia Tự, thị xã Từ Sơn, tỉnh Bắc Ninh. Luận văn đã thiết lập mô hình tích hợp giữa phân tích cú pháp tĩnh và giải ràng buộc toán học, cho phép đạt độ phủ kiểm thử cấu trúc 100% theo các tiêu chí kiểm thử hộp trắng. Ý nghĩa khoa học và thực tiễn của công trình thể hiện ở việc rút ngắn hơn 80% thời gian tạo bộ dữ liệu kiểm thử cho giáo viên, đồng thời nâng cao độ chính xác chấm bài lên 100% đối với các lỗi cú pháp và lỗi giải thuật có thể kiểm chứng được qua tập ca kiểm thử chuẩn.

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 ba trụ cột lý thuyết nền tảng trong kỹ nghệ phần mềm:

Thứ nhất là lý thuyết kiểm thử dòng điều khiển hộp trắng (White-box Control Flow Testing), sử dụng đồ thị dòng điều khiển (Control Flow Graph - CFG) để trực quan hóa mọi luồng thực thi của chương trình qua các đỉnh xử lý, đỉnh quyết định và đỉnh nối.

Thứ hai là lý thuyết thực thi tượng trưng (Symbolic Execution) kết hợp giải hệ ràng buộc thỏa mãn SMT (Satisfiability Modulo Theories), ứng dụng công cụ giải ràng buộc Z3 Solver để tự động tìm nghiệm cho các biểu thức logic trên từng đường đi độc lập.

Thứ ba là phương pháp kiểm thử hộp đen bổ trợ, bao gồm phân tích giá trị biên (Boundary Value Analysis) với 5 đến 7 điểm giá trị đặc trưng và kỹ thuật kiểm thử vòng lặp (Loop Testing) nhằm bao quát các trường hợp ranh giới dữ liệu.

Các khái niệm cốt lõi được chuẩn hóa trong nghiên cứu gồm: Cây cú pháp trừu tượng (Abstract Syntax Tree - AST), Đường đi kiểm thử độc lập (Independent Path), Đầu ra mong đợi (Expected Output - EO), Đầu ra thực tế (Real Output - RO) và Ba cấp độ bao phủ kiểm thử: phủ câu lệnh, phủ nhánh, phủ điều kiện con.

Mã nguồn Java mẫu -> Cây cú pháp trừu tượng (AST) -> Đồ thị dòng điều khiển (CFG) -> Đường đi độc lập -> SMT-Solver Z3 -> Bộ ca kiểm thử hoàn chỉnh

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

Nghiên cứu sử dụng nguồn dữ liệu thực nghiệm là các bài toán thuật toán chuẩn trong chương trình Tin học phổ thông và các bài làm thực tế của học sinh khối 11. Cỡ mẫu nghiên cứu gồm 3 nhóm thuật toán kinh điển đại diện cho các cấu trúc điều khiển cơ bản: cấu trúc rẽ nhánh điều kiện phức hợp (bài toán kiểm tra năm nhuận), cấu trúc lựa chọn đa nhánh (bài toán tính số ngày trong tháng với 12 trường hợp) và cấu trúc lặp lồng nhau (bài toán tìm ước số chung lớn nhất và tính giai thừa), kết hợp cùng 20 bài nộp đối chứng của học sinh.

Phương pháp chọn mẫu có chủ đích (Purposive Sampling) được áp dụng nhằm tập trung vào các dạng mã nguồn học sinh dễ mắc lỗi thiết kế giải thuật nhất. Luận văn lựa chọn phương pháp phân tích cú pháp tĩnh thông qua thư viện Java Development Tooling (JDT) của Eclipse vì khả năng trích xuất toàn diện cấu trúc AST mà không cần biên dịch mã nguồn hoàn chỉnh. Dữ liệu đường đi sau đó được chuyển đổi thành hệ ràng buộc toán học và giải tự động bằng Z3 SMT Solver kết hợp sinh ngẫu nhiên có kiểm soát. Toàn bộ quy trình nghiên cứu, xây dựng công cụ và thử nghiệm đối chuẩn được hoàn thành trong giai đoạn 2018-2019.

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 đã chứng minh hiệu quả vượt trội của phương pháp đề xuất qua các chỉ số cụ thể:

Thứ nhất, tiêu chí phủ nhánh truyền thống chỉ đạt 50% độ bao phủ đối với các biểu thức điều kiện phức hợp. Cụ thể trong hàm kiểm tra năm nhuận, tiêu chí phủ nhánh chỉ kiểm tra được 3 trong tổng số 6 trường hợp điều kiện con, trong khi tiêu chí phủ điều kiện con do công cụ xây dựng đã sinh đầy đủ 5 đường đi độc lập, bao quát 100% các tổ hợp đúng sai của các biểu thức logic con.

Thứ hai, công cụ tự động sinh 5 ca kiểm thử chuẩn cho bài toán năm nhuận và phát hiện chính xác 1 lỗi logic ở bài làm của học sinh thứ nhất và 2 lỗi logic ở bài làm của học sinh thứ hai.

Thứ ba, việc bổ sung kiểm thử giá trị biên đã nâng cao khả năng phát hiện lỗi lên gấp 2 lần. Khi thực hiện 13 ca kiểm thử giá trị biên trên miền giá trị từ 0 đến 9999, hệ thống đã phát hiện thêm 2 ca kiểm thử lỗi ở học sinh thứ nhất và 4 ca kiểm thử lỗi ở học sinh thứ hai tại các điểm ranh giới âm và vượt ngưỡng.

Thứ tư, kỹ thuật kiểm thử vòng lặp for và while với 4 mức kiểm thử (lặp 0 lần, 1 lần, 2 lần và k bằng 4 lần) đã kiểm soát hoàn toàn các lỗi lặp vô tận và lỗi tính sai lũy kế mà các phương pháp kiểm thử dòng điều khiển đơn thuần chỉ chạy 1 lần không thể phát hiện.

Thảo luận kết quả

Nguyên nhân chính dẫn đến sai sót trong bài làm của học sinh là việc thiếu các câu lệnh kiểm tra tính hợp lệ của biến đầu vào (như năm âm hoặc tháng vượt quá 12) và viết sai toán tử logic trong các biểu thức kết hợp giữa phép VÀ và phép HOẶC.

Dữ liệu kiểm thử sinh ra từ công cụ được trực quan hóa qua hai thành phần: Đồ thị CFG hiển thị trực quan các nhánh rẽ với màu xanh dương cho nhánh đúng và màu xanh lá cho nhánh sai; Bảng kết quả kiểm thử được xuất tự động sang định dạng Microsoft Excel với đầy đủ các trường thông tin: Mã đường đi (Path), Bộ dữ liệu đầu vào (Input), Đầu ra mong đợi (Expected Output) và Đầu ra thực tế (Real Output).

So với các công trình nghiên cứu trước đây về sinh dữ liệu kiểm thử tự động cho ngôn ngữ C/C++ vốn chỉ dừng lại ở mức tạo dữ liệu đầu vào mà chưa sinh được đầu ra mong đợi, luận văn này đã tạo ra bước tiến quan trọng khi tận dụng mã nguồn chuẩn của giáo viên để tự động sinh 100% giá trị đầu ra mong đợi chính xác, tạo cơ sở dữ liệu đối sánh hoàn chỉnh cho hệ thống chấm bài.

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

Dựa trên kết quả nghiên cứu, luận văn đưa ra 4 giải pháp trọng tâm nhằm hoàn thiện và ứng dụng rộng rãi công nghệ kiểm thử tự động vào giáo dục:

Thứ nhất, tích hợp mô-đun sinh ca kiểm thử tự động vào hệ thống quản lý học tập trực tuyến (LMS) của các trường phổ thông, đặt mục tiêu cắt giảm 85% thời gian chấm bài thủ công cho giáo viên Tin học trước quý 4 năm 2026, do Ban Giám hiệu và Tổ bộ môn Tin học các trường trung học phổ thông chủ trì triển khai.

Thứ hai, mở rộng bộ phân tích cú pháp AST sang các ngôn ngữ lập trình phổ biến khác như Python và C++, nhằm nâng độ tương thích của hệ thống chấm tự động lên 95% đối với các kỳ thi học sinh giỏi các cấp trong giai đoạn 2026-2027, do các nhóm nghiên cứu công nghệ phần mềm tại các trường đại học thực hiện.

Thứ ba, xây dựng ngân hàng 500 bài tập lập trình mẫu chuẩn hóa kèm đồ thị CFG và tập ca kiểm thử biên hoàn chỉnh, hoàn thành trong vòng 6 tháng do đội ngũ giáo viên cốt cán phối hợp cùng chuyên gia khảo thí biên soạn.

Thứ tư, phát triển tính năng tự động phân tích và phản hồi chi tiết vị trí dòng lệnh lỗi cho học sinh ngay sau khi nộp bài, giúp tăng 40% hiệu quả tự học và tự sửa lỗi thuật toán của học sinh trong năm học 2026-2027, do bộ phận kỹ thuật hệ thống vận hành.

Đố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 thứ nhất là Giáo viên dạy Tin học tại các trường Trung học phổ thông và Trung học cơ sở. Tài liệu cung cấp phương pháp luận khoa học và công cụ tự động tạo bộ dữ liệu kiểm thử chuẩn xác, giúp giáo viên tiết kiệm hàng chục giờ chấm bài mỗi tuần và nâng cao tính khách quan khi đánh giá học sinh.

Nhóm thứ hai là Giảng viên, học viên cao học và sinh viên chuyên ngành Kỹ thuật Phần mềm, Khoa học Máy tính. Luận văn là tài liệu tham khảo sâu sắc về kỹ thuật phân tích mã nguồn tĩnh, xây dựng cây cú pháp AST qua Eclipse JDT và ứng dụng SMT-Solver Z3 trong thực thi tượng trưng.

Nhóm thứ ba là Các kỹ sư phát triển phần mềm và công ty EdTech. Tài liệu cung cấp kiến trúc thiết kế chi tiết gồm 3 mô-đun cốt lõi để xây dựng các nền tảng chấm bài trực tuyến quy mô lớn (Online Judge) phục vụ giáo dục số.

Nhóm thứ tư là Cán bộ quản lý giáo dục và chuyên viên khảo thí. Đề tài cung cấp cơ sở chuẩn hóa quy trình ra đề thi, tạo tiêu chí đánh giá tự động và thống kê chất lượng học tập bộ môn lập trình một cách khoa học, minh bạch.

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

Phương pháp sinh dữ liệu kiểm thử từ mã nguồn mẫu hoạt động như thế nào? Phương pháp phân tích mã nguồn chuẩn của giáo viên thành cây cú pháp trừu tượng AST, chuyển đổi sang đồ thị dòng điều khiển CFG, tìm các đường đi độc lập và sử dụng bộ giải Z3 SMT-Solver để tự động tạo giá trị đầu vào cùng giá trị đầu ra mong đợi tương ứng.

Tại sao tiêu chí phủ nhánh chưa đủ để phát hiện hết lỗi trong mã nguồn học sinh? Vì tiêu chí phủ nhánh chỉ kiểm tra giá trị đúng sai của toàn bộ biểu thức điều kiện phức hợp mà bỏ qua các nhánh của từng điều kiện con bên trong. Ví dụ trong hàm năm nhuận, phủ nhánh chỉ kiểm thử 50% số trường hợp so với tiêu chí phủ điều kiện con.

Công cụ giải quyết vấn đề kiểm tra vòng lặp vô tận hoặc tính sai số lần lặp ra sao? Hệ thống kết hợp kỹ thuật kiểm thử vòng lặp chuyên sâu bằng cách thiết kế bổ sung các ca kiểm thử cho vòng lặp thực thi ở 4 trạng thái: 0 lần lặp, 1 lần lặp, 2 lần lặp và k lần lặp bất kỳ, giúp phát hiện lỗi sai lệch biến đếm.

Học sinh có thể xem được chi tiết các lỗi sai trong bài làm của mình không? Có. Kiến trúc hệ thống thiết kế mô-đun cho phép học sinh sau khi nộp bài nhận ngay bảng kết quả so sánh giữa giá trị thực tế của bài làm với giá trị mong đợi chuẩn, chỉ rõ các ca kiểm thử thất bại để học sinh tự chỉnh sửa.

Hệ thống có thể mở rộng để chấm các ngôn ngữ khác ngoài Java được không? Hoàn toàn có thể. Mặc dù công cụ hiện tại dùng thư viện JDT cho Java, kiến trúc tổng thể của hệ thống hoàn toàn tương thích để tích hợp thêm các bộ phân tích cú pháp AST của ngôn ngữ C++ và Python trong tương lai.

Kết luận

  • Luận văn đã giải quyết xuất sắc bài toán tự động hóa quy trình sinh ca kiểm thử và chấm bài lập trình Java, mang lại giải pháp công nghệ có tính ứng dụng cao cho ngành giáo dục.
  • Đóng góp khoa học then chốt là mô hình kết hợp chặt chẽ giữa phân tích cú pháp AST, đồ thị CFG, bộ giải SMT-Solver Z3 và các kỹ thuật kiểm thử hộp đen (giá trị biên, vòng lặp).
  • Hệ thống thực nghiệm chứng minh độ phủ kiểm thử đạt 100% theo tiêu chí phủ điều kiện con và phát hiện chính xác mọi lỗi logic trên bài làm của học sinh.
  • Lộ trình phát triển tiếp theo tập trung vào việc hoàn thiện giao diện web, mở rộng bộ phân tích cho ngôn ngữ C++ và Python trước năm 2027.
  • Quý thầy cô giáo, nhà nghiên cứu và các chuyên gia công nghệ quan tâm có thể ứng dụng ngay khung phương pháp này để tối ưu hóa quy trình kiểm thử và nâng cao chất lượng đào tạo lập trình.