JavaScript is required

Cho đoạn code sau đây, hãy chọn đáp án đúng nhất:float foo(int a, int b, int c, int d){float e;if (a==0)return 0;int x = 0;if ((a==b) || ((c==d)))x = 1;e = 1/x;return e;}Chúng ta cần bao nhiêu testcase để đảm bảo phủ cấp 1.

A.
1
B.
2
C.
3
D.
4
Trả lời:

Đáp án đúng: B


Để đạt được độ phủ cấp 1 (statement coverage), chúng ta cần thực hiện các test case sao cho mỗi dòng code được thực thi ít nhất một lần. Xét đoạn code đã cho: 1. **`if (a==0) return 0;`**: Cần một test case để `a == 0` (ví dụ: `a = 0`, `b = 1`, `c = 2`, `d = 3`). Test case này sẽ khiến hàm trả về 0. 2. **`int x = 0;`**: Dòng này luôn được thực thi nếu `a != 0`. 3. **`if ((a==b) || ((c==d))) x = 1;`**: Cần một test case để điều kiện `(a==b) || ((c==d))` là đúng (ví dụ: `a = 1`, `b = 1`, `c = 2`, `d = 3`). Điều này làm cho `x = 1`. 4. **`if ((a==b) || ((c==d))) x = 1;`**: Cần một test case để điều kiện `(a==b) || ((c==d))` là sai (ví dụ: `a = 1`, `b = 2`, `c = 3`, `d = 4`). Điều này làm cho `x = 0`. 5. **`e = 1/x;`**: Để dòng này được thực thi mà không gây ra lỗi chia cho 0, ta cần đảm bảo `x != 0`. Trường hợp `x=1` đã được đề cập ở trên. Tuy nhiên, trường hợp `x=0` cũng cần được xét, dù sẽ gây ra lỗi runtime. 6. **`return e;`**: Dòng này luôn được thực thi nếu không có `return` sớm. Vậy tổng cộng, chúng ta cần ít nhất 3 test case để đảm bảo phủ hết các nhánh rẽ và các dòng lệnh (trừ trường hợp gây lỗi chia cho 0, nhưng vẫn cần test). - Test case 1: a = 0, b = 1, c = 2, d = 3 (để phủ `a == 0`) - Test case 2: a = 1, b = 1, c = 2, d = 3 (để phủ `(a==b) || (c==d)` là đúng, x = 1) - Test case 3: a = 1, b = 2, c = 3, d = 4 (để phủ `(a==b) || (c==d)` là sai, x = 0) Như vậy, đáp án đúng là C. 3

Câu hỏi liên quan