Pairwise Technique

Bạn được giao test cho 1 chức năng hiển thi text or link của 1 website. Những text hay link đó được set up trong 1 trang configuration và có logic như sau:

– Type: Là 1 combobox gồm 2 giá trị: Link hay Text

– Level: Là 1 combobox gồm 2 giá trị: General hay Level. Nếu bạn chọn là General thì text box bên trái gồm Level A và Level B sẽ bị ẩn đi, bạn chỉ có thể nhập trong text box General. Ngược lại, khi chọn Level thì textbox General bị ẩn đi và 2 text box kia được nhập bình thường.

App1

Website có 200 link và 150 text, do vậy sẽ có 350 vị trí để chúng hiển thị trên website. Với mỗi text hoặc link thì bạn có thể set up nó hiển thi chung cho tất cả level (General) hoặc bạn có thể tùy chỉnh cho mỗi level theo link hoặc text mong muốn. Là 1 tester bạn hãy test và đảm bảo những link và text hiển thị chính xác trên website.

Theo bài toán trên, để đảm bảo việc testing cho chức năng đó hoạt động tốt thì ta sẽ phải test khoảng 350 trường hợp. Tuy nhiên, trong thực tế, chúng ta sẽ không có đủ thời gian để có thể kiểm tra được tất cả các trường hợp. Do vậy, để có thể tìm ra được nhiều nhất những lỗi có thể xảy ra trong 1 điều kiện cho phép về thời gian và chi phí thì ta phải tạo ra được một bộ test case hiệu quả nhất. Pairwise testing là một trong những kỹ thuật để giúp cắt giảm số lượng test case cần test và tăng tính hiệu quả cho những test case mà mình muốn kiểm tra.

Quay trở lại bài toán trên, có 2 vấn đề mình cần test cho chức năng này:

  1. Những setting trên configuration tool này có thể tạo ra được những link hay text thõa mản yêu cầu của website
  2. Sau khi chúng được tạo ra từ configuration thì 350 cái này có được hiển thị chính xác trên website hay không.

All singles

Để giải quyết vấn đề số 1 thì trong phương pháp Pairwise có 1 approach là All singles. Kỹ thuật này có nguyên tắc là mỗi giá trị mà bạn quan tâm (bạn nghĩ nó quan trọng) của 1 biến sẽ được bạn ưu tiên để test và đặt trong test case trước.

Với đề bài trên thì ta thấy mỗi link hay text sẽ được quyết đinh theo Type và Level. Với biến Level sẽ có 3 vùng giá trị: General, Level A, Level B. Với Type thì sẽ có 2 vùng giá trị đó là Link hoặc Text.

Do vậy tổng số khả năng có thể xảy ra bằng 3*2 = 6 khả năng.

Tuy nhiên, với việc áp dụng kỹ thuật All Singles, ta sẽ chỉ cần 3 test cases. Chúng sẽ được áp dụng như sau:

  1. Sắp xếp thứ tự các biến theo thứ tự giảm dần số giá trị: Ở đây thứ tự sẽ là Level (3) -> Type (2)
  2. Đặt các giá trị cho biến Level ở cột đầu tiên
STT Level Type
1 General  
2 Level A  
3 Level B  
  1. Với các giá trị ở biến Type, bạn sẽ có 2 giá trị là Link hay Text. Bạn sẽ sắp xếp các giá trị này tương ứng với các giá trị ở cột Level nhưng với thứ tự làm sao mà bạn nghĩ đó là những combine input tạo ra những test case mà khách hàng thường xài và có độ bao phủ nhiều nhất. Qua kinh nghiệm của mình với hệ thống, mình đã chọn cách sắp xếp như sau:
STT Level Type
1 General Text
2 Level A Link
3 Level B Link

Lợi ích của All singles là nó đã cắt giảm được số lượng TH cần phải kiểm tra từ 6 xuống còn 3. Nhưng một vấn đề của phương pháp này là có thể bị missed những combine input quan trọng trong thực tế. Ví dụ, trong thực tế rất nhiều người dùng Level là General và Type là Link, nhưng trong bảng trên thì mình đã thiếu kiểm tra TH đó. Do vậy, để khắc phục điều này thì ta sẽ thêm những TH đặc biệt đó vào trong bộ TCs.

Tuy nhiên, quay lại bài toán thực tế này, do bạn cần phải tạo 350 Link và Tex theo configuration tool này để hiển thị lên website. Cho nên, việc testing toàn bộ 6 khả năng là điều nên làm vì dù gì bạn cũng phải tạo 350 cái 😊, và vì lợi ích của việc covergare 100% sẽ đảm bảo bạn không bị thiếu bất kể khả năng nào.

All pairs

Quay lại vấn đề thứ 2, mình cần test là đảm bảo 350 cái configuration này hoạt động chính xác trên website. Tuy nhiên, chẳng lẻ mình sẽ đi test hết cả 350 cái. Câu hỏi là làm sao cắt giảm số lượng test case cần test? Trong Pairwise thì có 1 approach là All Pairs. Nguyên tắc của approach này là mỗi giá trị của mỗi biến được phối với mỗi giá trị của những biến còn lại trong ít nhất một test case

350 configuration này sẽ được hiển thị ở 350 vị trí khác nhau. Áp dụng ‘Domain Partition’ta chọn được 10 vùng (Areas) mà 350 cái này tập trung nhiều giá trị có value nhất. Và để demo những cái hay của approach All pairs này, mình sẽ chỉ lấy 1 tập giá trị gồm 3 vùng (Area 1, Area 2, Area 3) làm ví dụ.

Tổng số khả năng có thể xảy ra Areas (3) * Level (3) * Type (2) = 18 khả năng

Đây là các bước tiến hành khi áp dụng approach này

  1. Sắp xếp các biến theo thứ tự giảm dần số giá trị của từng biến. Các cột sẽ có thứ tự sau: Areas, Level, Type
  2. Tính số dòng của bảng phối bằng cách lấy số giá trị của biến 1 * số giá trị của biến 2. Số dòng = Areas (3) * Level (3) = 9
  3. Trong cột đầu tiên, nhập từng giá tri của biến Areas theo số giá trị của biến Level, lưu ý để 1 dòng trống sau mỗi vòng. Ví dụ, nếu giá trị 1 của biến 1 là Area 1 và bộ giá trị của biến 2 là General, Level A, Level B thì đợt đầu sẽ 4 dòng, và trong cột đầu tiên sẽ là Area 1, Area 1, Area 1, 1 dòng trống.
  4. Trong cột thứ 2, liệt kê tuần tự các giá trị của biến 2. Ví dụ: vòng đầu tiên của cột thứ 2 sẽ là General, Level A, Level B
Areas (1,2,3) Level (General, Level A, Level B) Type (Text, Link)
1 General  
1 Level A  
1 Lvel B  
     
2 General  
2 Level A  
2 Lvel B  
     
3 General  
3 Level A  
3 Lvel B  
     
  1. Trong cột thứ 3, lấy từng giá trị của biến 3 (Type) phối với các tập giá trị của biến 1, khi đã phủ hết các trường hợp, ta tiếp tục phối với tập giá trị của biến 2
    1. Trong vòng đầu khi điền giá trị của biến 3, tôi nhập giá trị cho vòng đầu lần lượt là Text, Link, Text
Areas (1,2,3) Level (General, Level A, Level B) Type (Text, Link)
1 General Text
1 Level A Link
1 Lvel B Text
     
2 General  
2 Level A  
2 Lvel B  
     
3 General  
3 Level A  
3 Lvel B  
     

2. Tại vòng thứ 2, bộ giá trị sẽ là Link, Text, Link

Areas (1,2,3) Level (General, Level A, Level B) Type (Text, Link)
1 General Text
1 Level A Link
1 Lvel B Text
     
2 General Link
2 Level A Text
2 Lvel B Link
     
3 General  
3 Level A  
3 Lvel B  
     

Câu hỏi đặt ra là tại sao bộ giá trị không phải là Text, Link, Text?

Hãy quay lại dòng đầu tiên của cột 2 và cột 3: General đã phối với Text

Nếu như tại dòng 5, nếu ta chọn là Text nữa thì lúc này ta sẽ bị trùng với dòng đầu tiên. Do vậy, nếu chọn Link thì không những không bị trùng mà ta còn cover thêm 1 TH nữa. Ở đây là General-Link

3. Từ vòng 3 bạn có thể đặt kiểu sắp xếp nào cũng được. Lí do vì dù kiểu nào thì cũng sẽ tạo 1 bộ phối hợp lệ cả.

Như vậy, với cách phối này bạn đã có 1 bộ gồm 9 test case mà các giá trị của từng biến đã phối được với nhau.

Areas (1,2,3) Level (General, Level A, Level B) Type (Text, Link)
1 General Text
1 Level A Link
1 Lvel B Text
     
2 General Link
2 Level A Text
2 Lvel B Link
     
3 General Text
3 Level A Link
3 Lvel B Text
     

Giả sử ta có thêm một biến nữa thì sao?
Lúc này ta chỉ cần phối giữa cột Level-Variable 4 và sau đó tới Type-Variable 4. Bảng phối vẫn vừa vặn cho tất cả trường hợp như sau

Areas (1,2,3) Level (General, Level A, Level B) Type (Text, Link) Variable 4 (X, Y)
1 General Text X
1 Level A Link Y
1 Lvel B Text X
       
2 General Link Y
2 Level A Text X
2 Lvel B Link Y
       
3 General Text Y
3 Level A Link X
3 Lvel B Text Y
       

Tuy nhiên, nếu ta tiếp tục có thêm biến Variable 5 thì bảng đó sẽ không còn phù hợp nữa.

Areas (1,2,3) Level (General, Level A, Level B) Type (Text, Link) Variable 4 (X, Y) Variable 5(M, N)

 

1 General Text X M
1 Level A Link Y N
1 Lvel B Text X M
         
2 General Link Y N
2 Level A Text X M
2 Lvel B Link Y N
         
3 General Text Y N
3 Level A Link X M
3 Lvel B Text Y N
         

Có thể thấy theo bảng này, cột Level và Type các giá trị đã được phối đầy đủ với các biến của Variable 5. Tuy nhiên, có 1 chút không đúng ở cột Variable 4. X chỉ được phối với M, tương tự cho Y với N. Để khắc phục điều này ta sẽ thêm 2 test case khác ở dưới những dòng trống. Một bảng hoàn chỉnh sẽ có giá trị như sau:

Areas (1,2,3) Level (General, Level A, Level B) Type (Text, Link) Variable 4 (X, Y) Variable 5(M, N)

 

1 General Text X M
1 Level A Link Y N
1 Lvel B Text X M
      X N
2 General Link Y N
2 Level A Text X M
2 Lvel B Link Y N
      Y M
3 General Text Y N
3 Level A Link X M
3 Lvel B Text Y N

Khi bạn muốn test tất cả các trường hợp có thể xảy ra, chúng sẽ là 3*3*2*2*2=72 trường hợp. Nhưng khi áp dụng all-pairs bạn đã cắt giảm từ 72 xuống còn 11.

Tuy nhiên, khi áp dụng phương pháp này, bạn hãy lưu ý trong thực tế có những combination khác và sẽ được khách hàng sử dụng thường xuyên hơn những combination trên bảng phối trên. Do vậy, cách tốt nhất là có thể thêm một số trường hợp đó vô trong bộ test case của mình. Trong kinh nghiệm thực tê của mình thì có thể thêm từ 5-10 test case nữa cần kiểm tra. Do đó, tổng số test case có thể có từ 15-20. Tuy nhiên, nó vẫn là hiệu quả hơn khi bạn phải test 72 trường hợp phải không nào.

Published by Nguyen Quoc Dung

"If you only do what you can do You never be more than you are now"

Join the Conversation

1 Comment

Leave a comment

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: