Kiểm thử lớp tương đương còn được biết đến với tên gọi kiểm thử phân vùng tương đương. Ý tưởng chính của phương pháp này là phân chia miền giá trị đầu vào của mỗi tham số của hàm thành những lớp giá trị mà mỗi giá trị trong đó có tác động tương đương nhau đến hàm cần kiểm thử. Với cách làm như vậy, ta hy vọng rằng những giá trị của biến đầu vào trong một lớp tương đương có thể gây ra những lỗi giống nhau đối với hàm. Do đó, thay vì cần kiểm thử nhiều giá trị cho mỗi vùng tương đương, ta chỉ cần kiểm thử hàm với một giá trị trong vùng đó thôi.
Vấn đề
của ta bây giờ là làm sao tìm được các lớp tương đương của tham số đầu vào để có
thể sinh được những ca kiểm thử tương ứng. Có hai phương pháp để làm việc này:
- Ta có thể dựa vào việc phân tích mã nguồn, hoặc
- Dựa vào yêu cầu đầu vào của hàm.
Xét
ví dụ sau về hàm kiểm tra một năm có phải là năm nhuận hay không:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | int leapYear(int year) { if (year % 4 == 0) { if (year % 100 == 0) { if (year % 400 == 0) return 1; else return 0; } else return 1; } else return 0; } |
+ Lớp
chia hết cho 4 nhưng không chia hết cho 100: kết quả của hàm là năm nhuận
+ Lớp
chia hết cho 4 và chia hết cho 100, nhưng không chia hết cho 400: kết quả của hàm
là năm KHÔNG nhuận
+ Lớp
chia hết cho 4 và chia hết cho 100 và chia hết cho 400: kết quả của hàm là năm nhuận
+ Lớp
không chia hết cho 4: kết quả của hàm là năm KHÔNG nhuận
Nếu
dựa vào yêu cầu đầu vào của hàm, ta cần dựa vào thực tế khi nào một năm được gọi
là năm nhuận. Trong tình huống này, ta cũng có những lớp tương đương tương tự
như đã phân tích từ mã nguồn ở trên.
Phân loại kiểm thử lớp tương đương
Xét một hàm có hai đầu vào là A và B, trong đó A có các lớp tương đương A1 và A2, B có các lớp tương đương B1, B2, và B3. Giả sử các giá trị a1 và a2 tương ứng thuộc A1 và A2. Các giá trị b1, b2, và b3 tương ứng thuộc B1, B2, và B3. Ta có một số phân loại kiểm thử lớp tương đương sau:
- Kiểm thử lớp tương đương yếu
Trong kiểm thử lớp tương đương yếu, ta chỉ yêu cầu giá trị mỗi miền tương đương của các tham số đầu vào xuất hiện trong một ca kiểm thử nào đó là đủ. Trong ví dụ trên, ta chỉ cần 3 ca kiểm thử là đã có thể thỏa mãn yêu cầu này. Ba ca kiểm thử này là: (a1, b1), (a2, b2), (a1, b3). Ta cũng có thể sử dụng ba ca kiểm thử sau để thỏa mãn yêu cầu này: (a1, b1), (a2, b2), (a2, b3).
- Kiểm thử lớp tương đương mạnh
Trong kiểm thử lớp tương đương mạnh, ta cần tổ hợp các giá trị của những lớp tương đương của các biến đầu vào để có thể đáp ứng được yêu cầu của loại kiểm thử này. Trong ví dụ trên, ta cần tổng số 2x3 = 6 ca kiểm thử để thỏa mãn yêu cầu kiểm thử lớp tương đương mạnh. Sáu ca kiểm thử này như sau: (a1, b1), (a1, b2), (a1, b3), (a2, b1), (a2, b2), (a2, b3).
- Kiểm thử lớp tương đương đơn giản
Trong
kiểm thử lớp tương đương đơn giản, ta chỉ chia miền giá trị của tham số đầu vào
của hàm thành hai lớp tương đương là lớp giá trị hợp lệ và lớp giá trị không hợp
lệ. Trong ví dụ với hàm [leapYear] đã đề cập ở trên, miền giá trị hợp lệ là những
năm lớn hơn 0 (year > 0). Trong khi đó, miền giá trị không hợp lệ là những năm
nhỏ hơn hoặc bằng 0 (year <= 0). Sau khi có lớp tương đương cho mỗi tham số đầu
vào, ta có thể áp dụng các phương pháp kiểm thử lớp tương đương mạnh và yếu đã
trình bày ở trên.
Lý
do để ta có phân loại kiểm thử lớp tương đương đơn giản này là đa phần yêu cầu đầu
vào của phần mềm không chỉ rõ miền giá trị hợp lệ của các tham số đầu vào. Chỉ
khi bắt tay vào kiểm thử hoặc lập trình, ta mới có thể phát hiện những trường hợp
cụ thể mà chương trình cần xử lý. Nguyên nhân thứ hai là ta cần có những xử lý
kiểu hợp lệ để thông báo tới người dùng. Từ đó, chương trình cần có những xử lý
để có sự tương tác tốt với người dùng và tránh các lỗi có thể xảy ra.
Chú ý:
Trong
thực tế, việc kiểm thử lớp tương đương không chỉ được áp dụng cho việc kiểm thử
với các giá trị tham số đầu vào của hàm. Việc này còn được áp dụng với việc kiểm
thử cho các giá trị đầu ra của hàm.
(https://www.facebook.com/thayvietkiemthu/posts/119310270701200)