5.1. Kiểm thử bài toán
Sau đây là một ví dụ rất đơn giản của việc thực thi tượng trưng với JPF. Chúng ta có thể sự dụng Eclipse hoặc thông qua giao diện dòng lệnh.
Giả sự ta có phương thức sau trong lớp bạn muốn sinh kiểm thử: public class MyClass1 {
public int myMethod(int x, int y) { int z = x + y; if (z > 0) { z = 1; } else { z = z - x; } z = 2 * z; return z; } }
Chúng ta sẽ cần tạo một driver để gọi myMetho(int,int). Driver có thể là một lớp khác hoặc phương thức main() của chính lớp này. Trong trường hợp này ta sẽ viết driver trong phương thức main() của lớp MyClass1.
Trong ví dụ đơn giản này, driver chỉ cần gọi myMethod() với số và kiểu tham số đúng sau đó in ra điều kiện đường đi (Path condition – PC). Điều lưu ý là tham số chính xác không phải là vấn đề, vì chúng ta sẽ thực thi myMethod() một cách tượng trưng, tất cả các giá trị cụ thể sẽ được thay thế bằng giá trị tượng trưng.
Chúng ta có thể xem các ca kiểm thử (test case) bằng cách in ra điều kiện đường đi. Việc này thực hiện được bằng cách gọi phương thức: gov.nasa.jpf.symbc.Debug.printPC(). Sau đây là mã nguồn đầy đủ:
public class MyClass1 {
public int myMethod(int x, int y) { int z = x + y; if (z > 0) { z = 1; } else { z = z - x; }
z = 2 * z; return z; }
// driver để kiểm thử
public static void main(String[] args) { MyClass1 mc = new MyClass1(); int x = mc.myMethod(1, 2);
Debug.printPC("MyClass1.myMethod Path Condition: "); }
}
Khi đó nếu chạy bằng Eclipse sẽ cho kết quả sau:
Hình 2.6: Đầu ra trên Eclipse cho MyClass1
Nhìn vào kết quả ở trên các PC sẽ chỉ ra các ca kiểm thử là Ca kiểm thử 1: y = -9999999, x = 10000000
Ca kiểm thử 2: y = -10000000, x = 10000000
Ca kiểm thử 1 tương ứng với z > 0 của câu lệnh if của phương thức myMethod. Ca kiểm thử 2 tương ứng với nhánh z≤0.