Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 59 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
59
Dung lượng
2,99 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Nguyễn Đức Anh XÂYDỰNGCÔNGCỤKIỂMTHỬTỰĐỘNGCHOCÁCCHƯƠNGTRÌNHC KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Công nghệ thông tin HÀ NỘI – 2015 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Nguyễn Đức Anh XÂYDỰNGCÔNGCỤKIỂMTHỬTỰĐỘNGCHOCÁCCHƯƠNGTRÌNHC KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Công Nghệ Thông Tin Cán hướng dẫn: TS Phạm Ngọc Hùng (ký tên) HÀ NỘI - 2015 VIETNAM NATIONAL UNIVERSITY, HANOI UNIVERSITY OF ENGINEERING AND TECHNOLOGY Nguyen Duc Anh A METHOD AND TOOL SUPPORTING FOR AUTOMATED TESTING OF C PROGRAMS THE BS THESIS Major: Information Technology Supervisor: Dr Pham Ngoc Hung LỜI CẢM ƠN HA NOI - 2015 LỜI CẢM ƠN Đầu tiên, xin gửi lời cám ơn chân thành tới Tiến sĩ Phạm Ngọc Hùng – giảng viên môn Công Nghệ Phần Mềm – người hướng dẫn tận tình, tỉ mỉ, chu đáo suốt hai năm làm khóa luận tốt nghiệp Quãng thời gian thầy hướng dẫn giúp học hỏi, đúc kết nhiều kinh nghiệm phương pháp nghiên cứu, kĩ giao tiếp, kĩ làm việc nhóm, kĩ trình bày Thầy truyền cho lửa yêu nghiên cứu khoa học, niềm tin vượt qua khó khăn sống dạy cách vượt qua khó khăn Tôi cảm thấy tự hào may mắn sinh viên thầy hướng dẫn năm tháng đại học Ngoài ra, xin gửi lời cám ơn chân thành đến tập thể lớp K56 giúp đỡ nhiệt tình để hoàn thành khóa luận cho đạt hiệu cao Các bạn giúp đỡ hành động, lời nói gặp khó khăn, thất bại Bốn năm bên dài tôi, quãng thời gian tuyệt vời quên Tiếp theo, xin gửi lời cảm ơn đến thầy cô giảng viên Trường Đại học Công Nghệ - Đại học Quốc Gia Hà Nội – người tận tâm truyền đạt kiến thức quý báu làm tảng để tiếp tục xa lĩnh vực công nghệ thông tin Cuối cùng, xin cảm ơn gia đình nuôi khôn lớn để trở thành người có ích cho xã hội, giúp có điểm tựa vững để yên tâm học hành suốt bao năm qua Tôi xin gửi lời cám ơn chân thành tới cha, mẹ, em gái động viên cổ vũ tôi gặp khó khăn thử thách Hà Nội, ngày 03 tháng 05 năm 2014 Sinh viên Nguyễn Đức Anh TÓM TẮT Ngày nay, ngôn ngữ C ngôn ngữ lập trình phổ biến để phát triển phần mềm, đặc biệt phần mềm hệ thống Một kĩ thuật kiểmthử hiệu hay sử dụng sinh ca kiểmthửkiểmthử hộp trắng dòng điều khiển Để tiết kiệm chi phí kiểmthử phần mềm, trình sinh ca kiểmthử nên tựđộng hóa hết mức Trong đó, côngcụkiểmthử tập trung vào thực thi ca kiểmthử mà quan tâm đến sinh ca kiểmthửtựđộng Một vài côngcụkiểmthử sinh ca kiểmthửtựđộng số lượng ca kiểmthử không xác định lớn gây khó khăn cho quản lý, hạn chế thời gian sinh ca kiểmthử Vì thế, khóa luận đề xuất phương pháp sinh ca kiểmthửtựđộngcho hàm C chứa biến số nguyên, số thực biến mảng sử dụng kĩ thuật kiểmthử hộp trắng dòng điều khiển theo hướng tĩnh cài đặt côngcụ hỗ trợ CFT4CUnit Đầu vào gồm hàm C tiêu chí phủ kiểmthử phủ Đầu gồm tập ca kiểmthử thỏa mãn tiêu chí phủ kiểmthử tập ca kiểmthử để kiểmthử vòng lặp (nếu hàm C có vòng lặp) Cụ thể bước đầu tiên, mã nguồn phân tích để sinh đồ thị dòng điều khiển thỏa mãn tiêu chí phủ kiểmthử Sau đó, đồ thị dòng điều khiển phân tích để xâydựng tập đường kiểmthử Tiếp theo, đường kiểmthử chứa vòng lặp cấu trúc lại để sinh thêm đường kiểmthửdùngkiểmthử tính đắn vòng lặp Kế tiếp, đường kiểmthử phân tích kĩ thuật SE để xâydựng hệ ràng buộc tương ứng Cuối cùng, hệ ràng buộc giải để sinh ca kiểmthử cách kết hợp kĩ thuật sinh ngẫu nhiên tận dụng mạnh côngcụ SMT-Solver Kết thực nghiệm cho thấy khả phát lỗi tốt hàm C với số ca kiểmthử tối thiểu mà đảm bảo tính đắn cao mã nguồn Ngoài ra, thời gian sinh ca kiểmthử cải thiện đáng kể giải nhiều hệ ràng buộc khác kết hợp kĩ thuật sinh ngẫu nhiên sử dụngcôngcụ SMT-Solver Từ khóa: Kiểmthửtự động, hàm C, đồ thị dòng điều khiển, ca kiểm thử, Symbolic Execution, SMT-Solver ABSTRACT Nowadays, C programming language has been known as one of the most popular programming languages to develope applications, especially system applications Because of high demand in quality, testing phase is performed quite rigorously and strictly As a result, the cost of the testing phase can be up to 40% - 60% the total cost of application development process Test case generation in white-box testing is an effective technique and used widely to ensure the high quality of applications To reduce the cost of the testing phase, the test case generation process should be automated as much as possible However, some testing tools focus on executing test cases and output the testing report instead of generating test cases automatically Other testing tools assist to generate test cases automatically but the number of test cases may be a lot or un-known which cause many difficult and challenging problems such as management, time limit, etc The thesis proposes an approach how to generate test cases automatically for C Unit containing integer variables, float variables, array variables The proposed approach is based on white-box testing and implements in CFT4CUnit tool to demonstrate the effectiveness of the approach Firstly, source code is analysed to generate corresponding Control Flow Graph (CFG) Then I traverse the CFG to obtain the independent paths After that, paths containing loop is reconstructed to create some new paths used to test the loop Next, each path is analysed by using symbolic execution technique to generate corresponding constraints Finally, the process of solving the constraints is performed to find solution as fast as possible by combining random technique and SMT-Solvers The experimental result shows the effectiveness of the approach with the minimum number of test cases but ensures the high quality of source code Keywords: automated testing, C Unit, control flow testing, test case, symbolic execution, SMTSolver LỜI CAM ĐOAN Tôi xin cam đoan nghiên cứu kiểmthửtựđộngcho hàm Ctrình bày luận án chưa nộp báo cáo khóa luận trường Đại học Công Nghệ - Đại học Quốc Gia Hà Nội trường đại học khác Những viết không chép từ tài liệu, không sử dụng kết người khác mà không trích dẫn cụ thể Tôi xin cam đoan côngcụkiểmthửtựđộngtrình bày khoá luận tự phát triển, không chép mã nguồn người khác Nếu sai hoàn toàn chịu trách nhiệm theo quy định trường Đại học Công Nghệ - Đại học Quốc Gia Hà Nội Hà Nội, ngày 03 tháng 05 năm 2015 Sinh viên Nguyễn Đức Anh MỤC LỤC Chương Đặt vấn đề Chương Tổng quan kĩ thuật kiểmthử hộp trắng dòng điều khiển 2.1 Tổng quan kĩ thuật kiểmthử hộp trắng dòng điều khiển 2.2 Quy trình chung kiểmthử hộp trắng dòng điều khiển theo hướng động 2.3 Quy trình chung kiểmthử hộp trắng dòng điều khiển theo hướng tĩnh 2.3.1 Các tiêu chí phủ kiểmthử 2.3.2 Đồ thị dòng điều khiển 2.3.3 Đường kiểmthử 2.4 So sánh kĩ thuật kiểmthử hộp trắng dòng điều khiển theo hướng tĩnh động 10 2.5 Tầm quan trọng tựđộng hóa quy trìnhkiểmthử hộp trắng dòng điều khiển 11 Chương Phương pháp kiểmthửtựđộng hàm C sử dụng kĩ thuật kiểmthử hộp trắng dòng điều khiển theo hướng tĩnh 12 3.1 Tổng quan phương pháp kiểmthử hộp trắng dòng điều khiển theo hướng tĩnh 12 3.2 Sinh đồ thị dòng điều khiển từ mã nguồn 13 3.3 Xâydựng tập đường kiểmthửtừ đồ thị dòng điều khiển 16 3.3.1 Xâydựng tập đường độc lập 16 3.3.2 Xâydựng đường kiểmthử vòng lặp 17 3.3.2.1 Kiểmthử đường chứa vòng lặp đơn 18 3.3.2.2 Kiểmthử đường chứa hai vòng lặp lồng 19 3.4 Sinh tập liệu kiểmthửtừ tập đường kiểmthử 20 3.4.1 Xâydựng hệ ràng buộc 20 3.4.2 Tìm nghiệm thỏa mãn hệ ràng buộc 22 3.4.2.1 Giải hệ sử dụng kĩ thuật sinh ngẫu nhiên 22 3.4.2.2 Giải hệ sử dụng SMT-Solver 23 3.4.2.3 So sánh ưu điểm, nhược điểm hai hướng sinh ca kiểmthử 29 Chương Thực nghiệm 31 4.1 Cácthư viện hỗ trợ 31 4.1.1 Giới thiệu thư viện SMT-Solver SmtInterpol 31 4.1.2 Giới thiệu thư viện CDT 31 4.1.3 Giới thiệu thư viện Jeval 32 4.2 Giới thiệu côngcụkiểmthửtựđộng hàm C 32 4.2.1 Tổng quan côngcụ CFT4CUnit 32 4.2.1 Đầu vào côngcụ 33 4.2.2 Đầu côngcụ 34 4.2.2.1 Đồ thị dòng điều khiển 34 4.2.2.2 Tập đường kiểmthử 35 4.2.2.3 Tập ca kiểmthử 36 4.2.2.4 Biểu thức chuẩn SMT-Lib 37 4.2.2.5 Kiểmthử vòng lặp đơn 37 4.2.2.6 Kiểmthử vòng lặp lồng 38 4.2.3 Thực nghiệm 39 4.2.4 Ý nghĩa thực nghiệm 43 Chương Kết luận 45 DANH SÁCH BẢNG Bảng Độ ưu tiên toán tử 26 Bảng So sánh CFT4CUnit, côngcụ đề xuất [5] PathCrawler 40 Bảng Kiểmthử vòng lặp đơn sử dụngcôngcụ CFT4CUnit 40 Bảng Kiểmthử hai vòng lặp lồng hàm SelectionSort sử dụngcôngcụ CFT4CUnit 42 DANH SÁCH KÝ HIỆU, CHỮ VIẾT TẮT AST Abstract Syntax Tree CFG Control Flow Graph CDT C/C++ Development Tooling CVC Cooperating Validity Checker DIMACS Center for Discrete Mathematics and Theoretical Computer Science SMT-Solver Satisfiability Modulo Theories Solver SAT Boolean Satisfiability Problem T-Solver Theory-specific Solvers SE Symbolic Execution http://uet.vnu.edu.vn/~hungpn/CFT4CUnit/ Hình 4.2 mô tả giao diện tổng quan côngcụ CFT4CUnit Hình 4.2 Giao diện côngcụ CFT4CUnit 4.2.1 Đầu vào côngcụ Đầu vào côngcụ CFT4CUnit hàm C chứa biến số nguyên (kiểu int), số thực (kiểu double, float) biến mảng chiều hai chiều Chỉ số biến mảng số nguyên biểu thức Các khối lệnh điều khiển xử lí bao gồm rẽ nhánh, for, while do, while, switch case Hình 4.3 ví dụ đầu vào côngcụ Hình 4.3 Ví dụ đầu vào côngcụ CFT4CUnit 33 4.2.2 Đầu côngcụ 4.2.2.1 Đồ thị dòng điều khiển Côngcụ CFT4CUnit phân tích hàm đầu vào để sinh đồ thị dòng điều khiển thỏa mãn tiêu chí phủ câu lệnh, phủ nhánh phủ điều kiện Người sử dụng nhấn đường kiểmthử đường tương ứng CFG chuyển sang màu đỏ, thứtự thực câu lệnh hiển thị Hơn nữa, người dùng tương tác với đỉnh CFG để di chuyển sang vị trí Thẻ Đồ thị CFG phủ câu lệnh/nhánh hiển thị CFG thỏa mãn tiêu chí phủ câu lệnh phủ nhánh Thẻ Đồ thị CFG phủ điều kiện hiển thị CFG ứng với tiêu chí phủ điều kiện Hình 4.4 mô tả đồ thị CFG hàm foo nêu Hình 4.3 thỏa mãn tiêu chí phủ câu lệnh phủ nhánh Hình 4.5 hiển thị đồ thị CFG hàm foo ứng với tiêu chí phủ điều kiện Đỉnh mang nhãn Bat dau ham, đỉnh kết thúc mang nhãn Ket thuc ham Đường màu xanh lam ứng với nhánh đúng, đường màu xanh ứng với nhánh sai Hình 4.4 Đồ thị CFG thỏa mãn tiêu chí Hình 4.5 Đồ thị CFG thỏa mãn tiêu chí phủ phủ câu lệnh phủ nhánh điều kiện 34 Hình 4.6 Đường tương ứng CFG chuyển sang màu đỏ người dùng nhấn vào đường kiểmthử 4.2.2.2 Tập đường kiểmthửCác đường kiểmthử tương ứng với độ phủ sinh tựđộng hiển thị thẻ Phủ câu lệnh, Phủ nhánh Phủ điều kiện Cụ thể, thẻ Phủ câu lệnh hiển thị tập đường kiểmthử thỏa mãn tiêu chí phủ câu lệnh Thẻ Phủ nhánh danh sách tập đường kiểmthử thỏa mãn tiêu chí phủ nhánh Thẻ Phủ điều kiện đưa tập đường kiểmthử thỏa mãn tiêu chí phủ điều kiện Ngoài ra, tập đường độc lập tương ứng với độ phủ câu lệnh phủ nhánh hiển thị thẻ Tập đường độc lập Hình 4.7 Tập đường kiểmthử thỏa mãn phủ câu lệnh hàm foo Hình 4.8 Tập đường kiểmthử thỏa mãn phủ nhánh hàm foo 35 Hình 4.9 Tập đường kiểmthử thỏa mãn phủ điều kiện hàm foo Hình 4.10 Tập đường độc lập để sinh tập đường kiểmthử phủ nhánh phủ câu lệnh hàm foo 4.2.2.3 Tập ca kiểmthử Người dùng nhấn vào nút Tìm ca kiểmthử để sinh ca kiểmthử thời gian thực Tùy vào loại hệ ràng buộc cần giải mà côngcụ sử dụng kĩ thuật sinh ngẫu nhiên hay tận dụng mạnh SMT-Solver Thông tin trình SE hiển thị chi tiết thẻ Quá trình SE Ví dụ minh họa Hình 4.11 Hình 4.11 Ca kiểmthử thỏa mãn đường màu đỏ sinh theo kĩ thuật ngẫu nhiên dùng SMT-Solver 36 4.2.2.4 Biểu thức chuẩn SMT-Lib Khi người dùng nhấn vào đường kiểm thử, hệ ràng buộc thỏa mãn chuẩn SMTLib sinh tựđộng hiển thị thẻ Hệ ràng buộc chuẩn SMT-Lib Trong trình chạy, chươngtrìnhtựđộng lưu hệ dạng chuẩn SMT-Lib vào ổ C để làm đầu vào thư viện SmtInterpol Người dùng cài đặt lại đường dẫn thư viện SmtInterpol theo ý Hình 4.12 trình bày hệ ràng buộc chuẩn SMT-Lib ứng với đường màu đỏ thẻ Đồ thị CFG phủ câu lệnh/nhánh Đường màu đỏ hai đường kiểmthử thỏa mãn tiêu chí phủ câu lệnh Hình 4.12 Hệ ràng buộc chuẩn SMT-Lib tương ứng với đường kiểmthử màu đỏ 4.2.2.5 Kiểmthử vòng lặp đơn Để kiểmthử vòng lặp đơn, bước người dùng cần xác định biến lặp vòng lặp Sau đó, người dùng nhấn nút Tìm ca kiểmthử để sinh tập ca kiểmthử đánh giá tính đắn vòng lặp Tập ca kiểmthử hiển thị thẻ Kiểmthử vòng lặp đơn gồm thông tin: số lần lặp, đường kiểmthử tương ứng số lần lặp, hệ ràng buộc, ca kiểm thử, giá trị trả thông tin trình giải hệ (sử dụng SMT-Solver hay sinh ngẫu nhiên) Hình 4.13 nêu ví dụ kiểmthử vòng lặp đơn hàm tinh_tong Vòng lặp đơn không xác định số lần lặp tối đa nên vòng lặp lặp lại lần, lần, lần, số ngẫu nhiên (9 lần) 37 Hình 4.13 Kiểmthử vòng lặp đơn hàm tinh_tong 4.2.2.6 Kiểmthử vòng lặp lồng Để kiểmthử đường kiểmthử chứa hai vòng lặp lồng nhau, người dùng cần xác định biến lặp vòng lặp vòng lặp Sau đó, người dùng nhấn nút Tìm ca kiểmthử để sinh ca kiểmthử đánh giá tính đắn vòng lặp Thẻ Kiểmthử vòng lặp hiển thị tập ca kiểmthửkiểm tra vòng lặp Thẻ Kiểmthử vòng lặp hiển thị tập ca kiểmthửkiểm tra vòng lặp bên Hình 4.14 Kiểmthử đường kiểmthử chứa hai vòng lặp lồng hàm SelectionSort 38 4.2.3 Thực nghiệm Để tính hiệu phương pháp đề xuất, phần thực nghiệm đưa so sánh khả sinh ca kiểmthử ba công cụ: côngcụ theo phương pháp đề xuất CFT4CUnit, côngcụ đề xuất [5] côngcụ PathCrawler Đầu vào ba côngcụ hàm C với biến số nguyên, số thực biến mảng Đầu ba côngcụ tập ca kiểmthử Tập ví dụ thực nghiệm chia thành ba loại: tập ví dụ có câu lệnh điều kiện đơn giản, tập ví dụ có câu lệnh điều kiện phức tạp, tập ví dụ chứa vòng lặp, tập ví dụ có số biến mảng phức tạp Các tập ví dụ thực máy hệ điều hành Window 32 bit, Intel(R) Core™ i5-2410M CPU @ 2.30GHz với 6GB Ram Bảng đưa so sánh ba côngcụ CFT4CUnit, côngcụ đề xuất [5] PathCrawler Côngcụ CFT4CUnit có độ phủ điều kiện con, côngcụ đề xuất [5] PathCrawler có độ phủ nhánh Tiêu chí đánh giá số lỗi phát hàm C Trong ví dụ foo, PathCrawler gặp phải lỗi interrupted sinh thành công ca kiểmthử Ngược lại, kĩ thuật kiểmthử luồng điều khiển hướng tĩnh bộc lộ ưu điểm sinh tập ca kiểmthử thành công phát lỗi Côngcụ đề xuất [5] phát lỗi tiềm ẩn so với CFT4CUnit không sinh tập ca kiểmthử phủ điều kiện Với ví dụ UCLN, PathCrawler gặp phải lỗi interrupted ca kiểmthử dễ sinh hệ ràng buộc dài Các hệ ràng buộc xâydựng cách phủ định hệ ràng buộc nêu phức tạp Do đó, trình tìm ca kiểmthửtừ hệ ràng buộc trở nên khó khăn thời gian Kết quả, khoảng thời gian giới hạn từ trước, PathCrawler không hoàn thành trình sinh ca kiểmthử Ngược lại, CFT4CUnit côngcụ [5] sinh thành công ca kiểmthử Trong ví dụ Grade, PathCrawler sinh tới 12 ca kiểmthử hai côngcụ lại sinh số ca kiểmthử nhiều mà phát lỗi Xét ví dụ Average, CFT4CUnit phát lỗi côngcụ đề xuất [5] phát lỗi Ví dụ Average cho thấy khả phát lỗi tốt sinh tập ca kiểmthử thỏa mãn tiêu chí phủ điều kiện thay phủ nhánh Trong đó, PathCrawler sinh tới 21 ca kiểmthử không phát lỗi 39 Cuối cùng, với ví dụ ComplexIndex chứa số biến mảng dạng biểu thức, PathCrawler côngcụ đề xuất [5] không giải vấn đề Ngược lại, CFT4CUnit có trình rút gọn số mảng dạng biểu thức nên phát lỗi Bảng So sánh CFT4CUnit, côngcụ đề xuất [5] PathCrawler CFT4CUnit Côngcụ đề xuất [5] PathCrawler Hàm C Số lỗi Số đường kiểmthử Số lỗi Số đường kiểmthử Số lỗi Số đường kiểmthử Foo - - UCLN 6 - - Grade 6 12 Average 21 ComplexIndex - - - - Bảng nêu ví dụ chứa vòng lặp đơn tập ca kiểmthử đánh giá vòng lặp sinh côngcụ CFT4CUnit Côngcụ đề xuất [5] không sinh ca kiểmthửcho vòng lặp Kĩ thuật kiểmthử vòng lặp PathCrawler có tư tưởng hướng đến mục tiêu khác so với CFT4CUnit nên không nêu so sánh khóa luận Ở Bảng 3, đỉnh vào vòng lặp thoát khỏi vòng lặp bôi đậm Nếu đường kiểmthử có vòng lặp chép số lần cụ thể ca kiểmthử thỏa mãn, cột ca kiểmthử ghi dấu “-“ Bảng Kiểmthử vòng lặp đơn sử dụngcôngcụ CFT4CUnit Mã nguồn Đường chứa vòng lặp tập đường độc lập UCLN !(m