1. Trang chủ
  2. » Luận Văn - Báo Cáo

Phương pháp sinh dữ liệu kiểm thử tự động cho các ứng dụng java

11 501 1

Đ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

Thông tin cơ bản

Định dạng
Số trang 11
Dung lượng 2,3 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

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 -2

Trang 1

ĐẠ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

Trang 2

2

ĐẠ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

Trang 3

i

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 1

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

2.1 Tổng quan về kiểm thử hộp trắng 4

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 7

2.3.1 Đồ thị dòng điều khiển 7

2.3.2 Các tiêu chí phủ kiểm thử 9

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 và động 10

2.5 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! Bookmark not defined. 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 đi độc lập 20

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

Trang 4

ii

3.4 Xây dựng hệ ràng buộc 25

3.5 Sinh tập dữ liệu kiểm thử dựa trên 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 ra công cụ 37

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

5.1 Sinh bộ dữ 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 bộ dữ 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 bộ dữ 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

Trang 5

iii

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

Trang 6

iv

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ử

Trang 7

v

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

Trang 8

vi

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à

Trang 9

vii

DANH MỤC THUẬT NGỮ VIẾT TẮT

Java Development Tools Bộ công cụ lập trình của

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

Trang 10

viii

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 3

Hình 2.1 Đảm bảo chất lượng phần mềm theo từng pha 6

Hình 2.2 Chi phí cho việc tìm và sửa lỗi 7

Hình 2.3 Các thành phần cơ bản của đồ thị dòng điều khiển 8

Hình 2.4 Các cấu trúc điều khiển phổ biến 9

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ụ một luật chèn mã nguồn trong DMS/SRT 12

Hình 2.7 Mã nguồn hàm triangle sau khi thêm khối mã nguồn mới 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ử một 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 con 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 đi độ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 trong 24

Hình 3.10 Thuật toán sinh đường kiểm thử vòng lặp ngoài 25

Hình 3.11 Ví dụ một 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 ra 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 một biểu thức trung tố về 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 trong Eclipse trên đoạn mã nguồn “test” 34

Hình 4.4 Cây AST của mã nguồn class “test” 35

Trang 11

50

TÀI LIỆU THAM KHẢO

Tiếng Việt

[1] 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

[2] 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 Anh

[3] Manish Mishra, Shashi Mishra and Rabins Porwal (2012), “Basic Principle for

testcase Generation Automatically”, VSRD-IJCSIT, Vol 2 (9), pp.772-781

[4] Dorothy Graham, Erik van Veenendaal, Isabel Evans, Rex Black (2012),

“Foundations Of Software Testing”, ISTQB Certification, 3rd Edition

[5] 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

[6] Arthur H Watson and Thomas J McCabe, “Structured Testing: A Testing

Methodology Using the Cyclomatic Complexity Metric”, NIST Special

Publication 500-235

[7] J C King (1976), “Symbolic execution and program testing”, Communciations

of the ACM, vol 19, no 7, pp 385–394

Ngày đăng: 29/08/2016, 09:45

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm