Luận Văn Thạc Sĩ: 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ĩ VNU UET trình bày phương pháp sinh dữ liệu kiểm thử tự động cho ứng dụng Java, nâng cao hiệu quả kiểm thử phần mềm.

Chuyên ngành

Công Nghệ Thông Tin

Người đăng

Ẩn danh

Thể loại

Luận Văn Thạc Sĩ

2015

62
3
0

Phí lưu trữ

30 Point

Mục lục chi tiết

LỜI CAM ĐOAN

1. CHƯƠNG 1: GIỚI THIỆU

1.1. Tổng quan về kiểm thử hộp trắng dòng điều khiển

2. CHƯƠNG 2: CÁC KỸ THUẬT KIỂM THỬ DÒNG ĐIỀU KHIỂN

2.1. Tổng quan về kiểm thử hộp trắng dòng điều khiển

2.2. Kỹ thuật kiểm thử dòng điều khiển

2.3. Kiểm thử hộp trắng dòng điều khiển theo hướng động

2.4. Kiểm thử hộp trắng dòng điều khiển theo hướng tĩnh

2.5. Quy trình kiểm thử hộp trắng dòng điều khiển theo hướng tĩnh

2.6. Đồ thị dòng điều khiển

2.7. Các tiêu chí phủ kiểm thử

2.8. Đường kiểm thử

2.9. So sánh kĩ thuật kiểm thử hộp trắng dòng điều khiển theo hướng tĩnh và động

2.10. Tầm quan trọng của tự động hóa quy trình kiểm thử hộp trắng dòng điều khiển

3. 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

3.1. Xây dựng đồ thị dòng điều khiển từ mã nguồn

3.2. Xây dựng tập đường kiểm thử

3.3. Xây dựng tập đường đi độc lập

3.4. Xây dựng đường kiểm thử vòng lặp

3.5. Xây dựng hệ ràng buộc

3.6. Sinh tập dữ liệu kiểm thử dựa trên giải nghiệm hệ ràng buộc

3.7. Giải hệ sử dụng kỹ thuật sinh ngẫu nhiên

3.8. Giải hệ sử dụng SMT-Solver

4. CHƯƠNG 4: GIỚI THIỆU CÔNG CỤ

4.1. Kiến trúc công cụ

4.2. Nền tảng chương trình

4.3. Thư viện JDT

4.4. Bộ giải hệ Z3 Prover

4.5. Cài đặt công cụ

4.6. Đầu vào công cụ JavaUnitCFT

4.7. Đầu ra công cụ

5. CHƯƠNG 5: THỰC NGHIỆM

5.1. Sinh bộ dữ liệu kiểm thử cho hàm đầu vào chứa biến số nguyên

5.2. Sinh bộ dữ liệu kiểm thử cho hàm đầu vào chứa biến số thực

5.3. Sinh bộ dữ liệu kiểm thử cho hàm đầu vào chứa vòng lặp

6. CHƯƠNG 6: KẾT LUẬN

TÀI LIỆU THAM KHẢO

Tóm tắt

I. Tổng Quan Về Phương Pháp Tự Động Sinh Dữ Liệu Kiểm Thử Cho Ứng Dụng Java

Trong bối cảnh phát triển phần mềm hiện đại, việc kiểm thử tự động trở thành một yếu tố quan trọng để đảm bảo chất lượng sản phẩm. Phương pháp tự động sinh dữ liệu kiểm thử cho ứng dụng Java giúp giảm thiểu thời gian và chi phí, đồng thời nâng cao độ chính xác trong quá trình kiểm thử. Việc áp dụng các kỹ thuật kiểm thử hộp trắng và hộp đen trong Java đã chứng minh hiệu quả trong việc phát hiện lỗi và cải thiện chất lượng mã nguồn.

1.1. Lợi Ích Của Kiểm Thử Tự Động Trong Ứng Dụng Java

Kiểm thử tự động mang lại nhiều lợi ích như tiết kiệm thời gian, tăng độ chính xác và khả năng tái sử dụng các ca kiểm thử. Điều này giúp các lập trình viên tập trung vào việc phát triển tính năng mới thay vì phải kiểm tra mã nguồn thủ công.

1.2. Các Kỹ Thuật Kiểm Thử Được Sử Dụng Trong Java

Các kỹ thuật kiểm thử như kiểm thử hộp trắng và hộp đen được áp dụng để đảm bảo rằng tất cả các phần của mã nguồn đều được kiểm tra. Kiểm thử hộp trắng cho phép phân tích cấu trúc mã nguồn, trong khi kiểm thử hộp đen tập trung vào đầu vào và đầu ra của ứng dụng.

II. Vấn Đề Và Thách Thức Trong Kiểm Thử Ứng Dụng Java

Mặc dù kiểm thử tự động mang lại nhiều lợi ích, nhưng vẫn tồn tại một số thách thức trong việc triển khai. Các lập trình viên thường gặp khó khăn trong việc tạo ra các ca kiểm thử đầy đủ và chính xác. Hơn nữa, việc thiếu hiểu biết về các kỹ thuật kiểm thử có thể dẫn đến việc bỏ sót các lỗi nghiêm trọng trong mã nguồn.

2.1. Khó Khăn Trong Việc Tạo Dữ Liệu Kiểm Thử

Việc tạo ra dữ liệu kiểm thử phù hợp là một thách thức lớn. Các lập trình viên cần phải đảm bảo rằng dữ liệu kiểm thử phản ánh đúng các tình huống thực tế mà ứng dụng có thể gặp phải.

2.2. Thiếu Kinh Nghiệm Về Kỹ Thuật Kiểm Thử

Nhiều lập trình viên không có đủ kinh nghiệm trong việc áp dụng các kỹ thuật kiểm thử hộp trắng và hộp đen, dẫn đến việc không phát hiện được các lỗi tiềm ẩn trong mã nguồn.

III. Phương Pháp Kiểm Thử Tự Động Dựa Trên Kỹ Thuật Hộp Trắng

Phương pháp kiểm thử tự động dựa trên kỹ thuật hộp trắng giúp phân tích mã nguồn để sinh ra các ca kiểm thử. Quy trình này bao gồm việc xây dựng đồ thị dòng điều khiển và xác định các đường kiểm thử cần thiết. Kỹ thuật này không chỉ giúp phát hiện lỗi mà còn đảm bảo rằng tất cả các phần của mã nguồn đều được kiểm tra.

3.1. Xây Dựng Đồ Thị Dòng Điều Khiển

Đồ thị dòng điều khiển là một công cụ quan trọng trong việc phân tích mã nguồn. Nó giúp xác định các đường đi có thể có trong mã, từ đó tạo ra các ca kiểm thử phù hợp.

3.2. Sinh Tập Dữ Liệu Kiểm Thử Từ Đồ Thị

Sau khi xây dựng đồ thị, các lập trình viên có thể sinh ra tập dữ liệu kiểm thử dựa trên các đường kiểm thử đã xác định. Điều này giúp đảm bảo rằng tất cả các tình huống có thể xảy ra đều được kiểm tra.

IV. Ứng Dụng Thực Tiễn Của Phương Pháp Kiểm Thử Tự Động

Phương pháp tự động sinh dữ liệu kiểm thử đã được áp dụng thành công trong nhiều dự án phát triển phần mềm. Kết quả cho thấy rằng việc sử dụng phương pháp này không chỉ giúp phát hiện lỗi mà còn cải thiện đáng kể chất lượng mã nguồn. Các công ty phần mềm lớn đã áp dụng phương pháp này để tối ưu hóa quy trình kiểm thử của họ.

4.1. Kết Quả Nghiên Cứu Từ Các Dự Án Thực Tế

Nghiên cứu cho thấy rằng việc áp dụng phương pháp tự động sinh dữ liệu kiểm thử đã giúp giảm thiểu thời gian kiểm thử và tăng độ chính xác trong việc phát hiện lỗi.

4.2. Tác Động Đến Chất Lượng Phần Mềm

Việc sử dụng phương pháp này đã giúp cải thiện chất lượng phần mềm, giảm thiểu lỗi và tăng cường sự hài lòng của khách hàng.

V. Kết Luận Về Phương Pháp Tự Động Sinh Dữ Liệu Kiểm Thử

Phương pháp tự động sinh dữ liệu kiểm thử cho ứng dụng Java là một giải pháp hiệu quả để nâng cao chất lượng phần mềm. Việc áp dụng các kỹ thuật kiểm thử hiện đại giúp phát hiện lỗi sớm và giảm thiểu chi phí phát triển. Tương lai của phương pháp này hứa hẹn sẽ tiếp tục phát triển và cải tiến để đáp ứng nhu cầu ngày càng cao của ngành công nghiệp phần mềm.

5.1. Hướng Phát Triển Trong Tương Lai

Các nghiên cứu tiếp theo có thể tập trung vào việc cải thiện các thuật toán sinh dữ liệu kiểm thử và tích hợp các công cụ kiểm thử tự động vào quy trình phát triển phần mềm.

5.2. Tầm Quan Trọng Của Kiểm Thử Tự Động

Kiểm thử tự động sẽ tiếp tục đóng vai trò quan trọng trong việc đảm bảo chất lượng phần mềm, giúp các công ty phát triển phần mềm tiết kiệm thời gian và chi phí.

22/07/2025
Luận văn thạc sĩ vnu uet phương pháp sinh dữ liệu kiểm thử tự động cho các ứng dụng java

Trích đoạn nội dung tài liệu

CHƯƠNG 1: GIỚI THIỆU. 1 CHƯƠNG 2: CÁC KỸ THUẬT KIỂM THỬ DÒNG ĐIỀU KHIỂN. Tổng quan về kiểm thử hộp trắng. Kỹ thuật kiểm thử dòng điều khiển.

Kiểm thử hộp trắng dòng điều khiển theo hướng động. Kiểm thử hộp trắng dòng điều khiển theo hướng tĩnh. Quy trình kiểm thử hộp trắng dòng điều khiển theo hướng tĩnh. Đồ thị dòng điều khiển.

Các tiêu chí phủ kiểm thử. Đường kiểm thử. So sánh kĩ thuật kiểm thử hộp trắng dòng điều khiển theo hướng tĩnh và động. Tầm quan trọng của 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.

Xây dựng đồ thị dòng điều khiển từ mã nguồn. Xây dựng tập đường kiểm thử. Xây dựng tập đường đi độc lập. Xây dựng đường kiểm thử vòng lặp.

22 i LUAN VAN CHAT LUONG download : add luanvanchat@agmail. Xây dựng hệ ràng buộc. Sinh tập dữ liệu kiểm thử dựa trên giải nghiệm hệ ràng buộc. Giải hệ sử dụng kỹ thuật sinh ngẫu nhiên.

Giải hệ sử dụng SMT-Solver. 27 CHƯƠNG 4: GIỚI THIỆU CÔNG CỤ. Kiến trúc công cụ. Nền tảng chương trình.

Thư viện JDT. Bộ giải hệ Z3 Prover. Cài đặt công cụ. Đầu vào công cụ JavaUnitCFT.

Đầu ra công cụ. 37 CHƯƠNG 5: THỰC NGHIỆM. Sinh bộ dữ liệu kiểm thử cho hàm đầu vào chứa biến số nguyên. Sinh bộ dữ liệu kiểm thử cho hàm đầu vào chứa biến số thực.

Sinh bộ dữ liệu kiểm thử cho hàm đầu vào chứa vòng lặp. 47 CHƯƠNG 6: KẾT LUẬN. 49 TÀI LIỆU THAM KHẢO. 50 ii LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com LỜI CẢM ƠN Trước tiên tôi xin gửi lời cảm ơn chân thành và 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, chỉ bảo, động viên, luôn tạo cho tôi những điều kiện tốt nhấtvà truyền cho tôi cảm hứng nghiên cứu khoa học từ khi tôi bắt đầu lựa chọn đề tài, trong suốt quá trình nghiên cứu, và cho đến bây giờ - khi tôiđã hoàn thành luận văn này. Tôi xin chân thành cảm ơn các 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 - những người đầy tâm huyết, đã tận tình đào tạo,cung cấp cho tôi những kiến thức chuyên môn vô cùng quý giá.Những kiến thức ấy không chỉ tạo cho tôi một nền tảng tốt trong quá trình học tập, nghiên cứu tại trường, mà sẽ còn là những bài học bổ ích, những kỹ năng và kinh nghiệm đáng quý cho tôi trong suốt quá trình làm việc và nghiên cứu chuyên môn sau này. Cuối cùng, tôi xin chân thành cảm ơn những người thân trong gia đình và bạn bè, đồng nghiệp đã luôn giúp đỡ, động viên tôi đặc biệt là những khi tôi gặp phải khó khăn trong việc học tập và nghiên cứu, đã tiếp thêm động lực để tôi vững tâm hoàn thành luận văn này. iii LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com TÓM TẮT Kiểm thử đơn vị là bước đầu tiên trong quy trình kiểm thử phần mềm.

Hiện nay, trong các công ty phần mềm, kiểm thử đơn vị thường được thực hiện bởi các lập trình viên sau khi hoàn thành việc phát triễn mã nguồn sản phẩm, và trước khi bàn giao cho bộ phận kiểm thử để tiến hành kiểm thử tích hợp. Do hạn chế về mặt thời gian, chi phí và nguồn nhân lực, các lập trình viên thường chỉ sử dụng kỹ thuật kiểm thử hộp đen mà không áp dụng các kỹ thuật kiểm thử hộp trắng khi tiến hành kiểm thử đơn vị. Kết quả là các lỗi tiềm tàng trong mã nguồn sản phẩm hầu như không được phát hiện trước khi việc kiểm thử tích hợp được thực hiện. Luận văn này tập trung nghiên cứu phương pháp sinh dữ liệu kiểm thử tự động cho các ứng dụng Java dựa trên 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 một công cụ(JavaUnitCFT)hỗ trợ cho phương pháp này.

Phương pháp được mô tả thành một quy trình với các bước chính như sau: Bước đầu tiên, từ mã nguồn được cung cấp, ta sẽ 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 được phân tích để xây dựng tập đường kiểm thử. Bước tiếp theo, các đường kiểm thử chứa vòng lặp được cấu trúc lại để sinh thêm các đường kiểm thử mới dùng kiểm thử tính đúng đắn vòng lặp. Dựa trên tập các đường kiểm thử, ta xây dựng các hệ ràng buộc tương ứng.

Cuối cùng, ta thực hiện giải hệ ràng buộc thu được để sinh tập dữ liệu cho bộ cácca kiểm thử bằng cách sử dụng thế mạnh của các công cụ SMT-Solver. Một công cụ hỗ trợ phương pháp này cũng được cài đặt bằng ngôn ngữ lập trình Java để chứng minh tính đúng đắn và khả năng ứng dụng trong thực tế của phương pháp. Kết quả thực nghiệm cho thấy, tậpdữ liệu cho bộ ca kiểm thử sinh ra một cách tự động với số lượng tối thiểu nhưng vẫn đảm bảo đạt độ bao phủ cao, đạt độ tin cậy cao trong kiểm chứng tính đúng đắn của 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 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 re- constructed 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com LỜI CAM ĐOAN Tôi xin cam đoan rằng luận văn thạc sĩ công nghệ thông tin “Phương pháp sinh dữ liệu kiểm thử tự động cho các ứng dụng Java” là nghiên cứu của riêng tôi, không sao chép lại của người khác. Trong toàn bộ nội dung của luận văn, những điều đã được trình bày hoặc là của chính cá nhân tôi hoặc là được tổng hợp từ nhiều nguồn tài liệu. Tất cả các nguồn tài liệu tham khảo đều có xuất xứ rõ ràng và hợp pháp.

Tôi xin hoàn toàn chịu trách nhiệm và chịu mọi hình thức kỷ luật theo quy định cho lời cam đoan này. Hà Nội, ngàythángnăm 2015 Phan Thị Thu Hà vi LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com DANH MỤC THUẬT NGỮ VIẾT TẮT STT Từ viết tắt Từ đầy đủ Ý nghĩa 1 AST Abstract Syntax Tree Cây cú pháp trừu tượng 2 CFG Control Flow Graph Đồ thị dòng điều khiển 3 JDT Bộ công cụ lập trình của Java Development Tools ngôn ngữ lập trình Java 4 CVC Cooperating Validity Checker 5 DIMACS Center for Discrete Mathematics and Theoretical Computer Science 6 SMT-Solver Satisfiability Modulo Theories Solver vii LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com DANH MỤC HÌNH VẼ Hình 1. Top 10 ngôn ngữ lập trình phổ biến giai đoạn 2002-2015. Đảm bảo chất lượng phần mềm theo từng pha.

Chi phí cho việc tìm và sửa lỗi. Các thành phần cơ bản của đồ thị dòng điều khiển. Các cấu trúc điều khiển phổ biến. Kiểm thử hộp trắng dòng điều khiển theo hướng động.

Ví dụ một luật chèn mã nguồn trong DMS/SRT. Mã nguồn hàm triangle sau khi thêm khối mã nguồn mới. Kiểm thử hộp trắngdòng điều khiển theo hướng tĩnh. Quy trình kiểm thử một hàm Java theo phương pháp nghiên cứu.

Thuật toán sinh CFG từ mã nguồn. Mã nguồn hàm kiemTraNamNhuan. CFG hàm kiemTraNamNhuan tiêu chuẩn phủ câu lệnh, phủ nhánh. CFG hàm kiemTraNamNhuan tiêu chuẩn phủ điều kiện con.

CFG điều kiện kép (a>=0 || ((b>=0 && c>=0) || b+c>=0) || a+b+c>=0). Thuật toán sinh tập đường đi độc lập từ CFG. Thuật toán sinh đường kiểm thử vòng lặp. Thuật toán sinh đường kiểm thử vòng lặp trong.

Thuật toán sinh đường kiểm thử vòng lặp ngoài. Ví dụ một hệ ràng buộc. Thuật toán sinh hệ ràng buộc từ đường kiểm thử. Quá trình rút gọn câu lệnh.

Mô tả đầu vào, đầu ra SMT-Solver. Ví dụ hệ ràng buộc tuân theo chuẩn SMT-Lib. Quá trình chuyển một biểu thức trung tố về chuẩn SMT-Lib. Kiến trúc chương trình JavaUnitCFT.

Ví dụ minh họa AST. Sử dụng ASTView trong Eclipse trên đoạn mã nguồn “test”. Cây AST của mã nguồn class “test”. 35 viii LUAN VAN CHAT LUONG download : add luanvanchat@agmail.

Minh họa cho Z3 Solver. Giao diện công cụ JavaUnitCFT. Ví dụ đầu vào công cụ JavaUnitCFT. Đồ thị CFG thỏa mãn tiêu chí phủ câu lệnh và phủ nhánh trên công cụ.

Chi tiết đồ thị CFG thỏa mãn tiêu chí phủ câu lệnh và phủ nhánh. Đồ thị CFG thỏa mãn tiêu chí phủ điều kiện con trên công cụ. Chi tiết đồ thị CFG thỏa mãn tiêu chí phủ điều kiện con. Đường đi tương ứng với một đường kiểm thử trên CFG trên công cụ.

Đường đi tương ứng với một đường kiểm thử trên CFG. Tập đường kiểm thử thỏa mãn phủ câu lệnh hàm KiemTraNamNhuan. Tập đường kiểm thử thỏa mãn phủ nhánh hàm KiemTraNamNhuan. Tập đường kiểm thử thỏa mãn phủ điều kiện con hàm KiemTraNamNhuan.

Tập tất cả các đường đi độc lập. Ca kiểm thử thỏa mãn độ phủ nhánh của hàm KiemTraNamNhuan. CFG thỏa mãn điều kiện phủ cấp 1,2,3 hàm UocChungLonNhat.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ