Tiêu chí bao phủ cung

Một phần của tài liệu Bài giảng kiểm thử phần mềm đh phạm văn đồng (Trang 78 - 81)

Tiêu chí bao phủ đỉnh không đủ hiệu quả để phát hiện các lỗi lập trình. Chẳng hạn, chúng ta xét đoạn chương trình đơn giản và đồ thị luồng điều khiển tương ứng trong Hình 3.18.

Nếu chúng ta chọn dữ liệu thử {a = 1}, thì lộ trình kiểm thử [𝑛0, 𝑛1, 𝑛2, 𝑛3]

được thực thi và bao phủ tất cả các đỉnh của đồ thị. Tuy nhiên, lỗi (chia cho 0) không được phát hiện. Vì vậy, chúng ta cần định nghĩa tiêu chí bao phủ mạnh hơn tiêu chí bao phủ đỉnh.

Hình 3.18. Ví dụ tiêu chí bao phủ cung

Tiêu chí bao phủ cung yêu cầu tất cả các cung (hay lộ trình chỉ chứa một cung) phải được bao phủ. Tiêu chí này nhằm thực thi không chỉ mọi lệnh mà còn mọi rẽ nhánh trong chương trình. Chẳng hạn, đối với đồ thị trong Hình 4.10, các cung cần được bao phủ gồm [𝑛0, 𝑛1], [𝑛1, 𝑛2], [𝑛0, 𝑛2], [𝑛2, 𝑛3].

Với dữ liệu thử {a = 1}, thì tỉ lệ bao phủđối với tiêu chí bao phủ cung là:

số cung được bao phủ tổng số cung =

3

4= 75 %

Trong khi, tỉ lệ bao phủ của cùng dữ liệu thử {a = 1} đối với tiêu chí phủ đỉnh là:

số đỉnh được bao phủ tổng số đỉnh =

4

4= 100 %

kiểm thử [𝑛0, 𝑛1, 𝑛2, 𝑛3] và [𝑛0, 𝑛2, 𝑛3]. Chẳng hạn, chọn các dữ liệu thử gồm {a = 1} và {a = 0}. Khi đó, lỗi chia cho 0 cũng sẽ được phát hiện.

Như vậy, tiêu chí bao phủ cung tương đương với việc bao phủ tất cả các giá trị (đúng/sai) của mỗi đỉnh quyết định, nghĩa là bao phủ tất cả các rẽ nhánh của chương trình.

Đối với tiêu chí bao phủ cung, chúng ta phải chú ý trường hợp một quyết định gồm nhiều điều kiện. Chẳng hạn, xét đoạn chương trình sau:

scanf ( “%d%d”, &a, &b); if ( (a = = b) && (b > 10) )

s = b – 10; else

s = a + b;

Quyết định ( (a = = b) && (b > 10) ) có hai điều kiện (a = = b) và (b > 10). Đồ thị luồng điều khiển tương ứng được trình bày trong Hình 3.19.

Hình 3.19. Đồ thị biểu diễn quyết định gồm nhiều điều kiện

Để thỏa mãn tiêu chí bao phủ cung, chúng ta chọn hai dữ liệu thử: {a = 11, b = 11}

{a = 1, b = 10}

nhằm thực thi hai lộ trình kiểm thử tương ứng [𝑛0, 𝑛1, 𝑛2, 𝑛4] và [𝑛0, 𝑛1, 𝑛3, 𝑛4]. Tuy nhiên các dữ liệu thử này chỉ bao phủ các giá trị có thể của quyết định mà không

bao phủ các giá trị có thể cảu hai điều kiện tạo nên quyết định.

Nếu chúng ta muốn thực hiện kiểm thử chi tiết hơn (bao phủ các giá trị có thể của mỗi điều kiện), chúng ta xây dựng luồng đồ thị điều khiển với mỗi đỉnh biểu diễn mỗi điều kiện như trong Hình 3.20.

Hình 3.20. Đồ thị chi tiết các điều kiện của quyết định

Để thỏa mãn tiêu chí bao phủ cung, chúng ta cần chọn bốn dữ liệu thử: {a = 11, b = 11}

{a = 10, b = 10}

{a = 11, b = 10}

{a = 10, b = 11}

Tuy nhiên, lưu ý rằng đồ thị này có thể không phù hợp với cách xử lý quyết định của trình biên dịch. Thực tế, khi điều kiện (a = = b) sai, thì trình biên dịch sẽ không đánh giá điều kiện (b > 10). Nghĩa là, đồ thị trong Hình 3.20 có thể được rút gọn đỉnh n3 và các cung từ đỉnh 𝑛3 đến đỉnh 𝑛5. Trong trường hợp này, chỉ cần ba dữ liệu thử để thỏa mãn tiêu chí bao phủ cung:

{a = 11, b = 11}

{a = 10, b = 10}

{a = 11, b = 10}

thỏa mãn thì tiêu chí bao phủ đỉnh cũng được thỏa mãn.

Một phần của tài liệu Bài giảng kiểm thử phần mềm đh phạm văn đồng (Trang 78 - 81)