Thực tế cho thấy, mỗi phương pháp sinh bộ kiểm thử đều có ưu và nhược điểm riêng. Vì vậy việc dùng một phương pháp là không đủ để kiểm tra tất cả các trường hợp cần thiết. Tùy theo từng bài toán cụ thể và dựa vào thuộc tính của các biến đầu vào chúng ta lựa chọn được phương pháp sinh ca kiểm thử trong kiểm thử hộp đen như mô tả trong bảng 3.26
Bảng 3.26 Lựa chọn các phương pháp kiểm thử.
C1. Các biến (P: vật lý; L: Logic) P P P P P L L L L L C2. Các biến độc lập? Y Y Y Y N Y Y Y Y N C3. Giả định có lỗi đơn? Y Y N N - Y Y N N - C4. Điều khiển ngoại lệ? Y N Y N - Y N Y N -
A1. Kiểm thử giá trị biên (BVT) X
A2. BVT mạnh (robustness) X
A3. BVT trường hợp xấu nhất (worstcase) X
A4. BVT kết hợp robustness và worstcase X
A5. Lớp tương đương truyền thống X X X X
A6. Lớp tương đương yếu X X X X A7. Lớp tương đương mạnh X X X X X X A8. Bảng quyết định X X
Dựa vào tổng kết trong bảng 3.26 ta thấy
Nếu các biến đầu vào là đại lượng vật lý độc lập, áp dụng phương pháp kiểm thử giá trị biên và phân lớp tương đương.
Nếu các biến đầu vào là đại lượng vật lý nhưng không độc lập, áp dụng phương pháp phân lớp tương đương mạnh và bảng quyết định.
Nếu các biến đầu vào có quan hệ phụ thuộc nhau thì áp dụng phương pháp kiểm thử dựa trên bảng quyết định
Nếu chương trình có xử lý ngoại lệ thì áp dụng phương pháp kiểm thử giá trị biên mở rộng (robustness) và phân lớp tương đương.
Nếu biến đầu vào là các đại lượng logic độc lập, có thể kết hợp các kỹ thuật của phương pháp phân lớp tương đương để sinh ca kiểm thử.
Chƣơng 4. Ứng dụng
4.1. Đặc tả bài toán
Để minh họa cho các phương pháp sinh ca kiểm thử đã khảo sát ở chương 3, trong chương này, chúng ta sẽ tiến hành thử nghiệm trên bài toán cụ thể để thấy được các trường hợp kiểm thử sinh ra theo từng phương pháp. Đồng thời thông qua ví dụ đó sẽ đánh giá được khả năng phát hiện lỗi, chi phí cho việc sinh và thực thi các ca kiểm thử tương ứng với từng phương pháp. Ví dụ cụ thể sẽ bao gồm 2 bài toán:
Bài toán “Nhập điểm cho sinh viên”: Minh họa cho trường hợp các biến đầu vào là các biến hoàn toàn độc lập nhau, không có mối quan hệ ràng buộc logic.
Bài toán “NextDate” (đã khảo sát ở mục 3.3.3 của luận văn): Minh họa cho trường hợp các biến đầu vào có mối quan hệ logic ràng buộc.
Sau khi xây dựng các ca kiểm thử cho hai bài toán theo các phương pháp đã khảo sát, chúng ta tiến hành thử nghiệm chạy chương trình cho hai bài toán sử dụng tập các ca kiểm thử sinh ra. Với giả thiết là chương trình thực nghiệm đã được cài một số lỗi nhất định, việc kiểm tra trên tập ca kiểm thử sinh ra sẽ giúp ta đánh giá được hiệu quả của các ca kiểm thử trong việc phát hiện ra lỗi chương trình.
4.2. Thiết kế ca kiểm thử cho bài toán có các biến độc lập 4.2.1. Bài toán 4.2.1. Bài toán
Bài toán “ Nhập điểm cho sinh viên” được xây dựng để mô phỏng cho việc thiết kế các ca kiểm thử trong trường hợp các biến đầu vào hoàn toàn độc lập, không có mối quan hệ ràng buộc logic phức tạp. Với bài toán này, chúng ta sẽ tiến hành khảo sát trên các phương pháp: Kiểm thử giá trị biên (kiểm thử giá trị biên cơ bản, kiểm thử giá trị biên mở rộng) và phân lớp tương tương (phân lớp tương đương mạnh, phân lớp tương đương yếu, phân lớp tương đương truyền thống).
Bài toán yêu cầu nhập điểm cho danh sách sinh viên đã tồn tại trong cơ sở dữ liệu. Khi lựa chọn được lớp (tương ứng với mã lớp), mã sinh viên, tên sinh viên hợp lệ, người dùng sẽ có quyền nhập điểm cho sinh viên đó. Thông tin điểm ở đây bao gồm: điểm Toán, điểm Lý và điểm Hóa. Bỏ qua các giá trị đã cố định trong cơ sở dữ liệu là Lớp, Mã sinh viên, Tên sinh viên, chúng ta sẽ tập trung khảo sát và sinh các ca kiểm thử cho các biến đầu vào cần quan tâm là điểm Toán, điểm Lý và điểm Hóa. Với giao diện chương trình như hình 4.1, các biến đầu vào điểm Toán, điểm Lý và điểm Hóa được kí hiệu tương ứng là DToan, DLy, DHoa có miền giá trị vào như sau:
0<= DToan <=10 0<= DLy <=10 0<= DHoa <=10
Hình 4.1. Giao diện bài toán “Nhập điểm cho sinh viên”.
4.2.2. Áp dụng các phƣơng pháp kiểm thử để sinh ca kiểm thử 4.2.2.1. Phƣơng pháp phân tích giá trị biên cơ bản
Với miền giá trị đầu vào của các biến DToan, DLy, DHoa như ở mục 4.2.1, áp dụng nguyên tắc đã nghiên cứu ở chương 3, chúng ta xác định được các giá trị biên cần kiểm thử như bảng 4.1, với giả thiết kiểm thử trên bộ số nguyên dương.
Bảng 4.1 Các giá trị biên cơ bản cho bài toán “Nhập điểm sinh viên”
min min+ Norm max- max DToan 0 1 5 9 10 DLy 0 1 5 9 10 DHoa 0 1 5 9 10
Bảng 4.2 là danh sách 15 ca kiểm thử được sinh ra tương ứng với các giá trị biên trong bảng 4.1. Khi sử dụng các trường hợp kiểm thử này để kiểm tra chương trình thì kiểm thử viên không phát hiện ra lỗi nào, toàn bộ các ca kiểm thử đều có kết quả là OK.
Bảng 4.2 Các trường hợp kiểm thử biên cơ bản cho bài toán “Nhập điểm sinh viên”
TC_ID DToan DLy DHoa Output Result Result
TC_01 0 5 5 DToan=0 DLy=5 DHoa=5 OK TC_02 1 5 6 DToan=1 DLy=5 DHoa=6 OK TC_03 5 8 9 DToan=5 DLy=8 DHoa=9 OK TC_04 9 4 5 DToan=9 DLy=4 DHoa=5 OK TC_05 10 4 2 DToan=10 DLy=4 DHoa=2 OK TC_06 4 0 3 DToan=4 DLy=0 DHoa=3 OK TC_07 2 1 1 DToan=2 DLy=1 DHoa=1 OK TC_08 10 5 8 DToan=10 DLy=5 DHoa=8 OK TC_09 3 9 7 DToan=3 DLy=9 DHoa=7 OK TC_10 2 10 8 DToan=2 DLy=10 DHoa=8 OK
TC_11 5 6 0 DToan=5 DLy=6 DHoa=0 OK TC_12 7 8 1 DToan=7 DLy=8 DHoa=1 OK TC_13 9 10 5 DToan=9 DLy=10 DHoa=5 OK TC_14 8 2 9 DToan=8 DLy=2 DHoa=9 OK TC_15 5 4 10 DToan=5 DLy=6 DHoa=10 OK
4.2.2.2. Phƣơng pháp phân tích giá trị biên mở rộng
Sử dụng miền giá trị đầu vào của các biến DToan, DLy, DHoa như ở mục 4.2.1, ta xác định được các giá trị biên theo kỹ thuật kiểm thử biên mở rộng như trong bảng 4.3.
Bảng 4.3 Các giá trị biên mở rộng cho bài toán “Nhập điểm sinh viên”
min- min min+ norm max- max max+ DToan -1 0 1 5 9 10 11 DLy -1 0 1 5 9 10 11 DHoa -1 0 1 5 9 10 11
Với miền giá trị biên như bảng 4.3, ta xây dựng được 21 ca kiểm thử. Thực tế cho thấy, sau khi thực hiện chạy chương trình thử nghiệm, có 18 ca kiểm thử có kết quả OK và 03 ca kiểm thử trả về kết quả NOK (Not OK), ba ca kiểm thử này phát hiện ra cả 3 lỗi của chương trình đã được cài đặt.
Bảng 4.4 Kết quả kiểm thử biên mở rộng cho bài toán “Nhập điểm sinh viên”
Kết quả kiểm thử
Tổng số ca kiểm thử OK NOK 21 18 3
4.2.2.3. Phƣơng pháp phân lớp tƣơng đƣơng yếu
Bước 1: Xác định miền giá trị của các biến đầu vào DToan, DLy, DHoa như sau: 0<= DToan <=10
0<= DLy <=10 0<= DHoa <=10
Bước 2: Phân chia miền dữ liệu đầu vào thành các lớp con tương đương sau: A1= DToan < 0 A2= 0<= DToan < =10 A3= DToan >10 B1= DLy <0 B2= 0<= DLy <=10 B3= DLy >10 C1= DHoa < 0 C2= 0<= DHoa < =10 C3= DHoa > 10
Theo nguyên tắc sinh ca kiểm thử của phân lớp tương đương yếu, chỉ có 3 ca kiểm thử được xây dựng và sau khi thực thi chạy chương trình thử nghiệm thì cả 3 ca kiểm thử này đều trả về kết quả OK, tập các trường hợp kiểm thử sinh ra theo phương pháp này không phát hiện được lỗi nào của chương trình.
Bảng 4.5 Các trường hợp kiểm thử cho phân lớp tương tương yếu
TC_ID DToan DLy DHoa ExpectedOutput Result
TC_01 -1 -1 -1 Invalid input OK TC_02 5 6 7 DToan=5 DLy=6 DHoa=7 OK TC_03 11 11 11 Invalid input OK
4.2.2.4. Phƣơng pháp phân lớp tƣơng đƣơng mạnh
Với phương pháp này, miền dữ liệu của các biến đầu vào cũng được chia thành các lớp tương đương con tương tự như phân lớp tương đương yếu:
A1= DToan < 0
A2= 0<= DToan < =10 A3= DToan >10
B1= DLy <0 B2= 0<= DLy <=10 B3= DLy >10 C1= DHoa < 0 C2= 0<= DHoa < =10 C3= DHoa > 10
Áp dụng nguyên tắc kết hợp của tích đề các, chúng ta có 27 ca kiểm thử cho phân lớp tương đương mạnh. Bộ kiểm thử này khá hiệu quả, với 22 ca kiểm thử có kết quả OK và 05 ca kiểm thử có kết quả NOK, phát hiện được cả 3 lỗi của chương chương trình.
Bảng 4.6 Kết quả kiểm thử theo phương pháp phân lớp tương đương mạnh cho bài toán “Nhập điểm sinh viên” cho bài toán “Nhập điểm sinh viên”
Kết quả kiểm thử
Tổng số ca kiểm thử OK NOK 27 22 5
4.2.2.5. Phƣơng pháp phân lớp tƣơng đƣơng truyền thống
Từ yêu cầu bài toán, ta xác định miền giá trị hợp lệ và không hợp lệ của ba biến đầu vào như sau: Miền hợp lệ: A1: 0<= DToan <=10 B1: 0<= DLy <=10 C1: 0<= DHoa <=10 Miền không hợp lệ: A2: DToan <0 A3: DToan >10 B2: DLy <0 B3: DLy >10 C2: DHoa <0 C3: DHoa >10
Danh sách chi tiết các ca kiểm thử sinh ra theo phương pháp này được thể hiện trong bảng 4.7. Tuy chỉ có 07 trường hợp kiểm thử nhưng tiêu chí kiểm thử của các ca kiểm thử này vẫn đảm bảo phát hiện toàn bộ lỗi của chương trình thử nghiệm.
Bảng 4.7 Các trường hợp kiểm thử cho phân lớp tương tương truyền thống với bài toán “Nhập điểm sinh viên” truyền thống với bài toán “Nhập điểm sinh viên”
TC_ID DToan DLy DHoa ExpectedOutput Result
TC_01 -1 6 7 Invalid input OK TC_02 11 8 9 Invalid input NOK TC_03 10 -1 3 Invalid input OK TC_04 6 11 5 Invalid input OK TC_05 8 2 -1 Invalid input NOK TC_06 9 4 11 Invalid input NOK TC_07 5 6 8
DToan=5 DLy=6 DHoa=8
OK
Như vậy, với bài toán đơn giản “Nhập điểm sinh viên” ở trên, sau khi khảo sát quá trình sinh các ca kiểm thử theo các phương pháp đã đề cập trong nội dung của chương 3. Đồng thời tiến hành việc thực thi kiểm thử chương trình thử nghiệm theo tập các ca kiểm thử sinh ra cho từng phương pháp, chúng ta có thể thấy được ưu nhược điểm, khả năng phát hiện lỗi ở từng phương pháp đối với bài toán có chứa các biến hoàn toàn độc lập được tổng kết trong bảng 4.8. Kết quả tổng kết ở bảng này cho thấy, kỹ thuật kiểm thử giá trị biên truyền thống có hiệu quả cao nhất, chỉ với 07 ca kiểm thử kỹ thuật này phát hiện ra cả 3 lỗi của chương trình thực nghiệm. Ngược lại, với 15 ca kiểm thử được xây dựng nhưng tiêu chí kiểm thử của kỹ thuật phân tích giá trị biên cơ bản không phát hiện ra bất kì một lỗi nào của chương trình. Bảng tổng kết 4.8 là một ví dụ cụ thể khi xét hiệu quả kiểm thử của từng phương pháp. Từ đó ta thấy, hiệu quả mà từng phương pháp kiểm thử mang lại không hoàn toàn phụ thuộc vào tiêu chí sinh ca kiểm thử của phương pháp đó là gì mà còn phụ thuộc vào từng bài toán cụ thể, từng dữ liệu đầu vào và tiêu chí kiểm thử của người sử dụng.
Bảng 4.8 So sánh các phương pháp sinh ca kiểm thử cho bài toán “Nhập điểm sinh viên”
STT Phƣơng pháp
Số lƣợng ca kiểm
thử
Thời gian sinh và thực
thi các ca kiểm thử Khả năng phát hiện lỗi
1 Phân lớp tương
đương mạnh 27
1. Với ba biến đầu vào, mỗi biến có 3 miền giá trị, chúng ta cần thời gian cho việc sinh và thực thi 27 ca kiểm thử. Với ví dụ đơn giản này thì ta thấy:
2. Việc xác định các ca kiểm thử ở từng phương pháp là khá đơn giản và tương tự nhau.
3. Thời gian tạo và thực thi 1 ca kiểm thử (chạy chương trình để test) ở từng phương pháp là đương đương nhau. --> Vì vậy việc xác định thời gian test toàn bộ các ca kiểm thử phụ thuộc vào số lượng ca kiểm thử cho từng phương pháp.
Phát hiện được cả 3 lỗi của chương trình do có 5 ca kiểm thử có kết quả NOK nhưng đều thuộc 3 lỗi không xử lý được các trường hợp sau: 1. Trường hợp DHoa <0 2. Trường hợp DHoa >10 3. Trường hợp DToan >10 2 Phân lớp tương đương yếu 3 Chỉ có 03 ca kiểm thử nên thời gian sinh và thực thi rất ít.
Với bộ 3 ca kiểm thử thì phương pháp này không phát hiện được lỗi nào của chương trình.
3
Phân lớp tương đương truyền thống
7
Thời gian cho việc kiểm thử 07 ca kiểm thử.
Phát hiện ra cả 03 lỗi liên quan đến 3 trường hợp: 1. Trường hợp DHoa <0 2. Trường hợp DHoa >10 3. Trường hợp DToan >10 4 Kiểm thử giá trị biên cơ bản 15
Tốn thời gian cho việc sinh và thực thi 15 ca kiểm thử.
Với 15 ca kiểm thử được sinh ra, phương pháp này không có khả năng phát hiện ra bất cứ một lỗi nào.
5 Kiểm thử giá trị
biên mở rộng 21
Cần thời gian và công sức cho việc tạo và thực thi 21 ca kiểm thử.
Phát hiện ra cả 3 lỗi của chương trình.
4.3. Thiết kế ca kiểm thử cho bài toán có các biến phụ thuộc. 4.3.1. Bài toán 4.3.1. Bài toán
“NextDate” được coi là một ví dụ lý tưởng minh họa cho trường hợp các biến đầu vào có quan hệ logic phức tạp và phụ thuộc lẫn nhau. Với bài toán này, chúng ta sẽ khảo sát, thực thi việc sinh các ca kiểm thử áp dụng cho các phương pháp sau: Kiểm thử giá trị biên (kiểm thử giá trị biên cơ bản, kiểm thử giá trị biên mở rộng), phân hoạch tương đương (phân hoạch tương đương yếu, phân hoạch tương đương mạnh, phân hoạch tương đương truyền thống) và kiểm thử dựa trên bảng quyết định.
Ý tưởng cơ bản của bài toán “NextDate” là cho phép người dùng nhập vào một ngày bất kì (gọi là Current date) và hệ thống sẽ trả về ngày tiếp theo (gọi là Next date) tương ứng với ngày nhập vào. Current date và Next date sẽ được biểu diễn qua 3 biến ngày, tháng, năm (tương ứng Day, Month, Year). Hệ thống yêu cầu các giá trị đầu vào phải đúng định dạng, hợp logic và với giả thiết chỉ khảo sát các năm nằm trong khoảng 1812<= Year <=2012. Như vậy ta xác định được miền giá trị đầu vào của các biến như sau:
1<= Date <=31 1<=Month <=12 12<= Year <=2012 Hơn nữa theo logic thực tế thì:
Các tháng có 31 ngày bao gồm: 1,3,5,7,8,10,12 Các tháng có 30 ngày gồm: 4,6,9,11
Tháng 2 có 28 ngày với năm thường và 29 ngày với năm nhuận
Năm nhuận được định nghĩa là năm chia hết cho 4 nhưng không chia hết cho 100 Ta xây dựng chương trình cho hàm “NextDate” với giao diện như hình 4.2. Với chương trình thực nghiệm này, người dùng chỉ cần nhập vào ngày hiện tại (kí hiệu là Current date) thông qua các giá trị Day, Month, Year. Khi đó chức năng của hàm “NextDate” sẽ trả về ngày tiếp theo tương ứng với ngày hiện tại và được thể hiện qua giá trị của các ô textbox Next.Day, Next.Month và Next.Year. Trong trường hợp giá trị của các biến đầu vào không hợp lệ, hệ thống sẽ báo lỗi cho người dùng qua các thông điệp. Người dùng cũng có thể xem lại danh sách các bản ghi mà mình đã kiểm thử trong mục “List of Test Records”.
Hình 4.2. Giao diện bài toán “NextDate”.
4.3.2. Áp dụng các phƣơng pháp kiểm thử để sinh ca kiểm thử 4.3.2.1. Phƣơng pháp phân tích giá trị biên cơ bản
Lý thuyết sinh ca kiểm thử theo phương pháp phân tích giá trị biên cơ bản đã khảo sát ở chương 3 giúp chúng ta có được danh sách các giá trị biên cần kiểm thử cho các biến đầu vào Date, Month, Year như bảng 4.9.
Bảng 4.9 Các giá trị biên cơ bản cho bài toán “NextDate”
min min+ norm max- max