Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 78 trang
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 tư 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 [...]... nó có thể sinh ra mô hình thế hệ Test case được miêu tả ở các biểu đồ UML Để sửa mô hình tới các biểu đồ UML, chúng ta phải giải thích cùng ngữ nghĩa và cú pháp của biểu đồ trạng thái trong các đặc tả UML Tạo ra Test case bằng việc sử dụng các biểu đồ cộng tác UML Các Test case được tạo ra bằng cách sử dụng các biểu đồ cộng tác UML là một trong những cách tiêu biểu trong kỹ thuật sinh Test case dựa... ra trong quá trình để thực hiện được sự mở rộng một cách tối đa ( việc phát hiện lỗi được thiết lập trong phần ngoặc đơn bởi vì kiểm thử sử dụng thống kê tập trung vào các thước đo tin cậy và có thể xác định chỉ các lỗi kém) 2.3 Kĩ thuật thực thi tượng trưng trong sinh tự động các Test case Một trong những phương pháp đơn giản nhất để sinh tự động các ca kiểm thử đó là kiểm thử ngẫu nhiên (random testing)... Test cũng đòi hỏi phải chuẩn bị trước các ca kiểm thử ( Test case) hoặc kịch bản kiểm thử ( Test script), trong đó chỉ định rõ dữ liệu đầu vào, các bước thực hiện và dữ liệu đầu ra mong muốn Các Test case và Test script này nên được giữ lại để tái sử dụng 1.4.2 Kiểm thử tích hợp – Intergration Test Integration test kết hợp các thành phần của một ứng dụng và kiểm thử như một ứng dụng đã hoàn thành Trong. .. cho việc sinh Test case bởi vì chúng mô tả chính xác các chức năng phần mềm được thực hiện như thế nào, các biểu đồ này cung cấp một kết nối trong một hình thức mà có thể dễ dàng được vận dụng bởi các phương pháp tự động Phần này còn đưa ra các tiêu chuẩn test mới mà dựa trên các biểu đồ cộng tác UML Các tiêu chuẩn được xác định cho cả việc test tĩnh và động của một sự tích hợp chính thức các test được... khi test nên cung cấp chẩn đoán rõ ràng để các lỗi có thể dễ dàng được sửa chữa Vậy trong quá trình test phần mềm “tiêu chuẩn test là gì?” Một tiêu chuẩn test là một quy tắc hoặc một tập hợp các quy tắc mà áp đặt các yêu cầu vào một bộ của các Test case Có nhiều cách để phân loại các tiêu chuẩn phù hợp Một trong những cách thông dụng nhất là bằng nguồn thông tin được sử dụng để xác định các yêu cầu test. .. theo thời gian Trong kiểm thử tự động, phần mềm phải thực sự được biên dịch và chạy Kiểm thử động thực sự bao gồm làm việc với phần mềm, nhập các giá trị đầu vào và kiểm tra xem liệu đầu ra có như mong muốn hay không Các phương pháp kiểm thử tự động gồm có Unit – Unit Tests, Kiểm thử tích hợp – Intergration Tests, Kiểm thử hệ thống – System Tests, và Kiểm thử chấp nhận sản phẩm – Acceptance Tests 1.3 Các... chịu tải (Stress Test) : Kiểm thử các giới hạn của hệ thống 16 CHƯƠNG 2 CÁC KĨ THUẬT SINH TỰ ĐỘNG CÁC TEST CASE 2.1 Giới thiệu Kiểm thử phần mềm tốn nhiều chi phí nhân công, thời gian Trong một số dự án, kiểm thử phần mềm tiêu hao trên 50% tổng giá trị phát triển phẩn mềm Nếu cần ứng dụng an toàn hơn, chi phí kiểm thử còn cao hơn nữa Do đó một trong các mục tiêu của kiểm thử là tự động hóa nhiều như... cậy hơn Tạo Test case dựa trên Use case cải tiến Các nguyên tắc cơ bản Trong phần này, có ba khái niệm chính liên quan trong cách tiếp cận đã được mô tả chi tiết Mỗi khái niệm tương ứng với một bước làm mô hình xác định, như trong Hình 23 21 Hình 2.3: Mô hình hóa các vùng trong thiết kế phần mềm Cách tiếp cận được mô tả trong tài liệu này tập trung vào việc hệ thống hóa hoặc thậm chí tự động hóa các... phương pháp kiểm thử hộp trắng Kiểm thử giao diện lập trình ứng dụng – API testing (application programming interface): là phương pháp kiểm thử của úng dụng sử 12 dụng các API công khai và riêng tư Bao phủ mã lệnh – Code voverage: tạo các kiểm tra để áp ứng một số tiêu chuẩn về bao phủ mã lệnh Các phương pháp gán lỗi – Fault injection Các phương pháp kiểm thử hoán chuyển – Mutation testing... hợp của test Do đó, một tiêu chuẩn phù hợp có thể là được dựa trên đặc tả hoặc dựa trên chương trình Một tiêu chuẩn dựa trên đặc tả xác định công việc test được yêu cầu trong điều kiện của các chức năng khác nhau của các đặc tả phần mềm, vì vậy một bộ test là phù hợp nếu tất cả các chức năng được xác định đã được đưa ra đầy đủ vào các 17 Test case Ở đây các đặc tả được sử dụng để tạo ra các Test case, ... 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 Để