You are on page 1of 101

Kiểm thử hộp đen và

Kiểm thử hộp trắng


GV. Nguyễn Đức Anh

1
Nhóm nghiên cứu
● PGS. TS. Phạm Ngọc Hùng Chủ đề
● ThS. Nguyễn Đức Anh ● Sinh ca kiểm thử tự động
● ThS. Đỗ Minh Khá ● Phân tích sự thay đổi
● SV. Vũ Hà Minh Trang ● Phân tích mã nguồn
● SV. Nguyễn Xuân Lâm C/C++/Java/Python ...
● SV. Phan Đức Mạnh ● Kiểm thử giao diện
● SV. Lê Bá Trường ● Kiểm thử mạng học sâu
● SV. Trần Thị Thúy ● Sinh dữ liệu ảnh có nhiễu tự nhiên
● SV. Trần Tuấn Nghĩa ● Nâng cao chất lượng cho mạng học
● SV. Đỗ Minh Sáng sâu

2
Nỗi niềm của người phát triển

Đặc tả Chương
(mong đợi) S P trình (Thực
tế)

3
Quy trình phát triển (QTPT) phần mềm

● Mục tiêu: phát triển phần mềm có chất


lượng cao trong thời gian nhanh
● QTPT cổ điển nhất: thác nước
● QTPT hiện đại: Scrum, Agile (theo tập
nguyên tắc Agile)

4
QTPT thác nước (1956)

Kiểm thử
ở đâu?

5
QTPT Scrum (1986)

Kiểm thử
ở đâu?

Đọc thêm: https://scrumguides.org/scrum-guide.html#scrum-master 6


Chứng chỉ Scrum master - Cơ hội nghề nghiệp

7
Bốn mức kiểm thử

8
Nỗi niềm của tester

Đặc tả Chương trình


(mong đợi) S P (Thực tế)

T Tập kiểm
thử
9
Chứng chỉ ISTQB

● International Software
Testing Qualifications Board
● ISTQB Certified Tester: kiểm
thử viên được cấp chứng chỉ
bởi ISTQB
● 1 triệu kì thi đã diễn ra
● 721,000 chứng chỉ được cấp

10
Chứng chỉ kiểm thử – Cơ hội nghề nghiệp

11
Làm rõ khái niệm
● Đầu ra kì vọng (test oracle)
Khởi động! ● Ca kiểm thử (test case)
● Tập kiểm thử (test suite)
● Mã kiểm thử (test script)?

12
Ca kiểm thử (Test case) Tập kiểm thử (Test suite)
Gồm
● Giá trị đầu vào
● Điều kiện thực thi
● Đầu ra kì vọng (test oracle)

Ví dụ: ca kiểm thử cho hàm UCLN


● Input: (5, 3)
● Điều kiện thực thi: không
● Đầu ra kì vọng: 1

13
Test script (mã kiểm thử)

14
Các phương
pháp kiểm thử

15
Trong bài học này ...

(Specification-based testing) (Structure-based testing)


16
Kiểm thử hộp đen vs Kiểm thử hộp trắng

S P S P

Kiểm thử hộp đen Kiểm thử hộp trắng

17
Kiểm thử hộp đen

18
Kiểm thử hộp đen là gì?
● Chỉ quan tâm đầu vào và đầu ra của đối tượng kiểm thử
● Không quan tâm mã nguồn
● Còn gọi là “Specification-based testing”
● Người kiểm thử chỉ quan tâm phần mềm làm gì (what), không quan tâm làm như
thế nào (how)

19
Đầu vào và đầu ra

Đối tượng Kĩ năng


kiểm thử lập trình

PP kiểm
thử Tìm ca Viết test Báo
kiểm thử Thực thi
script cáo

Kinh
nghiệm
Đầu ra
mong đợi

Đặc tả

20
Đề cương ISTQB

21
Các kĩ thuật phổ biến
● Kiểm thử phân hoạch tương đương
(Equivalence Class Partitioning)
● Kiểm thử giá trị biên (Boundary Value
Analysis)
● Kiểm thử bảng quyết định (Decision
Table Testing)

22
Kiểm thử phân hoạch tương đương
(Equivalence Class Partitioning)

23
Kiểm thử phân hoạch tương đương (ECT) là gì?

Tư tưởng
● Tìm các phân hoạch tương đương
● Sinh ca kiểm thử từ các phân hoạch này

Mọi giá trị trong từng phân hoạch tương đương PHẢI có
cùng hành vi

EC = EC1 ∪ EC2 ∪ … ∪ ECn


Trong đó,
EC1, EC2, …, ECn là phân hoạch tương đương
24
Quy trình

1. Tìm các phân hoạch tương đương (sử dụng đặc


tả)
○ Nếu một phân hoạch tương đương có thể chia nhỏ hơn
(tức tồn tại hai giá trị khiến chương trình có hành vi khác
nhau) -> hãy chia nhỏ tiếp
2. Viết ca kiểm thử

25
Phân hoạch tương đương

● Miền giá trị đầu vào của từng tham số/biến/thuộc tính sẽ được chia
thành các phân hoạch tương đương
○ Giá trị hợp lệ
○ Giá trị không hợp lệ

26
Lưu ý

Đối với phân hoạch không hợp lệ, chúng


nên kiểm thử một cách độc lập
● Không nên kết hợp giá trị ở các phân
hoạch không hợp lệ với nhau

27
Ví dụ

Đặc tả ghi rằng:

Cửa hàng niêm yết giá (gọi là price)


như sau:

● < 15000 đô: không giảm giá


● [15000 đô, 20000 đô]: giảm 5% EC = ? ∪ ? ∪ … ∪ ?
● (20000 đô, 25000 đô): giảm 7%
● >= 25000 đô: giảm 8.5%

Phương thức computePrice(int


price)

28
Ví dụ
B1: Tìm miền hợp lệ
EC1
Cửa hàng niêm yết giá (gọi là price)
như sau:
EC2 • < 15000 đô: không giảm giá
• [15000 đô, 20000 đô): giảm 5%
• [20000 đô, 25000 đô): giảm 7%
EC3
• >= 25000 đô: giảm 8.5%

EC4 Phương thức computePrice(int


dollar)
29
Ví dụ
B2: Xét miền hợp lệ

30
Ví dụ
Chỉ cần chọn 1 giá trị đại diện (representative) cho mỗi miền hợp lệ

31
Ví dụ
B3: Xét miền không hợp lệ
● Cần quan tâm đến những giá trị ngoài miền hợp lệ
● Giá trị 1000000 được chọn ngẫu nhiên

32
Ví dụ
Chọn giá trị ngẫu nhiên

33
Ví dụ

● Như vậy tổng số ca kiểm thử = 4 hợp lệ +


2 không hợp lệ = 6
● Liệu đã đủ?

34
Thực hành
int sum(int a, int b){
Đặc tả: a và b có kiểu
return a + b; int
}

bool isTriangle(int a, int b, int c)


{
// check condition
if (a + b <= c || a + c <= b || b + c <= a)
return false;
else
return true;
}

Đặc tả: a, b, c là số
thực dương 35
Thực hành
int sum(int a, int b){
Đặc tả: a và b có kiểu
return a + b; int
}

bool isTriangle(int a, int b, int c)


{ Đặc tả đã đủ tốt?
// check condition
if (a + b <= c || a + c <= b || b + c <= a)
return false;
else
return true;
}

Đặc tả: a, b, c là số
thực dương 36
Mở rộng ra: Kiểu dữ liệu cấu trúc

● Đối với kiểu dữ liệu số nguyên, xác định phân hoạch tương đương không khó
● Đối với kiểu cấu trúc, ta xử lý thế nào?

37
Ví dụ (hệ thống thật)
Hệ thống VSR-Subsystem DreamCar:
Customer
Với từng đối tượng khách hàng khác
nhau, hệ thống sẽ xử lý khác nhau
-> Mỗi đối tượng khách hàng cần có các
ca kiểm thử tương ứng Retired Working
Student ...
Person Person

Tuy nhiên, nếu đặc tả không chỉ ra sự


khác nhau này
-> một ca kiểm thử là đủ!

38
Hệ thống VSR-Subsystem DreamCar

39
Đặc tả phương thức tính giá xe hơi

40
Cài đặt theo đặc tả

Code đã đủ tốt?

41
Đoạn code này
tốt chưa?
- Chưa comment
- Chưa khai báo
hằng số
- Thụt lề chưa
chuẩn
- Tên biến chưa
thống nhất

42
Liệt kê phân
hoạch hợp
lệ/không hợp lệ

([a là “nhỏ hơn”)

43
Ví dụ

● Số ca kiểm thử
○ Trong miền hợp lệ = 1 × 1 × 1 × 3 × 1 = 3

○ Trong miền không hợp lệ = 2 + 2 + 2 + 2 + 3 = 11

● 18 phân hoạch tương đương -> 14 ca kiểm thử

44
45
Độ phủ phân hoạch

Độ phủ EC =
(số EC thực thi/tổng số EC) × 100%

Ví dụ
● Giả sử vì hạn chế thời gian, 3/14 ca kiểm thử không được thực hiện
● Chỉ có 15 phân hoạch tương đương (EC) được thực thi
● Độ phủ EC = (15/18) × 100% = 83.33%

46
Ưu, nhược điểm

● Giảm thiểu số lượng ca kiểm ● Đặc tả cần mô tả rõ ràng và cụ


thử trong khi đảm bảo kiểm thể ý nghĩa tham số
thử được nhiều trường hợp có ● Cần có kĩ năng phân chia phân
thể hoạch tương đương

47
Kiểm thử giá trị biên
(Boundary Value Analysis)

48
Tại sao cần kiểm thử biên?

● Kinh nghiệm cho thấy Lỗi thường


xảy ra ở biên (của phân hoạch
tương đương)
● Kiểm thử biên là mở rộng của PP
phân hoạch tương đương
● Giá trị lớn nhất và nhỏ nhất của phân
hoạch coi là giá trị biên (Beizer 1990)

49
Biên của phân hoạch tương đương

● Dễ bị hiểu nhầm về biên do


○ Hạn chế về ngôn ngữ
○ Hoặc do viết đặc tả không rõ ràng
● VD: “… less than $15000 …” trong đặc tả yêu cầu có thể hàm ý
○ tính cả giá trị đó (x <= 15000)
○ hoặc không tính (x < 15000)

-> NÊN bổ sung thêm ca kiểm thử 15000 để kiểm thử lỗi này

50
Phân hoạch không phải miền số

Trong nhiều trường hợp, không tồn tại biên thực tế vì biên phụ thuộc vào phân
hoạch tương đương
● Một giá trị trong phân hoạch hợp lệ
● Một giá trị ở phân hoạch không hợp lệ

51
Ví dụ
Giả sử một field nhập liệu chấp nhận một số nguyên là đầu vào.
Sử dụng bàn phím số để nhập nên chỉ có thể nhập số.
Miền hợp lệ từ 1 đến 5.
Giá trị số từ 0 đến 9

● Ba phân hoạch tương đương gồm: (EC1) không hợp lệ (quá nhỏ); (EC2) hợp
lệ; (EC3) không hợp lệ (quá lớn)
● EC2: chọn 1 và 5
● EC3: chọn 6 (có thể chọn cả 9)
● EC1: chọn 0 (không thể chọn thêm số nhỏ hơn vì đang dùng bàn phím số)

52
Ví dụ (ISTQB)
Hệ thống bán vé quy định giá như sau:

Giá trị biên: 9:29 am; 9:30 am, 4:00 pm; 4:01 pm, 7:30 pm; 7:31 pm

53
Ví dụ (ISTQB)

Kết hợp cả phân


hoạch tương đương
( ) và phân tích giá
trị biên

54
ISTQB Exam

Link: bit.ly/3RyaEiW

55
56
Kiểm thử bảng quyết định

57
Tại sao cần bảng quyết định?

● Kĩ thuật phân hoạch tương đương và phân tích giá trị biên thường áp
dụng khi giá trị đầu vào có biên rõ ràng
● Bảng quyết định xử lý tốt trường hợp phương thức có hành vi phức
tạp

58
Cấu trúc

59
Đồ thị nguyên nhân - kết quả

● Gọi là “Cause-Effect graph”


● Mô tả mối quan hệ giữa nguyên nhân (là các điều kiện) và kết quả (là đầu ra
mong đợi)
● Điều kiện sử dụng toán tử lô-gic AND, OR, NOT

60
Rút tiền ATM (1/2)
Để rút tiền tại ATM thành công, các điều
kiện sau phải thỏa mãn
● Thẻ ATM hợp lệ
● Mã PIN nhập đúng
● Tài khoản có tiền và ATM có tiền
● Tối đa 3 lần nhập sai mã PIN liên
tiếp

Các hành vi có thể xảy ra


● Thẻ bị từ chối
● Hỏi mã PIN khác
● Nuốt thẻ
● Hỏi lượng tiền rút khác
● Trả tiền
61
Rút tiền ATM (2/2)

Mỗi cột là một


ca kiểm thử

62
Nhập liệu thông tin

63
Upload tệp

64
Sample Exam ISTQB Advanced Test (1/2)

65
Sample Exam ISTQB Advanced Test (2/2)

66
Sample Exam ISTQB Advanced Test

67
Thảo luận

● Như vậy chúng ta đã học


○ Kiểm thử phân hoạch tương đương
○ Kiểm thử giá trị biên
○ Kiểm thử bảng quyết định

● Vấn đề kiểm thử hộp đen


○ Không thể phát hiện được tính đúng/sai của đặc tả

○ Có thể bỏ sót nhiều lỗi tiềm ẩn trong mã nguồn -> Kiểm thử hộp
trắng

68
Kiểm thử hộp trắng

69
Giải thích
● Độ phủ dòng lệnh
(statement coverage)
Khởi động! ● Độ phủ nhánh (branch
coverage)
● Độ phủ đường (path
coverage)

70
Kiểm thử hộp trắng

● Đối tượng kiểm thử: Mã nguồn


● Còn gọi là kiểm thử dựa theo cấu trúc hoặc kiểm
thử dựa trên mã nguồn
● Tùy theo tiêu chí độ phủ, phương pháp sinh ca
kiểm thử là khác nhau
○ Mục tiêu: đạt độ phủ 100%

71
Đầu vào và đầu ra

Đối tượng Kĩ năng


kiểm thử lập trình

PP kiểm
thử Tìm ca Viết test Báo
kiểm thử Thực thi
script cáo

Kinh
nghiệm
Đầu ra
mong đợi

Mã nguồn

72
Kiểm thử ngẫu nhiên

73
Kiểm thử ngẫu nhiên
Giá trị được sinh ngẫu nhiên dựa theo kiểu tham số truyền vào phương
thức/hàm
● Số nguyên
● Số thực
● Kiểu kí tự
● Kiểu string
● Kiểu con trỏ
● Kiểu cấu trúc

74
Ví dụ đầu vào số nguyên
price <
Đặc tả ghi rằng: 15000
T F
Cửa hàng niêm yết giá (gọi là price)
như sau: price <=
return 0
20000
● < 15000 đô: không giảm giá F
Code T
● [15000 đô, 20000 đô]: giảm 5%
● (20000 đô, 25000 đô): giảm price <
7% return 5
25000
● >= 25000 đô: giảm 8.5%
T F

Phương thức computePrice(int return


return 7
price) 8.55

75
Ví dụ
Đầu vào sinh ngẫu nhiên: price < 1
15000
● price = -1 T F
● price = 30
2 price <=
● price = 40000 return 0
20000
3

T F
Hãy tính 4
price < 5
● Độ phủ câu lệnh return 5
25000
● Độ phủ nhánh T F

return
return 7 7
8.55
6

76
Ví dụ
price <
● Độ phủ câu lệnh 15000
T F

71.4% price <=


return 0
20000
T F
● Độ phủ nhánh price <
return 5
25000
T F

66.66% return
return 7
8.55

77
Ví dụ kiểu cấu trúc

78
Hạn chế

● Không xác định được đầu ra mong đợi


● Khó sinh được ca kiểm thử phức tạp
● Vấn đề ca kiểm thử không hợp lệ

79
Ca kiểm thử dư thừa/không hợp lệ

80
Sinh ca kiểm thử thủ công

81
Ví dụ

Xác định loại tam giác

82
83
Sinh ca kiểm thử có định hướng

84
Pathcrawler

http://pathcrawler-online.com:8080 85
AkaAuto

https://www.fit.uet.vnu.edu.vn/vnu-uet-chuyen-giao-cho-fsoft-gam-giai-phap-kiem-thu-tu-dong-cho-cac-du-an-c-c/ 86
Và còn nữa ...

87
Các công cụ tự động này dễ dàng đạt được độ phủ tới

100%

88
Phương pháp kiểm thử concolic (phiên bản đơn giản)

Ca kiểm thử
đầu tiên Đường Hệ ràng
Chạy chương thi hành Thực thi buộc
trình tượng trưng Phủ định
Đối tượng
kiểm thử

Tiêu chí độ
phủ Ca kiểm
thử mới
Sai Độ phủ Gọi
100%? Solver

Đúng

89
Lịch sử thực thi tượng trưng

90
Thực thi tượng trưng Bảng biến

Biến Giá trị


i A

i = -1

Giá trị ngẫu nhiên

91
Thực thi tượng trưng
Biến Giá trị
i A
j 2*A

92
Thực thi tượng trưng
Biến Giá trị
i A+1
j 2*A

93
Thực thi tượng trưng
Biến Giá trị
i (A + 1) * 2A
j 2*A

94
Thực thi tượng trưng
Biến Giá trị
i (A + 1) * 2A
j 2*A

Điều kiện Giá trị


i<1 (A + 1) * 2A < 1

95
Thực thi tượng trưng
Biến Giá trị
i -1 * (A + 1) * 2A
j 2*A

Điều kiện Giá trị


i<1 (A + 1) * 2A < 1

96
Hệ ràng buộc ban đầu
Phủ định hệ ràng buộc Điều kiện Giá trị
i<1 (A + 1) * 2A < 1

Điều kiện Giá trị


i >= 1 (A + 1) * 2A >=1

Hệ ràng buộc mới

97
Hệ ràng buộc ban đầu
Phủ định hệ ràng buộc Điều kiện Giá trị
i<1 (A + 1) * 2A < 1

Điều kiện Giá trị


i >= 1 (A + 1) * 2A >=1

Hệ ràng buộc mới

Ca kiểm
SMT Solver thử mới
98
Áp dụng

Độ phủ câu lệnh

99
100
Tài liệu tham khảo
● Andreas Spillner, Tilo Linz, Hans Schaefer. Software Testing Foundation. 4th
edition
● Roger S. Pressman, Software Engineering: A practical approach, 7th edition
● https://www.istqb.org/certifications/certified-tester-foundation-level
● CS/CE/SE 6367 Software Testing, Validation and Verification

101

You might also like