1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

71 21 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 71
Dung lượng 774,16 KB

Nội dung

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN THỊ KHÁNH CHI 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 LUẬN VĂN THẠC SĨ Ngành: Kỹ Thuật Phần Mềm HÀ NỘI – 2019 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN THỊ KHÁNH CHI 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 Ngành: Kỹ Thuật Phần Mềm Chuyên ngành: Kỹ Thuật Phần Mềm Mã số: 848 01 03.01 LUẬN VĂN THẠC SĨ Ngành: Kỹ Thuật Phần Mềm NGƢỜI HƢỚNG DẪN KHOA HỌC: PGS TS Phạm Ngọc Hùng HÀ NỘI – 2019 VIETNAM NATIONAL UNIVERSITY, HANOI UNIVERSITY OF ENGINEERING AND TECHNOLOGY NGUYEN THI KHANH CHI A METHOD FOR AUTOMATED TEST DATA GENERATION FROM SOURCE CODE AND APPLICATION IN BUILDING PROGRAMMING MARKING SYSTEM THE MS THESIS Major: InformationTechnology Supervisor: Assoc Prof Pham Ngoc Hung HANOI - 2019 i MỤC LỤC MỤC LỤC i LỜI CẢM ƠN iii TÓM TẮT iv ABSTRACT v LỜI CAM ĐOAN vi DANH MỤC THUẬT NGỮ VIẾT TẮT vii DANH MỤC HÌNH VẼ viii DANH MỤC BẢNG x Chương 1: Mở đầu .1 Chương 2: Phương pháp sinh liệu kiểm thử dòng điều khiển 2.1 Tổng quan kiểm thử dòng điều khiển 2.2 Các tiêu chí kiểm thử 2.3 Xây dựng đồ thị dòng điều khiển 2.3.1.Xây dựng đồ thị dòng điều khiển ứng với tiêu chí phủ câu lệnh phủ nhánh 2.3.2 Xây dựng CFG ứng với tiêu chí phủ điều kiện 2.3.3 Phương pháp xây dựng CFG từ mã nguồn Java 10 2.4 Sinh đường kiểm thử từ đồ thị 12 2.4.1 Sinh đường thỏa mãn tiêu chí phủ câu lệnh 12 2.4.2 Sinh đường thỏa mãn tiêu chí phủ nhánh 13 2.4.3 Sinh đường thỏa mãn tiêu chí phủ điều kiện 13 2.4.4 Phương pháp sinh đường kiểm thử đồ thị 14 2.5 Sinh ca kiểm thử từ đường 15 2.5.1 Sinh liệu kiểm thử 15 2.5.2 Sinh đầu mong muốn 17 2.6 Sinh ca kiểm thử giá trị biên vòng lặp 17 2.6.1.Sinh ca kiểm thử giá trị biên 18 2.6.2 Sinh ca kiểm thử vòng lặp 19 Chương 3: Công cụ thực nghiệm 22 ii 3.1 Đặc tả hệ thống chấm lập trình 22 3.1.1 Danh sách tác nhân 22 3.1.2 Mô tả ca sử dụng hệ thống: 24 3.2 Kiến trúc tổng thể hệ thống chấm lập trình 27 3.3 Kiến trúc mô-đun sinh ca kiểm thử tự động 28 3.4 Giới thiệu công cụ sinh ca kiểm thử tự động 29 3.3.1.Giao diện công cụ sinh ca kiểm thử tự động 29 3.3.2.Đồ thị dòng điều khiển 29 3.3.3.Tập đường kiểm thử 31 3.3.4 Tập ca kiểm thử 31 3.5 Kết thực nghiệm 33 Bài toán 1: Bài toán kiểm tra năm nhuận 33 Bài tốn 2: Bài tốn tính số ngày tháng 35 Bài tốn 3: Tìm ước số chung lớn 40 3.6 Ý nghĩa thực nghiệm 44 Chương 4: Kết luận 46 TÀI LIỆU THAM KHẢO 47 iii LỜI CẢM ƠN Trước tiên, xin gửi lời cảm ơn chân thành sâu sắc đến người thầy đáng kính PGS TS Phạm Ngọc Hùng - người trực tiếp hướng dẫn, bảo giúp đỡ suốt q trình tơi học tập nghiên cứu trường Nhờ có lịng tốt thầy, say mê nghiên cứu khoa học, kiến thức uyên thâm hướng dẫn tận tình, tơi vượt qua khó khăn từ phía gia đình để tiếp tục học tập, nghiên cứu hoàn thiện luận văn Tôi xin chân thành cảm ơn thầy cô giáo khoa Công nghệ thông tin, trường Đại học Công nghệ, Đại học Quốc Gia Hà Nội nhiệt tình giảng dạy, truyền đạt kiến thức quý báu suốt q trình tơi học tập nghiên cứu trường Tôi xin chân thành cảm ơn người thân gia đình, bạn bè, đồng nghiệp ln tạo điều kiện, giúp đỡ động viên công tác nghiên cứu khoa học Cuối cùng, xin cảm ơn ban giám hiệu trường THPT Ngô Gia Tự - Từ Sơn Bắc Ninh nơi công tác, đồng nghiệp em học sinh khối 11 tạo điều kiện tối đa, đóng góp nhận xét khách quan cho đề tài nghiên cứu để tơi hồn thành luận văn Thạc sỹ trường Đại học Công nghệ - Đại học Quốc Gia Hà Nội iv TÓM TẮT Luận văn tập trung nghiên cứu phương pháp sinh ca kiểm thử từ mã nguồn ứng dụng việc tự động chấm tập lập trình học sinh viết ngôn ngữ Java nhằm hỗ trợ giáo viên Tin học Trường Trung học phổ thông/Trung học sở việc sinh ca kiểm thử chấm tập lập trình học sinh Với tập, giáo viên cung cấp mã nguồn mẫu (mã nguồn khơng có lỗi) Dựa vào mã nguồn này, tiến hành phân tích nhằm xây dựng đồ thị dịng điều khiển mã nguồn Tiếp đến, đường đồ thị ứng với dịng điều khiển có chương trình sinh Từ đường này, xây dựng hệ ràng buộc chứa điều kiện tham số Việc sinh liệu kiểm thử đường thực thi việc giải hệ ràng buộc đường tương ứng Khi có liệu kiểm thử, sử dụng đầu mã nguồn chuẩn để sinh giá trị đầu mong muốn tương ứng Cùng với ca kiểm thử sinh ra, luận văn nghiên cứu giải pháp để sinh ca kiểm thử cho vòng lặp sinh ca kiểm thử biên tham số ứng với miền giá trị đặc tả toán Luận văn tiến hành xây dựng công cụ hỗ trợ áp dụng thử nghiệm với chương trình đơn giản nhằm minh chứng cho tính đắn tính hiệu phương pháp đề xuất Tuy nhiên, công cụ cài đặt chưa hoàn thiện cần tiếp tục phát triển nhằm có cơng cụ hỗ trợ giáo viên nêu Từ khóa: Kiểm thử tự động, sinh liệu kiểm thử, độ phủ kiểm thử, kiểm thử hộp trắng v ABSTRACT The thesis focuses on studying the method of testing data from source code and applying in automatically marking students' programming exercises written in Java language to support Informatics teachers at high schools information / junior high school in testing test cases and marking students' programming exercises For each teacher exercise, the teacher will provide sample source code (source code without errors) Based on this source code, we will conduct source code analysis to build control line graph of source code Next, we will generate the graph's paths corresponding to the possible control lines of the program From these paths, we will build the binding system without the conditions of the parameters Generating test data corresponding to the corresponding path is the finding of a solution of the corresponding system of equations Whenever there is test data, we will use the specification to generate the desired output values Along with the test cases as born, the thesis also studies solutions to generate test cases for loops and generate test cases at the boundaries of each parameter corresponding to the value domain and specification of the problem The thesis has also developed support tools and applied experiments with simple programs to demonstrate the correctness and effectiveness of the proposed method However, the installation tool has not been completed and needs to be further developed in order to have a teacher support tool as mentioned above Keywords: Automated testing, test data generation, test coverage, white-box testing vi LỜI CAM ĐOAN Tôi xin cam đoan luận văn Thạc sỹ Công nghệ thông tin "Phương pháp sinh liệu kiểm thử từ mã nguồn ứng dụng xây dựng hệ thống chấm tập lập trình" cơng trình nghiên cứu tơi hướng dẫn Thầy hướng dẫn, không chép lại người khác Trong toàn nội dung luận văn, điều trình bày cá nhân tơi tổng hợp từ nguồn tài liệu khác Tất nguồn tài liệu tham khảo có trích dẫn cụ thể hợp pháp Tơi xin hồn tồn chịu trách nhiệm chịu hình thức kỷ luật theo quy định trường Đại học Công Nghệ - Đại học Quốc Gia Hà Nội cho lời cam đoan Hà Nội, ngày 26 tháng 03 năm 2019 Nguyễn Thị Khánh Chi vii DANH MỤC THUẬT NGỮ VIẾT TẮT STT 36 public int songay(intthang, intnam) { int ngay=0; if(((thang12))||(nam9999)){ return -1; }else { swiTch (thang) { case 1: case 3: case 5: case 7: 10 case 8: 11 case 10: 12 case 12:{ 13 ngay=31; 14.break; } 15 case 4: 16 case 6: 17 case 9: 18 case 11:{ 19 ngay=30; 20 break; } 21 case 2:{ 22 if((nam%400==0)||((nam%4==0)&&(nam%100!=0))){ 23 ngay=29; 24 }else { 25 ngay=28; } 26 break; }}} 27 return ; }} Hình 3.14 Mã nguồn chuẩn hàm songay Chúng ta sử dụng công cụ để sinh ca kiểm thử với độ phủ cao cho hàm songay (phủ điều kiện con) Chi tiết ca kiểm thử hiển thị Hình 3.15 Tập ca kiểm thử dùng để kiểm thử tập học sinh có mã nguồn Hình 3.16 Hình 3.17 Hình 3.15 Chi tiết ca kiểm thử cho tiêu chí phủ điều kiện hàm songay 37 public int songayhs_1(intthang, intnam) { int ngay=0; if(((thang12))||(nam9999)){ return -1; }else { switch (thang) { case 1: case 3: case 5: case 7: 10 case 8: 11 case 10: 12 case12:{ 13 ngay=31; 14 break; } 15 case 4: 16 case 6: 17 case 9: 18 case11:{ 19 ngay=30; 20 break; } 21 case 2: ngay=28; 22 break; } } 23 return ;}} Hình 3.16 Mã nguồn hàm songayhs_1 học sinh thứ public int songayhs_2(intthang, intnam) { intngay=0; swiTch (thang) { case 1: case 3: case 5: case 7: case 8: case 10: case12:{ ngay=31; break; } case 4: case 6: case 9: case11:{ ngay=30; break; } case2:{ if((nam%400==0)||((nam%4==0)&&(nam%100!=0))){ ngay=29; }else { ngay=28; } break; } } returnngay ;}} Hình 3.17 Mã nguồn hàm songayhs_2 học sinh thứ hai 38 Sau thực kiểm thử tập hai học sinh, kết ghi lại Bảng 3.6 Với hàm, thực 19 ca kiểm thử Hình 3.15 Trên mã nguồn học sinh thứ phát hai ca kiểm thử lỗi (xảy ca kiểm thử số số 5) Trên mã nguồn học sinh thứ hai, phát ba ca kiểm thử (xảy ca kiểm thử thứ 1, thứ 17 thứ 19) Bảng 3.6 Kết kiểm thử tập tính số ngày tháng hai học sinh Hàm kiểm thử songay_1(int thang, int nam) songay_2(int thang, int nam)  Kiểm thử giá trị biên cho hàm songay Ta tiếp tục phân tích hàm songay để sinh ca kiểm thử giá trị biên Hàm nhận hai biến đầu vào thang có miền xác định [1,12] nam có miền xác định [0,9999] Với biến thang, ta chọn giá trị biên cận biên để thực kiểm thử 0, 1, 2, 11, 12, 13 giá trị dại diện cho giá trị thông thường thang Với biến nam, ta chọn giá trị biên cận biên để thực kiểm thử -1, 0, 1, 9998, 9999, 10000 giá trị 5000 đại diện cho giá trị thông thường nam Đầu hàm hai giá trị thang, nam thỏa mãn biểu thức điều kiện mã nguồn Các ca kiểm thử thỏa mãn nhánh case kiểm tra tháng từ tháng đến tháng 12 sinh công cụ nên ta không thực lại Ta quan tâm đến biểu thức điều kiện case kiểm tra tháng hàm Tại dòng 22, biến đầu hàm giá trị year thỏa mãn biểu thức(year%400==0)||((year%4==0) &&(year%100! =0) Toán tử liên kết biểu thức (year%400==0) ((year %4==0)&&(year%100!=0) toán tử "||" nên câu lệnh 22 hai biểu thức Ta chọn giá trị biên để kiểm thử cho biểu thức ( year %400==0) year=2000, giá trị cận biên 1999 2001 Với biểu thức ((year%4==0)&&(year %100!=0)), ta chọn giá trị kiểm thử year = 1996 làm giá trị biên, giá trị cận biên 1995, 1997 Bảng 3.7 mô tả ca kiểm thử giá trị biên cho hàm songay Các liệu kiểm thử sử dụng để kiểm thử giá trị biên cho tập học sinh Kết kiểm thử giá trị biên hai tập học sinh ghi lại Bảng 3.8 Với mã nguồn của học sinh thứ nhất, phát bảy ca kiểm thử lỗi biên Trên mã nguồn học sinh thứ hai, phát mười ba ca kiểm thử lỗi biên So với ca kiểm thử sinh từ công cụ, ca kiểm thử giá trị biên giúp phát thêm lỗi xảy làm học sinh 39 Bảng 3.7 Các ca kiểm thử giá trị biên cho hàm songay Input STT th 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 Bảng 3.8 Kết kiểm thử giá trị biên tập tính số ngày tháng hai học sinh Hàm kiểm thử songay_1(int thang, int nam) songay_2 (int thang, int nam) 40 Bài tốn 3: Tìm ước số chung lớn Hình 3.18 mã nguồn chuẩn hàm timuscln mà ta dùng để sinh ca kiểm thử cho tốn tìm ước số chung lớn hai số nguyên Hàm nhận giá trị đầu vào hai số nguyên x y, đầu ước số chung lớn x y public int timuscln(intx, inty) { if(x

Ngày đăng: 11/11/2020, 22:21

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w