ID Test Path Output EO
TC1 1,2,3,4,5,6(T),7(T),8,9,10,6(F),11(T),12,14 [5,-999],5,20 5
TC2 1,2,3,4,5,6(T),7(F),9,10,6(F),11(F),13,14 [20,-999], 10,15 -999
TC3 1,2,3,4,5,6(F),11(F),13,14 [-999] ,5 , 20 -999
Với mỗi ca kiểm thử, bộ dữ liệu đầu vào (inputs) gồm ba thành phần: mảng
int value[], giá trị nhỏ nhất int MIN, và giá trị lớn nhất int MAX. Xây dựng Test drive điều khiển thực thi bộ test case:
public class MyTest {
public static void main(String[] args) {
int value[] = {5,-999}; MyMath.getAverage(value, 5, 20); int value1[]= {20,-999}; MyMath.getAverage(value1, 10, 15); int value2[] = {-999}; MyMath.getAverage(value2, 5, 20);
throw new MyException(""); }
Kết quả thu được tại hình 5.13 với bộ test case sinh ra tại bảng 5.3 đã bao phủ hết các nhánh thỏa mãn tiêu chuẩn bao phủ nhánh (branch coverage) trong đồ thị luồng điều khiển của hàm getAverage(), tất cả các nhánh trong đồ thị đều màu xanh. Bộ test tại bảng 5.3 đã thỏa mãn tiêu chuẩn bao phủ nhánh. Công cụ đã kiểm tra được độ phủ của bộ test thỏa tiêu chuẩn bao phủ nhánh.
48
Hình 5.13: Kết quả kiểm tra độ phủ của hàm getAverage thực thi với bộ test case tại bảng 5.3
Kiểm thử vòng lặp
Vòng lặp là cấu trúc rất hay được sử dụng khi viết chương trình vì tính chất mô tả thực tế của nó. Mặc dù vậy kiểm thử vòng lặp không hề đơn giản, lỗi rất hay xảy ra ở các vòng lặp. Có nhiều loại vòng lăp như vòng lặp đơn, vòng lặp lồng nhau và vòng lặp liền kề. Mỗi loại có cách sinh các ca kiểm thử là khác nhau. Nhưng tựu chung lại kiểm thử vòng lặp đều phải xây dựng các ca kiểm thử với số lần lặp đa dạng nhằm phát hiện lỗi tiềm ẩn có thể có tại vòng lặp bất kỳ. Minh họa cho việc kiểm thử vòng lặp đơn chúng ta quay lại ví dụ của hàm
getAverage. Bộ test trong bảng 5.3 đã thỏa mãn tiêu chuẩn bao phủ nhánh đối với hàm getAverage.Thực thi bộ test case trong bảng 5.3 vòng lặp while chỉ được thực hiện tối đa một lần lặp nên rất khó để phát hiện các lỗi tiềm ẩn có thể có bên trong vòng lặp này. Các lỗi này có thể xảy ra khi vòng lặp này được thực hiện nhiều lần lặp. Đây là hạn chế của phương pháp kiểm thử luồng điều khiển khi áp dụng cho các hàm hay phương thức có chứa vòng lặp. Để giải quyết vấn đề này, chúng tôi sinh thêm 7 ca kiểm thử ứng với bảy trường hợp lặp như sau: số lần lặp bằng 0, lặp 1, lặp 2, lặp M lần trong đó M < N, lặp N-1 lần, lặp N lần, lặp N+1 lần. Tuy nhiên với hàm trên sẽ chạy tối đa 30 lần vì vậy không sinh ca kiểm thử có N+1 lần lặp, bộ test case kiểm thử cho vòng lặp while được cho trong bảng 5.4
49