Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 11 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
11
Dung lượng
2,3 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ PHAN THỊ THU HÀ PHƯƠNG PHÁP SINH DỮ LIỆU KIỂM THỬ TỰ ĐỘNG CHO CÁC ỨNG DỤNG JAVA LUẬN VĂN THẠC SĨ 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Ệ PHAN THỊ THU HÀ PHƯƠNG PHÁP SINH DỮ LIỆU KIỂM THỬ TỰ ĐỘNG CHO CÁC ỨNG DỤNG JAVA Ngành: Công nghệ thông tin Chuyên ngành: Kỹthuật phần mềm Mã Số:60.48.01.03 LUẬN VĂN THẠC SĨ NGƯỜI HƯỚNG DẪN KHOA HỌC: TS PHẠM NGỌC HÙNG Hà Nội -2015 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: GIỚI THIỆU CHƯƠNG 2: CÁC KỸ THUẬT KIỂM THỬ DÒNG ĐIỀU KHIỂN 2.1 Tổng quan kiểm thử hộp trắng 2.2 Kỹ thuật kiểm thử dòng điều khiển 10 2.2.1 Kiểm thử hộp trắng dòng điều khiển theo hướng động 10 2.2.2 Kiểm thử hộp trắng dòng điều khiển theo hướng tĩnh 12 2.3 Quy trình kiểm thử hộp trắng dòng điều khiển theo hướng tĩnh 2.3.1 Đồ thị dòng điều khiển 2.3.2 Các tiêu chí phủ kiểm thử 2.3.3 Đường kiểm thử 10 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ểnError! Book CHƯƠNG 3: PHƯƠNG PHÁP KIỂM THỬ DÒNG ĐIỀU KHIỂN HƯỚNG TĨNH CHO CÁC HÀM JAVA 15 3.1 Ý tưởng 15 3.2 Xây dựng đồ thị dòng điều khiển từ mã nguồn 16 3.3 Xây dựng tập đường kiểm thử 20 3.3.1 Xây dựng tập đường độc lập 20 3.3.2 Xây dựng đường kiểm thử vòng lặp 22 i 3.4 Xây dựng hệ ràng buộc 25 3.5 Sinh tập liệu kiểm thử dựa giải nghiệm hệ ràng buộc 27 3.5.1 Giải hệ sử dụng kỹ thuật sinh ngẫu nhiên 27 3.5.2 Giải hệ sử dụng SMT-Solver 27 CHƯƠNG 4: GIỚI THIỆU CÔNG CỤ 32 4.1 Kiến trúc công cụ 32 4.2 Nền tảng chương trình 33 4.2.1 Thư viện JDT 33 4.2.2 Bộ giải hệ Z3 Prover 34 4.3 Cài đặt công cụ 36 4.3.1 Tổng quan 36 4.2.2 Đầu vào công cụ JavaUnitCFT 36 4.2.3 Đầu công cụ 37 CHƯƠNG 5: THỰC NGHIỆM 42 5.1 Sinh liệu kiểm thử cho hàm đầu vào chứa biến số nguyên 42 5.1.1 Input 42 5.1.2 Output: 43 5.2 Sinh liệu kiểm thử cho hàm đầu vào chứa biến số thực 44 5.2.1 Input 44 5.2.2 Output 44 5.3 Sinh liệu kiểm thử cho hàm đầu vào chứa vòng lặp 47 5.3.1 Input 47 5.3.2 Output 47 CHƯƠNG 6: KẾT LUẬN 49 TÀI LIỆU THAM KHẢO 50 ii 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 thầy giáo, TS Phạm Ngọc Hùng - người trực tiếp hướng dẫn, bảo, động viên, tạo cho điều kiện tốt nhấtvà truyền cho cảm hứng nghiên cứu khoa học từ bắt đầu lựa chọn đề tài, suốt trình nghiên cứu, - tôiđã hoàn thành 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 - người đầy tâm huyết, tận tình đào tạo,cung cấp cho kiến thức chuyên môn vô quý giá.Những kiến thức không tạo cho tảng tốt trình học tập, nghiên cứu trường, mà học bổ ích, kỹ kinh nghiệm đáng quý cho suốt trình làm việc nghiên cứu chuyên môn sau Cuối cùng, xin chân thành cảm ơn người thân gia đình bạn bè, đồng nghiệp giúp đỡ, động viên đặc biệt gặp phải khó khăn việc học tập nghiên cứu, tiếp thêm động lực để vững tâm hoàn thành luận văn iii TÓM TẮT Kiểm thử đơn vị bước quy trình kiểm thử phần mềm Hiện nay, công ty phần mềm, kiểm thử đơn vị thường thực lập trình viên sau hoàn thành việc phát triễn mã nguồn sản phẩm, trước bàn giao cho phận kiểm thử để tiến hành kiểm thử tích hợp Do hạn chế mặt thời gian, chi phí nguồn nhân lực, lập trình viên thường sử dụng kỹ thuật kiểm thử hộp đen mà không áp dụng kỹ thuật kiểm thử hộp trắng tiến hành kiểm thử đơn vị Kết lỗi tiềm tàng mã nguồn sản phẩm không phát trước việc kiểm thử tích hợp thực Luận văn tập trung nghiên cứu phương pháp sinh liệu kiểm thử tự động cho ứng dụng Java dựa kỹ thuật kiểm thử hộp trắng dòng điều khiển hướng tĩnh, đồng thời cài đặt công cụ(JavaUnitCFT)hỗ trợ cho phương pháp Phương pháp mô tả thành quy trình với bước sau: Bước đầu tiên, từ mã nguồn cung cấp, ta 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ử Bước 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 Dựa tập đường kiểm thử, ta xây dựng hệ ràng buộc tương ứng Cuối cùng, ta thực giải hệ ràng buộc thu để sinh tập liệu cho cácca kiểm thử cách sử dụng mạnh công cụ SMT-Solver Một công cụ hỗ trợ phương pháp cài đặt ngôn ngữ lập trình Java để chứng minh tính đắn khả ứng dụng thực tế phương pháp Kết thực nghiệm cho thấy, tậpdữ liệu cho ca kiểm thử sinh cách tự động với số lượng tối thiểu đảm bảo đạt độ bao phủ cao, đạt độ tin cậy cao kiểm chứng tính đắn mã nguồn Từ khóa:Kiểm thử tự động, kiểm thử hộp trắng dòng điều khiển, đồ thị dòng điều khiển,kiểm thử vòng lặp, độ phủ,ca kiểm thử iv ABSTRACT Testingphase has lot of significance in Software Development Life Cycle (SDLC) due to it is the most important part in executing and fault rectification Because of high demand in quality, testing phase is performed quite thoroughly and strictly As a result, the cost of the testing phase can be up to 40% - 60% the total cost of application development process To reduce the cost of the testing phase, not only the testing execution phase but also the test case generation process should be automated as much as possible However, some automation testing tools just focus on executing test cases and return the testing report instead of generating test cases automatically The Thesis researches a method of generating a set of test cases automatically for Java applications based on the static white-box technique Input by source code of the application under test and coverage criteria, the output of this method is a minimal set of test cases which can satisfy the provided criteria and reach the maximum coverage level The proposed method processes as following: Firstly, the source code is required to be analysed in order to generate corresponding Control Flow Graph (CFG) Based on the CFG, independent paths will be built After that, paths containing loop is reconstructed to generatesome new paths used to test the loop Then, each path is analysed by using symbolic execution technique to create corresponding constraints Finally, the constraints aresolved to find solutions by SMT-Solver tools A set of test data for the test cases is generated automatically The experimental result shows the effectiveness of the approach with the set of test data for the minimum number of test cases but ensures the high quality of source code Keywords:Automated testing, white-box testing technique, control flow testing, test case, coverage criteria v 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ự động cho ứng dụng Java” nghiên cứu riêng tôi, 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ổng hợp từ nhiều nguồn tài liệu Tất nguồn tài liệu tham khảo có xuất xứ rõ ràng hợp pháp Tôi xin hoàn toàn chịu trách nhiệm chịu hình thức kỷ luật theo quy định cho lời cam đoan Hà Nội, ngàythángnăm 2015 Phan Thị Thu Hà vi DANH MỤC THUẬT NGỮ VIẾT TẮT STT Từ viết tắt Từ đầy đủ Ý nghĩa AST Abstract Syntax Tree Cây cú pháp trừu tượng CFG Control Flow Graph Đồ thị dòng điều khiển JDT Java Development Tools Bộ công cụ lập trình ngôn ngữ lập trình Java CVC Cooperating Validity Checker DIMACS Center for Discrete Mathematics and Theoretical Computer Science SMT-Solver Satisfiability Solver Modulo vii Theories DANH MỤC HÌNH VẼ Hình 1.1 Top 10 ngôn ngữ lập trình phổ biến giai đoạn 2002-2015 Hình 2.1 Đảm bảo chất lượng phần mềm theo pha Hình 2.2 Chi phí cho việc tìm sửa lỗi Hình 2.3 Các thành phần đồ thị dòng điều khiển Hình 2.4 Các cấu trúc điều khiển phổ biến Hình 2.5 Kiểm thử hộp trắng dòng điều khiển theo hướng động 11 Hình 2.6 Ví dụ luật chèn mã nguồn DMS/SRT 12 Hình 2.7 Mã nguồn hàm triangle sau thêm khối mã nguồn 12 Hình 2.8 Kiểm thử hộp trắngdòng điều khiển theo hướng tĩnh 13 Hình 3.1 Quy trình kiểm thử hàm Java theo phương pháp nghiên cứu 15 Hình 3.2 Thuật toán sinh CFG từ mã nguồn 17 Hình 3.3 Mã nguồn hàm kiemTraNamNhuan 18 Hình 3.4 CFG hàm kiemTraNamNhuan tiêu chuẩn phủ câu lệnh, phủ nhánh 18 Hình 3.5 CFG hàm kiemTraNamNhuan tiêu chuẩn phủ điều kiện 19 Hình 3.6 CFG điều kiện kép (a>=0 || ((b>=0 && c>=0) || b+c>=0) || a+b+c>=0) 20 Hình 3.7 Thuật toán sinh tập đường độc lập từ CFG .21 Hình 3.8 Thuật toán sinh đường kiểm thử vòng lặp 23 Hình 3.9 Thuật toán sinh đường kiểm thử vòng lặp 24 Hình 3.10 Thuật toán sinh đường kiểm thử vòng lặp 25 Hình 3.11 Ví dụ hệ ràng buộc 25 Hình 3.12 Thuật toán sinh hệ ràng buộc từ đường kiểm thử 26 Hình 3.13 Quá trình rút gọn câu lệnh 27 Hình 3.14 Mô tả đầu vào, đầu SMT-Solver 29 Hình 3.15 Ví dụ hệ ràng buộc tuân theo chuẩn SMT-Lib .30 Hình 3.16 Quá trình chuyển biểu thức trung tố chuẩn SMT-Lib 31 Hình 4.1 Kiến trúc chương trình JavaUnitCFT 32 Hình 4.2 Ví dụ minh họa AST 33 Hình 4.3 Sử dụng ASTView Eclipse đoạn mã nguồn “test” 34 Hình 4.4 Cây AST mã nguồn class “test” 35 viii TÀI LIỆU THAM KHẢO Tiếng Việt [1] [2] Phạm Ngọc Hùng, Trương Anh Hoàng, Đặng Văn Hưng (2014), “Giáo trình kiểm thử phần mềm”, Nhà xuất giáo dục Việt Nam Nguyễn Đức Anh (2015), “Xây dựng công cụ kiểm thử tự động cho chương trình C”, Khóa luận tốt nghiệp Trường Đại học Công Nghệ, Đại học Quốc Gia Hà Nội Tiếng Anh [3] [4] [5] [6] [7] Manish Mishra, Shashi Mishra and Rabins Porwal (2012), “Basic Principle for testcase Generation Automatically”, VSRD-IJCSIT, Vol (9), pp.772-781 Dorothy Graham, Erik van Veenendaal, Isabel Evans, Rex Black (2012), “Foundations Of Software Testing”, ISTQB Certification, 3rd Edition Danila Piatov, Andrea Janes, Alberto Sillitti and Giancarlo Succi (2012), “Using the Eclipse C/C++ Development Tooling as a Robust, Fully Functional, Actively Maintained, Open Source C++ Parser”,IFIP Advances in Information and Communication Technology, Vol 378, pp 399-406 Arthur H Watson and Thomas J McCabe, “Structured Testing: A Testing Methodology Using the Cyclomatic Complexity Metric”, NIST Special Publication 500-235 J C King (1976), “Symbolic execution and program testing”, Communciations of the ACM, vol 19, no 7, pp 385–394 50 [...]...TÀI LIỆU THAM KHẢO Tiếng Việt [1] [2] Phạm Ngọc Hùng, Trương Anh Hoàng, Đặng Văn Hưng (2014), “Giáo trình kiểm thử phần mềm”, Nhà xuất bản giáo dục Việt Nam Nguyễn Đức Anh (2015), “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 Trường Đại học Công Nghệ, Đại học Quốc Gia Hà Nội Tiếng