Bài toán kiểm tra năm nhuận

Một phần của tài liệu (LUẬN văn THẠC sĩ) phương pháp sinh dữ liệu kiểm thử tự động từ mã nguồn và ứng dụng xây dựng hệ thống chấm bài lập trình (Trang 46 - 48)

Hình 3.10 là mã nguồn chuẩn của hàm laNamNhuan sử dụng để sinh các ca kiểm thử cho bài toán kiểm tra năm nhuận. Hàm nhận giá trị đầu vào là một số nguyên dương year ghi nhận năm. Đầu ra của hàm là giá trị 1 nếu year thỏa mãn điều kiện là năm nhuận, ngược lại hàm trả về giá trị 0. Biết rằng, năm nhuận là năm chia hết cho 400 hoặc chia hết cho 4 nhưng không chia hết cho 100.

Để kiểm tra được hết các trường hợp xảy ra trên mã nguồn, ta sẽ sinh các ca kiểm thử ứng với tiêu chí phủ cao nhất của mã nguồn chuẩn. Các ca kiểm thử này sẽ là tiêu chí đánh giá chất lượng bài tập của học sinh. Ngoài ra, để có một bộ ca kiểm thử đầy đủ, ta cần phân tích mã nguồn để sinh thêm các ca kiểm thử giá trị biên và vòng lặp (nếu có).

Hình 3.10.Mã nguồn chuẩn của hàm laNamNhuan

Các ca kiểm thử được công cụ sinh cho tiêu chí phủ điều kiện con của hàm

laNamNhuan được thể hiện trong Hình 3.11.

Hình 3.11. Chi tiết ca kiểm thử cho tiêu chí phủ điều kiện con của ham laNamNhuan

public int laNamNhuan(intyear) {

if(year<0)

return -1;

if((year%400==0)||((year%4==0)&&(year%100!=0)))

return 1;

else

return 0;

}

Chúng ta sẽ sử dụng tập ca kiểm thử như Hiình 3.11 để thực hiện kiểm thử trên bài tập của hai học sinh có mã nguồn thể hiện ở Hình 3.12 và Hình 3.13. Với mỗi hàm, chúng ta cần thực hiện năm ca kiểm thử. Dữ liệu kiểm thử được lấy từ cột "Testcase", giá trị đầu ra mong muốn của mỗi ca kiểm thử được so sánh với giá trị "EO".

Hình 3.12.Mã nguồn hàm laNamNhuan1 của học sinh thứ nhất

Hình 3.13.Mã nguồn hàm laNamNhuan2 của học sinh thứ hai

Sau khi thực hiện kiểm thử trên mã nguồn của hai học sinh, kết quả kiểm thử được ghi lại trong Bảng 3.3. Với mã nguồn của học sinh thứ nhất, phát hiện một ca kiểm thử lỗi (xảy ra ở ca kiểm thử số 5 trên Hình 3.11). Với mã nguồn của học sinh thứ hai, phát hiện hai ca kiểm thử lỗi (xảy ra ở ca kiểm thử số 5 và số 4).

Bảng 3.3. Kết quả kiểm thử bài tập kiểm tra năm nhuận của hai học sinh Hàm kiểm thử Số Test Số lỗi phát hiện Hàm kiểm thử Số Test Số lỗi phát hiện

laNamNhuan1(int year) 5 1

laNamNhuan2(int year) 5 2  Kiểm thử giá trị biên cho hàm laNamNhuan

Việc sinh các ca kiểm thử từ công cụ chỉ đảm bảo phủ các nhánh trên đồ thị, và thường sinh dữ liệu từ giữa miền xác định của biến, do vậy phương pháp này không kiểm tra đến các giá trị biên và cận biên của các biến. Lỗi có thể xảy ra khi các học sinh viết sai biểu thức điều khiện hoặc không kiểm tra giá trị hợp lệ của biến đầu vào. Do vậy, chúng ta cần sinh thêm các ca kiểm thử giá trị biên cho mã nguồn chuẩn để

public int laNamNhuan2(int year) {

if((year%4==0)&&(year%100!=0)) {

return 1;

else

return 0;

}

public int laNamNhuan1(int year) {

if((year%400==0)||((year%4==0)&&(year%100!=0)))

return 1;

else

return 0;

}

tập ca kiểm thử đạt độ phủ cao hơn. Bảng 3.4 là các ca kiểm thử giá chị biên cần thực hiện cho hàm laNamNhuan. Phương pháp sinh các ca kiểm thử biên cho hàm

laNamNhuan đã trình bày trong ví dụ ở Chương 2.

Bảng 3.4. Các ca kiểm thử giá trị biên cho hàm laNamNhuan

STT Input EO RO 1 -1 -1 2 0 0 3 1 0 4 500 0 5 1995 0 6 1996 1 7 1997 0 8 1999 0 9 2000 1 10 2001 0 11 9998 0 12 9999 0 13 10000 -1

Chúng ta thực hiện kiểm thử giá trị biên trên hai bài tập của học sinh, kết quả ghi lại trong Bảng 3.5. Với mã nguồn của học sinh thứ nhất, phát hiện ra hai ca kiểm thử lỗi (xảy ra ở ca kiểm thử thứ 1 và thứ 13 trên Bảng 3.4). Với mã nguồn của học sinh thứ hai, phát hiện ba ca kiểm thử lỗi (xảy ra ở ca kiểm thử thứ 1, thứ 2, thứ 9 và thứ 13). So với các ca kiểm thử sinh ra từ công cụ, các ca kiểm thử giá trị biên giúp phát hiện thêm các lỗi trên mã nguồn của học sinh.

Bảng 3.5. Kết quả kiểm thử giá trị biên bài tập kiểm tra năm nhuận của hai học sinh Hàm kiểm thử Số Test Số lỗi phát hiện

laNamNhuan1(int year) 13 2

laNamNhuan2(int year) 13 4

Một phần của tài liệu (LUẬN văn THẠC sĩ) phương pháp sinh dữ liệu kiểm thử tự động từ mã nguồn và ứng dụng xây dựng hệ thống chấm bài lập trình (Trang 46 - 48)

Tải bản đầy đủ (PDF)

(60 trang)