1. Ví dụ cơ bản
Giả sử bạn cần test một form thu thập thông tin với 3 trường (field/input) cùng các giá trị tương ứng như sau: Role, Username, Email.
Bước 1: Xác định các giá trị có thể cho từng trường/input:
- Role: Admin/User/Guest - 3 giá trị.
- Username: Correct/Incorrect - 2 giá trị.
- Email: Correct/Incorrect - 2 giá trị.
Điểm mấu chốt là bạn cần phải xác định được đúng các giá trị đầu vào có thể của mỗi trường hoặc input. Vì chỉ cần nhiều hơn hay ít hơn một giá trị cũng có thể ảnh hưởng đến số lượng test case cuối cùng, từ đó ảnh hưởng tới test coverage của chúng ta.
Bước 2: Xác định số lượng test case
Dựa vào số lượng giá trị có thể tính được số lượng test case cần tạo là 3 x 2 x 2 = 12, đây là số lượng test cần có để cover tất cả giá trị đầu vào của từng trường. Dễ thấy là với cách tính này, chỉ cần tăng nhẹ một giá trị đầu vào hoặc thêm vào một trường mới thì số lượng test case sẽ tăng lên một cách chóng mặt. Ví dụ: 3 x 3 x 2 = 18, 4 x 3 x 2 = 24, 5 x 3 x 3 = 45 v.v...
Với Pairwise testing, chúng ta có thể giảm số lượng test case bằng cách ghép đôi (pair) hai trường có số lượng input lớn nhất, trong trường hợp này là Role và Username (hoặc Email cũng được). Từ đây, có thể thấy Pairwise testing là một kỹ thuật cụ thể của N-wise testing với N=2. Khi đó, số lượng test case sẽ giảm đi một nửa còn 3 x 2 = 6.
Bước 3: Kết hợp 2 đầu vào có số lượng giá trị lớn nhất
Role | Username | |
---|---|---|
Admin | ||
Admin | ||
User | ||
User | ||
Guest | ||
Guest |
Sau đó điền cột Username:
Role | Username | |
---|---|---|
Admin | Correct | |
Admin | Incorrect | |
User | Correct | |
User | Incorrect | |
Guest | Correct | |
Guest | Incorrect |
Bước 4: Điền các giá trị còn lại
Role | Username | |
---|---|---|
Admin | Correct | Incorrect |
Admin | Incorrect | Correct |
User | Correct | Incorrect |
User | Incorrect | Correct |
Guest | Correct | Incorrect |
Guest | Incorrect | Correct |
2. Ví dụ nâng cao
Giả sử chúng ta thêm vào một trường/input có các giá trị tương ứng như sau:
- Age: 0–18, 18–24, 24–40, >40 - 4 giá trị.
Nếu không áp dụng Pairwise, để cover tất cả các giá trị của 4 trường thì số lượng test case sẽ là 4 x 3 x 2 x 2 = 48. Áp dụng Pairwise, chúng ta sẽ chỉ cover 2 input có số lượng giá trị lớn nhất, trong trường hợp này là Age và Role, khi đó số lượng test case sẽ là 4 x 3 = 12, giảm đi 4 lần.
Bây giờ, bảng test case trông sẽ như bên dưới. Tương tự như trên, chúng ta sẽ fill cột Age và Role trước sao cho mỗi giá trị của cột Age sẽ được ghép với tất cả các giá trị của cột B chỉ một lần duy nhất. Ví dụ nếu bạn chỉ có 1 hàng 0–18 ghép với Admin là đúng, nhưng nếu bạn có 2 hàng 0–18 ghép với Admin là sai.
Age | Role | Username | |
---|---|---|---|
0–18 | Admin | Correct | Incorrect |
0–18 | User | Incorrect | Correct |
0–18 | Guest | Correct | Incorrect |
18–24 | Admin | Incorrect | Correct |
18–24 | User | Correct | Incorrect |
18–24 | Guest | Incorrect | Correct |
24–40 | Admin | Correct | Incorrect |
24–40 | User | Incorrect | Correct |
24–40 | Guest | Correct | Incorrect |
> 40 | Admin | Incorrect | Correct |
> 40 | User | Correct | Incorrect |
> 40 | Guest | Incorrect | Correct |
3. Công cụ hỗ trợ
Bạn có thể dùng công cụ online sau: https://pairwise.yuuniworks.com/ để tính toán ra các test case dựa trên giá trị đầu vào. Công cụ này dựa trên công cụ offline Pict của Microsoft: https://github.com/microsoft/pict. Như hình bên dưới là tôi đang tính toán số lượng test case cho ví dụ nâng cao ở trên.
Kết luận
Pairwise testing là một kỹ thuật thiết kế test case đã được chứng minh là hiệu quả nhưng không hoàn hảo, do tính đúng đắn của nó phụ thuộc khá lớn vào việc chọn giá trị đầu vào, và chưa chắc đã có thể áp dụng được Pairwise cho mọi bài toán. Hơn nữa, việc lược bỏ test case dù bằng cách nào đi chăng nữa vẫn tiềm ẩn nguy cơ để lọt bug. Do vậy, chỉ nắm vững một kỹ thuật này là chưa đủ, bạn cần sử dụng và kết hợp khéo léo Pairwise testing với các kỹ thuật khác để mang lại hiệu quả cao nhất. Chúc các bạn thành công!