You are on page 1of 68

&

VC Chương 1: Tổng quan về kiểm thử


BB

1 1.1. Kiểm thử

2 1.2. Ca kiểm thử - test case

3 1.3. Các kỹ thuật kiểm thử hộp đen

1
&
VC 1.1. Các thuật ngữ và định nghĩa cơ bản về kiểm thử
BB

 Lỗi (Error): Lỗi là những vấn đề mà con người mắc phải


trong quá trình phát triển các sản phẩm phần mềm
 Sai (Fault): Sai là kết quả của lỗi
 Thất bại (Failure): Thất bại xuất hiện khi một lỗi được
thực thi
 Sự cố (Incident): Khi thất bại xuất hiện, nó có thể hiển thị
hoặc không. Sự cố là triệu chứng liên kết với một thất
bại và thể hiện cho người dùng hoặc người kiểm thử về
sự xuất hiện của thất bại này.

2
&
VC 1.1. Các thuật ngữ và định nghĩa cơ bản về kiểm thử
BB

 Kiểm chứng (verification): là quá trình để đảm bảo rằng


một sản phẩm phần mềm thỏa mãn đặc tả của nó
 Thẩm định (validation): là quá trình để đảm bảo rằng
sản phẩm đáp ứng được yêu cầu của người dùng
(khách hàng).
 Kiểm thử phần mềm là một quy trình kiểm chứng để
đánh giá và tăng cường chất lượng của sản phẩm phần
mềm. Quy trình này gồm hai công việc chính là phân
tích tĩnh và phân tích động.

3
&
VC 1.1. Các thuật ngữ và định nghĩa cơ bản về kiểm thử
BB

 Phân tích tĩnh: tiến hành dựa trên việc khảo sát các tài
liệu như: tài liệu đặc tả nhu cầu người dùng, mô hình phần
mềm, hồ sơ thiết kế và mã nguồn phần mềm.
 Phân tích động: liên quan đến việc thực thi chương trình
để phát hiện những thất bại có thể có của chương trình,
hoặc quan sát các tính chất nào đó về hành vi và hiệu quả
(performance).
 Ca kiểm thử (test case): gồm một tập các dữ liệu đầu vào
và một xâu các giá trị đầu ra mong đợi đối với phần mềm.

4
&
VC
BB
Qui trình testing tổng quát

5
&
VC 1.1. Các thuật ngữ và định nghĩa cơ bản về kiểm thử
BB

 Các mức kiểm thử

6
&
VC 1.2. Ca kiểm thử - test case
BB

 Vòng đời kiểm thử

7
&
VC 1.2. Ca kiểm thử - test case
BB

 Cái gì cần đưa vào các ca kiểm thử?


 Đầu vào:
o Tiền điều kiện (pre-condition): tức là điều kiện cần thỏa
mãn trước khi tiến hành ca kiểm thử
o Dữ liệu đầu vào thực sự: được xác định bởi phương pháp
kiểm thử.
 Đầu ra mong đợi:
o Hậu điều kiện (post-condition)
o Dữ liệu đầu ra thực sự

8
&
VC 1.2. Ca kiểm thử - test case
BB

 Thông tin về một ca kiểm thử tiêu biểu.


• Chỉ số của ca kiểm thử
• Mục đích
• Tiền điều kiện
• Đầu vào
• Đầu ra mong đợi
• Hậu điều kiện
• Lịch sử thực hiện ca kiểm thử:
Ngày Kết quả thực tế Phiên bản Kiểm thử viên

9
&
VC 1.2. Ca kiểm thử - test case
BB

 Các sai lầm về đầu vào/ đầu ra

NMLT - Hàm (Function) 10


&
VC 1.2. Ca kiểm thử - test case
BB

 Các sai lầm về logic

11
&
VC 1.2. Ca kiểm thử - test case
BB

 Các sai lầm về tính toán

12
&
VC 1.2. Ca kiểm thử - test case
BB

 Các sai lầm về giao diện

13
&
VC 1.2. Ca kiểm thử - test case
BB

 Các sai lầm về dữ liệu

NMLT - Hàm (Function) 14


&
VC
BB
Kiểm tra đk trước và đk sau
 Xác định những thuộc tính cần đi trước ( đk trước) và sau (đk sau)
mã nguồn đc thi hành
 Ví dụ : các giá trị đầu vào phải thuộc 1 phạm vi cho trước
double avg( double a[], int n) {
int i; double sum=0.0;
for ( i = 0; i<n; i++)
sum+=a[i];
return sum/n;
}
Nếu n=0 ?, nếu n<0 ?
Có thể thay : return n <=0 ? 0.0: sum/n;

Tháng 11/1998, chiến hạm Yorktown bị chìm : nhập vào giá trị 0,
Chương trình không kiểm tra dữ liệu nhập dẫn đến chia cho 0, và
lỗi làm tầu rối loạn, hệ thống đẩy ngưng hoạt động, tàu chìm !!!
15
15
&
VC 1.2. Ca kiểm thử - test case
BB

 Xác định các ca kiểm thử : có 2 cách tiếp cận


 Kiểm thử hàm:
o Hay còn gọi là kiểm thử chức năng hay kiểm thử hộp đen -
black-box testing)
 Kiểm thử cấu trúc
o Hay còn gọi là kiểm thử hộp trắng - white-box testing

16
&
VC 1.2. Ca kiểm thử - test case
BB

 Kiểm thử hàm:


o Xác định các ca kiểm thử: dựa vào đặc tả của phần
mềm cần kiểm thử
o Độc lập với việc phần mềm được cài đặt => khi cài đặt
thay đổi thì các ca kiểm thử vẫn dùng được
o Các ca kiểm thử được phát triển song song và độc lập
với việc cài đặt hệ thống
o Ưu điểm: rút gọn được thời gian phát triển của dự án
o Nhược điểm: các ca kiểm thử có thể dư thừa đáng kể.
 Kiểm thử cấu trúc
o Hay còn gọi là kiểm thử hộp trắng - white-box testing

17
&
VC 1.2. Ca kiểm thử - test case
BB

 Kiểm thử cấu trúc


o Dựa trên việc cài đặt của hàm để xác định ca kiểm thử.
o Ưu điểm: Do có cơ sở lý thuyết mạnh, kiểm thử cấu trúc
cho phép định nghĩa chính xác và sử dụng các độ đo về độ
bao phủ => cho phép khẳng định tường minh phần mềm
đã được kiểm thử tới mức nào và giúp cho việc quản lý
quá trình kiểm thử tốt hơn.
o Nhược điểm: rất khó để xác định các lỗi liên quan đến các
hành vi đã được đặc tả nhưng không được lập trình

18
&
VC 1.3. Các kỹ thuật kiểm thử hộp đen
BB

1.3.1 Kiểm thử giá trị biên (boundary testing)


là một trong những kỹ thuật được áp dụng phổ biển nhất
trong kiểm thử hàm
Coi một chương trình là một hàm toán học:
Đầu vào của chương trình  các tham số của hàm
Đầu ra của chương trình  giá trị trả về của hàm

19
&
VC 1.3.1 Kiểm thử giá trị biên (boundary testing)
BB

o Hàm toán học là ánh xạ:


Miền xác định -> Miền giá trị của hàm

=> Tập trung vào các giá trị biên và cạnh biên của
hai miền đầu vào và đầu ra này của hàm để xây
dựng các ca kiểm thử.
oBiên đầu ra tức là chúng ta cho các kết quả
mong đợi nằm ở trên biên và cạnh biên đầu ra.

20
&
VC 1.3.1 Kiểm thử giá trị biên (boundary testing)
BB

o Hàm y = f(x1,x2) với x1,x2,y ∈N


là một hàm toán học của một
chương trình.
o Thông thường x1 và x2 có
miền xác định thể hiện bằng
các biên.
o Ví dụ: a ≤ x1 ≤ b và c ≤ x2 ≤ d
trong đó a,b,c,d là các hằng
số nào đó.

21
&
VC 1.3.1 Kiểm thử giá trị biên (boundary testing)
BB

 Thường lấy năm ca kiểm thử cho


mỗi biến là các giá trị:
- Cực đại (max)
- Cực tiểu (min)
- Các giá trị cạnh chúng trong miền
xác định (gọi là cận biên hoặc cạnh
biên min+, max- )
- Giá trị ở giữa miền xác định đại diện
cho giá trị thông thường (nom).

22
&
VC 1.3.1 Kiểm thử giá trị biên (boundary testing)
BB

 Xây dựng:
Bc1: Lấy một bộ giá trị nom của các biến
Bc2: Lần lượt thay mỗi giá trị đó của từng biến
bằng giá trị biên và cận biên để tạo ra ca kiểm
thử mới
Ví dụ:
(x1nom, x2nom) (x1min, x2nom)
(x1min+, x2nom) (x1max−, x2nom)
(x1max, x2nom) (x1nom, x2min)
(x1nom, x2min+) (x1nom, x2max−)
(x1nom, x2max) 23
&
VC 1.3.1 Kiểm thử giá trị biên (boundary testing)
BB

 Tổng quát:
o Hàm n biến số
o Mỗi biến có các giá trị biên và cận biên khác
nhau
=> có 1+4n ca kiểm thử
 Tùy theo miền xác định của biến mà số lượng
này thực tế có thể ít hơn.
o Ví dụ: biến x ∈ N | x ∈ [1,2] thì không có cận
biên và không có giá trị ở giữa.

24
&
VC 1.3.1 Kiểm thử giá trị biên (boundary testing)
BB
 Lưu ý:
- Trong thực tế, miền xác định của các biến không chỉ là
các miền số, nên chúng ta cần có các vận dụng thích
hợp để xác định các giá trị biên tinh tế hơn
Ví dụ 1: Chương trình NextDate biến tháng month ∈ Z
1  month  12.
- Không phải ngôn ngữ lập trình nào cũng cho phép
khai báo miền xác định của biến trong khoảng này.
- Giải pháp: có thể dùng kiểu liệt kê (enumeration) để
khai báo các tháng bằng tên Januray, ..., December
=> có giá trị biên và cận biên.

25
&
VC 1.3.1 Kiểm thử giá trị biên (boundary testing)
BB

o Ngôn ngữ lập trình Java: dùng biến kiểu nguyên int và
không khai báo miền giá trị cho chúng được, thì
chúng ta sẽ phải dùng các cận của kiểu làm biên
(Interger.MIN_VALUE và Interger.MAX_VALUE).
o Trong C, cũng có các khoảng giá trị này.
o Biến kiểu Boolean: các giá trị của miền chỉ có TRUE
và FALSE, không có cận biên và giá trị ở giữa.

26
&
VC 1.3.1 Kiểm thử giá trị biên (boundary testing)
BB

o Biến kiểu xâu ký tự, mảng, hay danh sách, tập hợp
(collection), có thể dựa vào chiều dài/kích thước để
làm các giá trị biên.
o Các kiểu cấu trúc dữ liệu khác: có thể xây dựng các
giá trị biên và cận biên dựa theo các thành phần của
cấu trúc.

27
&
VC 1.3.1 Kiểm thử giá trị biên (boundary testing)
BB

 Ưu điểm:
o Đơn giản, có thể tự động hóa việc sinh các ca kiểm
thử khi chúng ta đã xác định được các biên của các
biến.
o Với nhiều kiểu dữ liệu cơ bản có sẵn chúng ta cũng
có thể xây dựng sẵn các biên này để sử dụng.
 Nhược điểm:
o Các biến có quan hệ phụ thuộc nào đó: phương pháp
này dễ tạo ra các ca kiểm thử không hợp lý, vì các giá
trị cực đại, cực tiểu có thể không kết hợp với nhau để
tạo thành ca kiểm thử hợp lệ.

28
&
VC 1.3.1 Kiểm thử giá trị biên (boundary testing)
BB

o Ví dụ: x1 ∈ [1,100],x2 ∈ [1,100] và x1 + x2 ≤ 120


thì một biến đạt cực đại sẽ không thể kết hợp với một
biến khác ở giá trị trung bình.
- Nếu (x1nom, x2nom) = (50,50)
thì (x1max, x2nom) = (100,50).
Ca kiểm thử này không thỏa mãn quan hệ x1 + x2 ≤ 120.

29
&
VC 1.3.1 Kiểm thử giá trị biên (boundary testing)
BB

 Nhược điểm:
o Không quan tâm đến tính chất, đặc trưng của hàm,
đồng thời cũng không xét đến ngữ nghĩa của biến hay
quan hệ giữa các biến
=> khi áp dụng cần xác định sơ bộ các tính chất trên
của hàm có không.

30
&
VC Một số dạng kiểm thử giá trị biên
BB

 Kiểm thử giá trị biên mạnh


 Mở rộng của kiểm thử giá trị biên
bằng việc bổ sung các giá trị cận
biên bên ngoài miền xác định.
o Cực đại (max)
o Cực tiểu (min)
o Các giá trị cạnh chúng trong miền
xác định (gọi là cận biên hoặc cạnh
biên min+, max- )
o Giá trị ở giữa miền xác định đại diện
cho giá trị thông thường (nom).
o Các giá trị cận biên ở ngoài miền
xác định là max+ và min−

31
&
VC Một số dạng kiểm thử giá trị biên
BB

 Kiểm thử giá trị biên tổ hợp


 Mở rộng với hai hoặc với tất cả các
biến đều được đẩy đến giá trị biên
và cận biên thì chúng ta sẽ tạo ra
được các ca kiểm thử giá trị biên tổ
hợp.

x2min x2min+ x2nom x2max− x2max


x1min (x1min,x2min) (x1min,x2min+) ...
x1min+ (x1min+,x2min) (x1min+,x2min+) ...
x1nom (x1nom, x2min) (x1nom,x2min+) ...
x1max− (x1max−,x2min) (x1max−, x2min+) ...
x1max (x1max,x2min) (x1max, x2min+) .... 32
&
VC Một số dạng kiểm thử giá trị biên
BB

 Kiểm thử giá trị biên tổ hợp


o Số ca kiểm thử: 5n
o Tương tự: từ kiểm thử giá trị biên mạnh với bộ 7 giá trị, mở
rộng kiểm thử biên tổ hợp => có 7n ca kiểm thử
 Kiểm thử các giá trị đặc biệt
o Dựa trên:
 Hiểu biết về bài toán
 Miền ứng dụng đưa ra các giá trị kiểm thử.
 Kinh nghiệm cá nhân

33
&
VC Một số dạng kiểm thử giá trị biên
BB

 Kiểm thử các giá trị đặc biệt


o Ưu điểm:
 Phát hiện lỗi nhanh, không tốn nhiều công sức
o Nhược điểm:
 Mức độ hiệu quả phụ thuộc nhiều vào khả năng của
người kiểm thử
o Ví dụ:
 Dựa trên hiểu biết về số ngày của các tháng trong một
năm
 kiểm thử: 28/02 và 29/02 ở cả năm nhuận và năm
thường.
 Số lượng ca kiểm thử ít hơn nhiều so với kiểm thử giá trị
biên và cũng hiệu quả trong việc kiểm tra lỗi. 34
&
VC Ví dụ: Kiểm thử giá trị biên bài toán xét tam giác
BB
Điều kiện: các cạnh 1 a,b,c  200

35
&
VC 1.3.1 Kiểm thử giá trị biên (boundary testing)
BB

 Kinh nghiệm:
o Áp dụng cho các hàm có các biến đầu vào độc lập,
không phụ thuộc vào nhau
o Khi giả định một khiếm khuyết trong chương trình sẽ
gây ra lỗi ngay thì sử dụng kiểm thử biên thông
thường.
o Trái lại khi lỗi xuất hiện khi có hơn một khiếm khuyết
trong chương trình thì sử dụng kiểm thử giá trị biên
mạnh.

36
&
VC
BB
Boundary Testing Example

 VD : đọc 1 dòng từ stdin và đưa vào mảng ký tự


int i;
char s[MAXLINE];
for (i=0; (s[i]=getchar()) != '\n' && i < MAXLINE-1; i++)
;
s[i] = '\0';
printf("String: |%s|\n", s);

 Boundary conditions
 Dòng rỗng -Input starts with '\n'
• In ra empty string (“\0”) => in ra “||” , ok
 Nếu gặp EOF - End of file trước '\n‘
• Tiếp tục gọi getchar() và lưu ӱ vào s[i]
 Nếu gặp ngay EOF (empty file)
• Tiếp tục gọi getchar() và lưu ӱ vào s[i]
37
37
VC
& Boundary Testing Example
BB
(cont.)
int i;
char s[MAXLINE];
for (i=0; (s[i]=getchar()) != '\n' && i < MAXLINE-1; i++)
;
s[i] = '\0';
printf("String: |%s|\n", s);

 Boundary conditions (tt)


 Dòng chứa đúng MAXLINE-1 ký tự
• In ra đúng, với ‘\0’ tại s[MAXLINE-1]
 Dòng chứa đúng MAXLINE ký tự
• Ký tự cuối cùng bị ghi đè, và dòng mới không bao
giờ đc đọc
 Dòng dài hơn MAXLINE ký tự
• 1 số ký tự, kể cả newline, không đc đọc và sót lại
trong stdin 38
38
VC
& Boundary Testing Example
BB
(cont.)
 Rewrite the code
int i;
char s[MAXLINE];
for (i=0; i<MAXLINE-1; i++)
if ((s[i] = getchar()) == '\n')
break;
s[i] = '\0';
 Another boundary condition: EOF

for (i=0; i<MAXLINE-1; i++)


if ((s[i] = getchar()) == '\n' || s[i] == EOF)
break;
s[i] = '\0';
 What are other boundary conditions?
 Nearly full
 Exactly full This is wrong.
 Over full Why?

39
39
VC
& Boundary Testing Example
BB
(cont.)
 Rewrite yet again
for (i=0; ; i++) {
int c = getchar();
if (c==EOF || c=='\n' || i==MAXLINE-1) {
s[i] = '\0';
break;
}
else s[i] = c;
}

There’s still a problem...


Input:
Output:
Four Where’s
score and seven FourØ the ‘d’?
years score anØ
sevenØ
yearsØ
40
40
&
VC
BB
Ambiguity in Specification

 Nếu dòng quá dài, xử lý thế nào?


 Giữ MAXLINE ký tự đầu, bỏ qua phần còn
lại?
 Giữ MAXLINE ký tự đầu + ‘\0’, bỏ qua phần
còn lại?
 Giữ MAXLINE ký tự đầu+’\0’, lưu phần còn
lại cho lần gọi sau của input function?

41
41
&
VC
BB
Ambiguity in Specification

 Có thể phần đặc tả - specification không hề đề


cập khi MAXLINE bị quá
 Có thể người ta không muốn dòng dài quá
giới hạn trong mọi trường hợp
 Đạo đức: kiểm tra đã phát hiện ra một vấn đề
thiết kế, thậm chí có thể là một vấn đề đặc
điểm kỹ thuật !
 Quyết định phải làm gì
 Cắt những dòng quá dài?
 Lưu phần còn lại để đọc như 1 dòng mới?
42
42
&
VC
BB
Vấn đề đạo đức

 Phức tạp, các trường hợp ranh giới lộn xộn


thường là triệu chứng của việc thiết kế tồi hay
mô tả đặc điểm kỹ thuật tồi
 Xóa bỏ đặc tả nếu bạn có thể
 Nếu không thể sửa specification, thì hãy sửa
code

43
43
&
VC
BB 1.3.2 Kiểm thử lớp tương đương

 Lớp tương đương


o Ý tưởng: chia miền đầu vào thành các phần sao cho
các giá trị trong mỗi phần có tác động tương tự với
chương trình
 chỉ cần lấy một giá trị bất kỳ trong mỗi miền con để
xây dựng bộ kiểm thử.

44
&
VC
BB 1.3.2 Kiểm thử lớp tương đương

 Lớp tương đương


o Kiểm thử lớp tương đương : là phương pháp chia miền
dữ liệu kiểm thử thành các miền con sao cho dữ liệu
trong mỗi miền con có cùng tính chất đối với chương
trình
 chỉ cần chọn một phần tử đại diện của mỗi miền con này
làm bộ dữ liệu kiểm thử.
o Các miền con này chính là các lớp tương đương.

45
&
VC
BB 1.3.2 Kiểm thử lớp tương đương

 Lớp tương đương


Ví dụ: trong bài toán Triangle
Một lớp tương đương là tất cả các tam giác đều: chọn một
ca kiểm thử là (5, 5, 5)
=> kết luận tương tự về kết quả kiểm thử cho các ca kiểm
thử khác cùng lớp như (6, 6, 6) hay (100, 100, 100).

46
&
VC
BB 1.3.2 Kiểm thử lớp tương đương

 Lớp tương đương


Làm sao xác định được các lớp tương đương của miền đầu
vào ?
 Phân tích mã nguồn của chương trình
 Hoặc dựa vào hiểu biết về chức năng của chương trình
=> cách cài đặt.

=> các lớp tương đương theo kinh nghiệm và trực giác

47
&
VC
BB 1.3.2 Kiểm thử lớp tương đương

 Lớp tương đương


Giả sử chương trình là một hàm với:
o Ba biến a,b,c
o Không gian đầu vào là A,B,C
o Miền tương đương cho mỗi không gian đầu vào:
 A = A1 ∪ A2 ∪ A3
 B = B1 ∪ B2 ∪ B3 ∪B 4
 C = C1 ∪ C2
Ký hiệu phần tử của các miền tương đương: bằng chữ
thường với cùng chỉ số trong các phần
Ví dụ: a1 ∈ A1, b3 ∈ B3 và c2 ∈ C2

48
&
VC
BB Phân loại kiểm thử lớp tương đương
 Kiểm thử lớp tương đương yếu
o Yêu cầu mỗi không gian tương đương có ít nhất một phần
tử xuất hiện trong một ca kiểm thử nào đó
TT a b c
1 a1 b1 c1
2 a2 b2 c2
3 a3 b3 c1
4 a1 b4 c2
o Bộ kiểm thử trên sử dụng một giá trị từ mỗi lớp tương
đương
o Để kiểm tra chúng ta chỉ cần để ý đến các cột
o Ví dụ: cột a có xuất hiện cả a1,a2,a3 của ba miền con của
A, như vậy là đủ. 49
&
VC
BB Phân loại kiểm thử lớp tương đương

 Kiểm thử lớp tương đương yếu


o Số ca kiểm thử tối thiểu = số lớp tương đương lớn nhất
của các miền đầu vào
TT a b c
1 a1 b1 c1
2 a2 b2 c2
3 a3 b3 c1
4 a1 b4 c2
o Ví dụ: số lớp tương đương lớn nhất của các miền đầu
vào =4
o => Số ca kiểm thử tối thiểu chính = 4
50
&
VC
BB Phân loại kiểm thử lớp tương đương

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


o Kết hợp các tổ hợp có thể của các miền tương đương
o Ví dụ: có 3∗4∗2 = 24 tổ hợp tương ứng với 24 ca kiểm
thử
 Xác định các ca kiểm thử tương tự như việc xây dựng
bảng giá trị chân lý cho logic mệnh đề => dễ dàng tự
động hóa
 Tích Đề-các này cho ra một bộ kiểm thử đầy đủ, có tất
cả các khả năng kết hợp của các miền tương đương của
các miền đầu vào.

51
&
VC
BB Phân loại kiểm thử lớp tương đương

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

52
&
VC
BB Phân loại kiểm thử lớp tương đương

 Kiểm thử lớp tương đương đơn giản


o Chia mỗi miền không gian đầu vào thành 2 lớp tương
đương:
• Lớp các giá trị hợp lệ
• Lớp các miền giá trị không hợp lệ
o Ví dụ 1: Nhập vào x >10

Không hợp lệ 10 hợp lệ

o Ví dụ 2: Nhập vào a  x  b

Không hợp lệ a hợp lệ b không hợp lệ


53
&
VC
BB Phân loại kiểm thử lớp tương đương

 Kiểm thử lớp tương đương đơn giản


o Chia mỗi miền không gian đầu vào thành 2 lớp tương
đương:
• Lớp các giá trị hợp lệ
• Lớp các miền giá trị không hợp lệ
o Áp dụng tương tự kiểm thử tương đương mạnh và yếu

54
&
VC
BB Phân loại kiểm thử lớp tương đương

 Kiểm thử lớp tương đương đơn giản


Hai vấn đề:
o Thứ nhất: khi mô tả bài toán không nói rõ các trường hợp
đầu vào không hợp lệ thì kết quả là gì
- Hoặc chỉ đề cập đến một số trường hợp đã biết mà
không xét đến mọi khả năng có thể
o Thứ hai: là một số ngôn ngữ lập trình có hệ thống kiểm
tra kiểu mạnh như Java, C# thì không cần các ca kiểm
thử với giá trị sai kiểu, chỉ kiểm tra dữ liệu không hợp lệ
cùng kiểu
- Các ngôn ngữ lập trình không có kiểm tra kiểu mạnh
=> các lỗi loại này khá phổ biến, cần xét kỹ việc chia
miền đầu vào thành các lớp tương đương.
55
&
VC
BB Các ví dụ kiểm thử lớp tương đương

 Ví dụ 3: Kiểm thử lớp tương đương cho bài toán xét tam giác
Giải pháp 1: Áp dụng lớp tương đương cho đầu ra thay vì đầu vào

Đầu ra: bốn khả năng


 Tam giác đều
 Tam giác cân
 Tam giác thường
 Không phải tam giác

56
&
VC
BB
Các ví dụ kiểm thử lớp tương đương

 Ví dụ 3: Kiểm thử lớp tương đương cho bài toán xét tam giác
Giải pháp 2: Áp dụng lớp tương đương cho đầu vào

D1 = {(a,b,c) | a = b = c}
D2 = {(a,b,c) | a = b,a  c , c < a + b}
D3 = {(a,b,c) | a = c,a  b, b < a + c}
D4 = {(a,b,c) | b = c,a  b , a < b + c}
D5 = {(a,b,c) | a  b,a  c ,b  c, a < b + c, b < a + c, a < b + c}
D6 = {(a,b,c) | a > b + c}
D7 = {(a,b,c) | b > a + c}
D8 = {(a,b,c) | c > a + b} 57
&
VC
BB Các ví dụ kiểm thử lớp tương đương

 Ví dụ 3: Kiểm thử lớp tương đương cho bài toán xét tam giác
Giải pháp 2: Áp dụng lớp tương đương cho đầu vào

TT a b c Kết luận
1 5 5 5 Tam giác đều
2 2 2 3 Tam giác cân
3 2 3 2 Tam giác cân
4 3 2 3 Tam giác cân
5 3 4 5 Tam giác thường
6 4 1 2 Không phải tam giác
7 1 4 2 Không phải tam giác
8 1 2 4 Không phải tam giác

58
&
VC
BB
Các ví dụ kiểm thử lớp tương đương

 Ví dụ 3: Kiểm thử lớp tương đương cho bài toán xét tam
giác
o Áp dụng tiếp kiểm thử tương đương mạnh để tìm ra các
ca kiểm thử
o Không áp dụng kiểm thử lớp tương đương đơn giản vì
sao?
o Vì chia thành miền giá trị các số dương và không dương
sẽ không kiểm thử được các tính chất của tam giác.

59
&
VC
BB
Các ví dụ kiểm thử lớp tương đương

 Ví dụ 4: Kiểm thử lớp tương đương cho bài toán


NextDay
Hàm NextDay gồm:
o Ba biến day, month, year
o Không gian đầu vào là
1 <= day <= 31
1 <= month <= 12
1812 <= year <= 2012

60
&
VC
BB
Các ví dụ kiểm thử lớp tương đương

Ví dụ 4: Kiểm thử lớp tương đương cho bài toán NextDay


oMiền tương đương cho mỗi không gian đầu vào theo:
Kiểm thử lớp tương đương đơn giản:
Các lớp tương đương hợp lệ là:
D1 = {day | 1 <= day <= 31}
M1 = {month | 1 <= month <= 12}
Y 1 = {year | 1812 <= year <= 2012}
Các lớp tương đương không hợp lệ là:
D2 = {day | day < 1}
D3 = {day | day > 31}

M2 = {month | month < 1}


M3 = {month | month > 12}

Y 2 = {year | year < 1812}


Y 3 = {year | year > 2012}
61
&
VC
BB
Các ví dụ kiểm thử lớp tương đương

 Ví dụ 4: Kiểm thử lớp tương đương cho bài toán


NextDay
Các ca kiểm thử lớp tương đương đơn giản

62
&
VC
BB
Các ví dụ kiểm thử lớp tương đương

 Ví dụ 4: Kiểm thử lớp tương đương cho bài toán


NextDay
Các ca kiểm thử tương đương yếu

63
&
VC
BB
Các ví dụ kiểm thử lớp tương đương

 Ví dụ 4: Kiểm thử lớp tương đương cho bài toán


NextDay
Các ca kiểm thử tương đương mạnh (36 test case)

64
&
VC
BB
Các ví dụ kiểm thử lớp tương đương

 Ví dụ 4: Kiểm thử lớp tương đương cho bài toán


NextDay
Các ca kiểm thử tương đương mạnh (36 test case)

65
&
VC 1.3.2 Kiểm thử lớp tương đương
BB

 Kinh nghiệm:
o Kiểm thử lớp tương đương đơn giản kém kiểm thử
lớp tương đương yếu kém kiểm thử lớp tương đương
mạnh.
o Sử dụng kiểm thử tương đương đơn giản khi ngôn
ngữ không có kiểm tra kiểu mạnh.
o Nếu cần kiểm tra ngoại lệ: nên mở rộng kiểm thử lớp
tương đương với các lớp giá trị ngoài miền xác định.

66
&
VC 1.3.2 Kiểm thử lớp tương đương
BB

 Kinh nghiệm:
o Kiểm thử lớp tương đương phù hợp với dữ liệu đầu
vào có miền giá trị là khoảng và hữu hạn.
o Kiểm thử lớp tương đương kết hợp với kiểm thử giá
trị biên sẽ tốt hơn.
o Nên dùng kiểm thử lớp tương đương với các chương
trình phức tạp.

67
&
VC 1.3.2 Kiểm thử lớp tương đương
BB

 Kinh nghiệm:
o Nên dùng kiểm thử lớp tương đương mạnh khi các
biến là độc lập. Khi các biến phụ thuộc nhau thì dễ tạo
ra các ca kiểm thử vô lý.
o Cần một số lần thử để tìm xác định các lớp tương
đương đúng. Khi các lớp tương đương không hiển
nhiên và dễ thấy thì ta có thể áp dụng chiến thuật thử
và đoán để xác định dần.

68

You might also like