Kiểm thử hộp trắng có thể áp dụng ở mọi mức kiểm thử từ component test (unit test) - kiểm thử đơn vị, cho đến kiểm thử ở mức hệ thống (system test). Nhưng trong thực tế thì white-box testing thường được áp dụng nhiều và thông dụng ở mức unit test. Vì khi áp dụng kỹ thuật này ở mức cao như integration test (kiểm thử tích hợp), thì số lượng dòng code, và các thành phần được tích hợp nhiều nên độ phức tạp rất cao. Vì thế, công sức bỏ ra thì rất nhiều nhưng hiệu quả thì không tương xứng.
Đối với system test thì toàn bộ mã nguồn (source code) của hệ thống thì rất rất nhiều so với bên trong một hàm, hay module nào đó. Do đó, thường ở mức system, white box testing không được áp dụng vào việc phân tích mã nguồn của hệ thống để xác định các trường hợp cần kiểm thử, mà lúc đó người ta thường áp dụng việc phân tích cấu trúc của hệ thống theo góc nhìn nghiệp vụ (cấu trúc của luồng nghiệp vụ - business process). Và dựa vào cấu trúc đó để viết test case cho mức hệ thống - thường là về chức năng, và được kiểm thử thủ công (manual) trên giao diện ứng dụng.
Vậy kiểm thử hộp trắng ở mức unit test thì sao?
Có rất nhiều kỹ thuật kiểm thử hộp trắng khác nhau, nhưng thường được áp dụng nhiều nhất là statement testing và decision testing.
Hãy xem xét ví dụ sau để hiểu hơn về kiểm thử hộp trắng - white box testing
Code: Select all
if (p = q) {
s = s + 1;
if (a < s) {
t = 10;
}
} else if (p > q) {
t = 5;
}
Với đoạn code trên, khi thực hiện kiểm thử câu lệnh thì bạn chỉ cần viết test case sao cho mọi câu lệnh (statement) trong đoạn code trên phải được thực thi (đi qua) ít nhất một lần.
TC1. Input sao cho đi qua các câu lệnh (statement): 1, 2, 3, và 4. Ví dụ, p = 5, q = 5, s = 0, và a = 0
TC2. Input sao cho đi qua các câu lệnh: 1, 5, và 6. Ví dụ, p = 5, q = 4, s = 1, và a = 1 (chỉ cần input sao cho p khác q
Còn về Kiểm thử quyết định, thì bạn chỉ cần viết test case sao cho mọi điểm quyết định (decision outcome) đều được đi qua ít nhất một lần.
TC1. Input sao cho đi qua các điểm quyết định (decision outcome): A, B, H, I, K, và L. Ví dụ, p = 5, q = 5, s = 0, và a = 0
TC2. Input sao cho đi qua các điểm quyết định: A, B, H, J, và L. Ví dụ, p = 5, q = 5, s = 0, và a = 1
TC3. Input sao cho đi qua các điểm quyết định: A, C, D, F, và G. Ví dụ, p = 5, q = 4, s = 1, và a = 1 (p lớn hơn q)
TC4. Input sao cho đi qua các điểm quyết định: A, C, E, và G. Ví dụ, p = 4, q = 5, s = 1, và a = 0 (p không lớn hơn q)