Phương pháp phân tích mã nguồn và sinh dữ liệu kiểm thử cho các dự án CC++ (Luận văn thạc sĩ)

69 181 0
Phương pháp phân tích mã nguồn và sinh dữ liệu kiểm thử cho các dự án CC++ (Luận văn thạc sĩ)

Đ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

Phương pháp phân tích mã nguồn và sinh dữ liệu kiểm thử cho các dự án CC++ (Luận văn thạc sĩ)Phương pháp phân tích mã nguồn và sinh dữ liệu kiểm thử cho các dự án CC++ (Luận văn thạc sĩ)Phương pháp phân tích mã nguồn và sinh dữ liệu kiểm thử cho các dự án CC++ (Luận văn thạc sĩ)Phương pháp phân tích mã nguồn và sinh dữ liệu kiểm thử cho các dự án CC++ (Luận văn thạc sĩ)Phương pháp phân tích mã nguồn và sinh dữ liệu kiểm thử cho các dự án CC++ (Luận văn thạc sĩ)Phương pháp phân tích mã nguồn và sinh dữ liệu kiểm thử cho các dự án CC++ (Luận văn thạc sĩ)Phương pháp phân tích mã nguồn và sinh dữ liệu kiểm thử cho các dự án CC++ (Luận văn thạc sĩ)Phương pháp phân tích mã nguồn và sinh dữ liệu kiểm thử cho các dự án CC++ (Luận văn thạc sĩ)Phương pháp phân tích mã nguồn và sinh dữ liệu kiểm thử cho các dự án CC++ (Luận văn thạc sĩ)Phương pháp phân tích mã nguồn và sinh dữ liệu kiểm thử cho các dự án CC++ (Luận văn thạc sĩ)

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Nguyễn Đức Anh PHƯƠNG PHÁP PHÂN TÍCH NGUỒN SINH DỮ LIỆU KIỂM THỬ CHO CÁC DỰ ÁN C/C++ LUẬN VĂN THẠC SĨ: KỸ THUẬT PHẦN MỀM HÀ NỘI – 2017 I ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Nguyễn Đức Anh PHƯƠNG PHÁP PHÂN TÍCH NGUỒN SINH DỮ LIỆU KIỂM THỬ CHO CÁC DỰ ÁN C/C++ Ngành: Công nghệ thông tin Chuyên ngành: Kỹ thuật phần mềm số: 60480103 LUẬN VĂN THẠC SĨ: KỸ THUẬT PHẦN MỀM Cán hướng dẫn: PGS TS Phạm Ngọc Hùng HÀ NỘI - 2017 II 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 luận văn 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 tơi lửa yêu nghiên cứu khoa học, niềm tin vượt qua khó khăn sống dạy tơi cách vượt qua khó khăn Tơi cảm thấy tự hào may mắn học viên thầy hướng dẫn năm tháng cao học Ngoài ra, xin gửi lời cám ơn chân thành đến nhóm nghiên cứu giúp đỡ tơi nhiệt tình để hoàn thành luận văn cho đạt hiệu cao Cám ơn nhóm nghiên cứu giúp đỡ tơi hành động, lời nói tơi gặp khó khăn, thất bại Hai năm bên khơng phải 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 ni tơi khơn lớn để trở thành người có ích cho xã hội, giúp tơi có điểm tựa vững để 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 25 tháng 11 năm 2017 Học viên Nguyễn Đức Anh III LỜI CAM ĐOAN Tôi xin cam đoan nghiên cứu kiểm thử tự động cho chương trình C/C++ trình bày luận văn chưa nộp báo cáo luận vă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 tơi viết khơng chép từ tài liệu, không sử dụng kết người khác 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 khố luận tơi tự phát triển, không chép nguồn người khác Nếu sai tơi hồn tồ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 25 tháng 11 năm 2017 Học viên Nguyễn Đức Anh IV MỤC LỤC Giới thiệu Tổng quan kĩ thuật kiểm thử tự động định hướng 2.1 Dữ liệu kiểm thử 2.2 Các tiêu chí độ phủ sử dụng kĩ thuật kiểm thử tự động định hướng 2.3 Đồ thị dòng điều khiển 2.4 Cây cú pháp trừu tượng 2.5 Quy trình chung kĩ thuật kiểm thử tự động định hướng Phương pháp kiểm thử tự động dự án C/C++ sử dụng kĨ thuật kiểm thử tự động định hướng 3.1 Tổng quan phương pháp đề xuất 3.2 Pha tiền xử lý nguồn 10 3.2.1 Xây dựng cấu trúc từ dự án C/C++ 10 3.2.2 Chèn câu lệnh đánh dấu vào hàm 13 3.3 Pha sinh liệu kiểm thử 14 3.3.1 Xây dựng đồ thị dòng điều khiển từ nguồn 16 3.3.2 Xếp hạng đường thi hành 18 3.3.3 Xây dựng hệ ràng buộc từ đường thi hành 19 a Mơ hình nhớ sử dụng kĩ thuật thực thi tượng trưng 20 b Xây dựng hệ ràng buộc từ đường thi hành sử dụng kĩ thuật thực thi tượng trưng 22 3.3.4 Giải hệ ràng buộc sử dụng giải SMT-Solver 24 3.4 Biên dịch thực thi liệu kiểm thử môi trường chạy 26 3.5 Tối ưu hóa pha sinh liệu kiểm thử 27 3.5.1 Đơn giản hóa hệ ràng buộc 27 V 3.5.2 Tăng tốc thời gian biên dịch thực thi liệu kiểm thử 28 3.6 Xuất nguồn kiểm thử theo chuẩn Google Test 29 Công cụ thực nghiệm 30 4.1 Giới thiệu công cụ kiểm thử tự động CFT4Cpp 30 4.2 Thư viện hỗ trợ sử dụng công cụ kiểm thử tự động CFT4Cpp 33 4.2.1 Thư viện giải hệ ràng buộc Z3 33 4.2.2 Thư viện phân tích nguồn CDT 34 4.2.3 Thư viện tính giá trị biểu thức Jeval 35 4.3 Kết thực nghiệm 35 4.3.1 So sánh số lượng liệu kiểm thử độ phủ với KLEE, CAUT, CREST, PathCrawler 35 4.3.2 Sinh liệu kiểm thử vòng lặp 40 4.3.3 So sánh thời gian biên dịch thực thi liệu kiểm thử 42 Kết luận 44 Tài liệu tham khảo 48 VI DANH SÁCH KÝ HIỆU, CHỮ VIẾT TẮT Tên đầy đủ Dynamic Symbolic Execution Tên viết tắt DSE Mô tả Kĩ thuật kiểm thử động Static Testing Kĩ thuật kiểm thử tĩnh Concolic Testing Kĩ thuật kiểm thử tự động định hướng Abstract Syntax Tree AST Cây cú pháp trừu tượng Control Flow Graph CFG Đồ thị dòng điều khiển C/C++ Development Tooling CDT Satisfiability Modulo Theories SMT-Solver Solver Boolean Satisfiability Problem SAT Symbolic Execution SE Kĩ thuật thực thi tượng trưng Path selection strategy Chiến thuật chọn đường thi hành (trong DSE) Test driver Bộ thực thi liệu kiểm thử Test data Dữ liệu kiểm thử Test path Đường thi hành (sinh từ đồ thị CFG) Modified condition/ decision MC/DC coverage Độ phủ cấp ba (hoặc phủ điều kiện con) VII DANH SÁCH BẢNG BIỂU Bảng 3.1 Danh sách quan hệ phụ thuộc lơ-gic điển hình 10 Bảng 3.2 Luật chèn câu lệnh đánh dấu vào hàm 13 Bảng 4.1 Thông tin công cụ so sánh thực nghiệm 35 Bảng 4.2 Thơng tin cấu hình ví dụ thực nghiệm 36 Bảng 4.3 Thông tin hàm kiểm thử tiêu chí độ phủ số liệu kiểm thử 37 Bảng 4.4 Kết so sánh công cụ CFT4Cpp với KLEE PathCrawler 38 Bảng 4.5 Kết so sánh công cụ CFT4Cpp với CREST CAUT 39 Bảng 4.6 Sinh liệu kiểm thử vòng lặp 41 Bảng 4.7 Bảng so sánh thời gian biên dịch thực thi liệu kiểm thử kĩ thuật cải tiến kĩ thuật truyền thống 43 DANH SÁCH THUẬT TỐN Thuật tốn 3.1 Thuật toán LDFS sinh liệu kiểm thử 15 Thuật toán 3.2 Thuật toán xây dựng hệ ràng buộc từ đường thi hành 23 DANH SÁCH HÌNH VẼ Hình 2.1 Các cấu trúc điều khiển phổ biến C/C++ Hình 3.1 Tổng quan phương pháp đề xuất Hình 3.2 Ví dụ cấu trúc dự án C/C++ điển hình 12 Hình 3.3 Minh họa đồ thị CFG phủ câu lệnh/nhánh 17 Hình 3.4 Minh họa đồ thị CFG phủ MC/DC 18 Hình 3.5 Mơ hình nhớ sử dụng kĩ thuật thực thi tượng trưng 21 Hình 3.6 Quy trình xây dựng biểu thức SMT-Lib từ ràng buộc 25 Hình 3.7 Quá trình biến đổi hệ ràng buộc chuẩn SMTLib 25 Hình 3.8 Kĩ thuật tạo thực thi ca kiểm thử tổng quát 28 VIII Hình 4.1 Kiến trúc cơng cụ CFT4Cpp 30 Hình 4.2 Giao diện cơng cụ CFT4Cpp 31 Hình 4.3 Giao diện bước cấu hình cơng cụ CFT4Cpp 32 Hình 4.4 Giao diện sinh liệu kiểm thử cho hàm Divide 32 Hình 4.5 Biên kiểm thử xuất công cụ CFT4Cpp cho hàm Divide 33 Hình 4.6 Minh họa kết giải hệ ràng buộc sử dụng Z3 34 DANH SÁCH NGUỒN nguồn 3.1 Ví dụ phần nguồn dự án C/C++ 12 nguồn 3.2 Ví dụ hàm checkFirstSubject sau chèn câu lệnh đánh dấu 14 nguồn 3.3 nguồn hàm average 17 nguồn 4.1 Minh họa hệ ràng buộc theo chuẩn SMT-Lib 34 IX TÓM TẮT Để đảm bảo chất lượng phần mềm, nhiều kĩ thuật kiểm thử khác áp dụng khiến chi phí kiểm thử tăng cao Trong đó, kiểm thử đơn vị kĩ thuật áp dụng rộng rãi công ty phần mềm để kiểm tra chất lượng nguồn, đặc biệt phần mềm nhúng viết ngôn ngữ C/C++ Kĩ thuật giúp phát sớm nhiều vấn đề tiềm ẩn quy trình xây dựng phần mềm Tuy nhiên, nhược điểm kĩ thuật kiểm thử đơn vị vấn đề chi phí tăng cao dự án lớn kĩ thuật kiểm thử xem xét tính đắn thành phần nhỏ nguồn Để giảm thiểu tốn chi phí, quy trình kiểm thử đơn vị nên tự động hóa hồn tồn Bởi thế, luận văn hướng đến xây dựng giải pháp kiểm thử tự động mức đơn vị cho dự án C/C++ Tư tưởng phương pháp đề xuất dựa kĩ thuật kiểm thử tự động định hướng Hiện nay, kĩ thuật kiểm thử tự động định hướng chứng minh tính hiệu toán kiểm thử tự động Tuy vậy, vấn đề tồn cần giải kĩ thuật kiểm thử tự động định hướng gồm vấn đề sinh liệu kiểm thử chưa đủ tốt, sinh tập liệu kiểm thử có số lượng nhỏ đạt độ phủ cao Do đó, luận văn tập trung giải toán Cụ thể, luận văn đề xuất kĩ thuật sinh liệu kiểm thử dựa thơng tin phân tích nguồn thay áp dụng kĩ thuật sinh ngẫu nhiên truyền thống kĩ thuật kiểm thử tự động định hướng Để giảm thiểu số lượng liệu kiểm thử đạt độ phủ cao, thuật toán LDFS đề xuất Để chứng minh tính hiệu phương pháp đề xuất, công cụ CFT4Cpp xây dựng dựa phương pháp đề xuất tiến hành so sánh với phương pháp kiểm thử khác gồm KLEE, PathCrawler, CAUT, CREST Kết nghiên cứu đăng hai hội nghị NICS 2016 SoICT 2017 với đánh giá khả quan tính thực tiễn phương pháp đề xuất ... Anh PHƯƠNG PHÁP PHÂN TÍCH MÃ NGUỒN VÀ SINH DỮ LIỆU KIỂM THỬ CHO CÁC DỰ ÁN C/C++ Ngành: Công nghệ thông tin Chuyên ngành: Kỹ thuật phần mềm Mã số: 60480103 LUẬN VĂN THẠC SĨ: KỸ THUẬT PHẦN MỀM Cán... trình kiểm thử đơn vị nên tự động hóa hồn tồn Bởi thế, luận văn hướng đến xây dựng giải pháp kiểm thử tự động mức đơn vị cho dự án C/C++ Tư tưởng phương pháp đề xuất dựa kĩ thuật kiểm thử tự... liệu kiểm thử có số lượng nhỏ đạt độ phủ cao Do đó, luận văn tập trung giải toán Cụ thể, luận văn đề xuất kĩ thuật sinh liệu kiểm thử dựa thông tin phân tích mã nguồn thay áp dụng kĩ thuật sinh

Ngày đăng: 19/01/2018, 10:07

Từ khóa liên quan

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

Tài liệu liên quan