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

Lời giải:
Đáp án đúng: C
Đoạn code có các điều kiện sau:
1. `a == 0`: ảnh hưởng đến việc trả về giá trị 0 ngay lập tức.
2. `(a == b) || (c == d)`: ảnh hưởng đến giá trị của `x`. Nếu điều kiện này đúng, `x` sẽ bằng 1, ngược lại `x` sẽ bằng 0.
3. `e = 1/x`: có thể gây ra lỗi chia cho 0 nếu `x` bằng 0.

Để phủ cấp 2 (branch coverage), chúng ta cần đảm bảo mỗi nhánh của mỗi điều kiện được thực thi ít nhất một lần. Do đó cần xét các trường hợp sau:

* Testcase 1: `a = 0`. Nhánh `if (a == 0)` được thực thi và trả về 0.
* Testcase 2: `a != 0`, `a == b`, và `c != d`. Nhánh `if (a == 0)` không được thực thi, và `x` bằng 1.
* Testcase 3: `a != 0`, `a != b`, và `c == d`. Nhánh `if (a == 0)` không được thực thi, và `x` bằng 1.
* Testcase 4: `a != 0`, `a != b`, và `c != d`. Nhánh `if (a == 0)` không được thực thi, và `x` bằng 0.

Như vậy, cần tối thiểu 4 testcase để đảm bảo phủ cấp 2.
Câu 15:

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 3.

Lời giải:
Đáp án đúng: C
Đề bài yêu cầu số lượng test case để đảm bảo phủ cấp 3 (còn gọi là branch coverage). Đoạn code có các nhánh sau:
1. `if (a == 0)`: Cần 2 test case (true/false)
2. `if ((a == b) || (c == d))`: Cần các test case để phủ các trường hợp sau:
- a == b là true
- a == b là false và c == d là true
- a == b là false và c == d là false
Tuy nhiên, nếu x = 0, chương trình sẽ bị lỗi chia cho 0 (`e = 1/x`). Vì vậy, chúng ta cần thêm một test case để đảm bảo x != 0.
Vậy ta cần các test case sau:
1. a = 0 (để phủ nhánh `if (a==0)` là true)
2. a != 0, a = b (để phủ nhánh `(a==b) || (c==d)` là true và `a==b` là true)
3. a != 0, a != b, c = d (để phủ nhánh `(a==b) || (c==d)` là true và `a==b` là false, `c==d` là true)
4. a != 0, a != b, c != d (để phủ nhánh `(a==b) || (c==d)` là false)
Như vậy cần tối thiểu 4 test case để phủ hết các nhánh.
Câu 16:

Độ phức tạp Cyclomatic của đồ thị cho bên dưới là:

 Độ phức tạp Cyclomatic của đồ thị cho bên dưới là:A. 1B. 2C. 3D. 4 (ảnh 1)

Lời giải:
Đáp án đúng: C
Độ phức tạp Cyclomatic (Cyclomatic Complexity) có thể được tính bằng công thức V(G) = E - N + 2, trong đó E là số cạnh của đồ thị và N là số nút của đồ thị.

Trong đồ thị đã cho:
- Số cạnh (E) = 9
- Số nút (N) = 8

Áp dụng công thức: V(G) = 9 - 8 + 2 = 3

Vậy độ phức tạp Cyclomatic của đồ thị là 3.
Câu 17:

Công thức tính độ phức tạp cyclomatic M của một đoạn mã lệnh:

Lời giải:
Đáp án đúng: A
Độ phức tạp Cyclomatic (Cyclomatic Complexity) là một thước đo độ phức tạp của một chương trình. Nó được tính bằng công thức M = E - N + 2P, trong đó:

* M là độ phức tạp Cyclomatic
* E là số cạnh (edges) trong đồ thị luồng điều khiển.
* N là số nút (nodes) trong đồ thị luồng điều khiển.
* P là số thành phần liên thông (connected components). Trong hầu hết các trường hợp, P = 1 (một chương trình/hàm). Nếu đoạn code có nhiều điểm bắt đầu/kết thúc riêng biệt, thì P > 1.

Do đó, đáp án A là đáp án đúng.
Câu 18:

Cho sơ đồ sau. Xác định chuỗi trạng thái đúng cho biến e

 Cho sơ đồ sau. Xác định chuỗi trạng thái đúng cho biến eA. ~ddukB. ~dukC. ddukD. Tất cả đều sai (ảnh 1)

Lời giải:
Đáp án đúng: A
Để xác định chuỗi trạng thái đúng cho biến e, ta cần theo dõi sơ đồ trạng thái đã cho.

- Ban đầu, e ở trạng thái 'd' (từ trạng thái ban đầu).
- Khi có đầu vào 'u', e chuyển sang trạng thái 'u'.
- Khi có đầu vào 'k', e chuyển sang trạng thái 'k'.

Vậy chuỗi trạng thái của e là: dduk.

Do đó, đáp án đúng là C. dduk
Câu 19:

Trong kiểm thử dòng dữ liệu tĩnh, người kiểm thử phải chạy mã nguồn để xác định các sai sót có thể xảy ra.

Lời giải:
Bạn cần đăng ký gói VIP để làm bài, xem đáp án và lời giải chi tiết không giới hạn. Nâng cấp VIP
Câu 20:

Trong kiểm thử dòng dữ liệu tĩnh, người kiểm thử không cần chạy mã nguồn để xác định các sai sót có thể xảy ra.

Lời giải:
Bạn cần đăng ký gói VIP để làm bài, xem đáp án và lời giải chi tiết không giới hạn. Nâng cấp VIP
Câu 21:

Kiểm thử hộp đen là chiến lược kiểm thử yêu cầu người kiểm thử phải hiểu rõ mã nguồn của phần mềm.

Lời giải:
Bạn cần đăng ký gói VIP để làm bài, xem đáp án và lời giải chi tiết không giới hạn. Nâng cấp VIP
Câu 22:

Một textbox chỉ nhận giá trị ký tự từ [A-Z], [0-9]. Chỉ ra một giá trị thuộc lớp tương đương không hợp lệ:

Lời giải:
Bạn cần đăng ký gói VIP để làm bài, xem đáp án và lời giải chi tiết không giới hạn. Nâng cấp VIP
Câu 23:

Trong kỹ thuật phân tích giá trị biên, nội dung nào sau đây là đúng:

Lời giải:
Bạn cần đăng ký gói VIP để làm bài, xem đáp án và lời giải chi tiết không giới hạn. Nâng cấp VIP