Saturday, April 2, 2022

Kiểm thử lớp tương đương

 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;
}

 Trong ví dụ trên, nếu dựa trên việc phân tích mã nguồn, ta thấy rằng, tham số đầu vào có thể chia làm các lớp sau của giá trị tham số [year]:

+ 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)

Kiểm thử cặp đôi thông minh

  Kiểm thử cặp đôi thông minh (pairwise testing) là một trường hợp đặc biệt của phương pháp kiểm thử tổ hợp. Trong phương pháp kiểm thử cặp ...