32
Mô-đun định vị lỗi sử dụng thư viện mã nguồn mở Gzoltar [14]. Gzoltar cũng cung cấp các API cho phép người dùng thêm vào các danh sách tệp lỗi và tệp các ca kiểm thử. Sau đó sử dụng các dữ liệu được thêm vào tính toán độ bao phủ các câu lệnh và tính điểm số nghi ngờ cho từng câu lệnh. Điểm số nghi ngờ càng cao thì khả năng chứa lỗi của câu lệnh ngày càng lớn. Người dùng sẽ tập trung vào các câu lệnh có điểm nghi ngờ cao thay vì tìm kiếm trong toàn chương trình giúp nhanh chóng sửa lỗi. Cách sử dụng thư viện này để xác định vị trí lỗi đã được mô tả trong Mục 3.2.
Để sử dụng Gzoltar sau khi cài đặt cần cấu hình đường dẫn tới thư mục chứa các tệp chương trình lỗi trong pathToClassSource. Thư mục này chứa nhiều chương trình khác nhau cần kiểm tra, do đó khi muốn kiểm tra chương trình nào cần chỉ rõ đường dẫn đến tệp chương trình lỗi và đường dẫn đến tệp các ca kiểm thử. Phương thức run trong Gzoltar cho kết quả là danh sách câu lệnh và điểm nghi ngờ tương ứng. Kết quả này thường là đầu vào cho các pha sửa lỗi của các công cụ sửa lỗi tự động như jGenProg [21], SimFix [12], v.v.
Vì đối tượng người dùng của bài toán là học sinh nên việc chỉ lỗi chương trình cần được hiển thị một cách trực quan. Danh sách các câu lệnh và điểm nghi ngờ tương ứng cần được ghi vào tệp kết quả, tệp kết quả này được hiển thị cho học sinh quan sát trực tiếp đồng thời chuẩn bị cho khâu gợi ý sửa lỗi sau đó. Phương thức FaultStatement(Mã nguồn 4.2) và GetSuspiciousContext (Mã nguồn 4.1) được thiết kế để lấy dữ liệu trong Gzoltar ghi vào tệp kết quả theo cú pháp className + "@" + line + "@" + suspiciousPoint. Phương thức FaultStatement dùng các phương thức có sẵn của Gzoltar như getSuspiciousPoint(), getClassName(), getLine() để lấy ra các kết quả chỉ lỗi của chương trình. Hàm toString ghi các kết quả thành chuỗi theo định dạng. Vì mỗi chương trình bao gồm nhiều dòng lệnh, kết quả chỉ lỗi mỗi dòng lệnh được ghi vào một dòng, do đó để lưu trữ kết quả chỉ lỗi của cả chương trình ta phải dùng một danh sách các chuỗi để lưu trữ (FaultStatementArrayList). Phương thức GetSuspiciousContext nhận đầu vào là danh sách chuỗi kết quả của chương trình, tiến hành đọc từng dòng kết quả và ghi vào tệp. Một tệp kết quả chứa nhiều dòng, mỗi dòng lệnh tương ứng một dòng kết quả như trên trong tệp. Một tệp kết quả hiển thị có dạng như Hình 4.2.
private String GetSuspiciousContext(ArrayList<FaultStatement> faultStatementArrayList) {
String writeToFile = "";
for(FaultStatement statement : faultStatementArrayList) {
writeToFile += statement.toString() + "\n"; System.out.println(statement.toString()); }
return writeToFile;}
33