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: Lấy số hàng liên tiếp giống nhau của cột trước đó - Role (2) chia cho số khả năng của Username (2), tức 2/2 = 1; vậy ta điền luân phiên các khả năng của Username chia đều cho 6 hàng.
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 của Email, lúc này không quan trọng Email có bao nhiêu khả năng, bạn chỉ cần điền luân phiên các khả năng đó tương tự với Username là xong.
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.
Cụ thể hơn, cách điền cho từng đầu vào như sau:
- Age: Tổng số test case (12) chia số khả năng của Age (4) = 3; điền luân phiên 3 khả năng giống nhau của Age chia đều cho 12 hàng.
- Role: Lấy số khả năng liên tiếp giống nhau của cột trước đó - Age (3) chia cho số khả năng của Role (3) = 1; điền luân phiên từng khả năng của Role chia đều cho 12 hàng.
- Username, Email: Không quan trọng 2 cột này có bao nhiêu khả năng, tiếp tục điền luân phiên các khả năng chia đều cho 12 hàng.
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!