Công nghệ phần mềm - Kiểm thử

 Giới thiệu về kiểm thử

 Kiểm thử trong tiến trình phát triển

 Kiểm thử hộp ñen

 Kiểm thử hộp trắng

pdf29 trang | Chuyên mục: Công Nghệ Phần Mềm | Chia sẻ: dkS00TYs | Lượt xem: 1905 | Lượt tải: 2download
Tóm tắt nội dung Công nghệ phần mềm - Kiểm thử, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
thuật kiểm thử
 kỹ thuật kiểm thử tĩnh (static testing)
• không thực thi chương trình
 kỹ thuật kiểm thử ñộng (dynamic 
testing)
• kiểm thử hộp ñen (black-box testing)
• kỹ thuật kiểm thử chức năng (functional 
testing)
• kiểm thử hộp trắng (white-box testing)
• kỹ thuật kiểm thử cấu trúc (structural testing)
12
23
Kiểm thử tĩnh
 Thanh tra mã nguồn (code inspection)
 Chứng minh hình thức
 Thực thi hình thức (symbolic execution)
 ðánh giá ñộ phức tạp
 McCabe
 Nejmeh
24
Kiểm thử hộp ñen
I
e
Input test data
OeOutput test results
System
Inputs causing
anomalous
behaviour
Outputs which reveal
the presence of
defects
13
25
Kiểm thử hộp ñen
 Chỉ cần dựa vào ñặc tả chương trình
 Xây dựng dữ liệu thử trước khi mã hóa/lập 
trình
 Thường phát hiện các lỗi ñặc tả yêu cầu, 
thiết kế
 Dễ dàng thực hiện
 Chi phí thấp
26
Kiểm thử hộp ñen
 Kiểm thử giá trị biên (boundary value 
analysis)
 Kiểm thử lớp tương ñương (equivalence 
class testing)
 Kiểm thử ngẫu nhiên (random testing)
 ðồ thị nhân-quả (cause-efect graph)
 Kiểm thử cú pháp
14
27
Kiểm thử giá trị biên
 Cơ sở
 lỗi thường xuất hiện gần các giá trị biên của miền dũ
liệu
 Tập trung phân tích các giá trị biên của miền dữ liệu 
ñể xây dựng dữ liệu kiểm thử
 Nguyên tắc: kiểm thử các dữ liệu vào gồm
 giá trị nhỏ nhất
 giá trị gần kề lớn hơn giá trị nhỏ nhất
 giá trị bình thường
 giá trị gần kề nhỏ hơn giá trị lớn nhất
 giá trị lớn nhất
28
Kiểm thử giá trị biên
15
29
Kiểm thử giá trị biên
 Nguyên tắc chọn dữ liệu thử
 Nếu dữ liệu vào thuộc một khoảng, chọn
• 2 giá trị biên
• 4 giá trị = giá trị biên ± sai số nhỏ nhất
 Nếu giá trị vào thuộc danh sách các giá trị, chọn
• phần tử thứ nhất, phần tử thứ hai, phần tử kế cuối và phần tử
cuối
 Nếu dữ liệu vào là ñiều kiện ràng buộc số giá trị, chọn
• số giá trị tối thiểu, số giá trị tối ña và một số các số giá trị
không hợp lệ
 Tự vận dụng khả năng và thực tế ñể chọn các giá trị biên 
cần kiểm thử
30
Kiểm thử giá trị biên
 Ví dụ (1)
 Chương trình nhận vào ba số thực, kiểm tra ba số
thực có là ñộ dài ba cạnh một tam giác. Nếu là ñộ dài 
ba cạnh của một tam giác, thì kiểm tra xem ñó là tam 
giác thường, cân, ñều cũng như kiểm tra ñó là tam 
giác nhọn, vuông hay tù.
16
31
Kiểm thử giá trị biên
 Ví dụ (2)
 Dữ liệu thử
1, 1, 2 Không là tam giác
0, 0, 0 Chỉ một ñiểm
4, 0, 3 Một cạnh bằng không
1, 2, 3.00001 Gần là một tam giác
0.001, 0.001, 0.001 Tam giác rất nhỏ
99999, 99999, 99999 Tam giác rất lớn
3.00001, 3, 3 Tam giác gần ñều
2.99999, 3, 4 Tam giác gần cân
3, 4, 5.00001 Tam giác giác gần vuông
3, 4, 5, 6 Bốn giá trị
3 Chỉ một giá trị
Dữ liệu vào rỗng
-3, -3, 5 Giá trị âm
32
Kiểm thử lớp tương ñương 
 Ý tưởng
 phân hoạch miền 
dữ liệu vào thành 
các lớp các dữ
liệu có quan hệ
với nhau
 mỗi lớp dùng ñể
kiểm thử một 
chức năng, gọi là
lớp tương ñương
17
33
Kiểm thử lớp tương ñương
 Ba bước
 ñối với mỗi dữ liệu vào, xác ñịnh các lớp 
tương ñương từ miền dữ liệu vào
 chọn dữ liệu ñại diện cho mỗi lớp tương 
ñương
 kết hợp các dữ liệu thử bởi tích ðề-các ñể
tại ra bộ dữ liệu kiểm thử
34
Kiểm thử lớp tương ñương
 Nguyên tắc phân hoạch các lớp tương ñương
 Nếu dữ liệu vào thuộc một khoảng, xây dựng
• 1 lớp các giá trị lớn hơn
• 1 lớp các giá trị nhỏ hơn
• n lớp các giá trị hợp lệ
 Nếu dữ liệu là tập hợp các giá trị, xây dựng
• 1 lớp với tập rỗng
• 1 lớp quá nhiều các giá trị
• n lớp hợp lệ
 Nếu dữ liệu vào là ñiều kiện ràng buộc, xây dựng
• 1 lớp với ràng buộc ñược thỏa mãn
• 1 lớp với ràng buộc không ñược thỏa mãn
18
35
Kiểm thử lớp tương ñương
 Ví dụ
 Bài toán tam giác
Nhọn Vuông Tù
Thường 6,5,3 5,6,10 3,4,5
Cân 6,1,6 7,4,4 √2,2,√2
ðều 4,4,4 không thể không thể
Không là tam giác -1,2,8
36
Bài tập
 Kiểm thử giá trị biên
 Viết một chương trình thống kê phân tích một tệp 
chứa tên và ñiểm của sinh viên trong một năm học. 
Tệp này chứa nhiều nhất 100 trường. Mỗi trường 
chứa tên của mỗi sinh viên (20 ký tự), giới tính (1 ký 
tự) và ñiểm của 5 môn học (từ 0 ñến 10). Mục ñích 
chương trình:
• tính diểm trung bình mỗi sinh viên
• tính ñiểm trung bình chung (theo giới tính et theo môn 
học)
• tính số sinh viên lên lớp (ñiểm trung bình trên 5)
 Xây dựng dữ liệu thử cho chương trình trên bởi kiểm 
thử giá trị biên
19
37
Bài tập
 Kiểm thử lớp tương ñương
 Viết chương trình dịch, trong ñó có câu lệnh FOR, 
ñặc tả câu lệnh FOR như sau: “Lệnh FOR chỉ chấp 
nhận một tham số duy nhất là biến ñếm. Tên biến 
không ñược sử dụng quá hai ký tự khác rỗng. Sau ký 
hiệu = là cận dưới và cận trên của biến ñếm. Các cận 
trên và cận dưới là các số nguyên dương và ñược 
ñặt giữa từ khóa TO”.
 Xây dựng dữ liệu thử ñể kiểm thử câu lệnh FOR theo 
kỹ thuật kiểm thử lớp tương ñương
38
Kiểm thử hộp trắng
 Dựa vào mã nguồn/cấu trúc chương trình
 Xây dựng dữ liệu thử sau khi mã hóa/lập 
trình
 Thường phát hiện các lỗi lập trình
 Khó thực hiện
 Chi phí cao
20
39
Các kỹ thuật kiểm thử hộp 
trắng
 Kiểm thử dựa trên ñồ thị luồng ñiều khiển
 Kiểm thử dựa trên ñồ thị luồng dữ liệu
 Kiểm thử ñột biến (mutation testing)
40
ðồ thị luồng ñiều khiển
 ðồ thị luồng ñiều khiển (Control Flow Graph - 
ðTLðK) là ñồ thị có hướng, biểu diễn một chương 
trình
 ñỉnh: biểu diễn lệnh tuần tự hay khối lệnh
 cung: biểu diễn các rẽ nhánh
 một ñỉnh vào và một ñỉnh ra ñược thêm vào ñể biểu 
diễn ñiểm vào và ra của chương trình
 Lộ trình (path) trong ðTLðK
 xuất phát từ ñỉnh vào ñi qua các ñỉnh và cung trong 
ñồ thị và kết thúc tại ñỉnh ra
21
41
ðồ thị luồng ñiều khiển
 Ví dụ 1
if x <= 0 then 
x := -x
else
x := 1 -x;
if x = -1 then
x=1
else
x := x+1;
writeln(x);
42
ðồ thị luồng ñiều khiển
 Ví dụ 1 (2)
 Có 4 lộ trình
• [a, b, d, f, g]
• [a, b, d, e, g]
• [a, c, d, f, g]
• [a, c, d, e, g]
22
43
ðồ thị luồng ñiều khiển
 Ví dụ 1 (3)
 ðồ thị G1 có thể biểu diễn dạng biểu thức 
chính quy:
G1 = abdfg + abdeg + acdfg + acdeg
 Hay ñơn giản:
G1 = a(bdf + bde + bdf + bde)g
G1 = a(b + c)d(e + f)g
44
ðồ thị luồng ñiều khiển
 Biểu diễn các cấu trúc
Cấu trúc tuần tự: ab
Cấu trúc rẽ nhánh: b(a + d)c
Cấu trúc lặp: ab(cb)*d
23
45
ðồ thị luồng ñiều khiển
 Ví dụ 2
i := 1;
found:= false;
while (not found) do
begin
if (a[i] = E) then
begin
found:= true;
s := i;
end;
i := i + 1;
end;
G2 = ab(c(ε + d)eb)*f
46
ðồ thị luồng ñiều khiển
 Bài tập 1
 Vẽ ñồ thị luồng ñiều khiển
 Xây dựng biểu thức chính quy biểu diễn ñồ thị
if n <= 0 then
n := 1-n 
end;
if (n mod 2) = 0 then
n := n / 2
else
n := 3*n + 1
end ;
write(n);
24
47
ðồ thị luồng ñiều khiển
 Bài tập 2
 Vẽ ñồ thị luồng ñiều khiển
 Xây dựng biểu thức chính quy biểu diễn ñồ thị
read(i);
s := 0;
while(i <= 3) do
begin
if a[i] > 0 thens := s + a[i];
i := i + 1;
end
48
Kiểm thử dựa trên ðTLðK
 Các tiêu chuẩn bao phủ
 Phủ tất cả các ñỉnh/lệnh
 Phủ tất cả các cung
 Phủ tất cả các quyết ñịnh
 Phủ tất cả các ñường ñi
25
49
Kiểm thử dựa trên ðTLðK
Phủ tất cả các ñỉnh/lệnh
 Cho phép phủ tất cả các ñỉnh/lệnh
 mỗi lệnh ñược thực thi ít nhất một lần
 tiêu chuẩn tối thiểu
functionsum(x,y : integer) : integer;
begin
if (x = 0) then
sum := x
else 
sum := x + y
end;
Khi thực thi lộ trình acd sẽ phát hiện lỗi
50
Kiểm thử dựa trên ðTLðK
Phủ tất cả các ñỉnh/lệnh
 Hạn chế của tiêu chuẩn
read(x);
…
if (x 0) then x := 1;
…
y := 1/x;
Phủ tất cả các ñỉnh không phát hiện ñược phát hiện lỗi
26
51
Kiểm thử dựa trên ðTLðK
Phủ tất cả các cung
 Phủ tất cả các cung ít nhất một lần
 phủ tất các giá trị ñúng sai của một biểu thức lô-gíc
 phủ tất cả các cung kéo theo phủ tất cả các ñỉnh
if ((a < 2) and (b = a)) 
then
x := 2 -a 
else
x := a -2
Dữ liệu thử DT1 = {a=b=1} và DT2 = {a=b=3} thỏa mãn phủ
tất cả các cung, nhưng không phủ tất cả các quyết ñịnh, 
chẳng hạn DT3 = {a=3, b=2}
52
Kiểm thử dựa trên ðTLðK
Phủ tất cả các quyết ñịnh
 Phủ tất cả các quyết ñịnh ñược thỏa mãn khi:
 tiêu chuẩn phủ tất cả các cung ñược thỏa mãn và
 mỗi biểu thức con của biểu thức ñiều kiện ñược thử
với tất cả các giá trị có thể
 Nếu (a AND b)
 a = b = true
 a = b = false
 a = true, b = false
 a = false, b = true
27
53
Kiểm thử dựa trên ðTLðK
Phủ tất cả các quyết ñịnh
 Dữ liệu thử
 DT1 = {a = b = 1}
 DT2 = {a = 1, b = 0}
 DT3 = {a = 3, b = 2}
 DT4 = {a = b = 3}
54
Kiểm thử dựa trên ðTLðK
Phủ tất cả các quyết ñịnh
 Hạn chế
 Không phát hiện lỗi trường hợp không thực thi 
vòng lặp
read(inf, sup);
i := inf;
sum:= 0;
while(i <= sup) do
begin
sum:= sum+ a[i];
i := i + 1;
end;
writeln(1/sum);
Dữ liệu thử DT1 = {a[1]=50, a[2]=60, a[3]=80, inf=1, sup=3} phủ
tất cả các cung/quyết ñịnh, nhưng không phát hiện lỗi
28
55
Kiểm thử dựa trên ðTLðK
Phủ tất cả các lộ trình
 Mỗi lộ trình phải ñược thực thi ít nhất một 
lần
 Gặp khó khăn khi số lần lặp vô hạn
 Chỉ thực hiện một số lần lặp nhất ñịnh
 Hoặc chỉ thực hiện hai loại lộ trình
• các lộ trình vượt qua vòng lặp nhưng không lặp
• các lộ trình chỉ lặp n lần (chẳng hạn n = 1)
56
Kiểm thử dựa trên ðTLðK
Phủ tất cả các lộ trình
 Dữ liệu thử
 DT1 = {a[1]=50, a[2]=60, a[3]=80, inf=1, sup=3}
 DT2 = {a[1]=50, a[2]=60, a[3]=80, inf=3, sup=2}
29
57
Kiểm thử dựa trên ðTLðK
Bài tập
 Xây dựng dữ liệu thử thỏa mãn các tiêu chuẩn
 phủ tất cả các ñỉnh
 phủ tất cả các cung
 phủ tất cả các lộ trình
if n ≤ 0 then
n := 1-n 
end;
if (n mod 2) = 0
then
n := n / 2
else
n := 3*n + 1
end ;
write(n);
58
Kiểm thử dựa trên ðTLðK
Bài tập
 Xây dựng dữ liệu thử thỏa mãn các tiêu chuẩn phủ
tất cả các lộ trình
function goodstring(var count : integer) : boolean;
var ch : char;
begin
goodstring := false;
count := 0;
read(ch);
if ch = ‘a’ then
begin
read(ch)
while(ch = ‘b’) or (ch = ‘c’) do begin 
count := count + 1;
read(ch);
end;
if ch = ‘x’ then goodstring = true; 
end;
end;

File đính kèm:

  • pdf9_KiemThu.pdf