Xây dựng công cụ sinh dữ liệu thử tự động cho chương trình java

25 143 0
Xây dựng công cụ sinh dữ liệu thử tự động cho chương trình java

Đ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

ĐẠI HỌC ĐÀ NẴNG TRƢỜNG ĐẠI HỌC BÁCH KHOA NGÔ PÔ NA XÂY DỰNG CÔNG CỤ SINH DỮ LIỆU THỬ TỰ ĐỘNG CHO CHƢƠNG TRÌNH JAVA Chuyên ngành : Khoa học máy tính Mã số : 60.48.01.01 TÓM TẮT LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH Đà Nẵng – Năm 2017 Công trình hoàn thành TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG Ngƣời hƣớng dẫn khoa học : PGS.TS NGUYỄN THANH BÌNHI Phản biện : PGS.TS Lê Mạnh Thạnh Phản biện : TS Lê Xuân Việt Luận văn bảo vệ trước Hội đồng chấm Luận văn tốt nghiệp thạc sĩ ngành Khoa học máy tính họp Trường Đại học Bách khoa Đà Nẵng vào ngày tháng năm 2017 Có thể tìm hiểu luận văn : - Trung tâm Thông tin - Học liệu, Đại học Đà Nẵng - Trung tâm học liệu truyền thông, trường Đại học Bách Khoa, Đại học Đà Nẵng MỞ ĐẦU Lý chọn đề tài Phần mềm sử dụng rộng rãi đời sống, công việc, nhiều lĩnh vực khoa học, kinh tế xã hội Vì vậy, việc đảm bảo phần mềm đáp ứng mong muốn người sử dụng quan trọng Kiểm thử phần mềm hoạt động nhằm đảm bảo chất lượng phần mềm Việc phát triển phần mềm ngày chuy n nghiệp h a Các phần mềm phát triển ngày c quy mô lớn Y u cầu đảm ảo chất lượng phần mềm mục ti u quan nhất, đ c biệt số lĩnh vực y hoa, ng n hàng, hàng hông Việc iểm thử, iểm chứng phần mềm cách thủ công ch đảm ảo phần chất lượng phần mềm Vì nhiều t chức, công ty nghi n cứu phát triển l thuyết c ng công cụ để iểm chứng, iểm thử phần mềm cách tự động Một số lợi ích kể đến kiểm thử tự động như: cải thiện hiệu công việc, cải thiện tính xác, cải thiện chất lượng kiểm thử chất lượng phần mềm Tại doanh nghiệp tư nhân tại, công việc kiểm thử phần mềm đơn vị (unit test) thường lập trình viên thực trình viết mã nguồn chương trình Vì dẫn đến số vấn đề sau: - Không đảm bảo tính khách quan - Các lập trình vi n thường khó sử dụng kỹ thuật kiểm thử hộp trắng hông đủ chi phí thời gian Hiện dự án mà tham gia, ngôn ngữ lập trình chủ yếu sử dụng Java Ngoài ra,trong ngôn ngữ lập trình đại ngày nay, Java ngôn ngữ lập trình ph biến suốt 13 năm qua [1] Vì l tr n, đề xuất chọn đề tài luận văn cao học: “X y dựng công cụ sinh liệu thử tự động cho chương trình Java” Mục đích ý nghĩa đề tài a Mục đích - Xây dựng công cụ sinh liệu kiểm thử tự động cho chương trình nguồn Java Nhằm mục đích thực việc kiểm thử hộp trắng cho kiểm thử đơn vị cách tự động khoa học Hướng đến mục tiêu giảm chi phí thời gian tài thực công việc kiểm thử cho lập trình viên/kiểm thử viên - Tìm hiểu thách thức g p phải trình sinh liệu thử tự động, từ đ đề xuất cài đ t giải pháp để giải thách thức b Ý nghĩa khoa học - Nghiên cứu kỹ thuật kiểm thử hộp trắng - Nghiên cứu lý thuyết tính thoả - Xây dựng công cụ tự động sinh liệu cho chương trình Java đảm bảo tiêu chí bao phủ lộ trình tối ưu thời gian thực thi c Ý nghĩa thực tiễn - Giảm thời gian chi phí cho việc kiểm thử hộp trắng lập trình viên thực kiểm thử đơn vị - Dữ liệu thử tự động mang tính hách quan hơn, hông ị phụ thuộc vào góc nhìn kinh nghiệm người lập trình - Kiểm tra lỗi tiềm ẩn mã nguồn 3 Mục tiêu nhiệm vụ a Mục tiêu Xây dựng công cụ sinh liệu tự động cho chương trình Java đảm bảo tiêu chí bao phủ lộ trình Các mục tiêu cụ thể sau: - Nghiên cứu phương pháp iểm thử hộp trắng - Nghiên cứu phương pháp giải ràng buộc (SMT [2]) - Nghiên cứu giải pháp sinh liệu thử tự động cho chương trình Java thách thức - Xây dựng công cụ sinh liệu thử cho chương trình Java b Nhiệm vụ Để đạt mục tiêu trên, nhiệm vụ đ t đề tài là: - Nghiên cứu lý thuyết kiểm thử hộp trắng, tập trung vào lý thuyết xây dựng tập liệu kiểm thử - Nghiên cứu lý thuyết tính thoả - Nghiên cứu áp dụng kỹ thuật tối ưu h a để tối ưu thời gian thực thi Đối tƣợng phạm vi nghiên cứu Luận văn tập trung vào nghiên cứu đối tượng phạm vi sau: - Cấu trúc chương trình Java - Lý thuyết tính thoả SMT cách áp dụng để giải ràng buộc - Phân tích, thiết kế cài đ t ứng dụng sinh liệu thử cho chương trình Java Phƣơng pháp nghiên cứu a Phương pháp lý thuyết  Tiến hành thu thập nghiên cứu tài liệu có liên quan đến đề tài 4  Nghiên cứu lý thuyết thực thi ký hiệu lý thuyết tính thỏa  Nghiên cứu kiểm thử đơn vị cách thực  Nghiên cứu phương pháp tối ưu h a đường thực thi b Phương pháp thực nghiệm  Nghiên cứu phương pháp thực thi ký hiệu công cụ hỗ trợ thực thi ký hiệu  Nghiên cứu đề xuất giải pháp tối ưu đường thực thi trình thực thực thi ký hiệu Kết luận a Kết đề tài  Thứ nhất, tìm hiểu cách xây dựng hoạt động phương pháp sinh liệu kiểm thử tự động cho ngôn ngữ Java c ng nghi n cứu thách thức  Thứ hai, đề xuất cài đ t giải pháp tối ưu việc sinh liệu thử tự động nhằm tối ưu hóa thời gian đảm bảo tính đắn, toàn vẹn khả ao phủ liệu thử tự động b Hướng phát triển đề tài Trong trình nghiên cứu, SMT Choco không cho kết tốt ộ SMT hác Z3 hay CVC3 Vì vậy, thời gian tới tiếp tục nghiên cứu triển khai tích hợp SMT có khả hỗ trợ nâng cấp tốt vào chương trình sinh liệu kiểm thử CHƢƠNG CƠ SỞ LÝ THUYẾT 1.1 Tổng quan kiểm thữ phần mềm 1.1.1 Các bước kiểm thử 1.1.2 Các mức kiểm thử 1.1.3 Các kỹ thuật kiểm thử phần mềm 1.2 Lý thuyết tính thỏa đƣợc Tính thỏa mãn vấn đề quan trọng ngành khoa học máy tính Các vấn đề cần tính thỏa mãn ứng dụng phát triển phần cứng c ng phần mềm, đ c biệt kiểm định phần cứng, kiểm thử, lập lịch, đồ thị Trong lĩnh vực nói trên, nhiều ứng dụng xây dựng dựa việc tạo công thức tiền tố việc chứng minh tính hợp lệ chúng Cho dù hai thập niên gần đ y, việc chứng minh tính hợp lệ định lý, biểu thức tiền tố có tiến đáng ể, nhiên, công thức c ng c thể chứng minh cách tự động Lý vấn đề lẽ nhiều công thức hông quan t m đến tính khả thi trường hợp t ng quát mà ch quan tâm lý thuyết tảng Việc nghiên cứu tính khả thi công thức lý thuyết tảng gọi lý thuyết module tính thỏa (Satisfiability Modulo Theories hay SMT) công cụ để chứng minh cách tự động tính khả thi đề SMT gọi giải SMT (SMT solver) Trên thực tế, việc xây dựng sử dụng giải SMT phát triển sớm, từ đầu năm 1980 [9] Tại thời điểm đ , số giải xây dựng Greg Nelson Derek Oppent trường đại học Stanford , Robert Shostak SRI, Robert Boyer J Moore trường đại học Texas Đến cuối năm 1990, việc nghiên cứu SMT đại dựa lợi công nghệ SAT x y dựng nhiều giải SMT tiến Như đề cập trên, khuôn kh đồ án, việc đánh giá tính đắn, nghiên cứu thuật giải giải hông đề cập đến Vấn đề đ t đ y ết giải đưa sớm Hiện nay, có nhiều giải A solver, Boolector, CVC3, OpenSMT, Yices, Z3… Do yêu cầu hệ thống phải đưa giá trị thỏa mãn (nếu toán SMT đ c thỏa mãn) nên giải hệ thống sử dụng phải hỗ trợ chức Ngoài hệ thống sử dụng đầu vào theo chuẩn SMTLib ngắt thời gian giải toán (trong trường hợp toán cần thời gian giải lớn), đ , ộ giải cần phải có hỗ trợ chức hi hoạt động Từ yêu cầu đ , hai ộ giải Yices SRI International Choco Java lựa chọn JPF Hai giải có cấu trúc hác dựa thuật giải DPLL (Davis-Putnam-LogemannLoveland) 1.3 Thực thi ký hiệu Trong hoạt động kiểm thử phần mềm, ca kiểm thử thường tạo cách thủ công, gây tốn chi phí c ng thời gian để hoàn thành công đoạn Thực thi ký hiệu (Sym olic execution) biết đến kỹ thuật n i tiếng với khả tự động sinh ca kiểm thử c độ bao phủ cao với tiêu chí kiểm thử nhằm phát lỗi sâu hệ thống phần mềm phức tạp Trong mục trình bày vấn đề t ng quan số kết nghiên cứu gần đ y kỹ thuật thực thi ký hiệu, đưa thách thức cần giải lĩnh vực như: bùng n đường thực thi chương trình, giải ràng buộc, mô hình hóa nhớ, vấn đề tương tranh, đồng thời c ng tập trung vào ph n tích đề xuất giải pháp để sinh liệu kiểm thử cho chương trình Java cách tự động Hiện c nhiều công cụ tảng phục vụ cho hoạt động iểm thử phần mềm JUnit cho ngôn ngữ Java, NUnit, VSUnit cho NET để thực thi ca iểm thử mức đơn vị Tuy nhi n, công cụ iểm thử hông hỗ trợ việc sinh tự động ca iểm thử đơn vị Viết ca iểm thử công việc n ng nhọc tốn nhiều công sức C nhiều phương pháp hác hỗ trợ việc sinh tự động ca iểm thử giúp giảm chi phí thời gian thực nghi n cứu đưa như: Dựa tr n iểm chứng mô hình (Model Chec ing), ểm thử ngẫu nhi n (Random Testing) Nhưng hạn chế n iểm tra c ng hành vi thực thi chương trình nhiều lần với đầu vào hác ch c thể iểm tra số trường hợp thực thi chương trình Th m vào đ , iểm thử ngẫu nhi n h xác định hi việc iểm thử n n dừng lại n hông iết điểm hông gian trạng thái thám hiểm hết Để xác định hi việc iểm thử dừng lại hệ thống iểm thử ngẫu nhi n ết hợp với ti u chuẩn an toàn Để hắc phục hạn chế iểm thử ngẫu nhi n, phương pháp thực thi tương trưng x y dựng ràng uộc tr n giá trị hiệu giải ràng uộc đ để sinh giá trị đầu vào cho chương trình mà c thể ao phủ tất d ng lệnh c ng nhánh thực thi chương trình tưởng thực thi việc thực hiệu đề xuất ởi, tưởng ch thực năm gần đ y qua tiến ộ đáng ể l thuyết giải ràng uộc tiếp cận mở rộng thực thi hiệu động , ỹ thuật ết hợp giá trị cụ thể giá trị hiệu cho giá trị đầu vào 1.4 Các kỹ thuật thực thi ký hiệu a Concolic testing Thực thi thực thi hiệu động ết hợp thực thi cụ thể hiệu Trong thực thi hiệu động, chương trình thực thi nhiều lần với giá trị hác tham số đầu vào Bắt đầu ằng việc chọn giá trị t y cho tham số đầu vào thực thi chương trình với giá trị cụ thể đ chương trình thực thi theo đường xác định DART thực thi chương trình với giá trị cụ thể tham số đầu vào thu gom ràng buộc trình thực thi theo đường mà thực thi cụ thể theo, đồng thời suy ràng uộc từ ràng uộc thu gom Tại c u lệnh rẽ nhánh, iểu thức điều iện rẽ nhánh đánh giá theo giá trị cụ thể tham số đầu vào Nếu iểu thức điều iện rẽ nhánh nhận giá trị True iểu thức điều kiện rẽ nhánh thu gom vào ràng uộc ràng uộc lộ trình ghi nhớ, đồng thời phủ định điều iện rẽ nhánh sinh th m vào ràng buộc lộ trình tương ứng với nhánh c n lại mà thực thi cụ thể đ hông theo Một xử l ràng buộc sử dụng để giải ràng uộc sinh để sinh giá trị cụ thể tham số đầu vào Trong trường hợp ngược lại iểu thức phủ định điều iện rẽ nhánh thu gom vào ràng buộc ràng uộc lộ trình tương ứng với nhánh mà thực thi thời theo ghi nhớ Đồng thời điều kiện rẽ nhánh sinh th m vào PC tương ứng với nhánh c n lại mà thực thi thời hông theo Các giá trị sinh tham số đầu vào tiếp tục thực thi trình l p lại hi chương trình thực thi theo tất đường Do chương trình thực thi với giá trị cụ thể n n c thể thấy tất đường ph n tích trình thực thi hiệu động đường thi b Excution generated testing EGT trộn lẫn giá trị cụ thể thực thi hiệu ằng cách iểm tra động trước toán hạng Nếu giá trị li n quan đ hoàn toàn giá trị cụ thể toán hạng đ thực thi chương trình gốc C n c giá trị thực thi hiệu toán hạng thực hiệu cập nhật điều iện ràng buộc đường cho đường thực thi thời 1.5 Các thách thức giải pháp a Bùng nổ đường Một thách thức quan trọng thực thi hiệu n sinh số lượng lớn đường thực thi m c d chương trình nhỏ thường hàm m số c u lệnh rẽ nhánh tĩnh mã nguồn Kết hoảng thời gian định trước n định hám phá đường đầu ti n cho ph hợp Trước hết, lưu thực thi hiệu ngầm lọc tất đường thực thi hông phụ thuộc vào iến hiệu đầu vào đường dẫn hông thi (Infeasi lle path) trình giải ràng uộc M c d vậy, ng n đường dẫn thách thức lớn thực thi hiệu Hiện c cách tiếp cận để giải vấn đề ưu ti n tìm iếm inh nghiệm (Heuristic search) sử dụng ỹ thuật ph n tích tính đắn chương trình 10 b Giải ràng buộc M c d c tiến ộ đáng ể ỹ thuật thực giải ràng uộc năm gần đ y, giúp cho thực thi hiệu trở n n thực tế hơn, việc giải ràng uộc cản trở đáng ể thực thi ký hiệu N thường chiếm nhiều thời gian trình thực l hiến thực thi tương trưng hông mở rộng với số loại chương trình mà mã nguồn n sinh với y u cầu lớn việc giải ràng buộc c Mô hình hóa nhớ Độ xác c u lệnh chương trình hi chuyển sang ràng buộc ký hiệu c ảnh hưởng đáng ể đến độ ao phủ hi thực thực thi hiệu Ví dụ hi sử dụng mô hình hóa nhớ mà xấp x để thiết lập độ rộng cho tham iến iểu Interger c thể c hiệu thực tế m t hác ết lại thiếu xác ph n tích mã nguồn N phụ thuộc vào hoảng lựa chọn giá trị tương ứng lỗi tràn ộ nhớ toán học, c ng c thể g y thiếu đường dẫn thực thi vv hiệu, ho c khai phá đường hông thi 11 CHƢƠNG GIẢI PHÁP SINH DỮ LIỆU THỬ CHO CHƢƠNG TRÌNH JAVA 2.1 Giải pháp sinh liệu thử cho chƣơng trình JAVA a Tổng quan giải pháp Mô hình t ng thể giải pháp sinh liệu thử cho chương trình Java mi u tả hình đ y: Hình 2.1 Mô hình triển khai Tham số đầu vào phương pháp tệp nguồn Java cần phân tích, số vòng l p tối đa (của lệnh l p for, while ), tiêu chuẩn phủ Mã nguồn Java ph n rã thành phương thức mức độ ưu ti n xử lý chúng tính toán, phương thức phụ thuộc vào phương thức hác c độ ưu ti n xử l cao hơn, phương thức lời gọi hàm xử l Cuối có danh sách 12 phương thức xếp theo mức ưu ti n giảm dần, chúng xử lý theo thứ tự đ Với phương thức, đầu ti n đồ thị luồng điều khiển xây dựng, duyệt đồ thị luồng điều khiển cho lộ trình thực thi phương thức, tiếp đến c tập ràng buộc tương ứng nhờ áp dụng phương pháp thực thi ký hiệu Quá trình l p lại tất phương thức phân tích hết Các lộ trình thực thi tìm ước đưa vào SMT-Solver để kiểm tra tính thoả sinh liệu kiểm thử tự động đảm bảo bao phủ lộ trình đưa vào SMTSolver b Phương pháp thực Bƣớc 1: Phân tích danh sách phương thức Ta dựa vào định nghĩa sau: Định nghĩa 2.1: Đồ thị luồng với tập nút N, tập cạnh E, đồ thị c hướng liên thông, luôn có điểm đầu vào, điểm kết thúc [7] Định nghĩa 2.2: Trong chương trình, đồ thị luồng biễu diễn cho luồng điều khiển khả thi n , đ nút tương ứng cho điểm chương trình (tập lệnh) cạnh thể cho luồng điều khiển điểm đ [7] Dựa vào cấu trúc phương thức ta phân tách thành khối độc lập Sau đ lại gọi đệ quy để phân tích thành khối cấu trúc n Trong ước này, sử dụng công cụ JDT cho phép duyệt qua toàn phương thức nhận dạng thành phần cấu tạo nên câu lệnh If, For, While ; từ đ dễ dàng xây dựng đ c tả nút giúp tập trung vào thuật toán xây dựng đồ thị 13 Bƣớc 2: Sinh lộ trình thực thi Tập hợp lộ trình thực thi hàm lấy cách duyệt đồ thị luồng điều khiển tương ứng với Với phương thức có lời gọi hàm con, nút đồ thị ho c câu lệnh ( ho c tập câu lệnh ) xác định, ho c lời gọi đến hàm đ Cần lưu thay chèn ràng buộc lộ trình hàm con, thay lộ trình thực thi tương ứng Tuy nhiên kết hàm ch phụ thuộc vào đối số nó, nói cách khác biến hác tạo sử dụng n hàm gọi không ảnh hưởng đến lộ trình thực thi Do việc sử dụng lộ trình ràng buộc tối ưu hi mà iến số n n xử lý thực thi ký hiệu Bƣớc 3: Sinh tập ràng buộc Định nghĩa 2.3: Ràng buộc lộ trình[7] tập hợp biểu thức luận lý: đ n số nút điều kiện đường thực thi, c biểu diễn ràng buộc tương ứng với điều kiện đ Tập lộ trình thực thi phương thức xử l tập lộ trình ràng buộc cách sử dụng phương pháp Thực thi ký hiệu Mỗi ước thực lộ trình thực thi mô tả trạng thái biến đầu vào (input) biến n phương thức Bƣớc : Sinh liệu kiểm thử từ SMT solver Để làm việc với SMT ta thực công việc chuẩn hóa đầu vào theo định dạng SMT – LIB Mỗi nút đường ràng buộc chuyển từ dạng trung tố sang dạng tiền tố, từ hoá assert sử dụng để thêm ràng buộc vào SMT 14 2.2 Vấn đề tối ƣu ràng buộc Một nhược điểm sinh liệu thử tự động cần phải tối thiểu ràng buộc nhằm đảm bảo tốc độ thực thi hao tốn tài nguy n trình ày mục 1.5, thuật toán tối ưu h a ràng uộc cài đ t tích hợp thêm vào công cụ có sẵn đảm bảo điểm sau: - Hạn chế số lượng ràng buộc đưa vào SMT để giảm tiêu tốn tài nguyên - Đảm bảo tính đắn, không làm sai lệch kết đầu chương trình sau hi áp dụng thuật toán Vì vậy, ài toán đ t phải cài đ t thuật toán tối ưu h a vào chương trình mã nguồn mở có sẵn để tăng tốc độ thực thi đảm bảo tính đắn chương trình 2.3 Giải ràng buộc Trong trình thực việc tối ưu hoá ràng uộc, sử dụng công cụ mã nguồn mở JPF việc hỗ trợ thực thi ký hiệu ch tập trung vào việc cài đ t thử nghiệm thuật toán để tối ưu hoá ràng uộc Mô hình thực biểu diễn: Với hỗ trợ từ công cụ mã nguồn mở JPF, triển khai trình thực thuật toán trình bày cụ thể mục 2.5 2.4 Ứng dụng JAVA PATH FINDER a Giới thiệu JPF JPF máy ảo cho Java ytecode, c nghĩa n chương trình nhận đầu vào chương trình Java để thực thi Nó sử dụng để tìm lỗi chương trình này, ta c ng cần phải cung cấp cho thuộc tính để kiểm tra đầu vào [10] 15 JPF cho báo cáo tạo JPF để phân tích Cơ chế JPF thực hình minh họa sau: Hình 2.3 Cấu trúc JPF b Giới thiệu mở rộng JPF-SYMBC JPF-SYMBC gói mở rộng JPF nhằm mục tiêu hỗ trợ người lập trình việc thực thực thi ký hiệu JPF-SYMBC ết hợp thực thi hiệu iểm chứng mô hình thực giải ràng uộc để sinh liệu test, hỗ trợ thực thi ký hiệu động thực thi tệp ytecode c thể áp dụng mô hình cho ngôn ngữ mô hình h a SPF c thể thực tr n iểu liệu nguy n, iểu thực, trỏ, mảng, số toán tử tr n iểu x u (đang phát triển hoàn thiện) sử dụng ết hợp số ộ giải ràng uộc như: Choco, IASolve, CVC3 thực giải ràng buộc tuyến tính, phi tuyến tính tr n iểu số nguy n, số thực, iểu tham chiếu (con trỏ) iểu x u c Tối ưu hoá ràng buộc lộ trình để phục vụ cho trình thực thi ký hiệu Việc giải ràng buộc(Constraint solving) phần thiếu việc thực thi ký hiệu, việc giải constraint phần tốt nhiều tài nguyên trình thực thi ký hiệu Trong thực tế, hiệu suất chế giải sử dụng kỹ thuật thực thi ký hiệu ảnh hưởng đáng ể đến hiệu 16 suất t ng thể Không may, giải hạn chế chủ yếu sử dụng thực thi ký hiệu không tận dụng ngữ cảnh thông tin tên miền có sẵn Để giải vấn đề này, đề tài sử dụng chiến lược tối ưu h a mới, sử dụng miền thông tin theo ngữ cảnh để tối ưu h a hiệu suất giải ràng buộc trình thực thi ký hiệu Quá trình thực thi ký hiệu thực thi chương trình với đầu trình kiếm tra tất lộ trình chương trình Đối với lộ trình, trình thực thi ký hiệu cập nhật trạng thái mang tính biểu tượng chương trình theo ngữ nghĩa Ở phần cuối trình thực thi ký hiệu, rang buộc lộ trình đưa váo solver thông qua SMT để tìm kết Phương án tối ưu sau đ y gọi phương pháp rút gọn miền, với ràng buộc Ca Cb tập ràng buộc C gọi phụ thuộc thỏa mãn : - Phụ thuộc trực tiếp: Ca Cb tồn ràng buộc - Phụ thuộc không trực tiếp: Ca Cb có phụ thuộc trực tiếp tới biến Cc Giải pháp chứa ràng buộc phụ thuộc với biến ràng buộc mục tiêu không ảnh hưởng đến kết quả.vì ta loại bỏ ràng buộc khỏi ràng buộc lộ trình đưa vào trở lại sau trình thực thi Đối với ràng buộc thực tế hơn, đơn giản hóa dẫn đến tiết kiệm đáng ể số lượng hạn chế mà giải SMT phải xử lý Cách tiếp cận tối ưu dựa việc giảm ràng buộc miền liệu thực sau 17 - Bước 1: Chia biến mục ti u thành nh m theo độ phụ thuộc - Bước 2: Tìm biến c độ phụ thuộc lớn bé - Bước 3: Thay biến mục tiêu với giá trị đầu vào với nhóm thực ước lược bỏ phụ thuôc trình ày 2.5 Cài đặt tối ƣu ràng buộc với JPF a Kiến trúc JPF mở rộng JPF-SYMBC b Các thiết lập JPF c Cài đặt tối ưu ràng buộc d Thuật toán tối ưu Thuật toán tối ưu ràng uộc trình ày chương triển hai sau: Input: Ràng buộc lộ trình, giá trị biến mục tiêu biến cố định, giải SMT Output: kết sau giải SMT (sat, usat ho c unknown) Constraint cur = getTargetConstraint(index, pc) List targetsymlist = getSymVars(cur) result = unknown for i = to length(targetsymlist) groups[] = formGroupsofX(i, targetsymlist) List dependencies = [] for a = to length(groups) dependencies[a] = getDependencies(groups[a], pc) end int selectDep[0] = findSmallestDepIndex(dependencies) int selectDep[1] = findLargestDepIndex(dependencies) for b = to length(selectedDep) List grpDep = dependencies[(selectDep[b])] List grpDep) symbolicVars = join(groups(selectDep[b]), 18 newPC = modifyPC(symbolicVars,concreteValuesMapping,pc) output = callSolver(solver,newPC) if output = “sat” then return output end else if output = “unsat” then result = output end end end Trong thuật toán tối ưu hoá ràng uộc, có số phương thức quan trọng:  findSmallestDepIndex(): nhận đầu vào tập phụ thuộc, trả giá trị phụ thuộc có phụ thuộc  findLargestDepIndex(): nhận đầu vào tập phụ thuộc, trả giá trị phụ thuộc có phụ thuộc  modifyPC(): Thay giá trị ký hiệu biến mục tiêu giá trị thời lộ trình 19 CHƢƠNG CÀI ĐẶT VÀ THỬ NGHIỆM 3.1 Mọi trƣờng cài đặt 3.2 Thử nghiệm 3.2.1 Đánh giá khả bao phủ Để đánh giá độ bao phủ tiến hành thử nghiệm sinh liệu thử công cụ tr n a phương thức testMe1, testMe2, testMe3 để kiểm tra thay đ i công cụ sau hi cài đ t thuật toán tối ưu Phương thức testMe1, testMe2, testMe3 tiến hành thực sinh dự liệu thử tự động với trường hợp sau: chương trình sinh liệu kiểm thử cài thuật toán tối ưu chương trình sinh liệu kiểm thử hông cài đ t thuật toán tối ưu Trong trình bày bảng kết quả, ký hiệu “-” đại diện cho việc liệu đầu vào biến nhận giá trị 3.2.2 Đánh giá tính hiệu Để đánh giá tính hiệu việc giảm thời gian thực thi công cụ hi cài đ t thuật toán tối ưu, liệu (được ghi lại chi tiết phần Phụ lục) gồm 10 phương phức chọn tiến hành trình sinh liệu thử tự động Quá trình sinh liệu thử tự động thực trường hợp: công cụ cài đ t thuật toán tối ưu công cụ hông cài đ t thuật toán tối ưu Bảng kết sau thực thi hệ thống máy tính với cấu hình: CPU core i3, 3GB RAM 20 Bảng 3.7 Kết thử nghiệm Tên phƣơng thức kiểm thử Thời gian thực thi (milisecond) Không cài Cài đặt đặt thuật thuật toán toán tối ƣu tối ƣu Tỷ lệ giảm Test1 1332 1032 24% Test2 1282 867 33% Test3 1334 932 31% Test4 1055 739 30% Test5 1389 956 32% Test6 918 643 30% Test7 1277 893 31% Test8 1364 971 29% Test9 984 692 30% Test10 1191 834 27% 3.3 Kết luận 21 KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN Kết đạt đƣợc Qua đề tài “X y dựng công cụ sinh liệu thử tự động cho chương trình Java”, tìm hiểu, nghiên cứu số kết sau: Thứ nhất, tìm hiểu cách xây dựng hoạt động phương pháp sinh liệu kiểm thử tự động cho ngôn ngữ Java c ng nghi n cứu thách thức Thứ hai, đề xuất cài đ t giải pháp tối ưu việc sinh liệu thử tự động nhằm tối ưu h a thời gian đảm bảo tính đắn, toàn vẹn khả ao phủ liệu thử tự động Hạn chế Giải pháp đề dựa phụ thuộc ràng buộc với nhau, độ hiệu thuật toán bị ảnh hưởng lớn trường hợp liệu đầu vào có phụ thuộc nhiều với Giải pháp đề thực thi ký hiệu để bao phủ tất nhánh thực thi, đ trường hợp chương trình phức tạp công cụ không hoạt động bùng n đường Một điểm hạn chế khác thuật toán trường hợp liệu đầu vào đơn giản việc thực biện pháp tiền xử lý thuật toán khiến cho chương trình thêm tài nguyên việc thực Hƣớng phát triển Trong trình nghiên cứu, SMT Choco không cho kết tốt ộ SMT hác Z3 hay CVC3 Vì vậy, thời gian tới tiếp tục nghiên cứu triển khai tích hợp 22 SMT có khả hỗ trợ nâng cấp tốt vào chương trình sinh liệu kiểm thử ... công cụ sinh liệu thử tự động cho chương trình Java Mục đích ý nghĩa đề tài a Mục đích - Xây dựng công cụ sinh liệu kiểm thử tự động cho chương trình nguồn Java Nhằm mục đích thực việc kiểm thử. .. y dựng công cụ sinh liệu thử tự động cho chương trình Java , tìm hiểu, nghiên cứu số kết sau: Thứ nhất, tìm hiểu cách xây dựng hoạt động phương pháp sinh liệu kiểm thử tự động cho ngôn ngữ Java. .. CHƢƠNG GIẢI PHÁP SINH DỮ LIỆU THỬ CHO CHƢƠNG TRÌNH JAVA 2.1 Giải pháp sinh liệu thử cho chƣơng trình JAVA a Tổng quan giải pháp Mô hình t ng thể giải pháp sinh liệu thử cho chương trình Java mi u tả

Ngày đăng: 26/04/2017, 11:32

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan