Ở bài viết trước chúng ta đã tìm hiểu về kỹ thuật Kiểm thử bao phủ câu lệnh. Tuy nhiên kỹ thuật này có những hạn chế về rủi ro không kiểm tra hết các trường hợp dòng code có thể xảy ra. Câu hỏi đặt ra là “Có cách nào để khắc phục những hạn chế đó không?”. Hãy cùng mình tìm hiểu câu trả lời trong bài viết hôm nay nhé.
Kiểm Thử Quyết Định – Decision Testing Là Gì?
Kiểm thử quyết định – Decision Testing (hay decision coverage hoặc branch coverage) là một phương pháp trong kiểm thử phần mềm để đảm bảo rằng tất cả các nhánh của source code được thực hiện ít nhất một lần trong quá trình kiểm thử. Kiểm thử quyết định đánh giá mức độ kiểm thử của các điều kiện hoặc câu lệnh điều kiện và đảm bảo rằng chúng không bị bỏ sót trong quá trình kiểm thử. Khi sử dụng kiểm thử quyết định, bạn cố gắng thực hiện các bước kiểm thử sao cho cả hai hướng (true và false) của mỗi điều kiện được thực hiện ít nhất một lần.
Bảng: Các cấu trúc quyết định mà ngôn ngữ C sử dụng
Bảng trên đây cung cấp cho bạn một danh sách ngắn các cấu trúc quyết định mà ngôn ngữ C phổ biến sử dụng. Các ngôn ngữ phổ biến khác sử dụng cấu trúc tương tự. Điểm chung giữa tất cả những cấu trúc này là mỗi cấu trúc đưa ra một quyết định chỉ có thể đi theo hai cách: TRUE hoặc FALSE.
Khả Năng Áp Dụng
Mức độ bao phủ này cần được xem xét khi code đang được kiểm tra là quan trọng hoặc thậm chí vô cùng quan trọng. Bảng yêu cầu mức động bao phủ từ IEC 61508 dưới đây cung cấp các yêu cầu trong các hệ thống liên quan đến an toàn. Kỹ thuật này có thể được sử dụng cho code và cho bất kỳ mô hình nào liên quan đến các điểm quyết định, như mô hình quy trình kinh doanh.
IEC 61508 SIL | 100% Statement Coverage | 100% Branch Coverage | 100% MC/DC |
---|---|---|---|
1 | Recommended | Recommended | Recommended |
2 | Highly recommended | Recommended | Recommended |
3 | Highly recommended | Highly recommended | Recommended |
4 | Highly recommended | Highly recommended | Highly recommended |
Hạn Chế/ Khó Khăn
Kiểm thử quyết định không xem xét chi tiết về cách đưa ra quyết định với nhiều điều kiện và có thể không phát hiện được các khiếm khuyết do sự kết hợp của các kết quả điều kiện gây ra.
Ví Dụ Về Kiểm Thử Quyết Định
Hãy cùng xem xét một ví dụ sau đây để hiểu hơn về kiểm thử quyết định.
Bảng: Ví dụ về độ bao phủ câu lệnh
Đối với kiểm thử câu lệnh, chúng ta chỉ cần hai trường hợp thử nghiệm khi n < 0 và n > 0. Nhưng để đạt được bao phủ quyết định, chúng ta cần kiểm tra trường hợp “không” thực hiện vòng lặp for khi n == 0. Xin lưu ý rằng, vòng lặp for đánh giá một biểu thức và quyết định có lặp hay không lặp dựa trên kết quả.
Khi nhập 0, quyết định đầu tiên có giá trị là FALSE, vì vậy chúng ta đi theo con đường khác. Ở dòng 12, vị từ (1 <= 0) có giá trị là FALSE, do đó vòng lặp không được thực hiện. Hãy nhớ lại rằng trước đó chúng ta đã thử nghiệm với giá trị lớn hơn 0, điều này khiến vòng lặp được thực thi. Bây giờ chúng ta đã đạt được phạm vi quyết định; phải mất ba trường hợp kiểm thử.
Trở lại với câu hỏi cũ “Đã thử nghiệm đến mức độ bao phủ quyết định, chúng ta đã thực hiện đủ thử nghiệm chưa?”. Hãy xem xét chính vòng lặp. Nó đã thực thi nó 0 lần khi nhập 0, thực thi với số lần không xác định khi ta một giá trị lớn hơn 0. Thử nghiệm như thế đã đủ chưa? Chà, không có gì ngạc nhiên khi có một mức độ bao phủ khác gọi là phạm vi bao phủ vòng lặp. Cùng mình tiếp tục tìm hiểu về Kiểm thử vòng lặp – Loop Testing trong bài viết tiếp theo nhé.
Happy Testing!