Một số cải tiến về ràng buộc xâu trong sinh dữ liệu kiểm thử tự động cho thực thi tượng trưng tt

27 16 0
Một số cải tiến về ràng buộc xâu trong sinh dữ liệu kiểm thử tự động cho thực thi tượng trưng  tt

Đ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

BỘ GIÁO DỤC VÀ ĐÀO TẠO VIỆN HÀN LÂM KHOA HỌC VÀ CÔNG NGHỆ VIỆT NAM HỌC VIỆN KHOA HỌC VÀ CÔNG NGHỆ Tô Hữu Nguyên MỘT SỐ CẢI TIẾN VỀ RÀNG BUỘC XÂU TRONG SINH DỮ LIỆU KIỂM THỬ TỰ ĐỘNG CHO THỰC THI TƢỢNG TRƢNG Chuyên ngành : Cơ sở toán học cho tin học Mã số: 46 01 10 TÓM TẮT LUẬN ÁN TIẾN SĨ TOÁN HỌC Hà Nội - 2020 Cơng trình hồn thành tại: Học viện Khoa học Công nghệ - Viện Hàn lâm Khoa học Công nghệ Việt Nam Người hướng dẫn khoa học 1: TS Nguyễn Trường Thắng Người hướng dẫn khoa học 2: PGS.TS Đặng Văn Đức Phản biện 1:………………………… Phản biện 2:………………………… Phản biện 3:………………………… Luận án bảo vệ trước Hội đồng đánh giá luận án tiến sĩ cấp Học viện, họp Học viện Khoa học Công nghệ - Viện Hàn lâm Khoa học Công nghệ Việt Nam vào hồi … giờ…‟, ngày… tháng …… năm 201… Có thể tìm hiểu luận án tại: - Thư viện Học viện Khoa học Công nghệ - Thư viện Quốc gia Việt Nam MỞ ĐẦU Tính cấp thiết luận án Một cách tổng quát, với kỹ thuật dùng giai đoạn kiểm thử động (dynamic runtime testing) phần mềm phân làm hai cơng đoạn con: chuẩn bị ca kiểm thử (test case) cho việc kiểm tra phần mềm thực chạy chương trình cần kiểm thử tảng hỗ trợ nghiệp vụ kiểm thử (testing framework) với ca kiểm thử có Một hoạt động quan trọng để giảm chi phí kiểm thử phần mềm sinh ca kiểm thử cách tự động có tính đầy đủ Các tổ chức phát triển phần mềm thường phí lượng lớn tài cho hoạt động liên quan đến kiểm thử phần mềm Tính hiệu tiến trình xác minh thẩm định phụ thuộc nhiều vào số lỗi tìm sửa chữa trước sản phẩm chuyển giao Điều đồng nghĩa với quan điểm chất lượng phần mềm phụ thuộc chặt chẽ vào chất lượng ca kiểm thử sinh Trong năm qua, nhiều nghiên cứu nhà khoa học giới nhằm “sinh liệu kiểm thử cách tự động” [3, 4] để giảm thiểu chi phí cho phần mềm Có hai cách tiếp cận để sinh liệu kiểm thử dựa vào mã nguồn (code) dựa vào mơ hình (model) Đối với phương pháp dựa vào mã nguồn phương pháp cho khả bao phủ cao, có khả loại bỏ dịng lệnh khơng cần thiết chứa tiềm ẩn gây lỗi cần thiết phải có khả tối ưu tính tốn phần mềm phân tích kiểm thử, gần có nhiều nghiên cứu tập trung vào phương pháp [5, 6, 7] Trong năm qua, nhiều nghiên cứu việc sinh ca kiểm thử cách tự động như: sinh ca kiểm thử dựa vào đặc tả, sinh ca kiểm thử dựa vào mơ hình, sinh ca kiểm thử hướng đường dẫn kỹ thuật thông minh Tuy nhiên, kiểm thử dựa vào thực thi biểu trưng hướng nghiên cứu nhiều người quan tâm Các kỹ thuật sinh liệu kiểm thử tự động mà nhà nghiên cứu đề xuất là: Dựa vào chứng minh định lý (test case generation by theorem proving) [8, 9]; Dựa vào thực thi biểu trưng (test case generation by symbolic execution [5, 7,10,11,12]); Dựa vào kiểm chứng mơ hình (test case generation by model checking) [13]; Dựa vào mơ hình luồng kiện (test case generation by an eventflow model [14]); Dựa vào việc sử dụng mơ hình xích Markov (test case generation by using a Markov chains model) [15] Trong kỹ thuật thực thi biểu trưng (symbolic execution) vấn đề nhiều nhà khoa học giới tìm hiểu, phát triển xây dựng ứng dụng [5, 6, 7] Hiện kỹ thuật phát triển nhiều công cụ, nhiều ngôn ngữ như: C/C++, JavaScrip, Net, java, HTML vv Trong phạm vi giới hạn nghiên cứu, nội dung luận án tập trung nghiên cứu số cải tiến giải ràng buộc xâu áp dụng sinh ca kiểm thử Các cài đặt thực nghiệm đánh giá thực ngôn ngữ Java Java ngôn ngữ mạnh mẽ, đại Hơn nữa, Java sử dụng rộng rãi với thư viện kiểu liệu xâu đa dạng, phong phú sử dụng nhiều dự án lớn tương lai Mục tiêu nghiên cứu luận án Nghiên cứu phương pháp mơ hình hóa ràng buộc giải ràng buộc từ dó cải tiến khả giải ràng buộc áp dụng kỹ thuật thực thi biểu trưng tự động sinh ca kiểm thử Cài đặt thử nghiệm phương pháp đề xuất sinh tự động ca kiểm thử kiểu liệu xâu kiểu liệu hỗn hợp Phân tích, đánh giá kết sau thử nghiệm Tổng quan phương pháp tự động sinh ca kiểm thử phần mềm, kỹ thuật thực thi biểu trưng ứng dụng sinh tự động ca kiểm thử Các kỹ thuật mơ hình hóa ràng buộc, giải ràng buộc kiểu liệu dựa hai phương pháp Otomata Bitvector, Nghiên cứu, phân tích đánh giá phương pháp có sinh ca kiểm thử kiểu liệu khác Đánh giá hiệu quả, chất lượng ca kiểm thử tạo so với thực tế chương trình Các kỹ thuật sinh tự động ca kiểm thử, vấn đề liên quan mơ hình hóa ràng buộc kiểu liệu Nghiên cứu cải tiến mô hình hóa giải ràng buộc kiểu liệu xâu kí tự, từ ứng dụng kỹ thuật thực thi biểu trưng thực sinh ca kiểm thử tự động kiểu xâu kí tự cho chương trình kiểm thử Nghiên cứu, phân tích, tổng hợp liệu liên quan đến thực thi biểu trưng, vai trò giải ràng buộc giải ràng buộc kiểu liệu xâu thực thi biểu trưng sinh tự động ca kiểm thử (các báo, tạp chí, mạng Internet ) Cải tiến mơ hình hóa ràng buộc nâng cao khả giải ràng buộc kiểu liệu xâu ràng buộc hỗn hợp, phân tích, đánh giá kết cơng bố Các nội dung nghiên cứu luận án Xây dựng mơ hình hóa ràng buộc kiểu liệu xâu ràng buộc hỗn hợp, cải tiến khả giải ràng buộc phương pháp thực thi biểu trưng Cài đặt kỹ thuật mơ hình hóa giải ràng buộc dựa Otomat Bitvector giải ràng buộc xâu, đánh giá so sánh kết thu với các kết công bố, luận án có bố cục cụ thể sau: Chương luận án trình bày tổng quan kiểm thử phần mềm kỹ thuật thực thi biểu trưng ứng dụng tự động sinh ca kiểm thử Đồng thời trình bày lý thuyết sở sử dụng luận án nhằm đưa nhìn tổng quan toán nghiên cứu, sử dụng kỹ thuật thực thi biểu trưng ứng dụng sinh tự động ca kiểm thử hướng nghiên cứu cụ thể luận án Chương luận án trình bày kết nghiên cứu phương pháp mơ hình hóa ràng buộc, giải ràng buộc thực thi biểu trưng Áp dụng công cụ vào trường hợp cụ thể với đánh giá tính hiệu phương pháp kiểu liệu cụ thể Chương luận án trình bày kết nghiên cứu cải tiến mơ hình hóa ràng buộc kiểu xâu ràng buộc hỗn hợp, giải ràng buộc thực thi biểu trưng kiểu liệu xâu liệu hỗn hợp Đồng thời trình bày việc mở rộng kỹ thuật thực thi biểu trưng, cách thực giải ràng buộc xâu dựa phương pháp Otomat Phần kết luận nêu đóng góp, hướng phát triển, vấn đề quan tâm; danh mục cơng trình cơng bố luận án danh sách tài liệu tham khảo sử dụng luận án trình bày CHƢƠNG TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM VÀ THỰC THI BIỂU TRƢNG Chương trình bày lý thuyết tổng quan kiểm thử sinh liệu kiểm thử, thực thi biểu trưng ứng dụng thực thi biểu trưng sinh ca kiểm thử Trong đó, trình bày khái niệm phân tích liên quan đến kỹ thuật thực thi biểu trưng Đồng thời, vài thách thức hướng phát triển luận án trình bày chương 1.1 Kiểm thử phần mềm Để đảm bảo hệ thống phần mềm thành phần phần mềm làm việc mong muốn thách thức lớn ngành công nghiệp phần mềm Các phần mềm lỗi gây tổn thất kinh tế hậu nghiêm trọng khác tùy thuộc vào lĩnh vực mà phần mềm sử dụng 1.1.2 Các kỹ thuật kiểm thử [24]: Kiểm thử hộp đen (Black box testing) Kiểm thử hộp trắng (White box testing) Kiểm thử đơn vị (Unit test) 1.2 Kỹ thuật kiểm thử hộp trắng dòng điều khiển Kiểm thử hộp trắng dòng điều khiển chia gồm kiểm thử hướng tĩnh kiểm thử hướng động Đầu vào hai kĩ thuật mã nguồn tiêu chí phủ kiểm thử Sau loạt q trình phân tích, đầu tương ứng tập ca kiểm thử Mỗi kĩ thuật có ưu điểm hạn chế riêng Mục tiêu kiểm thử hộp trắng dịng điều khiển tìm tập ca kiểm thử tối thiểu đạt độ phủ tối đa 1.3 So sánh kiểm thử hộp trắng dòng điều khiển theo hƣớng tĩnh động Mỗi kĩ thuật kiểm thử có ưu điểm hạn chế riêng Để có nhìn tổng quan hai kĩ thuật, luận án đưa so sánh số ca kiểm thử, thời gian sinh ca kiểm thử, khả kiểm thử vòng lặp, ảnh hưởng phức tạp mã nguồn hai kĩ thuật 1.4 Thách thức kiểm thử phần mềm Tồn ý tưởng không kiểm thử như: Ca kiểm thử tốt ca kiểm thử có độ phức tạp cao; Tự động kiểm thử thay kỹ sư kiểm thử để kiểm thử phần mềm cách tốt đẹp; Kiểm thử phần mềm đơn giản dễ dàng Ai làm, khơng cần phải qua huấn luyện Ngồi ra, việc kiểm thử gặp nhiều hạn chế bao gồm: Không thể đặc tả phần mềm 100%; Không thể hệ thống hay cơng cụ kiểm thử đúng; Khơng có cơng cụ kiểm thử thích hợp cho phần mềm; Kỹ sư kiểm thử không họ hiểu đầy đủ sản phẩm phần mềm; Khơng có đủ tài nguyên để thực kiểm thử đầy đủ phần mềm; Không ta đạt đủ 100% hoạt động kiểm thử phần mềm 1.5 Thực thi biểu trƣng 1.5.1 Tổng quan thực thi biểu trưng Trong khoa học máy tính, thực thi biểu trưng phương tiện để phân tích chương trình để xác định đầu vào gây phần chương trình để thực thi Một biên dịch theo chương trình, giả sử nhận giá trị biểu trưng cho đầu vào thay nhận đầu vào thực tế thực thi bình thường chương trình 1.5.2 Thực thi biểu trưng tĩnh Ý tưởng thực thi biểu trưng [31] thực thi chương trình với giá trị biểu trưng thay giá trị cụ thể tham số đầu vào Giá trị biểu trưng biến x biểu thị bởi: (a) Một ký hiệu đầu vào (b) Một biểu thức kết hợp giá trị biểu trưng toán tử, (c) Một biểu thức kết hợp giá trị biểu trưng giá trị cụ thể toán tử 1.5.3 Thực thi biểu trưng động Thực thi biểu trưng động [32, 33] kỹ thuật thực thi tượng trưng dựa phân tích chương trình động Thực thi biểu trưng động kết hợp thực thi cụ thể thực thi biểu trưng Trong thực thi biểu trưng động, chương trình thực thi nhiều lần với giá trị khác tham số đầu vào Bảng 1.1 Ví dụ thực thi biểu trưng động Ràng buộc C’(i) Input i Ràng buộc đƣợc ghi nhớ C(i) null a!=null {} a!=null&& a.length>0 {0} a!=null && a.length>0 && a[0]!=123456789 {123456789} a = = null a!=null && !(a.length>0) a!=null && a.length>0 && a[0]!=123456789 a!=null && a.length>0 && a[0]!=123456789 1.5.4 Thực thi Concolic Thực thi Concolic mơ hình thực cụ thể biến thể thực thi biểu trưng Nó tiên phong cơng cụ DART [36] CUTE [35] Bảng 1.2 So sánh thực thi Concolic với thực thi biểu trưng Thực thi biểu trƣng cổ điển Thực thi Concolic - Sử dụng đầu vào biểu trưng, thu tập -Sử dụng đầu vào cụ thể chạy chương giải ràng buộc với đầu vào biểu trưng Thực thi biểu trƣng cổ điển trình thu thập ràng buộc đường dẫn đầu vào Thực thi Concolic - Gọi giải điểm nhánh nên việc tiếp - Chạy chương trình thu thập ràng cận phần sâu mã chậm buộc đường dẫn Không can thiệp vào việc chạy chương trình nhiều – Nhanh - Biểu trưng cổ điển sử dụng tài nguyên - Các phần sâu mã thực thi muốn khám phá đầy đủ tất đường lần lặp dẫn – tiếp cận phần sâu mã nhanh - Thực lại bit bắt đầu chương trình nhiều lần - khơng cần thiết - Thực thi đồng thời tốt bạn muốn tìm lỗi tiếp cận phần sâu chương trình nhanh 1.6.6 Ràng buộc xâu vai trò giải ràng buộc xâu Mấu chốt thực thi biểu trưng khả giải ràng buộc xâu liệu kiểu liệu có tất ngơn ngữ lập trình đại việc sử dụng phép toán xâu thường xuyên thực Trong lĩnh vực khác phân tích phần mềm, kiểm chứng mơ hình, sở liệu, bảo mật web, tin sinh học [47 - 52] Vì lý việc giải ràng buộc phức tạp xâu cần hiết có nhiều ứng dụng Các quan hệ định nghĩa biến xâu kí tự bao gồm: Độ dài xâu, so sánh xâu, phép nối, kiểm tra xâu con, cắt xâu, so sánh biểu thức quy vv Thuật ngữ giải ràng buộc xâu (String Constraint Solving)trong luận án đề cập đến việc mơ hình hóa, giải biểu thức kết hợp liên quan đến ràng buộc xâu, ta xem giải ràng buộc xâu phần giao giải ràng buộc tổ hợp từ, người dùng đưa vấn đề với biến xâu giải ràng buộc xâu tìm giải pháp phù hợp cho vấn đề Từ năm 2010 việc giải ràng buộc xâu có số nghiên cứu quan tâm có kết định [51, 52] có vai trị chủ đạo lĩnh vực sinh liệu kiểm thử, kiểm chứng mơ hình, bảo mật web Trong năm qua có nhiều hướng tiếp cận khác đưa ra, có ba loại chính: Tiếp cận dựa lý thuyết Otomat: phương pháp sử dụng Otomat hữu hạn để biểu diễn giá trị biến xâu, dùng để lưu trữ, xử lý phép toán xâu Tiếp cận dựa từ: Phương pháp sử dụng hệ thống so sánh từ với nhau, chúng sử dụng chủ yếu lý thuyết thỏa mãn (SMT)[53] để giải ràng buộc xâu Tiếp cận dựa phân tách xâu: Nguyên lý thực phân tách xâu thành phần tử liền kề tương đương kí tự xâu Xâu phân rã thành số nguyên bitvector Bảng chữ hữu hạn tập hữu hạn Σ ={a1,a2 , an} với n>1 kí hiệu gọi kí tự Một xâu w hay tự dãy hữu hãn kí tự thuộc bảng chữ Σ, kí hiệu |w| biểu diễn cho độ dại xâu w( luận án khơng đề cập đến xâu có độ dài vô hạn) Một xâu rỗng biểu diễn ký tự ɛ, gọi tập hữu hạn Σ*là tập tất xâu bảng chữ Σ định nghĩa đệ quy sau: Xâu rỗng: ɛ ∈ Σ* Nếu kí tự a∈ Σ w∈ Σ* thì wa∈ Σ* Ngồi khơng có thuộc Σ* Bảng 1.4 Mô tả ràng buộc xâu Ràng buộc xâu x = y, x ≠ y x < y, x≤y, x≥y, x > y So sánh bằng, so sánh khác So sánh thứ tự logic hai xâu So sánh độ dài xâu với số nguyên n n=|x| z=x.y, y=x Mô tả n y=x-1 y=x[i j] n=find(x,y) Phép nối xâu, phép lặp phép nối xâu Phép đảo ngược xâu Lấy xâu xâu x n số xuất xâu x xâu y y = replace(x, q, q′ ) y có cách thay lần xuất q q‟ x y = replaceAll(x, q, q′ ) y có cách thay tất q q‟ x n = count(a, x) x ∈ L(R) n số lần xuất kí tự a x x thuộc ngơn ngữ quy biểu diễn R x ∈ L(G) x thuộc ngôn ngữ phi ngữ cảnh biểu diễn G Ví dụ ràng buộc substring(x,y) có nghĩa xâu x phải xâu xâu y định nghĩa tương đương với ràng buộc find(x,y) định nghĩa trong[54] tham chiếu tương đương với ràng buộc indexOf(y,x) Thứ tự kí tự xâu tùy biến, cách tiếp cận giải ràng buộc xâu thứ tự xâu bắt đầu với số cách tiếp cận kí tự xâu lại x[1] thay x[0] Nói tóm lại mục tiêu giải ràng buộc xâu nhằm xác định xem có tồn giá trị biến xâu có thỏa mãn biểu thức ràng buộc cho hay không nhiệm vụ giải hai phương pháp lập trình ràng buộc lý thuyết thỏa mãn 1.6 Kết luận chƣơng Chương luận án trình bày khái niệm tảng nghiên cứu bao gồm kỹ thuật kiểm thử phần mềm, kỹ thuật sinh liệu kiểm thử tự động từ mơ hình quan tâm Đồng thời đánh giá so sánh kỹ thuật kiểm thử hộp trắng theo hướng động tĩnh, thách thức kiểm thử phần mềm chưa giải Trong kỹ thuật thực thi biểu trưng vấn đề có triển vọng nghiên cứu Các kiến thức tảng tổng quan kỹ thuật thực thi biểu trưng thách thức, vấn đề chưa giải trình bày chương Các nội dung liên quan đến giải ràng buộc xâu ứng dụng sinh tự động ca kiểm thử trình bày chương luận án CHƢƠNG THỰC THI BIỂU TRƢNG VÀ MƠ HÌNH HĨA RÀNG BUỘC Trong chương này, khó khăn kỹ thực thực biểu trưng phân tích đánh giá Đồng thời, cơng cụ mở rộng, cài đặt kỹ thuật thực thi biểu trưng mà dùng để thực cải tiến kỹ thuật mơ hình hóa ràng buộc kiểu xâu giới thiệu Ngồi ra, phương pháp mơ hình hóa phục vụ cho cài đặt, đánh giá giải ràng buộc xâu ràng buộc hỗn hợp trình bày chương Nội dung chương thể kết công bố [CT1], [CT2], [CT3] tác giả 2.1 Những khó khăn vài giải pháp Trong phần này, khó khăn q trình áp dụng thực thi biểu trưng thảo luận vài giải pháp cho việc giải thách thức đặt trình bày 2.1.1 Bùng nổ đường Một thách thức quan trọng thực thi biểu trưng sinh số lượng lớn đường thực thi 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 khoảng thời gian định trước định khám phá đường cho phù hợp 2.1.2 Mơ hình hóa nhớ Độ xác câu lệnh chương trình chuyển sang ràng buộc biểu trưng có ảnh hưởng đáng kể đến độ bao phủ thực thực thi biểu trưng khả giải ràng buộc Ví dụ sử dụng mơ hình hóa nhớ mà xấp xỉ để thiết lập độ rộng cho tham biến kiểu Interger có hiệu thực tế mặt khác kết lại thiếu xác phân tích mã nguồn Nó phụ thuộc vào khoảng lựa chọn giá trị tương ứng lỗi tràn nhớ tốn học, gây thiếu đường dẫn thực thi biểu trưng, khai phá đường không khả thi vv 2 Thực thi biểu trƣng công cụ mở rộng 2.2.1 Thực thi biểu trưng kiểm thử phần mềm Kỹ thuật sinh liệu kiểm thử sử dụng thực thi biểu trưng cài đặt ngôn ngữ Java để sinh liệu kiểm thử cho chương trình Tuy nhiên, hiệu cơng cụ có cịn hạn chế: thời gian thực thi lớn Việc áp dụng thuật toán tối ưu ràng buộc - biểu diễn lộ trình thực thi mã nguồn - nhằm giảm thời gian thực thi, đảm bảo hiệu bao phủ Giải pháp cải tiến thử nghiệm tập chương trình Java khác cho kết khả quan Nội dung phần trình bày JPF khả kiểm tra JPF, kiến trúc mức cao JPF khả mở rộng JPF 2.2.2 Thực thi biểu trưng ngôn ngữ Java Giới thiệu Java PathFinder (JPF) Ngày kỹ thuật thực thi biểu trưng cho phép thực nhiều công cụ ngôn ngữ khác DART[36], CUTE[35] công cụ cho ngôn ngữ C/C++, hay PEX[36,37] cho mã nguồn NET nhiên luận án lựa chọn sử dụng Path Finder cho ngôn ngữ Java Lý Java ngôn ngữ độc lập với mơi trường có nhiều ứng dụng quan trọng xây dựng tảng java, lý khác công cụ JPF công cụ mạnh mẽ hỗ trợ cho kỹ thuật thực thi biểu trưng cho khả mở rộng có cộng đồng phát triển rộng rãi JPF kiểm chứng mơ hình phần mềm trạng thái tường minh cho Java [68] Hiểu cách JPF máy ảo thực thi chương trình Java không lần (giống máy ảo thông thường), mà thực thi tất nhánh, đường JPF kiểm tra vi phạm thuộc tính khóa chết ngoại lệ bắt xuyên suốt đường thực thi tiềm Hình 2.1 mơ tả mơ hình hoạt động JPF Hình 2.1 Mơ hình hoạt động JPF Khả kiểm tra JPF JPF kiểm tra tất chương trình Java JPF tìm khóa chết ngoại lệ Ngồi tự phát triển mở rộng để kiểm tra thuộc tính khác Kiến trúc mức cao JPF JPF thiết kế (như Hình 2.3) thành thành phần là: JVM, Search Trong đó, JVM sinh trạng thái cụ thể Java Bằng việc thực thị Java bytecode Search chịu trách nhiệm lựa chọn trạng thái mà JVM nên xử lý, hướng JVM sinh trạng thái tiếp theo, yêu cầu JVM quay trở lại trạng thái trước Hình 2.3 Biểu diễn sơ đồ kiến trúc mức cao JPF Các cài đặt Search bao gồm tìm kiếm theo độ sâu (DFSearch) HeuristicSearch Trừu tượng hố: Là q trình loại bỏ chi tiết khơng liên quan đến thuộc tính để có mơ hình hữu hạn đơn giản đủ để xác minh thuộc tính Trừu tượng hố liệu: Hàm trừu tượng hoá h biến đổi từ S thành S‟ (Hình 2.4, 2.5) Hình 2.4 Ví dụ trừu tượng hố liệu 11 Hình 2.7 Đồ thị xâu Tiếp theo, trình lặp thực với hai bước sau: - Bước 1: Bộ giải ràng buộc thời JPF gọi để xử lý ràng buộc kiểu nguyên, kiểu thực, kiểu logic…và giải chuyển qua bước - Bước 2: Các giá trị cụ thể thu từ bước truyền tới cho đồ thị xâu giải ràng buộc xâu gọi để giải chúng Trong trường hợp này, “bộ giải ràng buộc xâu” AutomataSolve BitVectorSolve ràng buộc đồ thị xâu không thỏa mãn với giá trị nhận thời gian giới hạn thỏa mãn ta thực quay lại bước ràng buộc xâu thêm ràng buộc Solve(PathCondition pc){ 1: StringGraph sg; 2: sg=BuilStringGraph(pc); 3: boolean sat=false; 4: While(!sat and !timeout){ sat=CurrentSolver(pc,sg); 5: if(sat) 6: sat=StringSolver(pc,sg); 7: 8: return sat; } } buildStringGraph(PathCondition pc) { 1: StringGraph sg 2: ; for string or mixed constraint c pc: 3: sg= sg hyperedge(c) 4: return preprocess(pc; sg) } Hình 2.8 Thuật tốn giải ràng buộc hỗn hợp Giá trị giới hạn thời gian “timeout” đưa vào để đảm bảo trường hợp kết hợp hai giải ràng buộc kiểu xâu ràng buộc kiểu nguyên đưa kết luận cuối thời gian cho phép Khi thuật tốn dừng với kết luận ràng buộc không thỏa mãn 2.4.1 Đồ thị xâu Các loại ràng buộc phân loại thành ràng buộc kiểu xâu, ràng buộc kiểu nguyên, ràng buộc hỗn hợp kiểu xâu kiểu nguyên Trong trình cài đặt, ràng buộc kiểu xâu ràng buộc hỗn hợp biểu diễn đồ thị đặc biệt gọi đồ thị xâu 12 Định nghĩa: Đồ xâu loại đồ thị có hướng H=(X, E, Ʊ) Trong đó, tập đỉnh xác định X=I S với I S lai tập rời (I tập biểu diễn cho biến kiểu nguyên S tập biểu diễn cho biến kiểu xâu) Tập Ʊ thể cho phép toán xâu Đồng thời, thể tập cạnh gán nhãn có hướng (E = E1 E2 E3 E4) cho En= Ʊ Xn Sử dụng đồ thị phương pháp phổ biến lập trình thỏa mãn ràng buộc Hình 3.1 mơ tả ví dụ cho đồ thị xâu tương ứng với ràng buộc: s1.trim().equals(s2)^s1.equals(s3.concat(s2)) 2.4.2 Xây dựng lại ràng buộc Phục vụ cho giai đoạn tiền xử lý, với ràng buộc xâu ràng buộc hỗn hợp điều kiện ràng buộc đường đi, đóng góp vào cạnh đồ thị xâu, xây dựng lại ràng buộc ràng buộc giá trị trả phép toán ánh xạ trực tiếp vào cạnh đồ thị xâu Ví dụ: ràng buộc s1.equals(s2) thêm vào cạnh (equals, s1,s2) với toán tử khác Giá trị trả là kiểu kí tự, kiểu nguyên kiểu xâu Một biến phụ sinh đại diện cho kết phép toán Biến phụ thêm vào đỉnh đồ thị xâu Nó cho phép cạnh thêm vào trường hợp giá trị trả Trong ví dụ trình bày Hình 2.9 đây, vịng trịn mơ tả cho đỉnh, dấu chấm đường thẳng mô tả cho cạnh Mỗi cạnh gắn nhãn biểu diễn cho phép toán tương ứng số thứ tự đỉnh đồ thị xâu tương ứng với ràng buộc Các biến xâu s1, s2 s3 xuất đỉnh S với đồ thị Ʊ = {trim, equals, concat} Phép toán trim sinh biến phụ s‟ thêm vào S Tự thân phép tốn cạnh (trim, s1, s‟) gắn nhãn phần tử trim Ʊ nối đỉnh s1 với s‟ Tương tự phép toán concat ràng buộc thứ hai sinh biến phụ s” cạnh (concat, s 3, s2, s”) Cuối hai phép toán equals tương ứng với hai cạnh lại Khi đồ thị xâu xây dựng xong, tiền xử lý theo hai cách: Xác định cách đơn giản ràng buộc khơng có giá trị thỏa mãn Thêm vào giá trị sinh giải ràng buộc nguyên vào biểu thức ràng buộc đường 2.4.3 Quá trình tiền xử lý Khi phát ràng buộc khơng có giá trị thỏa mãn, trình thực thi tránh việc thời gian cho giải ràng buộc xâu Một đề xuất loại bỏ cạnh equals khỏi đồ thị xâu Với ví dụ trên, đồ thị xâu chuyển thành đồ thị xâu đưa Hình 2.9 Hình 2.9 Đồ thị sau loại bỏ phép toán equals Và điều giúp nhanh chóng xác định tập ràng buộc biểu diễn đồ thị xâu giá trị thỏa mãn Ví dụ (xem Hình 2.10) sau loại bỏ cạnh Hình 2.10.(a) đỉnh s1 tự nối với 13 cạnh notEquals Hình 2.10.(b) rõ ràng khơng tồn xâu thỏa mãn ràng buộc Hầu hết đề xuất để giải với trường hợp phép tốn số Ví dụ: ràng buộc s1.concat(“xyz”) = ”vwxyz” dẫn đến việc loại bỏ cạnh phức tạp thay đỉnh s xâu vw Một ví dụ khác cho ràng buộc s1.startsWith(“abc”).chatAt(0) ≠ „a‟ không phù hợp dễ dàng phát Nếu tình phát sinh giai đoạn tiền xử lý, tránh gọi giải ràng buộc xâu nhanh chóng trả giá trị false cho lời gọi Hình 2.10 Các ràng buộc khơng thỏa mãn sau loại bỏ phép toán equals 2.4.4 Sinh ràng buộc xâu kết thực Trước ràng buộc tạo ra, đỉnh thêm vào đồ thị xâu Đối với đỉnh xâu SiS biến kiểu nguyên liI thêm vào để đại diện cho độ dài xâu Si Hình 3.4 đỉnh đồ thị xâu Hình 3.2 nối với đỉnh xâu tương ứng nét đứt Hình 2.11 Các đỉnh đại diện cho độ dài xâu bổ sung Các ràng buộc khác dựa cạnh bảng 2.1 14 Bảng 2.1 Xây dựng ràng buộc cho phép toán xâu Phép toán Java Heper-edge Ràng buộc Với ràng buộc cho đỉnh không xâu Si S li>0 Sa.charAt(n) charAt,Sa,n,c la≥n Sa.concat(Sb) concat, Sa , Sb, Sx lx=la+lb Sa.indexOf(Sb) indexOf, Sa, Sb,x (x=-1)˅(la≥lb+x) Sa.lastIndexOf(Sb) lastIndexOf, Sa, Sb,x (x=-1)˅(la≥lb+x) Sa.subString(n,k) subString,Sa,n,k,Sx la=n+lx Sa.contains(Sb) contains,Sa,Sb la≥lb 2.4.5 Giải ràng buộc sử dụng Otomat Các giải ràng buộc công cụ tiếng để giải nhiều vấn đề giới thực chứng minh định lý lập lịch thời gian thực Thực thi biểu trưng để tạo liệu kiểm thử tự động sử dụng cơng trình CT[2], CT[3] Nhiều nhà nghiên cứu giảm bớt thiếu sót giải ràng buộc có sẵn để cải thiện ứng dụng thực thi biểu tượng nhằm tạo liệu kiểm thử Dù có nhiều cải tiến giải ràng buộc không xử lý hiệu với số loại ràng buộc định Trong chương trình máy tính, liệu xâu xuất thường xuyên, đặc biệt phần chương trình phương thức Ngôn ngữ Java cung cấp thư viện lớn kiểu liệu chuỗi nhiều lỗi Trong kiểm thử phần mềm, quan tâm đến việc xác định lỗi Trong thực thi biểu tượng, ràng buộc xâu xem xét hầu hết trường hợp Otomat hữu hạn đơn định (Deterministic Finite Automaton – DFA) sử dụng để giải ràng buộc xâu dựa thuật toán cụ thể CT[5] 2.5 Kết luận chƣơng Chương luận án trình bày vấn đề liên quan đến thực thi biểu trưng công cụ mở rộng với vai trò hiệu sinh tự động ca kiểm thử Nội dung chủ yếu liên quan đến thực thi biểu trưng bao gồm kỹ thuật thực thi biểu trưng khác nhau; ưu, nhược điểm kỹ thuật xử lý cần thiết để áp dụng thực thi biểu trưng trình kiểm thử phần mềm Đồng thời, chương cịn nêu khó khăn áp dụng thực thi biểu trưng vài giải pháp nêu chương Các cách tiếp cận mơ hình hóa ràng buộc sử dụng đồ thị xâu, xây dựng ràng buộc đồ thị xâu, quy trình tiền xử lý phát ràng buộc không thỏa mãn đưa chương Các nội dung trình bày chương kết nghiên cứu từ cơng trình CT[1], CT[2], CT[3], CT[5] CHƢƠNG GIẢI RÀNG BUỘC XÂU Trong chương này, luận án trình bày đề xuất cải tiến giải ràng buộc xâu thực thi biểu trưng dựa lý thuyết Otomat áp dụng kiểu liệu xâu kí tự Kết đặt thực nghiệm, đánh giá xử lý liệu văn mơ hình cải tiến với số mơ hình có trình bày chương Nội dung chương thể kết công bố [CT4], [CT5], [CT6] tác giả 15 3.1 Giải ràng buộc xâu Nhiều ứng dụng phụ thuộc vào việc xử lý kiểu liệu văn (text) Do việc sử dụng Internet trở nên phổ biến với gia tăng ứng dụng tương tác (mạng xã hội, chat, quản lý thông tin nhạy cảm, quan trọng, thông tin cá nhân) khiến cho vấn đề trở nên quan trọng Dữ liệu đầu vào chương trình sử dụng câu lệnh truy vấn SQL lưu trữ hệ quản trị sở liệu Điều cho phép người dùng truy cập trực tiếp vào sở liệu Lý liệu đầu vào mở cơng khai mở cho đối tượng khác Một số đối tượng có ý định xấu nên việc “làm sạch” đầu vào dạng văn yêu cầu xuất hầu hết dịch vụ web Phương pháp để thực thi biểu trưng mã xâu chia thành hai nhóm: nhóm thứ dựa Otomat [5, 53] nhóm thứ hai dựa Bitvector [7] 3.2 Bitvector thỏa mãn SMT (satisfiability modulo theories) 3.2.1 Lý thuyết thỏa mãn SMT Nghiên cứu luận án dùng giải ràng buộc SMT Z3 [70] xây dựng Microsoft Nghiên cứu xem xét sử dụng CVC[25] nhận chậm Z3 luận án sử dụng chuẩn SMT-lib2 cho ràng buộc bitvector Luận án xem xét sử dụng ký hiệu thay cho cách đánh địa theo byte thay cho bit Ví dụ a[0:7]=01100010 thay a[0]=‟b‟ Việc giải ràng buộc bitvector nằm phạm vi nghiên cứu 3.2.2 Giải ràng buộc xâu dựa phương pháp BitVector Xem xét ví dụ với cạnh (contains,Sa,Sb) tương ứng với ràng buộc Sa.contains(Sb), ta giải sử ước lượng cho độ dài Sa Sb tương ứng 5,3 kết ràng buộc cho cạnh là: (Sa[0]=Sb[0])˄(Sa[1]=Sb[1]) ˄ (Sa[2]=Sb[2]) ∨((Sa[1]=Sb[0]) ˄ (Sa[2]=Sb[1]) ˄ (Sa[3]=Sb[2]) ∨((Sa[2]=Sb[0])˄(Sa[3]=Sb[1])˄(Sa[4]=Sb[2]) Nếu tảng giải ràng buộc hỗ trợ kiểu mảng đơn giản hóa thành (Sa[0:2]=Sb)∨(Sa[1:3]=Sb) ∨(Sa[2:4]=Sb) Quá trình biên dịch cạnh đồ thị xâu sang ràng buộc BitVector cột thứ bảng 3.1 Bảng 3.1 Xây dựng ràng buộc tương ứng với phép toán xâu Cạnh Công thức Otomat (charAt,sa,n,x) Ma= Ma [n] {x} [*] (concat,sa,sb,sx) Ma= Ma substring(Mx,0,la) Ràng buộc bitvector Sa[n]=x (sa=sx[la:0]) (sb=sx[lx:la]) Mb=Mb subString(Mx,lb, ) Mx=Mx (Ma Mb) (indexOf, sa,sb,x) Ma= Ma ([x] Mb) Mb [*] (sa[x+lb:x]=sb) sa[i+lb:i] sb, i,0 i

Ngày đăng: 01/12/2020, 16:14

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

Tài liệu liên quan