XÂY DỰNG CÔNG cụ KIỂM THỬ tự ĐỘNG CHO các CHƯƠNG TRÌNH c

59 482 0
XÂY DỰNG CÔNG cụ KIỂM THỬ tự ĐỘNG CHO các CHƯƠNG TRÌNH c

Đ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

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Nguyễn Đức Anh XÂY DỰNG CÔNG CỤ KIỂM THỬ TỰ ĐỘNG CHO CÁC CHƯƠNG TRÌNH C 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ÂY DỰNG CÔNG CỤ KIỂM THỬ TỰ ĐỘNG CHO CÁC CHƯƠNG TRÌNH C 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ểm thử hiệu hay sử dụng sinh ca kiểm thử kiểm thử hộp trắng dòng điều khiển Để tiết kiệm chi phí kiểm thử phần mềm, trình sinh ca kiểm thử nên tự động hóa hết mức Trong đó, công cụ kiểm thử tập trung vào thực thi ca kiểm thử mà quan tâm đến sinh ca kiểm thử tự động Một vài công cụ kiểm thử sinh ca kiểm thử tự động số lượng ca kiểm thử 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ểm thử Vì thế, khóa luận đề xuất phương pháp sinh ca kiểm thử tự động cho hàm C chứa biến số nguyên, số thực biến mảng sử dụng kĩ thuật kiểm thử hộp trắng dòng điều khiển theo hướng tĩnh cài đặt công cụ hỗ trợ CFT4CUnit Đầu vào gồm hàm C tiêu chí phủ kiểm thử phủ Đầu gồm tập ca kiểm thử thỏa mãn tiêu chí phủ kiểm thử tập ca kiểm thử để kiểm thử 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ểm thử Sau đó, đồ thị dòng điều khiển phân tích để xây dựng tập đường kiểm thử Tiếp theo, đường kiểm thử chứa vòng lặp cấu trúc lại để sinh thêm đường kiểm thử dùng kiểm thử tính đắn vòng lặp Kế tiếp, đường kiểm thử phân tích kĩ thuật SE để xây dựng hệ ràng buộc tương ứng Cuối cùng, hệ ràng buộc giải để sinh ca kiểm thử cách kết hợp kĩ thuật sinh ngẫu nhiên tận dụng mạnh công cụ 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ểm thử tối thiểu mà đảm bảo tính đắn cao mã nguồn Ngoài ra, thời gian sinh ca kiểm thử 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ụng công cụ SMT-Solver Từ khóa: Kiểm thử 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ểm thử tự động cho hàm C trì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ông cụ kiểm thử tự động trì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ểm thử hộp trắng dòng điều khiển 2.1 Tổng quan kĩ thuật kiểm thử hộp trắng dòng điều khiển 2.2 Quy trình chung kiểm thử hộp trắng dòng điều khiển theo hướng động 2.3 Quy trình chung kiểm thử 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ểm thử 2.3.2 Đồ thị dòng điều khiển 2.3.3 Đường kiểm thử 2.4 So sánh kĩ thuật kiểm thử 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ình kiểm thử hộp trắng dòng điều khiển 11 Chương Phương pháp kiểm thử tự động hàm C sử dụng kĩ thuật kiểm thử 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ểm thử 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ây dựng tập đường kiểm thử từ đồ thị dòng điều khiển 16 3.3.1 Xây dựng tập đường độc lập 16 3.3.2 Xây dựng đường kiểm thử vòng lặp 17 3.3.2.1 Kiểm thử đường chứa vòng lặp đơn 18 3.3.2.2 Kiểm thử đường chứa hai vòng lặp lồng 19 3.4 Sinh tập liệu kiểm thử từ tập đường kiểm thử 20 3.4.1 Xây dự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ểm thử 29 Chương Thực nghiệm 31 4.1 Các thư 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ông cụ kiểm thử tự động hàm C 32 4.2.1 Tổng quan công cụ CFT4CUnit 32 4.2.1 Đầu vào công cụ 33 4.2.2 Đầu công cụ 34 4.2.2.1 Đồ thị dòng điều khiển 34 4.2.2.2 Tập đường kiểm thử 35 4.2.2.3 Tập ca kiểm thử 36 4.2.2.4 Biểu thức chuẩn SMT-Lib 37 4.2.2.5 Kiểm thử vòng lặp đơn 37 4.2.2.6 Kiểm thử 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ông cụ đề xuất [5] PathCrawler 40 Bảng Kiểm thử vòng lặp đơn sử dụng công cụ CFT4CUnit 40 Bảng Kiểm thử hai vòng lặp lồng hàm SelectionSort sử dụng công cụ 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ông cụ CFT4CUnit Hình 4.2 Giao diện công cụ CFT4CUnit 4.2.1 Đầu vào công cụ Đầu vào công cụ 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ông cụ Hình 4.3 Ví dụ đầu vào công cụ CFT4CUnit 33 4.2.2 Đầu công cụ 4.2.2.1 Đồ thị dòng điều khiển Công cụ 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ểm thử đườ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ểm thử 4.2.2.2 Tập đường kiểm thử Các đường kiểm thử 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ểm thử thỏa mãn tiêu chí phủ câu lệnh Thẻ Phủ nhánh danh sách tập đường kiểm thử thỏa mãn tiêu chí phủ nhánh Thẻ Phủ điều kiện đưa tập đường kiểm thử 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ểm thử thỏa mãn phủ câu lệnh hàm foo Hình 4.8 Tập đường kiểm thử thỏa mãn phủ nhánh hàm foo 35 Hình 4.9 Tập đường kiểm thử 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ểm thử phủ nhánh phủ câu lệnh hàm foo 4.2.2.3 Tập ca kiểm thử Người dùng nhấn vào nút Tìm ca kiểm thử để sinh ca kiểm thử thời gian thực Tùy vào loại hệ ràng buộc cần giải mà công cụ 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ểm thử 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ương trình tự độ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ểm thử 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ểm thử màu đỏ 4.2.2.5 Kiểm thử vòng lặp đơn Để kiểm thử 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ểm thử để sinh tập ca kiểm thử đánh giá tính đắn vòng lặp Tập ca kiểm thử hiển thị thẻ Kiểm thử vòng lặp đơn gồm thông tin: số lần lặp, đường kiểm thử 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ểm thử 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ểm thử vòng lặp đơn hàm tinh_tong 4.2.2.6 Kiểm thử vòng lặp lồng Để kiểm thử đường kiểm thử 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ểm thử để sinh ca kiểm thử đánh giá tính đắn vòng lặp Thẻ Kiểm thử vòng lặp hiển thị tập ca kiểm thử kiểm tra vòng lặp Thẻ Kiểm thử vòng lặp hiển thị tập ca kiểm thử kiểm tra vòng lặp bên Hình 4.14 Kiểm thử đường kiểm thử 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ểm thử ba công cụ: công cụ theo phương pháp đề xuất CFT4CUnit, công cụ đề xuất [5] công cụ PathCrawler Đầu vào ba công cụ hàm C với biến số nguyên, số thực biến mảng Đầu ba công cụ tập ca kiểm thử 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ông cụ CFT4CUnit, công cụ đề xuất [5] PathCrawler Công cụ CFT4CUnit có độ phủ điều kiện con, công cụ đề 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ểm thử Ngược lại, kĩ thuật kiểm thử luồng điều khiển hướng tĩnh bộc lộ ưu điểm sinh tập ca kiểm thử thành công phát lỗi Công cụ đề xuất [5] phát lỗi tiềm ẩn so với CFT4CUnit không sinh tập ca kiểm thử phủ điều kiện Với ví dụ UCLN, PathCrawler gặp phải lỗi interrupted ca kiểm thử dễ sinh hệ ràng buộc dài Các hệ ràng buộc xây dựng cách phủ định hệ ràng buộc nêu phức tạp Do đó, trình tìm ca kiểm thử 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ểm thử Ngược lại, CFT4CUnit công cụ [5] sinh thành công ca kiểm thử Trong ví dụ Grade, PathCrawler sinh tới 12 ca kiểm thử hai công cụ lại sinh số ca kiểm thử nhiều mà phát lỗi Xét ví dụ Average, CFT4CUnit phát lỗi công cụ đề 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ểm thử thỏa mãn tiêu chí phủ điều kiện thay phủ nhánh Trong đó, PathCrawler sinh tới 21 ca kiểm thử 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ông cụ đề 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ông cụ đề xuất [5] PathCrawler CFT4CUnit Công cụ đề xuất [5] PathCrawler Hàm C Số lỗi Số đường kiểm thử Số lỗi Số đường kiểm thử Số lỗi Số đường kiểm thử 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ểm thử đánh giá vòng lặp sinh công cụ CFT4CUnit Công cụ đề xuất [5] không sinh ca kiểm thử cho vòng lặp Kĩ thuật kiểm thử vòng lặp PathCrawler có 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ểm thử có vòng lặp chép số lần cụ thể ca kiểm thử thỏa mãn, cột ca kiểm thử ghi dấu “-“ Bảng Kiểm thử vòng lặp đơn sử dụng công cụ CFT4CUnit Mã nguồn Đường chứa vòng lặp tập đường độc lập UCLN !(m

Ngày đăng: 17/04/2017, 23:02

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan