Multiple Condition Coverage Là Gì?
Bao phủ nhiều điều kiện – Multiple Condition Coverage là một phương pháp trong kiểm thử phần mềm dùng để đảm bảo rằng tất cả các khả năng kết hợp của các điều kiện trong source code đã được kiểm tra. Nó là một mức độ cao hơn so với kiểm thử điều kiện mà mình đã từng giới thiệu trong bài viết trước đây. Điều này bao gồm kiểm tra tất cả các khả năng kết hợp của các điều kiện logic trong chương trình, để đảm bảo rằng tất cả các đường đi logic đã được thử nghiệm.
Multiple Condition Coverage thường được áp dụng cho các điều kiện logic sử dụng các toán tử logic như AND, OR, NOT và các phép so sánh (ví dụ: bằng, khác, lớn hơn, nhỏ hơn). Để đạt được Multiple Condition Coverage, bạn phải kiểm tra tất cả các khả năng kết hợp của các điều kiện. Điều này có thể đòi hỏi một số lượng lớn các bộ kiểm tra và dữ liệu kiểm thử, tùy thuộc vào số lượng và sự phức tạp của các điều kiện.
Ví dụ, với biểu thức (A && B), bạn cần phải kiểm tra 4 trường hợp dưới đây:
- A = true, B = true
- A = true, B = false
- A = false, B = true
- A = false, B = false
Nếu có nhiều điều kiện và kết hợp, việc đảm bảo Multiple Condition Coverage có thể trở nên phức tạp và tốn nhiều thời gian kiểm tra. Tuy nhiên, nó có thể giúp phát hiện ra các lỗi trong logic của chương trình và đảm bảo tính ổn định của source code.
Khả Năng Áp Dụng
Kỹ thuật này được sử dụng để kiểm tra phần mềm có rủi ro cao và phần mềm nhúng được kỳ vọng sẽ chạy đáng tin cậy mà không gặp sự cố trong thời gian dài.
Hạn Chế/ Khó Khăn
Vì số lượng ca kiểm thử có thể được suy ra trực tiếp từ bảng chứa tất cả các điều kiện nguyên tử nên mức độ bao phủ này có thể dễ dàng được xác định. Tuy nhiên, số lượng lớn các trường hợp thử nghiệm cần thiết cho việc thử nghiệm nhiều điều kiện làm cho việc thử nghiệm điều kiện/quyết định đã sửa đổi trở nên khả thi hơn đối với các tình huống có một số điều kiện nguyên tử trong một quyết định. Nếu trình biên dịch sử dụng tính năng đoản mạch, số lượng tổ hợp điều kiện có thể thực hiện thường sẽ giảm đi, tùy thuộc vào thứ tự và nhóm các phép toán logic được thực hiện trên các điều kiện nguyên tử.
Ví Dụ Về Multiple Condition Coverage
Việc tạo một tập hợp các bài kiểm tra không cần phải phân tích nhiều. Đơn giản chỉ cần tạo một bảng chân trị với mọi sự kết hợp của các điều kiện nguyên tử, TRUE và FALSE, rồi đưa ra các giá trị kiểm tra từng điều kiện. Số lần kiểm tra tỷ lệ thuận với số điều kiện nguyên tử, sử dụng công thức lũy thừa 2^n trong đó n là số điều kiện nguyên tử.
Giả thuyết về lỗi cũng thực sự khá đơn giản: Lỗi có thể ở bất cứ đâu!
if ((A OR B) AND (C)) then …
Chúng ta có thể lập ra bảng chân trị trong bảng dưới đây. Vì có ba điều kiện nguyên tử nên chúng ta mong đợi sẽ thấy 2^3 hoặc 8 hàng trong bảng.
A | B | C | (A OR B) AND C |
---|---|---|---|
FALSE | FALSE | FALSE | FALSE |
TRUE | FALSE | FALSE | FALSE |
FALSE | TRUE | FALSE | FALSE |
TRUE | TRUE | FALSE | FALSE |
FALSE | FALSE | TRUE | FALSE |
TRUE | FALSE | TRUE | TRUE |
FALSE | TRUE | TRUE | TRUE |
TRUE | TRUE | TRUE | TRUE |
Về mặt lý thuyết, ta cần tạo một trường hợp thử nghiệm duy nhất cho mỗi hàng. Tuy nhiên, như đã nhắc tới trong bài viết trước những vấn đề tương tự cũng xảy ra đối với bao phủ nhiều điều kiện. Đó là đoản mạch – short circuiting và khớp nối – coupling. Tùy thuộc vào thứ tự của các toán tử Boolean, số lượng trường hợp cần kiểm thử sẽ khác nhau khi chúng ta có trình biên dịch đoản mạch. Một ví dụ khác, giả sử rằng chúng ta có năm điều kiện nguyên tử A, B, C, D và E. Giả sử rằng chúng ta có một trình biên dịch không bị đoản mạch, chúng ta sẽ có 32 trường hợp thử nghiệm để chạy.
Bây giờ, hãy giả sử rằng chúng ta đang sử dụng một trình biên dịch thực hiện đánh giá vị từ đoản mạch. Ví dụ đầu tiên, sử dụng cùng năm điều kiện nguyên tử, được kết nối một cách logic như sau:
A && B && (C || (D && E))
Test | A | B | C | D | E | Decision |
---|---|---|---|---|---|---|
1 | FALSE | – | – | – | – | FALSE |
2 | TRUE | FALSE | – | – | – | FALSE |
3 | TRUE | TRUE | FALSE | FALSE | – | FALSE |
4 | TRUE | TRUE | FALSE | TRUE | FALSE | FALSE |
5 | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE |
6 | TRUE | TRUE | TRUE | – | – | TRUE |
Ở thử nghiệm đầu tiên, A được đặt thành FALSE. Do toán tử AND, nếu A là FALSE thì bốn số hạng còn lại đều bị đoản mạch và không bao giờ được đánh giá.
Tương tự với thử nghiệm 2, nếu B được đặt thành FALSE, ngay cả với A TRUE, các số hạng khác sẽ bị đoản mạch và bị loại bỏ.
Trong thử nghiệm 3, nếu D được đặt thành FALSE thì E sẽ không bao giờ được đánh giá.
Trong thử nghiệm 4 và 5, mỗi thuật ngữ đều quan trọng và do đó được đưa vào.
Trong thử nghiệm 6, khi C có giá trị TRUE thì D và E không còn quan trọng nữa và bị đoản mạch.
Trong số 32 bài kiểm tra ban đầu có thể thực hiện được, chỉ có 6 bài kiểm thử là thực sự hữu ích.
Mình xin kết thúc bài viết hôm nay tại đây. Hẹn gặp lại các bạn trong các bài viết tiếp theo.
Happy Testing!