Cho đoạn mã giả sau, số ca kiểm thử tối thiểu cần có để phủ tất cả các cung?
int kiemTra (int k) {
if (k <= 1)
return -1;
for (int i = 2; i < k; i++)
if (k % i == 0)
return -1;
return 1;
}
>=>
Trả lời:
Đáp án đúng: B
Để phủ tất cả các cung (branch coverage) của đoạn mã, chúng ta cần các trường hợp kiểm thử đi qua tất cả các nhánh có thể có của các câu lệnh điều kiện. Trong đoạn mã này, có hai câu lệnh điều kiện chính:
1. `if (k <= 1)`: Điều này tạo ra hai nhánh: `k <= 1` (true) và `k > 1` (false).
2. `if (k % i == 0)` (trong vòng lặp for): Điều này tạo ra hai nhánh: `k % i == 0` (true) và `k % i != 0` (false).
Để phủ tất cả các nhánh, chúng ta cần ít nhất các trường hợp sau:
* **Trường hợp 1:** `k <= 1`. Ví dụ, `k = 1`. Nhánh này sẽ trả về -1.
* **Trường hợp 2:** `k > 1` và vòng lặp `for` không tìm thấy ước số nào của `k` ngoài 1 và chính nó (k là số nguyên tố). Ví dụ, `k = 5`. Nhánh này sẽ trả về 1.
* **Trường hợp 3:** `k > 1` và vòng lặp `for` tìm thấy một ước số của `k`. Ví dụ, `k = 4`. Nhánh này sẽ trả về -1.
Vậy cần tối thiểu 3 ca kiểm thử để phủ hết các cung.





