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
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:
- 9_KiemThu.pdf