Áp dụng kỹ thuật Pairwise testing trong design test case

Thursday, January 26, 2023
Edit this post


Pairwise testing là một trong các kỹ thuật kiểm thử hộp đen (black-box test technique) phổ biến giúp bạn có thể giảm thiểu số lượng test case nhưng vẫn đảm bảo test coverage ở một mức độ nào đó nhằm bảo vệ chất lượng của sản phẩm phần mềm và tránh để lọt bug. Hiểu và nắm vững pairwise testing là một kỹ năng nên có trong hành trang của một QA.

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à RoleUsername (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

Điền cột Role trước: Tương tự như cách điền test case cho bảng quyết định (decision table), ta lấy tổng số test case 6 chia cho số khả năng của Role (3), tức 6/3 = 2; vậy ta điền liên tục luân phiên 2 khả năng giống nhau chia đều cho 6 hàng như hình.
Role Username Email
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 Email
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 Email
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à AgeRole, 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 AgeRole 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 Email
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!

.
Xin vui lòng chờ đợi
Dữ liệu bài viết đang được tải về

💻Nhận hướng dẫn online 1 kèm 1 Automation Test từ cơ bản tới nâng cao (From Zero to Hero) 😁😁😁
Lộ trình gồm 3 phần:
1) Kỹ thuật lập trình và tư duy lập trình cơ bản
2) Nhập môn kiểm thử (Manual Test)
3) Kiểm thử tự động (Automation Test) + Chuẩn bị cho phỏng vấn
* Lộ trình tham khảo khoảng 30 buổi: Xem tại đây (thời gian học thực tế có thể ngắn hơn hoặc dài hơn tùy vào mỗi cá nhân người học)

🎓Đối tượng người học:
- Những bạn bị mất gốc căn bản môn lập trình.
- Những bạn muốn theo con đường kiểm thử (testing), đặc biệt là kiểm thử tự động (Automation Test).

🦘Người hướng dẫn:
- Mình sẽ là người trực tiếp hướng dẫn.
- Nếu là các vấn đề ngoài chuyên môn hoặc sở trường, mình sẽ nhờ các anh chị em khác cũng làm trong ngành.

🤓Giới thiệu:
- Mình đã có hơn 10 năm kinh nghiệm làm IT ở cả trong và ngoài nước. Trong đó 3 năm đầu là làm lập trình viên Java, sau đó bén duyên với mảng Automation Test và theo nghề tới tận bây giờ. Mình được đào tạo chính quy về IT từ một trường Đại học danh tiếng ở TP.HCM (hệ kỹ sư 4 năm rưỡi), có chứng chỉ ISTQB, có thể giao tiếp tốt bằng tiếng Anh và có kinh nghiệm làm việc thực tế ở cả 2 mảng Outsource và Product. Title chính thức của mình là QA Automation Engineer, tuy nhiên, mình vẫn làm những dự án cá nhân chuyên về lập trình ứng dụng như Học Tiếng Anh StreamlineSách Nhạc. Mình là người có thái độ làm việc chuyên nghiệp, chăm chỉ và luôn nhiệt tình trong công việc.

💵Chi phí và hình thức thanh toán:
- Các bạn vui lòng liên hệ qua email songtoigianvn@gmail.com để book nội dung và khung giờ học.
- Mức phí: 150.000đ/buổi, mỗi buổi 60 phút. Có thể thanh toán mỗi lần cho 5 buổi.
- Thanh toán qua Momo, chuyển khoản v.v...
BÌNH LUẬN
© Copyright by CUỘC SỐNG TỐI GIẢN
Loading...