Sau khi cho JPF tiến hành thực thi đoạn mã trong mục 4.3 để sinh các ca kiểm thử bằng thực thi ký hiệu bởi công cụ phát triển Eclipse, kết quả thu được như sau:
Đối với phương thức withdrawMoney() của lớp ATMcard có năm ca kiểm thử được sinh ra với số điều kiện dẫn (Path Condition) tương ứng là 3, 3, 3, 3 và 1. Ta thu được ba ca kiểm thử:
+ Ca kiểm thử 1: amount = 1, balanceAmount = 1, withdrawalAmountPerDay = -10000
+ Ca kiểm thử 2: amount = 1, balanceAmount = -10000, withdrawalAmountPerDay = -10000
+ Ca kiểm thử 3: amount = 1, balanceAmount = 1, withdrawalAmountPerDay = 2000
+ Ca kiểm thử 4: amount = 1, balanceAmount = -10000, withdrawalAmountPerDay = 2000
+ Ca kiểm thử thứ 5: amount = -10000
Ca kiểm thử thứ nhất ứng với nhánh (balanceAmount – amount) >=0 và withdrawalAmountPerDay + amount <= 2000 và amount >0.
Ca kiểm thử thứ hai ứng với nhánh (balanceAmount – amount) < 0 và withdrawalAmountPerDay + amount <= 2000 và amount >0.
Ca kiểm thử thứ ba ứng với nhánh (balanceAmount – amount) >= 0 và withdrawalAmountPerDay + amount > 2000 và amount >0.
Ca kiểm thử thứ tư ứng với (balanceAmount – amount) < 0 và withdrawalAmountPerDay + amount > 2000 và amount >0.
Ca kiểm thử thứ năm ứng với nhánh amount <=0
Đối với phương thức withdrawMoney() của lớp SilverATM có năm ca kiểm thử được sinh ra với số điều kiện dẫn tương ứng là 3, 3, 3, 3 và 1. Các ca kiểm thử như sau:
+ Ca kiểm thử 1: amount = 1, balanceAmount = -4999, withdrawalAmountPerDay = -10000
+ Ca kiểm thử 2: amount = 1, balanceAmount = -10000, withdrawalAmountPerDay = -10000
+ Ca kiểm thử thứ ba: amount = 1, balanceAmount = -4999, withdrawalAmountPerDay = 3000
+ Ca kiểm thử thứ tư: amount = 1, balanceAmount = -10000, withdrawalAmountPerDay = 3000
+ Ca kiểm thử 5: amount = -10000
Ca kiểm thử thứ nhất ứng với nhánh (balanceAmount – amount) >= -5000 và withdrawalAmountPerDay + amount <= 3000 và amount >0.
Ca kiểm thử thứ hai ứng với nhánh (balanceAmount – amount) < -5000 và withdrawalAmountPerDay + amount <= 3000 và amount > 0.
Ca kiểm thử thứ ba ứng với nhánh (balanceAmount – amount) >= -5000 và withdrawalAmountPerDay + amount > 3000 và amount > 0.
Ca kiểm thử thứ tư ứng với nhánh (balanceAmount – amount) < -5000 và withdrawalAmountPerDay + amount > 3000 và amount > 0.
Ca kiểm thử thứ năm ứng với nhánh amount <=0
Đối với phương thức withdrawMoney() của lớp GoldATM cũng có năm ca kiểm thử được sinh ra với số điều kiện dẫn tương ứng là 3, 3, 3, 3 và 1. Các ca kiểm thử như sau:
+ Ca kiểm thử 1: amount = 1, balanceAmount = -9999, withdrawalAmountPerDay = -10000
+ Ca kiểm thử 2: amount = 1, balanceAmount = -10000, withdrawalAmountPerDay = -10000
withdrawalAmountPerDay = 5000
+ Ca kiểm thử thứ tư: amount = 1, balanceAmount = -10000, withdrawalAmountPerDay = 5000
+ Ca kiểm thử 5: amount = -10000
Ca kiểm thử thứ nhất ứng với nhánh (balanceAmount – amount) >= -10000 và withdrawalAmountPerDay + amount <= 5000 và amount >0.
Ca kiểm thử thứ hai ứng với nhánh (balanceAmount – amount) < -10000 và withdrawalAmountPerDay + amount <= 5000 và amount > 0.
Ca kiểm thử thứ ba ứng với nhánh (balanceAmount – amount) >= -10000 và withdrawalAmountPerDay + amount > 5000 và amount > 0.
Ca kiểm thử thứ tư ứng với nhánh (balanceAmount – amount) < -10000 và withdrawalAmountPerDay + amount > 5000 và amount > 0.
Ca kiểm thử thứ năm ứng với nhánh amount <=0
Trong các ca kiểm thử trên có cả những giá trị âm và dương dùng để kiểm thử tất cả các trường hợp có thể xảy ra ứng với tất cả các nhánh thực thi. Tuy nhiên chúng ta có thể hạn chế việc sinh các ca kiểm thử, chẳng hạn chúng ta chỉ lấy các ca kiểm thử có các giá trị amount >0 và balanceAmount>0 và withdrawalAmountPerDay >0 thì chúng ta chỉ cần thêm các lệnh Verify.ignoreIf() vào đầu các thủ tục withdrawMoney().
Ví dụ, thêm ba lệnh sau vào đầu phương thức withdrawMoney() của lớp ATMcard.
public void withdrawMoney(int amount) {
Verify.ignoreIf(amount<=0);
Verify.ignoreIf(balanceAmount<=0);
Verify.ignoreIf(withdrawalAmountPerDay<=0);
... }
Và thêm hai lệnh sau vào đầu phương thức withdrawMoney() của lớp SilverATM và lớp GoldATM.
public void withdrawMoney(int amount) {
Verify.ignoreIf(amount<=0);
Verify.ignoreIf(withdrawalAmountPerDay<=0);
... }
Kết quả thực hiện việc sinh các ca kiểm thử như sau:
Đối với phương thức withdrawMoney() của lớp ATMcard:
+ Ca kiểm thử thứ nhất: amount = 1, balanceAmount = 1, withdrawalAmountPerDay = 1
+ Ca kiểm thử thứ hai: amount = 2, balanceAmount = 1, withdrawalAmountPerDay = 1
+ Ca kiểm thử thứ ba: amount = 1, balanceAmount = 1, withdrawalAmountPerDay = 2000
+ Ca kiểm thử thứ tư: amount = 2, balanceAmount = 1, withdrawalAmountPerDay = 1999
Đối với phương thức withdrawMoney() của lớp SilverATM
+ Ca kiểm thử thứ nhất: amount = 1, balanceAmount = -4999, withdrawalAmountPerDay = 1
+ Ca kiểm thử thứ hai: amount = 1, balanceAmount = -10000, withdrawalAmountPerDay = 1
+ Ca kiểm thử thứ ba: amount = 1, balanceAmount = -4999, withdrawalAmountPerDay = 3000
+ Ca kiểm thử thứ tư: amount = 1, balanceAmount = -10000, withdrawalAmountPerDay = 3000
Đối với phương thức withdrawMoney() của lớp GoldATM
Ca kiểm thử thứ nhất: amount = 1, balanceAmount = -9999, withdrawalAmountPerDay = 1
+ Ca kiểm thử thứ hai: amount = 1, balanceAmount = -10000, withdrawalAmountPerDay = 1
+ Ca kiểm thử thứ ba: amount = 1, balanceAmount = -10000, withdrawalAmountPerDay = 5000
+ Ca kiểm thử thứ tư: amount = -10000, balanceAmount = 5000, withdrawalAmountPerDay = 1