Hai dạng câu lệnh chính trong mã nguồn chương trình là câu lệnh gán và câu lệnh điều kiện. Có thể nhận ra câu lệnh gán bằng biểu tượng dấu “=”, ví dụ như x = 2 * y, trong đó x và y là các biến. Các câu lệnh điều kiện là các câu lệnh như if(), for(), while(), switch(), .., ví dụ như if(x > 2) thì sẽ kiểm tra xem biến x có lớn hơn 2 hay không. Trong chương trình, nếu như câu lệnh điều kiện bị thiếu hoặc viết sai có thể dẫn tới việc một đoạn mã nào đó không được thực hiện gây ra lỗi hoặc thất bại. Ý tưởng của kiểm thử dòng điều khiển chính là việc xây dựng một đồ thị dòng điều khiển và thiết kế các ca kiểm thử dựa trên các đường đi của đồ thị đó. Đồ thị dòng điều khiển là đồ thị có các đỉnh tương ứng với các câu lệnh hay nhóm các câu lệnh và các cạnh là các dòng điều khiển giữa các câu lệnh hay nhóm các câu lệnh.
Để xây dựng đồ thị dòng điều khiển cần dựa trên các biểu tượng như hình 1.6. Hình chữ nhật đại diện cho câu lệnh gán hay nhóm câu lệnh gán, hình thoi đại diện cho câu lệnh điều kiện, hình tròn không chứa câu lệnh mà chỉ đại diện cho điểm hợp nhất các câu lệnh (thường dùng cho vòng lặp).
Hình 1.6. Các biểu tượng xây dựng đồ thị dòng điều khiển.
Để minh họa rõ hơn về xây dựng đồ thị dòng điều khiển, xin xét ví dụ hình 1.7 và đồ thị dòng điều khiển của nó ở hình 1.8. Hình 1.7 minh họa mã nguồn của một đoạn mã tính tổng các số nguyên từ 1 đến 9. int i, n = 10, sum = 0; for (i = 1; i < n; i++) { sum += i; } Hình 1.7. Mã nguồn tính tổng các số từ 1 đến 9.
Hình 1.8. Đồ thị dòng điều khiển của mã nguồn hình 1.9.
Lệnh gán Lệnh điều kiện Đúng Sai Điểm hợp nhất i = 1, n = 10, sum = 0 sum += i i ++ i < n 1 2 3 4 Đúng Sai Thực hiện các lệnh khác
Tiêu chí lựa chọn đƣờng đi trong đồ thị dòng điều khiển để xây dựng ca kiểm thử
[6, tr.96-101]:
Tất cả các đường đi. Ví dụ hình 1.8 gồm hai đường 1-2-4 và 1-2-3-4.
Tất cả các câu lệnh được thực thi ít nhất một lần. Ví dụ hình 1.8 là đường 1-2-3- 4.
Tất cả các nhánh đều được thực thi ít nhất một lần. Ví dụ hình 1.8 là đường 1-2- 3-4.
Tất cả các thành phần trong câu lệnh điều kiện phức tạp (chứa nhiều điều kiện con) cần kiểm tra từng điều kiện con trong điều kiện đúng hoặc sai. Ví dụ với câu lệnh if(x > 1 && y < 2) có hai điều kiện con, cần xét từng trường hợp như bảng 1.1 để có bốn trường hợp kiểm thử.
Bảng 1.1. Các điều kiện con kết hợp trong câu lệnh điều kiện STT x > 1 y < 2 if(x>1 && y<2)
1 Đúng Sai Sai 2 Đúng Đúng Đúng 3 Sai Đúng Sai 4 Sai Sai Sai