ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Phan Thị May NGHIÊN CỨU GIẢI PHÁP VÀ CÔNG CỤ HỖ TRỢ GỢI Ý SỬA LỖI CHO CÁC CHƯƠNG TRÌNH JAVA LUẬN VĂN THẠC SĨ Ngành: Hệ thống thơng tin HÀ NỘI – 2021 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Phan Thị May NGHIÊN CỨU GIẢI PHÁP VÀ CÔNG CỤ HỖ TRỢ GỢI Ý SỬA LỖI CHO CÁC CHƯƠNG TRÌNH JAVA LUẬN VĂN THẠC SĨ Ngành: Hệ thống thông tin Cán hướng dẫn: PGS TS Phạm Ngọc Hùng HÀ NỘI – 2021 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ VIETNAM NATIONAL UNIVERSITY, HANOI UNIVERSITY OF ENGINEERING AND TECHNOLOGY Phan Thị May RESEARCH SOLUTIONS AND SUPPORT TOOLS TO SUGGEST FIXES FOR ERRORS IN JAVA PROGRAMS MASTER THESIS Information Systems Supervisor: Assoc Prof Pham Ngoc Hung LỜI CẢM ƠN HANOI - 2021 VIETNAM NATIONAL UNIVERSITY, HANOI UNIVERSITY OF ENGINEERING AND TECHNOLOGY LỜI CẢM ƠN Trước tiên xin gửi lời cảm ơn chân thành sâu sắc tới thầy giáo PGS TS Phạm Ngọc Hùng, người thầy định hướng cho tôi, đưa cho lời khuyên, động viên suốt trình học tập làm luận văn Thầy dạy cho học kinh nghiệm quý giá công việc, nghiên cứu sống, tiếp thêm động lực cho tôi, giúp tự tin vào Tơi xin gửi lời cảm ơn chân thành tới bạn phòng nghiên cứu R320, đặc biệt hỗ trợ động viên bạn Nguyễn Thị Huyền Phạm Khắc Ân Nhờ có chia sẻ hỗ trợ bạn nên tơi tìm kiếm báo có giá trị nghiên cứu làm chủ công cụ Tiếp theo xin gửi lời cảm ơn tới thầy cô trường Đại học Công nghệ, người thầy tận tâm truyền đạt kiến thức bổ ích giúp tiếp tục xa lĩnh vực công nghệ thông tin Thời gian học tập Đại học Công nghệ không học kiến thức mà học nhiều học từ phương pháp, từ phong cách, từ triết lí sống học tập thầy Những học giúp ích tơi nhiều đường trở thành giáo viên Tin học tốt Tôi xin gửi lời cảm ơn tới Ban giám hiệu trường trung học phổ thơng n Hịa đồng nghiệp quan Trong suốt thời gian học thạc sĩ nhận động viên, giúp đỡ tạo điều kiện để việc học thuận lợi Cuối xin cảm ơn gia đình tơi, người hỗ trợ, lo chu toàn việc nhà để tơi n tâm học tập Gia đình động viên nhiều, nguồn động lực tinh thần to lớn để tơi phấn đấu hồn thiện thân Xin chân thành cảm ơn tất i TĨM TẮT Tóm tắt: Xuất phát từ thực tế dạy lập trình trường phổ thơng học sinh thường hay mắc lỗi lớp học đông, giáo viên khó bao quát sửa lỗi cho em Vấn đề đặt làm để hỗ trợ sửa lỗi cho học sinh trình học lập trình Để giải vấn đề học viên nghiên cứu công cụ định vị lỗi gợi ý sửa lỗi có Trên sở phù hợp với tốn đặt lựa chọn hai cơng cụ mã nguồn mở Gzoltar JPlag để tích hợp với nhau, giúp giải tốn lõi Cơng cụ Gzoltar sử dụng phương pháp định vị lỗi quang phổ để xác định vị trí lỗi Tư tưởng chung dựa độ bao phủ ca kiểm thử câu lệnh chương trình để tính điểm nghi ngờ câu lệnh theo công thức quang phổ Ochiai Điểm nghi ngờ cao câu lệnh có khả lỗi, giúp học sinh tập trung vào câu lệnh lỗi thay sửa tồn chương trình Trong trường hợp học sinh lỗi chưa sửa được, chương trình gọi tới dịch vụ gợi ý sửa lỗi Tư tưởng việc gợi ý sửa lỗi tìm chương trình có độ tương đồng cao với chương trình lỗi để đưa làm gợi ý Việc so sánh tìm chương trình có độ tương đồng cao với chương trình lỗi phải thực phương pháp so sánh đặc biệt, phương pháp Tokenization Phương pháp Tokenization tiến hành so sánh Tokens, mã thông báo đặc trưng cho câu lệnh, không thực so sánh từ với từ mã nguồn Sau nhận gợi ý học sinh tiến hành sửa chữa chạy lại chương trình đến thu chương trình Chương trình gắn nhãn lưu vào sưu tập tương ứng, làm gợi ý cho chương trình tương lai ii ABSTRACT Abstract: Derived from the reality of teaching programming in high schools, students often make mistakes, but due to large classes, it is difficult for teachers to cover and correct each child's errors The problem is how to support students to correct errors in the process of learning programming Learners go to research the existing debugging tools and suggestions On the basis of matching with the problem posed, two open source tools Gzoltar and JPlag were selected to integrate together, helping to solve the core problem The Gzoltar tool uses the spectral fault locating method to locate the fault The general idea is based on the coverage of test cases on each statement of the program, applying the Ochiai spectral formula to calculate the suspect score of each statement The higher the doubt score, the more likely the statement is to fail, thus helping students focus on the error statements instead of fixing the entire program In case the student is shown the error but cannot fix the program, they can call the error correction service The main idea of debugging suggestions is to find correct programs with high similarity to the faulty program to make suggestions Comparing and finding the correct program with high similarity to the error program must be done by a special comparison method, comparing Tokens, the token specific to the statement, and not doing word comparisons with words between source codes After receiving the suggestions, the students make corrections and run the program again until the correct program is obtained This program is labeled and saved in the corresponding collection, as a basis for suggestions for future shows iii LỜI CAM ĐOAN Tôi xin cam đoan luận văn chưa nộp báo cáo luận văn Trường Đại học Công nghệ - Đại học Quốc gia Hà Nội trường đại học khác Những tơi viết khơng chép từ tài liệu, không sử dụng kết nghiên cứu người khác mà khơng trích dẫn cụ thể Nếu sai tơi hồn tồn chịu trách nhiệm theo quy định trường Đại học Công nghệ - Đại học Quốc gia Hà Nội Hà Nội, ngày tháng 11 năm 2021 Học viên Phan Thị May iv MỤC LỤC LỜI CẢM ƠN i TÓM TẮT ii ABSTRACT iii LỜI CAM ĐOAN iv DANH SÁCH THUẬT NGỮ/ TỪ VIẾT TẮT vii DANH SÁCH HÌNH VẼ vii DANH SÁCH BẢNG viii DANH SÁCH CÁC MÃ NGUỒN viii DANH SÁCH CÁC THUẬT TOÁN viii Chương Đặt vấn đề Chương Kiến thức tảng .5 2.1 Các phương pháp xác định vị trí lỗi .5 2.1.1 Phương pháp định vị lỗi truyền thống 2.1.2 Phương pháp định vị lỗi đại 2.2 Các phương pháp gợi ý sửa lỗi .7 Chương Phương pháp xác định vị trí lỗi gợi ý sửa lỗi 13 3.1 Tổng quan phương pháp xác định vị trí lỗi gợi ý sửa lỗi 13 3.2 Xác định vị trí lỗi 14 3.2.1 Xác định vị trí lỗi phương pháp quang phổ .14 3.2.2 Sử dụng thư viện Gzoltar để xác định vị trí lỗi 17 3.3 Gợi ý sửa lỗi chương trình 18 3.3.1 Tổng quan giải pháp gợi ý chương trình 18 3.3.2 Phân tích chương trình thành chuỗi Tokens 19 3.3.3 So sánh chuỗi Tokens 21 3.4 Ví dụ minh họa 25 Chương Công cụ thực nghiệm 31 4.1 Cài đặt công cụ 31 4.2 Thực nghiệm .36 4.2.1 Chuẩn bị thực nghiệm 36 4.2.2 Kết thực nghiệm 37 4.3 Thảo luận 40 v KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN TƯƠNG LAI 43 Kết luận 43 Hướng phát triển tương lai 43 TÀI LIỆU THAM KHẢO 45 PHỤ LỤC .48 vi DANH SÁCH THUẬT NGỮ/ TỪ VIẾT TẮT Thuật ngữ/ từ viết tắt Từ đầy đủ Ý nghĩa API Application Programming Interface Giao diện lập trình ứng dụng GST Greedy-String-Tiling Thuật toán so sánh chuỗi Tokens sử dụng công cụ Jplag IDE Integrated Development Environment Môi trường phát triển tích hợp NT Negative Test Kiểm thử tiêu cực PT Positive Test Kiểm thử tích cực DANH SÁCH HÌNH VẼ Hình 1 Biểu đồ ca sử dụng hệ thống hỗ trợ học lập trình Hình 2.1 Tập hành vi chương trình Hình 2.2 Mối quan hệ hành vi cài đặt, đặc tả kiểm thử 10 Hình 2.3 Đồ thị dịng điều khiển tương ứng độ phủ C3 hàm fibonacci 11 Hình Luồng thực thi tổng quan 13 Hình Tiền xử lí mã nguồn 14 Hình 3 Luồng xử lí thuật tốn định vị lỗi quang phổ 15 Hình Luồng xử lí định vị lỗi 17 Hình Quy trình thực thi JPlag 19 Hình So sánh chương trình lỗi với chương trình mẫu 21 Hình Kiến trúc hệ thống 41 Hình Kết lỗi chương trình 33 Hình Danh sách kết so sánh mã nguồn 34 Hình 4 Hiển thị chương trình gợi ý 35 vii sinh làm mẫu, việc chương trình học sinh đánh giá giống giống mã nguồn sở khơng bị coi đạo văn Trong giai đoạn đầu triển khai hệ thống, chưa có chương trình học sinh đưa vào sưu tập làm so sánh nên giáo viên đưa số chương trình mẫu vào để so sánh Khi hệ thống triển khai, làm học sinh đưa vào làm chương trình mẫu cho việc so sánh Bản chất chương trình mẫu ban đầu giáo viên cung cấp học sinh làm nộp vào nhau, không hiểu mã nguồn sở cơng cụ JPlag ngun Mục đích hệ thống tìm chương trình có độ tương đồng cao với chương trình cần sửa chữa dù chương trình cung cấp cho sưu tập khơng quan trọng Vì vậy, để giảm bớt thời gian chạy chương trình, hệ thống cải tiến khơng cài đặt mã nguồn sở bỏ bước so sánh mã nguồn sở với mã nguồn cần kiểm tra Kết so sánh bước chương trình với tỉ lệ tương đồng khác hiển thị dạng tệp HTML Việc hiển thị nhiều kết so sánh cho chương trình có khả gây nhiễu cho học sinh Hơn chương trình có tỉ lệ tương đồng thấp đem gợi ý học sinh khó nhận dạng sửa lỗi Do cơng cụ sửa đổi để hiển thị năm kết so sánh tốt (Hình 4.3) Dựa kết người dùng lựa chọn xem gợi ý cần Hình 4.3 Danh sách kết so sánh mã nguồn Hiển thị kết gợi ý cửa sổ song song chứa chương trình lỗi chương trình gợi ý JPlag cho phép hiển thị màu sắc giống cho đoạn chương trình tương tự để người dùng dễ theo dõi (Hình 4.4) Để thuận lợi cho học sinh trình sửa lỗi, công cụ đưa kết định vị lỗi bước trước tích hợp vào phần hiển thị kết gợi ý Điểm số nghi ngờ cho câu lệnh tương ứng cửa sổ chương trình lỗi hiển thị đầu câu lệnh giúp học sinh định vị vị trí cần tập trung sửa chữa Phương thức readSuspiciousCodeFromFile (Mã nguồn 4.3) thiết kế để đọc tệp kết định vị lỗi bước trước thêm vào trước câu lệnh chương trình lỗi Đường dẫn tới tệp kết định vị lỗi PATH_TO_SUSPICIOUS phải tới vị trí tệp kết bước trước Dựa yếu tố màu sắc điểm nghi ngờ cung cấp, học sinh dễ dàng tìm sửa lỗi theo gợi ý 34 Hình 4.4 Hiển thị chương trình gợi ý public class FileHelper { public static String PATH_TO_SUSPICIOUS = "C:\Users\\Administrator\\Downloads\\AFL\\GzoltarProject\\result55184.txt"; public static List readSuspiciousCodeFromFile() { List suspiciousCodeList = new ArrayList(); File suspCodePosFile = new File(PATH_TO_SUSPICIOUS); if (suspCodePosFile.exists()) { try { FileReader fileReader = new FileReader(PATH_TO_SUSPICIOUS); BufferedReader reader = new BufferedReader(fileReader); String line = null; while ((line = reader.readLine()) != null) { String[] elements = line.split("@"); SuspiciousPosition sp = new SuspiciousPosition(); sp.classPath = elements[0]; //class sp.lineNumber = Integer.parseInt(elements[1]); //line sp.ratio = Float.parseFloat(elements[2]); // suspiciousCodeList.add(sp) } reader.close(); fileReader.close(); } catch (Exception e) { e.printStackTrace(); System.out.println("Reloading Localization Result "); return null; } } Mã nguồn 4.3 Phương thức liên kết kết định vị lỗi 35 4.2 Thực nghiệm Tính đắn cơng cụ sử dụng luận văn khẳng định báo cáo trước Trong báo cáo nghiên cứu phương pháp định vị lỗi [8] nhóm tác giả W Eric Wong, phương pháp định vị lỗi quang phổ tập trung nghiên cứu thời gian gần đây, chứng tỏ phương pháp quan tâm ln có cập nhật thay đổi để cải thiện tính hiệu Báo cáo đồng thời so sánh công thức quang phổ định vị lỗi khẳng định Ochiai, công thức quang phổ sử dụng Gzoltar, có kết tốt so với công thức quan phổ khác Tarantula Báo cáo thực nghiệm Gzoltar, áp dụng phương pháp định vị lỗi quang phổ định vị lỗi cho chương trình sinh viên [33] nhóm tác giả Bob Edmison Stephen H Edwards Gzoltar xác định điểm nghi ngờ nhiều dòng nên xét kết điểm nghi ngờ cao có 73.3% Gzoltar lỗi đúng, xét hai kết có điểm nghi ngờ cao có 84.4% chắn lỗi nằm Gzoltar lỗi đúng, xét kết điểm nghi ngờ cao có tới 90% Gzoltar lỗi đúng, xét đến kết điểm nghi ngời cao có 7% số lần Gzoltar khơng lỗi Trong báo cáo thực nghiệm Gzoltar nêu trên, miền thực nghiệm chương trình Java đơn giản thực trị chơi Minesweeper cổ điển với cấu trúc liệu đơn giản sử dụng mảng hai chiều, nhấn mạnh tính logic câu lệnh, ví dụ thứ hai triển khai hai phiên hàng đợi, phiên sử dụng mảng nguyên thủy phiên sử dụng chuỗi liên kết nút Miền thực nghiệm toán chương trình Java học sinh viết, hầu hết chương trình đơn giản cú pháp chức năng, tương đương với miền thực nghiệm công cụ JPlag nghiên cứu chứng minh tính hiệu tốt so với YAP3 tương đương MOSS, sản phẩm thương mại thị trường [24] Có thể khẳng định mặt lí thuyết cơng cụ sử dụng luận văn có hiệu với chương trình học sinh Mục đích thực nghiệm xem xét tính hiệu cơng cụ với chương trình (code) cụ thể học sinh viết để khẳng định việc tích hợp điều chỉnh cơng cụ đem lại hiệu giáo viên học sinh 4.2.1 Chuẩn bị thực nghiệm Do công cụ chưa hoàn thiện đưa vào sử dụng trường phổ thơng nên ví dụ thực nghiệm bao gồm mười toán1 Với toán có đề bài, ca kiểm thử, code mẫu bốn code có lỗi cần kiểm tra Các liệu học viên thu thập q trình dạy học trước thiết kế cho phù hợp với u cầu, riêng với tốn tìm ước chung lớn in dãy số nguyên tố https://bit.ly/LinkBTthucnghiem 36 liệu học viên chuẩn bị có sử dụng số code mẫu code lỗi sinh viên lấy từ sở liệu OASIS Trường Đại học Công nghệ Quy trình thực thực nghiệm với tốn bao gồm bước: xây dựng đề bài, xây dựng code mẫu, xây dựng ca kiểm thử (tuân thủ điều kiện ca kiểm thử trình bày Mục 2.3), xây dựng code lỗi, chạy mô-đun định vị lỗi, so sánh đánh giá kết Các code lỗi đưa vào thực nghiệm có sản phẩm học tập học sinh, có học viên xây dựng dựa kinh nghiệm dạy học thân mô lỗi mà học sinh hay mắc phải Với gợi ý sửa lỗi chương trình, học viên xây dựng sưu tập code mẫu làm gợi ý bước đầu hệ thống chưa hoạt động, chưa có học sinh đưa vào làm gợi ý Các bước chuẩn bị liệu tiến hành thực nghiệm học viên thực thủ công nên với thời gian có hạn học viên chuẩn bị liệu thực nghiệm Khi hệ thống triển khai thực tế liệu code lỗi code để gợi ý nhiều lên làm tăng hiệu gợi ý sửa lỗi 4.2.2 Kết thực nghiệm Trong báo cáo thực nghiệm Gzoltar [33] trường hợp lỗi Một GZoltar tạo điểm đáng ngờ cho nhiều dòng chương trình qua ví dụ hàm tạo lớp bị lỗi trị chơi Minesweeper Hai khơng lỗi cho dịng lỗi ví dụ hàm tạo chuỗi Đây hai trường hợp xác định vị trí lỗi khơng hiệu Hai trường hợp phân tích câu lệnh có liên kết với nhau, ca kiểm thử lỗi chạy qua tất câu lệnh Do hiệu lỗi khơng cao Ngồi tính chất liên kết câu lệnh nên kỳ vọng Gzoltar xác câu lệnh lỗi không khả thi Để phù hợp với toán, dựa kinh nghiệm giảng dạy thực tế, học viên xây dựng tiêu chí đánh giá tính hiệu cơng cụ định vị lỗi ví dụ thực nghiệm sau: i Trong số câu lệnh xác định có nguy lỗi có xác câu lệnh bị lỗi ii Điểm số nghi ngờ câu lệnh lỗi cao câu lệnh khác để hướng người dùng vào vị trí lỗi có nguy cao trước Căn tiêu chí trên, đánh giá hiệu định vị lỗi phân thành ba mức: đúng, khó xác định sai Kết đảm bảo hai tiêu chí trên, kết đảm bảo tiêu chí đầu đánh giá khó xác định, lại kết sai Kết sai hiểu lỗi tất câu lệnh chương trình khơng lỗi vị trí Tính hiệu việc gợi ý sửa lỗi đánh giá theo hai mức khó xác định Vì bước gợi ý sửa lỗi đưa gợi ý chương trình tương tự, với gợi ý có từ bước định vị lỗi (đúng khó xác định) giúp học sinh sửa lỗi, trường hợp đánh giá hiệu gợi ý sửa lỗi Trong số trường hợp, bước định vị lỗi sai, việc gợi ý trường hợp đánh giá khó xác định 37 Bởi lẽ đưa gợi ý chương trình mà khơng có tập trung vào số câu lệnh học sinh phải tự so sánh sửa lỗi chương trình bất khả thi, thường có tỉ lệ tương đồng thấp (dưới 70%) Kết thực nghiệm thống kê Bảng 4.6 với mười toán thực nghiệm Mỗi thống kê số code lỗi, đánh giá kết định vị lỗi gợi ý sử lỗi cột tương ứng Bài có tám code lỗi; kết định vị lỗi có bốn kết đúng, ba kết khó xác định kết sai; kết gợi ý sửa lỗi có bảy kết kết khó xác định Bài có bốn code lỗi; kết lỗi có ba kết đúng, kết khó xác định; kết gợi ý sửa lỗi có ba kết đúng, kết khó xác định Chi tiết tốn khác mô tả Bảng 4.6 Bảng 4.6 Thống kê kết thực nghiệm Code Bài 1: Ước chung lớn #1 #2 #3 #4 #5 #6 #7 #8 Bài 2: Số nguyên tố #1 #2 #3 #4 Bài 3: Xếp loại học sinh #1 #2 #3 #4 Bài 4: Số phương #1 #2 #3 #4 Bài 5: Sắp xếp mảng #1 #2 #3 Định vị lỗi Gợi ý sửa lỗi Khó xác định Khó xác định Khó xác định Đúng Sai Đúng Đúng Đúng Đúng Khó xác định Đúng Đúng Đúng Đúng Đúng Đúng Đúng Đúng Đúng Khó xác định Đúng Đúng Đúng Khó xác định Khó xác định Khó xác định Đúng Đúng Khó xác định Đúng Đúng Đúng Đúng Khó xác định Khó xác định Đúng Đúng Khó xác định Đúng Đúng Đúng Khó xác định Khó xác định Đúng Đúng Đúng 38 Code #4 Bài 6: Số Amrstrong #1 #2 #3 #4 Bài 7: Năm nhuận #1 #2 #3 #4 Bài 8: Tìm kiếm mảng #1 #2 #3 #4 Bài 9: Chỉ số BMI #1 #2 #3 #4 Bài 10: Kiểm tra mật #1 #2 #3 #4 Định vị lỗi Khó xác định Gợi ý sửa lỗi Đúng Đúng Đúng Đúng Đúng Khó xác định Đúng Đúng Khó xác định Đúng Đúng Khó xác định Sai Đúng Đúng Đúng Khó xác định Đúng Đúng Khó xác định Khó xác định Đúng Đúng Khó xác định Khó xác định Đúng Đúng Khó xác định Khó xác định Đúng Đúng Đúng Đúng Đúng Đúng Đúng Khó xác định Đúng Đúng Đúng Đúng Đánh giá hiệu cơng cụ tốn thực nghiệm mô tả Bảng 4.7 Tỉ lệ định vị lỗi 54.68%, học sinh có khả dựa kết lỗi để sửa chương trình Trong trường hợp học sinh khơng sửa chương trình sau vị trí lỗi (43,75% lỗi khó xác định) chức gợi ý chương trình có tỉ lệ 71,25% giúp học sinh sửa lỗi Tỉ lệ định vị lỗi sai 3.75% 28.75% gợi ý sửa lỗi khó xác định hạn chế công cụ Tuy nhiên với liệu có đánh giá việc tích hợp hai cơng cụ có hiệu với tốn thực tế, sử dụng hỗ trợ phần cho giáo viên trình dạy học Đồi vợi chượng trình đánh giá định vị lồi khó xác định gợi ý sưa lồi hiều Tuy nhiên không phái gợi ý có thề dùng được, theo kinh nghiềm cũa hồc viên chượng trình gợi ý có đồ tượng đồng 80% mợi có thề sư dũng 39 Bảng 4.7 Đánh giá hiệu công cụ toán thực nghiệm CHỈ LỖIĐịnh vị lỗi BÀI Gợi ý sửa lỗi Đúng Khó xác định Sai Đúng Khó xác định Bài (50%) (37,5%) (12.5%) (87.5%) (12.5%) Bài (75%) (25%) (75%) (25%) Bài (50%) (50%) (75%) (25%) Bài (50%) (50%) (75%) (25%) Bài (25%) (75%) (100%) Bài (75%) (25%) (75%) (25%) Bài (50%) (25%) (25%) (75%) (25%) Bài (50%) (50%) (50%) (50%) Bài (50%) (50%) (50%) (50%) Bài 10 (50%) (50%) (50%) (50%) Trung bình 52,5% 43,75% 3,75% 71,25% 28,75% 4.3 Thảo luận Quá trình nghiên cứu triển khai thực nghiệm luận văn thu số kết Tìm kiếm xác định cơng cụ phù hợp với yêu cầu toán Xây dựng cơng cụ lõi tốn đặt ra, giúp xác định vị trí lỗi gợi ý sửa lỗi cho học sinh Tiến hành thực nghiệm để khẳng định hiệu phù hợp việc tích hợp cơng cụ lựa chọn Cơng cụ ứng dụng thực tế, hỗ trợ giáo viên trình dạy học, nâng cao hiệu thực hành học sinh, tạo môi trường để học sinh học tập chủ động tích cực giúp phát huy lực em Các kết thực nghiệm thu trình bày Mục 4.2 chưa phải kết khả quan, tỉ lệ định vị lỗi đạt 54.68%, kết hợp với gợi ý sửa lỗi khả học sinh sửa 71.25% Mặc dù kết chưa khả quan có ý nghĩa giúp ích phần cho giáo viên trình dạy học Thay giáo viên phải tự hỗ trợ cho học sinh nhờ có cơng cụ hỗ 40 trợ giáo viên bớt phần công sức học sinh học tập chủ động tích cực Kết sở để học viên tiếp tục nghiên cứu để xây dựng giải pháp tốt tương lai, tảng để phát triển hệ thống hoàn chỉnh hỗ trợ học sinh học lập trình Nguyên nhân kết số lí sau đây: Đầu tiên số lượng thực nghiệm chưa nhiều nên chưa bao quát tất trường hợp lỗi xảy Trong tương lai học viên tiến hành thực với nhiều hơn, lấy từ nguồn tập học sinh đa dạng để đánh giá kết tốt Thứ hai, tỉ lệ định vị lỗi thấp ba yếu tố: thuật toán, ca kiểm thử tính liên đới câu lệnh Thuật toán mà Gzoltar sử dụng để định vị lỗi Ochiai, đánh giá có hiệu thuật tốn định vị lỗi khác khơng có thuật tốn hồn hảo Bộ ca kiểm thử sử dụng để định vị lỗi sinh dựa vào đặc tả toán Nhưng code lỗi học sinh ngẫu nhiên đa dạng ca kiểm thử khơng bao phủ hết trường hợp khơng phát lỗi Các chương trình học sinh thường gồm số hàm gọi tới nhau, lỗi sai hàm kết lỗi hàm liên đới tới nó, khó xác định xác vị trí lỗi Thứ ba, việc gợi ý sửa lỗi phụ thuộc vào số lượng chương trình đưa làm gợi ý số lượng mẫu có khả khơng tìm chương trình gợi ý đủ tốt Kết cải thiện hệ thống triển khai thực tế, chương trình học sinh nộp vào sưu tập nhiều lên Việc gợi ý sửa lỗi lí tưởng phải tìm miếng vá (đoạn code) tương ứng vị trí lỗi để đưa gợi ý, hướng nghiên cứu học viên tương lai Để học sinh sử dụng kết gợi ý hiệu nhất, giáo viên cần hướng dẫn học sinh cách đọc sử dụng kết lỗi kết so sánh cho hiệu Các lưu ý mang ý nghĩa định hướng cho học sinh q trình sử dụng cơng cụ Việc sử dụng kết định vị lỗi cần lưu ý: Câu lệnh có điểm nghi ngờ cao câu lệnh có khả lỗi cao, học sinh nên tập trung sửa nội dung cho có nguy chạy lại đánh giá khơng nên tìm cách sửa tất lỗi lúc Do câu lệnh có liên kết với nhau, trường hợp ca kiểm thử chạy qua tất câu lệnh có khả làm cho câu lệnh có số lỗi tương đương, nên xảy trường hợp học sinh không cần hoang mang mà cần tự đánh giá lại phần sử dụng gợi ý chương trình tương tự để sửa lỗi Việc sử dụng kết gợi ý sửa lỗi cần lưu ý: Tỉ lệ trùng lắp cao thể chương trình có độ tương đồng lớn, dùng để tham khảo Do chất 41 thuật toán so sánh so sánh Token đại diện so sánh từ với nhau, nên dù có tỉ lệ tương đồng cao khơng giống hệt Điều hồn tồn hợp lí Trong q trình sử dụng gợi ý học sinh cần vào thứ tự câu lệnh điểm nghi ngờ có từ bước trước, với chương trình gợi ý mà xem xét sửa lỗi chương trình Hoạt động địi hỏi học sinh phải tư không chép được, giúp phát triển lực học sinh 42 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN TƯƠNG LAI Với trình nghiên cứu hồn thiện luận văn học viên học tập thêm nhiều kiến thức kỹ định vị lỗi sửa lỗi chương trình Java Dù trình nghiên cứu, xây dựng hệ thống học viên cố gắng trau dồi, bổ sung thêm nhiều kiến thức lĩnh vực kết có phần hạn chế cần bổ sung thêm tương lai Vì học viên đưa kết luận hướng nghiên cứu luận văn sau Kết luận Với mục tiêu xây dựng tìm kiếm cơng cụ giải pháp giải toán thực tiễn, học viên tiến hành nghiên cứu, tìm hiểu cơng cụ phù hợp Quá trình nghiên cứu tìm kiếm cơng cụ hỗ trợ xác định vị trí lỗi Gzoltar Đây công cụ cho phép xác định điểm số nghi ngờ cho câu lệnh dựa công thức quang phổ, công cụ mã nguồn mở đánh giá có hiệu Hỗ trợ gợi ý sửa lỗi sử dụng phát triển công cụ JPlag, công cụ mã nguồn mở với định hướng sử dụng cho mục tiêu phát đạo văn Việc sử dụng JPlag việc so sánh tìm kiếm mã nguồn có độ tương tự cao đưa làm gợi ý cho học sinh cách làm đơn giản hiệu với tốn Các cơng cụ điều chỉnh phù hợp mục đích sử dụng ghi kết lỗi tệp liên kết tệp kết định vị lỗi vào giao diện hiển thị gợi ý sửa lỗi để học sinh dễ dàng quan sát định hướng; không cài đặt so sánh mã nguồn sở JPlag để tiết kiệm thời gian chạy Những thay đổi không lớn phù hợp giúp nâng cao hiệu giải toán Bài toán đặt tốn khó chưa có cơng cụ đáp ứng tất yêu cầu đề Để giải toán lõi định vị lỗi gợi ý sửa lỗi học viên lựa chọn tích hợp hai công cụ Gzoltar JPlag Việc chứng minh hiệu mặt thực nghiệm với liệu lớn học viên chưa làm Tuy nhiên với kết ban đầu trình nghiên cứu thực nghiệm đánh giá việc tích hợp hai cơng cụ có hiệu quả, phần hỗ trợ giáo viên học sinh trình dạy học lập trình, áp dụng vào thực tiễn Đây tảng xây dựng hệ thống hoàn chỉnh với chức kỳ vọng Hướng phát triển tương lai Trong tương lai, dựa kết nghiên cứu luận văn học viên xây dựng hệ thống hồn chỉnh với đầy đủ mơ-đun áp dụng hệ thống vào thực tiễn Ngoài ra, học viên tiến hành thực nghiệm với liệu lớn để đánh giá tính hiệu Thử nghiệm tích hợp cơng thức quang phổ khác vào mơ-đun xác định vị trí lỗi đưa kết khác để đánh giá điều chỉnh công cụ Gzoltar có 43 hạn chế định việc lỗi lỗi nằm hàm gọi tới nhau, phù hợp cho việc lỗi JUnit Vì hệ thống mở rộng, tập học sinh đa dạng chưa thể khẳng định Gzoltar cịn phù hợp khơng, học viên phải tìm kiếm giải pháp sửa lỗi khác Việc phát triển hệ thống hồn chỉnh tích hợp với cơng cụ có tương tự hệ thống OASIS để khai thác ưu điểm sẵn có hệ thống mà khơng q nhiều cơng sức Đây dự kiến hướng nghiên cứu luận văn Với khả thời gian nghiên cứu có hạn luận văn hạn chế định Trường hợp lỗi Gzoltar chương trình có hàm gọi tới nhau, việc có lỗi hàm dễ dẫn tới lỗi hàm liên quan tới (ví dụ chương trình Problem4 số ngun tố, chương trình Problem4 số Amrstrong, chương trình Problem4 năm nhuận), hiệu lỗi chưa cao Do đó, khuyến nghị khơng sử dụng cơng cụ toán dạng sử dụng công cụ cần xem xét kỹ lưỡng kết Mơ-đun gợi ý sửa lỗi hiển thị chương trình làm gợi ý cịn thơ sơ Một số trường hợp chương trình học sinh viết có cấu trúc khác biệt lớn với chương trình khả đưa chương trình gợi ý hiệu khơng nhiều Vì vậy, việc bổ sung nhiều code học sinh với đa dạng cách viết giúp cải thiện tình trạng 44 TÀI LIỆU THAM KHẢO Tài liệu tiếng Việt [1] Bộ GDĐT, Chương trình giáo dục phổ thơng - Mơn Tin học, https://data.moet.gov.vn/index.php/s/Ke7Q4jjmBpzNPQC#pdfviewer, 2018 [31] Phạm Ngọc Hùng, Trương Anh Hoàng, Đặng Văn Hưng, Giáo trình Kiểm thử phần mềm, Nhà xuất Đại học Quốc gia Hà Nội, 2014 Tài liệu tiếng Anh [2] https://www.tiobe.com/tiobe-index/, Top Computer Langue, Aug 2021 [3] OASIS, https://oasis.uet.vnu.edu.vn, [19 August 2021] [4] Codehub, https://uetcodehub.pro/, [19 August 2021] [5] Ucode, https://ucode.vn/, [19 August 2021] [6] codelearn, https://codelearn.io/, [19 August 2021] [7] J C Edwards "Method, system, and program for logging statements to monitor execution of a program" U.S Patent 539 501, Mar 2003 [8] W Eric Wong, Ruizhi Gao, Yihao Li, Rui Abreu, and Franz Wotawa, Member "A Survey on Software Fault Localization", IEEE Transactions On Software Engineering, Vol 42, No 8, August 2016, 2016 [9] M Weiser "Program slicing", IEEE Trans Softw Eng., vol SE-10, no 4, pp 352–357, Jul 1984 [10] A Zeller, R Hildebrandt "Simplifying and isolating failureinducing input", IEEE Trans Softw Eng., vol 28, no 2, pp 183–200, Feb 2002 [11] Westley Weimer, ThanhVu Nguyen, Claire Le Goues, Stephanie Forrest "Automatically Finding Patches Using Genetic Programming", ICSE September 2009 [12] Jiajun Jiang, Yingfei Xiong, Hongyu Zhang, Qing Gao, and Xiangqun Chen "Shaping Program Repair Space with Existing Patches and Similar", In Proceedings of 27th ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA’18) ACM, New York, NY, USA Pp 12, 2018 [13] Johannes Bader, Michael Pradel, Andrew Scott, Satish Chandra "Getafix: Learning to Fix Bugs Automatically" 45 [14] https://gzoltar.com/, [19 August 2020] [15] GNU GDB Online Available: http://www.gnu., 2015 [16] Microsoft Visual Studio Debugger [Online], https://msdn.microsoft.com/enus/library/sc65sadd.aspx, 2015, Sep 10 [17] M Weiser "Program slicing", IEEE Trans Softw Eng., vol SE-10, no 4, pp 352–357, Jul 1984 [18] R Abreu, P Zoeteweij, and A J Van Gemund, “On the accuracy of spectrumbased fault localization,” in Testing: Academic and Industrial Conference Practice and Research Techniques-MUTATION, 2007 TAICPART-MUTATION 2007.IEEE, 2007, pp 89–98 [19] Martinez, Matias; Weimer, Westley; Monperrus, Martin (2014) "Do the fix ingredients already exist? An empirical inquiry into the redundancy assumptions of program repair approaches", Proceedings of the 36th International Conference on Software Engineering pp 492–495 [20] Barr Earl T., Brun Yuriy, Devanbu Premkumar, Harman Mark, Sarro Federica "The plastic surgery hypothesis", Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering - FSE 2014.pp 306–317 [21] jGenProg repository: https://github.com/SpoonLabs/astor/tree/master/srcjgenprog, [19 August 2020] [22] Hoang Duong Thien Nguyen, Qi Dawei; Abhik Roychoudhury, Satish Chandra, "SemFix: Program repair via semantic analysis", in Proc Int Conf Softw Eng San Francisco, CA, USA, May 2013, pp 772 - 781 [23] Fan Long, Martin Rinard "Automatic patch generation by learning correct", 2016 [24] Lutz Prechelt, Guido Malpohl, Michael Philippsen "Finding Plagiarisms among a Set of Programs with JPlag", Journal of Universal Computer Science, vol 8, no 11, 2002 [25] Kristina L Verco and Michael J Wise "Software for Detecting Suspected Plagiarism: Comparing Structure and Attribute-Counting Systems", 2006 [26] Halstead, Maurice Howard "Elements of Software Science", 1977 [27] Karl J Ottenstein "An algorithmic approach to the detection and prevention of plagiarism", ACM SIGSCE Bulletin, 8(4):30–41, 1976 46 [28] John L Donaldson, Ann-Marie Lancaster, and Paul H Sposato (1981) "A plagiarism detection system", ACM SIGSCE Bulletin (Proc of 12th SIGSCE Technical Symp.), 13(1):21–25 [29] Terence Parr, Kathleen Fishe, “LL(*): The Foundation of the ANTLR Parser Generator”, https://www.antlr.org/papers/LL-star-PLDI11.pdf [21 June 2020] [30] Michael J Wise "String similarity via greedy string tiling and running Karp-Rabin matching", Dept of CS, University of Sydney, ftp://ftp.cs.su.oz.au/michaelw/doc/RKR GST.ps., 1993 [32] https://github.com/jplag/jplag [18 July 2020] [33] Bob Edmison, Stephen H Edwards "Applying Spectrum-based Fault Localization to Generate Debugging Suggestions for Student Programmers", 978-1-5090-19441/15/©2015 IEEE, 2015 47 PHỤ LỤC Danh sách Tokens lấy từ báo cáo phát trùng lặp mã nguồn công cụ JPlag [24] 48 ... vị lỗi 3.3 Gợi ý sửa lỗi chương trình 3.3.1 Tổng quan giải pháp gợi ý chương trình Sau vị trí lỗi học sinh tiến hành sửa lỗi Nếu chương trình chưa sau sửa lỗi, học sinh lựa chọn xem gợi ý sửa lỗi. .. đưa chương trình tỉ lệ tương đồng với chương trình cần sửa lỗi Người dùng dựa vào kết vị trí lỗi bước gợi ý chương trình gần với chương trình để sửa lỗi Chương trình sửa lỗi hồn chỉnh đưa vào... chọn phù hợp cho nhiệm vụ toán Hai là, nghiên cứu công cụ gợi ý sửa lỗi Thực chất nghiên cứu công cụ so sánh chương trình với mục tiêu tìm chương trình có độ tương đồng cao để gợi ý cho học sinh