Pairwise testing và cách tự liệt kê test case thủ công.
Giả thuyết thông thường về kiểm tra chất lượng phần mềm là kiểm tra càng nhiều càng tốt, và thử nghiệm tất cả các trạng thái của một biến, cũng như kiểm tra tất cả các khả năng có thể kết hợp được của các biến với các trạng thái khác nhau, đảm bảo là tìm thấy tất cả các lỗi. Tuy nhiên, trong thực ...
Giả thuyết thông thường về kiểm tra chất lượng phần mềm là kiểm tra càng nhiều càng tốt, và thử nghiệm tất cả các trạng thái của một biến, cũng như kiểm tra tất cả các khả năng có thể kết hợp được của các biến với các trạng thái khác nhau, đảm bảo là tìm thấy tất cả các lỗi. 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 mọi trường hợp như trên. Hơn nữa khi kiểm thử một phần mềm, không bao giờ chúng ta có thể tìm ra được tất cả các lỗi của nó, chúng ta chỉ có thể cố gắng tìm ra được nhiều nhất những lỗi có thể xảy ra trong những điều kiện được cho phép về thời gian và chi phí.
Ví dụ chúng ta cần kiểm thử một Form có 10 đối tượng và mỗi đối tượng đó có thể nhận giá trị trong bộ 10 giá trị khác nhau. Vậy nếu để test toàn diện hết các trường hợp thì chúng ta sẽ cần phải test (10 ^ 10) = 10 tỷ tổ hợp khác nhau. Trong trường hợp này, việc kiểm tra toàn diện như vậy là không thể thực hiện được.
Vậy làm thế nào để chúng ta có thể xác nhận rằng sản phẩm của mình đã được đảm bảo chất lượng và sẵn sàng để bàn giao cho khách hàng mà không cần phải thực hiện kiểm tra tất cả mọi tổ hợp test case như trên? Làm thế nào để đảm bảo được chất lượng của sản phẩm trong điều kiện thời gian và chi phí cho sản phẩm bị giới hạn?
Một giải pháp đó là sử dụng các phương pháp test, cùng với các Tool hỗ trợ để giúp chúng ta có thể tối ưu hóa việc kiểm tra chất lượng sản phẩm với số lượng test case là ít nhất. Và một trong các phương pháp giảm thiểu số Test case mà vẫn đảm bảo được chất lượng của sản phẩm là sử dụng Pairwise testing.
Pairwise testing (hay còn gọi là All-pairs testing) là một phương pháp test kết hợp mỗi cặp 2 tham số đầu vào của 1 bộ các đối tượng có liên quan đến nhau, tạo ra bộ giá trị kiểm thử: Ta sẽ kiểm tra tất cả các khả năng có thể kết hợp các giá trị của cặp 2 tham số đó với nhau. Thực hiện kiểm tra theo cặp như vậy sẽ giúp làm giảm thời gian hơn rất nhiều so với việc phải kiểm tra đầy đủ mọi khả năng kết hợp của tất cả các giá trị của bộ nhiều các thông số với nhau.
Ứng dụng Pairwise testing vào bài toán cụ thể sau:
Một trang Web có các đối tượng cần kiểm tra với các giá trị tương ứng như sau:
- List Box - 0,1,2,3,4,5,6,7,8,9 - 10 giá trị
- Check Box - Checked hoặc Unchecked - 2 giá trị
- Radio Button - ON hoặc OFF - 2 giá trị
- Text Box - Bất kỳ value nào từ 1 đến 100 - 100 giá trị
Nếu kiểm tra đủ các trường hợp thì chúng ta sẽ có 10x2x2x100 = 4000 test cases cần phải tạo và thực hiện test. Thời gian để hoàn thành việc kiểm tra đầy đủ như vậy là rất lớn.
Và nếu áp dụng Pairwise thì chúng ta sẽ có 6 cases.
Tính số lượng theo công thức sau:
Số lượng test case = số lượng vùng giá trị lớn nhất của các biến * số lượng vùng giá trị lớn thứ 2 trong số các biến.
Ở đây, "Text Box" có 3 vùng giá trị, 3 biến còn lại đều có 2 vùng giá trị. Nên số case cần tạo theo Pairwise là 3x2 = 6 test cases
Số lượng test case giảm làm tiết kiệm công sức và thời gian rất nhiều lần.
Vậy chúng ta hãy cùng xem làm thế nào để tìm ra 6 test cases này?
Bước 1: Sử dụng các kỹ thuật kiểm thử phần mềm thông thường để chia các vùng cần kiểm tra cho từng biến:
- List Box - 0,1,2,3,4,5,6,7,8,9 - chia thành 2 vùng kiểm tra: "0" và các giá trị khác ("others")
- Check Box - Checked hoặc Unchecked - giữ nguyên 2 giá trị
- Radio Button - ON hoặc OFF - giữ nguyên 2 giá trị
- Text Box - Bất kỳ value nào từ 1 đến 100 - kiểm tra 3 vùng giá trị: số nguyên nằm trong khoảng 1 đến 100, số nguyên ngoài khoảng, ký tự không phải dạng số nguyên (Valid Integer, Invalid Integer, Alpha-Special Character)
Như vậy số lượng test case đã giảm xuống còn 2x2x2x3 = 24 test cases.
Bước 2: Ứng dụng kỹ thuật Pairwise testing để làm giảm sự kết hợp các vùng kiểm tra với nhau theo cách sau:
- Sắp xếp các biến theo thứ tự giảm dần số lượng vùng giá trị: biến có nhiều vùng giá trị nhất sắp xếp đầu tiên. Biến có số lượng vùng giá trị ít nhất để ở cuối cùng. => tạo thành 1 bảng có các cột tương ứng với các biến.
- Điền các vùng giá trị tương ứng vào bảng lần lượt theo các cột. Bắt đầu từ cột thứ 2: "List box". Cột này có thể lấy 2 giá trị là "0" hoặc "others"
- Điền vùng giá trị cho cột tiếp theo: "Check box": có thể nhận được 2 giá trị: "check" và "uncheck"
- Kiểm tra để đảm bảo rằng chúng ta đã cover được hết các trường hợp kết hợp các vùng giá trị của "List box" và "Check box". Sắp xếp lại như sau:
- Tiếp tục điền giá trị cho cột "Radio button" theo cách tương tự như trên. "Radio button" có thể lấy 2 giá trị: "ON" hoặc "OFF"
- Kiểm tra nhằm đảm bảo rằng tất cả các cặp giá trị đều được cover như trong bảng kết quả dưới đây.
Phương pháp này có các ưu, nhược điểm như sau:
- Ưu điểm:
- Có thể xét được hết các trường hợp đầu vào, kể cả trường hợp kết hợp ngẫu nhiên các cặp giá trị của người dùng.
- Chúng ta có thể dựa vào các yêu cầu của chương trình để tạo ra các bộ giá trị kiểm thử phù hợp.
- Nhược điểm:
- Khi số lượng giá trị của mỗi tham số đầu vào tăng sẽ kéo theo sự tăng nhanh số lượng các trường hợp cần kiểm thử.
- Và vì không phải là kiểm tra tất cả các trường hợp nên vẫn có khả năng xảy ra lỗi trong việc kết hợp các giá trị đôi khi không xảy ra.
Hiện nay đang có sẵn rất nhiều Tools hỗ trợ Pairwise Testing, bạn có thể tham khảo tại link sau: http://www.pairwise.org/tools.asp và chọn cho mình một Tool phù hợp. Biết có nhiều tool hỗ trợ như vậy thì việc gì chúng ta phải vất vả làm thủ công nhỉ?
Đơn giản là các tool này đều chỉ hỗ trợ trên hệ điều hành Windows mà thôi. Nên trong trường hợp hệ điều hành của bạn là Ubuntu hay bất kỳ hệ điều hành nào khác Windows thì biết cách liệt kê thủ công như trên lại tương đối hữu ích.
Chúc các bạn ứng dụng được Pairwise testing vào công việc hàng ngày của mình một cách hiệu quả!
Bài viết có sử dụng thông tin tham khảo từ link: http://www.tutorialspoint.com/software_testing_dictionary/pairwise_testing.htm