1. Trang chủ
  2. » Công Nghệ Thông Tin

NGHIÊN cứu áp DỤNG JAVA PATHFINDER TRONG tự ĐỘNG SINH TEST CASE

78 290 0

Đ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 78
Dung lượng 1,34 MB

Nội dung

ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG ĐẶNG THANH TÙNG NGHIÊN CỨU ÁP DỤNG JAVA PATHFINDER TRONG TỰ ĐỘNG SINH TEST CASE ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC NGÀNH CÔNG NGHỆ PHẦN MỀM Thái Nguyên, năm 2016 ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Ngành Công nghệ phần mềm Đề tài: NGHIÊN CỨU ÁP DỤNG JAVA PATHFINDER TRONG TỰ ĐỘNG SINH TEST CASE Sinh viên thực hiện: Đặng Thanh Tùng Lớp: CNPM - K10B Hệ quy Giảng viên hướng dẫn: ThS Tô Hữu Nguyên Thái Nguyên, năm 2016 LỜI CẢM ƠN Tác giả đề tài mang tên Đặng Thanh Tùng, sinh viên năm thứ năm theo học chuyên ngành Công Nghệ Phần Mềm, lớp CNPM-K10 CNTT, trường Công Nghệ Thông Tin Truyền Thông, trực thuộc Đại Học Thái Nguyên Việc thực đề tài trình đầu công sức trí tuệ nhằm nghiên cứu, mở mang kiến thức đồng thời áp dụng lý thuyết học vào thực tiễn Và điều chắn rằng, đề tài không thành công giúp đỡ nhiệt tình thầy cô bạn bè, trợ giúp đắc lực đáng trân trọng Tôi xin bày tỏ cảm ơn chân thành tới ThS Tô Hữu Nguyên, giảng viên môn Công Nghệ Phần Mềm, Đại Học CNTT & TT, đồng thời đóng vai trò người hướng dẫn thực đề tài Trong trình thực tập thầy bảo hướng dẫn tận tình cho lý thuyết, kĩ lập trình, cách giải vấn đề, đặt câu hỏi… Tôi xin chân thành biết ơn tận tình dạy dỗ tất quý thầy cô ngành Công Nghệ Phầm Mềm – Khoa CNTT - Đại Học CNTT & TT MỤC LỤC LỜI CẢM ƠN MỤC LỤC LỜI MỞ ĐẦU CHƯƠNG TRÌNH BÀY TỔNG QUAN VỀ KIỂM THỬ 1.1 Các khái niệm kiểm thử 1.2 Các phương pháp kiểm thử 1.2.1 Kiểm thử tĩnh – Static testing 1.2.2 Kiểm thử động – Dynamic testing 1.3 Các chiến lược kiểm thử 3 1.3.1 Kiểm thử hộp đen – Black box testing 1.3.2 Kiểm thử hộp trắng – White box testing 1.3.3 Kiểm thử hộp xám – Gray box testing 1.4 Các cấp độ kiểm thử6 1.4.1 Kiểm thử đơn vị - Unit test 1.4.2 Kiểm thử tích hợp – Intergration Test CHƯƠNG CÁC KĨ THUẬT SINH TỰ ĐỘNG CÁC TEST CASE 2.1 Giới thiệu 2.2 Kỹ thuật sinh Test case dựa đặc tả 11 2.2.1 Kỹ thuật tạo Test case cho đặc tả UML 12 Tạo Test case việc sử dụng biểu đồ cộng tác UML 12 Tạo Test case dựa Use case cải tiến 13 2.3 Kĩ thuật thực thi tượng trưng sinh tự động Test case 13 CHƯƠNG KĨ THUẬT THỰC THI TƯỢNG TRƯNG VÀ CÔNG CỤ JUNIT 16 3.1 Thực thi tượng trưng (symbolic execution) 3.1.1 Những khái niệm liên quan 16 16 3.1.2 Thực thi tượng trưng tĩnh 17 3.1.3 Thực thi tượng trưng động 21 3.2 Sinh liệu từ thực thi tượng trưng 3.2.1 Xây dựng ràng buộc 27 3.2 Thực thi tượng trưng với công cụ JPF 3.2.1 Kiến trúc JPF 27 39 39 3.3 Junit 41 3.3.1 Khái niệm 41 3.3.2 Các đặc trưng sử dụng JUnit 41 3.3.3 Các phương thức sử dụng JUnit 3.3.4 Ví dụ test chức lớp 3.3.5 Setup tear down 41 42 45 3.4 Tổ chức test vào test suite 47 3.5 Chạy test lặp 49 3.6 Test Exception 49 3.7 Giới thiệu số công cụ, thư viện hỗ trợ việc test phần mềm 50 3.8 Các kết thực nghiệm 51 KẾT LUẬN 55 TÀI LIỆU THAM KHẢO 56 DANH MỤC HÌNH ẢNH Hình 2.1: Kiểm thử dựa đặc tả 10 Hình 2.2: Kiểm thử dựa mô hình 10 Hình 2.3: Mô hình hóa vùng thiết kế phần mềm Hình 2.4: Thực thi tượng trưng 13 15 Hình 3.1: Cây thực thi tượng trưng 20 Hình 3.2: Cây thực thi tượng trưng quản lý riêng 27 Hình 3.3: Hệ thống kiểm thử tổng quát 29 Hình 3.4: Gán giá trị tượng trưng cho tham số đầu vào 32 Hình 3.5: Thực thi tượng trưng với câu lệnh gán 33 Hình 3.6: Thực thi tượng trưng với câu lệnh rẽ nhánh 34 Hình 3.7: Khởi tạo đối tượng làm đầu vào cho chương trình 37 Hình 3.8 Sinh ràng buộc liên quan tới đối tượng 38 Hình 3.9: Kiến trúc JPF 40 LỜI MỞ ĐẦU Với phát triển vũ bão công nghệ thông tin nói chung công nghệ phần mềm nói riêng, việc phát triển phần mềm ngày hỗ trợ nhiều công cụ tiên tiến, giúp cho việc xây dựng phần mềm đỡ mệt nhọc hiệu Tuy nhiên độ phức tạp phần mềm giới hạn thời gian chi phí, cho dù hoạt động đảm bảo chất lượng phần mềm nói chung kiểm thử nói riêng ngày chặt chẽ khoa học không đảm bảo sản phần mềm lỗi Lỗi tiềm ẩn sản phẩm phần mềm gây thiệt hại kinh tế xã hội to lớn Kiểm thử phần mềm trình liên tục, xuyên suốt giai đoạn phát triển phần mềm để đảm bảo phần mềm thỏa mãn yêu cầu thiết kế yêu cầu đáp ứng nhu cầu người sử dụng Các kỹ thuật kiểm thử phần mềm nghiên cứu việc kiểm thử phần mềm trở thành quy trình bắt buộc dự án phát triển phần mềm giới Kiểm thử phần mềm hoạt động tốn thời gian.Vì việc để hỗ trợ nâng cao hiệu suất trình kiểm thử phần mềm kiểm tra toàn vẹn hệ thống phương pháp phát kiểm thử dựa vào mô hình.Có nhiều mô hình kiểm thử em chọn kiểm thử thực thi tượng trưng cho đề tài tốt nghiệp Bản báo cáo hoàn thành bảo tận tình thầy giáo ThS Tô Hữu Nguyên, giúp đỡ nhiệt tình thầy cô môn Công nghệ phần mềm, tất bạn Em hi vọng nhận đóng góp ý kiến thầy cô bạn để báo cáo hoàn thiện hơn.Những đóng góp kinh nghiệm quý báu cho em Em xin chân thành cám ơn! Sinh viên Đặng Thanh Tùng CHƯƠNG TRÌNH BÀY TỔNG QUAN VỀ KIỂM THỬ 1.1 Các khái niệm kiểm thử IEEE: Kiểm thử tiến trình vận hành hệ thống thành phần điều kiện xác định, quan sát ghi nhận kết đưa đánh giá hệ hống thành phần Myers: Kiểm thử tiến trình thực thi chương trình với mục đích tìm thấy lỗi (The art of software testing) Kiểm thử phần mềm trình hệ thống hay thành phần điều kiện xác định, quan sát ghi lại kết quả, đánh giá khía cạnh hệ thống hay thành phần đó.( Theo bảng ghi giải thuật ngữ chuẩn IEEE thuật ngữ kỹ nghệ phần mềm –IEEE Standard Glossary ò Software Engineering Terminology) Kiểm thử phần mềm hoạt động khảo sát thực tiễn sản phẩm hay dịch vụ phần mềm môi trường chúng dự định triển khai nhằm cung cấp cho người có lợi ích liên quan thông tin chất lượng sản phẩm hay dịch vụ phần mềm Mục đích kiểm thử phần mềm tìm lỗi hay khiếm khuyết phần mềm nhằm đảm bảo hiệu hoạt động tối ưu phần mềm nhiều ngành khác (Theo Bách khoa toàn thư Wikipedia) Có thể định nghĩa cách dễ hiểu sau: Kiểm thử phần mềm tiến trình hay tập hợp tiến trình thiết kế để đảm bảo mã hóa máy tính thực theo mà chúng thiết kế để làm, không thực thứ không mong muốn Đây pha quan trọng trình phát triển hệ thống, giúp cho người xây dựng hệ thống khách hàng thấy hệ thống đáp ứng yêu cầu đặt hay chưa? 1.2 Các phương pháp kiểm thử Có phương pháp kiểm thử là: Kiểm thử tĩnh kiểm thử động 1.2.1 Kiểm thử tĩnh – Static testing Là phương pháp kiểm thử phần mềm đòi hỏi phải duyệt lại yêu cầu đặc tả tay, thông qua việc sử dụng giấy, bút để kiểm tra logic, lần chi tiết mà không cần chạy chương trình Kiểm thử thường sử dụng chuyên viên thiết kế - người viết mã lệnh Kiểm thử tĩnh tự động hóa Nó thực kiểm tra toàn bao gồm chương trình phân tích bỏi trình thông dịch biên dịch mà xác nhận tính hợp lệ cú pháp chương trình 1.2.2 Kiểm thử động – Dynamic testing Là phương pháp thử phần mềm thông qua việc dùng máy chạy chương trình để điều tra trang thái tác động chương trình Đó kiểm thử dựa ca kiểm thử xác định thực đối tượng kiểm thử hay chạy chương trình Kiểm thử tự động kiểm tra cách thức hoat động mã lệnh, tức kiểm tra 10 số lần lặp lại Vì TestSuitecài đặt interface Test nên lặp lại toàn test Tiếp theo ví dụ mô tả cách xây dựng test suite mà test khác lặp lặp lại khác nhau: 3.6 Test Exception Phần tiếp đến xem xét đến phần test quan trọng không lập trình test exception Chúng ta sử dụng cặp từ khóa try/catch để bắt exception mong đợi, gọi phương thức fail() exception mong đợi không xảy Trong ví dụ sau, constructor lớp Person nên tung IllegalArgumentException tham số mang giá trị null Test thất bại không tung exception Nói chung bạn nên sử dụng kỹ thuật bạn mong đợi exception xảy Đối với điều kiện lỗi khác bạn nên để exception chuyển sang cho JUnit Khi JUnit bắt lấy tường trình lỗi test 3.7 Giới thiệu số công cụ, thư viện hỗ trợ việc test phần mềm 64 Cactus Cactus framework unit testing nguồn mở dùng để test cho đoạn mã phía bên server Java Đặc biệt Cactus cho phép bạn test Servlet, JSP, Servlet filter Cactus thừa kế từ JUnit để cung cấp lớp lớp junit.framework.TestCase lớp: •org.apache.cactus.ServletTestCase •org.apache.cactus.JspTestCase • org.apache.cactus.FilterTestCase Mỗi test case Cactus cung cấp chức đặc biệt Cactus test thực thi client server Khi sử dụng Cactus bạn cần tạo lớp thừa kế từ ba lớp Sau Cactus tạo chạy thể test case Một chạy JVM phía client, lại chạy bên JVM môi trường chạy servlet (servlet container) phía server Bên client phía client cho phép HTTP headers tham số HTTP thêm vào yêu cầu Bên phía server gọi thực thi phương thức bên servlet bạn để thực xác nhận nào, sau gởi phản hồi ngược trở lại cho phía client Tíếp đến bên phía client xác nhận phản hồi từ bên server gởi có chứa thông tin mong muốn hay không Có thể download Cactus từ địa http://jakarta.apache.org/cactus HttpUnit HttpUnit thư viện nguồn mở Java dùng để tương tác với server HTTP Với HttpUnit, chương trình Java bạn truy xuất trực tiếp đến server mà không cần thiết phải sử dụng đến trình duyệt HttpUnit cung cấp API để phân tích HTML, nhận thông tin biểu mẫu trang web, theo dõi siêu liên kết, thiết lập cookie thực tác vụ khác có liên quan đến trình duyệt web Ngoài gồm thư viện để thao tác trực tiếp đến servlet, không cần thiết phải khởi động web server 65 Thông thường sử dụng kết hợp HttpUnit JUnit để viết tét JUnit định nghĩa framework dùng để kiểm tra, phương thức testXXX() bạn sử dụng hàm API thư viện HttpUnit để truy cập kiểm tra trang web 3.8 Các kết thực nghiệm - Giả sử xây dựng lớp ToanHoc với phương thức tìm số lớn sau: 66 67 - Áp dụng công cụ Java PathFider thực thực thi tượng trưng sinh tự động test case ta có kết sau: 68 69 70 71 - Dựa kết ta xây dựng unit Test Junit sau: 72 - Kết thực Junit: 73 74 KẾT LUẬN Kết đạt đề tài: Là sinh viên ngành Công nghệ thông tin chuyên ngành công nghệ phần mềm qua việc nghiên cứu đề tài em trau dồi thêm nhiều kiến thức lập trình ngôn ngữ Java, nghiên cứu áp dụng thực thi tượng trưng kiểm thử Java Em cố gắng tìm hiểu nghiên cứu sâu để tạo nắm lập trình ngôn ngữa Java Mục đích nắm rõ nghiệp vụ quy trình lập trình hướng tới khai thác cácvấn đề khác Với phương châm lập trình nhiều sản phẩm hữu ích Bài báo cáo trình bày khái niệm lập trình ngôn ngữ Java Đồng thời báo cáo trình bày lý luận ngôn ngữ kiểm thử Hạn chế đề tài: Tuy có nhiều cố gắng trình học tập, thời gian thực tập trình làm báo cáo thời gian có hạn kinh nghiệm lĩnh vực lập trình ngôn ngữ Java em tìm hiểu học cách lập trình ngôn ngữ Java 75 TÀI LIỆU THAM KHẢO [1] Báo cáo tốt nghiệp Trần Bình Dương –K50CNPM, Đại học công nghệ - Đại học quốc gia Hà Nội [2] Kỹ thuật sinh test case tự động từ yêu cầu phần mềm: Luận văn ThS/ Vũ Thị Đào; Đại học công nghê – Đại học quốc gia Hà Nội [3] JPF - SE: A Symbolic Execution Extension to Java PathFinder - Saswat Anand, Corina S Pasareanu and Willem Visser [4] Symbolic Execution of Java Byte-code - Corina Pãsãreanu - Perot Systems/NASA Ames Research [5] Saswat Anand, Corina S Pasareanu, and Willem Visser Symbolic execution with abstraction International Journal on Software Tools for Technology Transfer (STTT) Volume 11 , Issue Pages 53-67 , January 2009 [6] Willem Visser, Corina S Pasareanu, and Sarfraz Khurshid Test input generation with Java PathFinder In Proceedings of the ACM/SIGSOFT International Symposium on Software Testing and Analysis (ISSTA), pages 97107 ACM, 2004 [7] Symbolic Execution of Java Byte-code - Perot Systems/NASA Ames Research [8] http://babelfish.arc.nasa.gov/trac/jpf/wiki/projects/jpf-symbc/doc#no1 [9] http://javapathfinder.sourceforge.net/ [10] http://choco.sourceforge.net/ 76 NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN ……………………………………………………………………………………… .……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… .……………………………………………………………………………………… 77 ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… 78 ... THÔNG ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Ngành Công nghệ phần mềm Đề tài: NGHIÊN CỨU ÁP DỤNG JAVA PATHFINDER TRONG TỰ ĐỘNG SINH TEST CASE Sinh viên thực hiện: Đặng Thanh Tùng Lớp: CNPM - K10B Hệ quy Giảng... TEST CASE 2.1 Giới thiệu 2.2 Kỹ thuật sinh Test case dựa đặc tả 11 2.2.1 Kỹ thuật tạo Test case cho đặc tả UML 12 Tạo Test case việc sử dụng biểu đồ cộng tác UML 12 Tạo Test case dựa Use case. .. thi tượng trưng sinh tự động Test case Một phương pháp đơn giản để sinh tự động ca kiểm thử kiểm thử ngẫu nhiên (random testing) Với kiểm thử ngẫu nhiên đầu vào cho hệ thống sinh ngẫu nhiên Để

Ngày đăng: 23/04/2017, 16:33

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

TÀI LIỆU LIÊN QUAN

w