Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 95 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
95
Dung lượng
2,2 MB
Nội dung
1 MỞ ĐẦU Kiểm thử phần mềm (testing) hoạt động quan trọng chu trình phát triển phần mềm Theo số liệu thống kê thực tế, kiểm thử phần mềm chiếm tới 50-60% tổng chi phí tồn quy trình phát triển phần mềm Để giảm chi phí kiểm thử tăng mức độ tin cậy phần mềm, nhà nghiên cứu cố gắng tự động hố hoạt động phục vụ cơng việc kiểm thử phần mềm [1, 2] Một cách tổng quát, với kỹ thuật đƣợc dùng giai đoạn kiểm thử động (dynamic run-time testing) phần mềm đƣợc 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ó Cơng việc quan trọng chuẩn bị liệu kiểm thử Việc thƣờng đƣợc làm thủ công nên cần nhiều nhân lực để tạo liệu đầy đủ, có tính bao phủ cao (coverage criteria) tồn đƣờng tính tốn (computation paths) chƣơng trình Các ca kiểm thử bao gồm liệu kiểm thử giá trị đầu mong muốn 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 đƣợc tìm đƣợc sửa chữa trƣớc sản phẩm đƣợc 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ử đƣợc 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 nhƣng 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 đƣợc 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, 1012]); 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 event-flow 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 đề đƣợc 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 đƣợc 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á đƣợc thực ngôn ngữ Java Java ngôn ngữ mạnh mẽ, đại Hơn nữa, Java đƣợc sử dụng rộng rãi với thƣ viện kiểu liệu xâu đa dạng, phong phú đƣợc 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ừ 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 Đối tƣợng phạm vi nghiên cứu: 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ử đƣợc tạo so với thực tế chƣơng trình Nội dung nghiên cứu: Các phƣơng pháp kỹ thuật sinh tự động cá 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ử Phƣơng pháp nghiên cứu: 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 nhƣ giải ràng buộc triên 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 đóng góp 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 đƣợc với các kết công bố Bố cục luận án: Cấu trúc luận án bao gồm phần mở đầu, ba chƣơng nội dung, phần kết luận, danh mục cơng trình cơng bố danh mục tài liệu tham khảo Nội dung chƣơng luận án nhƣ 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 công bố luận án danh sách tài liệu tham khảo đƣợc sử dụng luận án đƣợc 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 đƣợc trình bày chƣơng 1.1 Kiểm thử phần mềm 1.1.1 Các khái niệm Để đảm bảo hệ thống phần mềm thành phần phần mềm làm việc nhƣ 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ế nhƣ hậu nghiêm trọng khác tùy thuộc vào lĩnh vực mà phần mềm đƣợc sử dụng Do cần phải phát khắc phục lỗi phần mềm trƣớc sử dụng Có phƣơng pháp khác để phát lỗi phần mềm bao gồm kiểm chứng mơ hình (model checking) [16], kỹ thuật phân tích tĩnh (static analysis) [17] kiểm thử (software testing) [18 - 23] Trong kiểm chứng mô hình, mơ hình hệ thống đƣợc tạo để hỗ trợ phân tích thực thi mơ hình Kiểm chứng mơ hình kiểm chứng đƣợc mơ hình hệ thống hoạt động xác tất trƣờng hợp Hạn chế kiểm chứng mơ hình khơng gian trạng thái mơ hình thƣờng q lớn việc khám phá tất trạng thái khơng phải lúc thực đƣợc Trong đó, kỹ thuật phân tích chƣơng trình tĩnh thƣờng đƣa nhiều cảnh báo (warnings) không tƣơng ứng với lỗi thực Các kỹ thuật kiểm thử phát lỗi thực nhƣng thƣờng không phát đƣợc tất lỗi phân tích số thực thi chƣơng trình Kiểm thử phần mềm trình thực thi chƣơng trình với mục đích tìm lỗi Kiểm thử phần mềm đảm bảo sản phẩm phần mềm đáp ứng xác, đầy đủ theo yêu cầu khách hàng, yêu cầu sản phẩm đặt Kiểm thử phần mềm cung cấp mục tiêu, nhìn độc lập phần mềm, điều cho phép việc đánh giá hiểu rõ rủi ro thực thi phần mềm Kiểm thử phần mềm phần tiến trình bảo đảm chất lƣợng phần mềm (Software Quality Assurance -SQA) Trong SQA, phần mềm chuyên xử lý kiểm tốn viên đƣợc quan tâm đến q trình phát triển phần mềm vật nhƣ tài liệu, mã số hệ thống Họ kiểm tra thay đổi phần mềm quy trình kỹ thuật riêng để giảm số lƣợng lỗi mà kết thúc phần mềm đƣợc gửi: gọi "tỷ lệ khiếm khuyết" Chúng tạo nên mà "tỷ lệ lỗi chấp nhận đƣợc" phụ thuộc vào chất phần mềm Một chuyến bay mơ trị chơi video có khả chịu lỗi cao nhiều so với phần mềm cho máy bay thực tế Mặc dù có liên kết chặt chẽ với SQA, phòng kiểm thử thƣờng tồn cách độc lập, khơng có chức SQA số công ty Kiểm thử phần mềm đƣợc hiểu trình phát lỗi phần mềm cách đối chiếu kết kỳ vọng từ chƣơng trình máy tính với kết thực tế cho tập hợp yếu tố đầu vào Ngƣợc lại, bảo đảm chất lƣợng việc thực sách thủ tục nhằm ngăn ngừa khiếm khuyết xảy chƣơng trình Kế hoạch kiểm thử (Test plan) Kế hoạch kiểm thử tài liệu tổng quan việc kiểm thử dự án bao gồm: phạm vi kiểm thử, hƣớng tiếp cận, quy trình kiểm thử (QTKT), tài nguyên nhân lực kiểm thử cần có, chức năng/mơ đun cần đƣợc kiểm thử, cơng cụ mơi trƣờng kiểm thử cần có Kế hoạch kiểm thử bao gồm kế hoạch kiểm thử chức nào, bắt đầu thực viết hoàn thành ca kiểm thử, bắt đầu thực kiểm thử kế hoạch hoàn thành kiểm thử Dựa vào kế hoạch chung dự án để lên kế hoạch cho bên kiểm thử Trong trƣờng hợp làm thực tế thấy có khả khơng nhƣ kế hoạch lên phải báo cáo lại trƣởng nhóm kiểm thử quản trị dự án sớm Ca kiểm thử Mỗi ca kiểm thử chứa thông tin cần thiết để kiểm thử thành phần phần mềm theo mục tiêu xác định Thƣờng ca kiểm thử gồm ba thông tin {tập liệu đầu vào, trạng thái thành phần phầm mềm (TPPM), tập kết kỳ vọng} Trong đó, tập liệu đầu vào gồm giá trị liệu cần thiết để thành phần phần mềm dùng xử lý Trạng thái thành phần phần mềm đƣợc tạo giá trị tiền tố hậu tố Tập kết kỳ vọng kết mong muốn sau thành phần phần mềm xử lý liệu nhập Mục tiêu thiết kế ca kiểm thử tìm nhiều lỗi với chi phí thời gian Trong thập kỷ 80-90 kỷ XX, ngƣời ta nghiên cứu nhiều loại phƣơng pháp thiết kế ca kiểm thử Câu hỏi đặt kiểm thử xong? Làm để biết kiểm thử đủ? Về nguyên tắc không kiểm thử đƣợc tất đồng thời vận hành chƣơng trình kiểm thử kiểm thử tiếp tục chƣơng trình cịn hoạt động Kỹ sƣ phần mềm cần tiêu chuẩn nghiêm ngặt để xác định có cần phải tiếp tục kiểm thử không Thiết kế ca kiểm thử kiểm thử phần mềm trình xây dựng phƣơng pháp kiểm thử phát lỗi, sai sót, khuyết điểm phần mềm để xây dựng phần mềm đạt tiêu chuẩn Thiết kế ca kiểm thử giữ vai trò quan trọng việc nâng cao chất lƣợng phần mềm bƣớc thiết kế ca kiểm thử Mục đích thiết kế ca kiểm thử nhằm tạo ca kiểm thử tốt có khả phát lỗi, sai sót phần mềm cách nhiều tạo ca kiểm thử có chi phí rẻ nhất, đồng thời tốn thời gian công sức Một yêu cầu quan trọng kiểm thử chƣơng trình thiết kế tạo ca kiểm thử có hiệu Với ràng buộc thời gian chi phí cho, vấn đề then chốt kiểm thử trở thành xác định tập tất ca kiểm thử có khả tìm nhiều lỗi Thông thƣờng, phƣơng pháp hiệu kiểm tra tất đầu vào ngẫu nhiên – trình kiểm thử chƣơng trình việc chọn ngẫu nhiên tập giá trị đầu vào Về mặt khả tìm nhiều lỗi nhất, tập hợp ca kiểm thử đƣợc chọn ngẫu nhiên có hội tập hợp tối ƣu hay gần tối ƣu Sau số phƣơng pháp để chọn tập liệu kiểm thử cách thông minh Để kiểm thử hộp đen kiểm thử hộp trắng cách thấu đáo khơng thể Do đó, chiến lƣợc kiểm thử hợp lý chiến lƣợc kết hợp sức mạnh hai phƣơng pháp Nghĩa phát triển kiểm thử nghiêm ngặt vừa việc sử dụng phƣơng pháp thiết kế ca kiểm thử hƣớng hộp đen sau bổ sung thêm ca kiểm thử việc khảo sát tính logic chƣơng trình, sử dụng phƣơng pháp hộp trắng Do kiểm thử thƣờng khâu cuối trình phát triển phần mềm (trƣớc phần mềm đƣợc phân phối đến ngƣời sử dụng) nên đặt câu hỏi tƣơng đƣơng ―Khi kết thúc việc kiểm thử phân phối sản phẩm?‖ Có nhiều câu trả lời khác cho câu hỏi trên, câu trả lời hƣớng tới kĩ thuật hành động khác Khi khơng có đánh giá chuẩn định dừng kiểm thử sản phẩm phần mềm dựa hai yếu tố chính, Tài ngun: Quyết định có tiếp tục q trình kiểm thử hay khơng dựa tiêu tốn tài nguyên, hai tiêu chuẩn trạng thái để dừng kiểm thử ―Vƣợt thời gian tiêu tốn nhiều tiền‖ Hai định dừng kiểm thử hoàn thành tất hoạt động kiểm thử theo nhƣ kế hoạch kiểm thử đề Đối với giai đoạn đầu trình kiểm thử hay tiêu chuẩn kết thúc kiểm thử, liên quan tới hành động kiểm thử cục bộ, tiêu chuẩn tin cậy dựa kịch sử dụng khách hàng tần suất sử dụng khơng cịn ý nghĩa nhiều Ví dụ, số hệ thống phần mềm, số thành phần không đƣợc sử dụng trực tiếp ngƣời sử dụng số thành phần có tần suất sử dụng thấp Do việc lựa chọn tiêu chuẩn khác cần thiết Những tiêu chuẩn tiêu chuẩn bao phủ, bao hàm tiêu chuẩn khác nhau, định nghĩa kĩ thuật dùng tình kiểm thử thành phần khác có liên quan Các kĩ thuật kiểm thử hƣớng tới tiêu chuẩn đƣợc gọi kĩ thuật kiểm thử hƣớng bao phủ Ngoài ràng buộc tài nguyên giới hạn ngƣời, có hai loại tiêu chuẩn để kết thúc hành động kiểm thử Tiêu chuẩn thứ dựa thống kê sử dụng ngƣời dùng để xác định thành phần nhƣ yếu tố liên quan để kiểm thử, đƣợc gọi kiểm thử thống kê hƣớng sử dụng Tiêu chuẩn thứ hai bao gồm tiêu chuẩn vấn đề liên quan tới kiểm thử đơn vị, xét tới khả gây lỗi chƣơng trình (kết thúc kiểm thử) có kĩ thuật kiểm thử hƣớng bao phủ Vai trò kiểm thử phát triển phần mềm, bảo trì vận hành: Kiểm thử nghiêm ngặt hệ thống tài liệu giúp giảm thiểu vấn đề rủi ro xảy q trình vận hành góp phần nâng cao chất lƣợng hệ thống phần mềm, nhƣ lỗi đƣợc tìm thấy sửa chữa trƣớc hệ thống đƣợc vận hành thực tế Kiểm thử chất lượng: Kiểm thử mang lại tự tin chất lƣợng phần mềm tìm thấy vài lỗi khơng tìm thấy lỗi Kiểm thử giảm thiểu đƣợc tổng thể mức độ rủi ro hệ thống Khi trình kiểm thử tìm thấy lỗi, chất lƣợng hệ thống phần mềm đƣợc nâng cao sau lỗi đƣợc sửa chữa Kiểm thử đủ: Việc định kiểm thử đủ phụ thuộc vào mức độ rủi ro bao gồm kỹ thuật, độ an toàn, rủi ro kinh doanh hạn mức dự án nhƣ thời gian ngân sách Kiểm thử nên cung cấp đủ thông tin để bên liên quan định việc bàn giao phần mềm hệ thống qua kiểm thử cho bƣớc phát triển hay bàn giao cho khách hàng Kiểm thử kỹ thuật đƣợc sử dụng phổ biến để phát khắc phục lỗi phần mềm nhằm đảm bảo chất lƣợng phần mềm Chi phí dành cho việc kiểm thử chiếm khoảng 50% tổng chi phí phát triển phần mềm Kiểm thử tiến trình quan trọng kỹ nghệ phần mềm Kiểm thử đơn vị bƣớc q trình kiểm thử Hình 1.1 Mối quan hệ phát triển phần mềm kiểm thử phần mềm Trong hình 1.1, phía bên trái mơ hình vịng đời phát triển phần mềm SDLC (Software Development Life Cycle), phía bên phải mơ hình vòng đời kiểm thử Phần mềm - STLC (Software Test Life Cycle) toàn nội dung đƣợc thể dƣới dạng chữ V, mơ hình đƣợc gọi Mơ hình chữ V (V - model) Ngồi mơ hình chữ V, cịn có mơ hình phát triển lặp, việc phát triển đƣợc thực theo giai đoạn, với giai đoạn phát triển thêm chức 10 cho phần mềm Mỗi giai đoạn bao gồm hoạt động xây dựng kiểm thử độc lập 1.1.2 Các phương pháp kiểm thử Các kỹ thuật kiểm thử phổ biến [24] bao gồm: Kiểm thử hộp đen (Black box testing) Kiểm thử hộp đen phƣơng pháp kiểm thử mà ngƣời kiểm thử xem xét đến đầu vào đầu chƣơng trình mà khơng quan tâm mã nguồn bên đƣợc viết Kỹ thuật viên kiểm thử thực kiểm thử dựa hoàn toàn vào đặc tả yêu cầu Mục đích kiểm thử hộp đen tìm lỗi giao diện, chức phần mềm Kiểm thử hộp trắng (White box testing) Kiểm thử hộp trắng phƣơng pháp kiểm thử mà cấu trúc thuật tốn chƣơng trình đƣợc đƣa vào xem xét Các ca kiểm thử đƣợc thiết kế dựa vào cấu trúc mã cách làm việc chƣơng trình Ngƣời kiểm thử truy cập vào mã nguồn chƣơng trình để kiểm tra Các mức độ kiểm thử: Kiểm thử đơn vị (Unit test) Kiểm thử đơn vị hoạt động kiểm thử nhỏ Kiểm thử thực hàm hay thành phần riêng lẻ Đây công việc mà để thực đƣợc ngƣời kiểm thử phải hiểu biết mã nguồn, chƣơng trình hàm Thơng thƣờng lập trình viên làm trƣớc giao cho kiểm thử viên Mục đích việc thực kiểm thử đơn vị cô lập thành phần chƣơng trình chứng minh phận riêng lẻ xác yêu cầu chức Kiểm thử tích hợp (Intergration test) Một phần mềm đƣợc tạo bao gồm nhiều mô đun Để chắn phần mềm hoạt động tốt việc gom mơ đun lại với để kiểm tra giao tiếp mô đun nhƣ thân thành phần mô đun quan trọng Kiểm thử tích hợp bao gồm hai mục tiêu phát lỗi giao tiếp xảy đơn vị tích hợp đơn vị riêng lẻ thành hệ thống nhỏ cuối hệ thống hoàn chỉnh để chuẩn bị cho bƣớc kiểm thử hệ thống Kiểm thử hệ thống (System test) 81 Hình 3.9 chƣơng trình Java bao gồm hàm với hai tham số xâu, dịng có nhánh tham số xâu đầu tiền đƣợc bắt đầu khoảng trắng tham số nhau, dòng tạo biến xâu cách loại bỏ khoảng trắng hai đầu (và biến không thỏa mãn câu lệnh if dòng 1) Dòng biến kết thúc xâu ―ab‖ mặt khác hai tham số không Cuối nhánh cuối nằm dòng kí tự thứ năm biến xâu kí tự ‗a‟ Hình 3.9 Chương trình Java Trong chƣơng trình này, với hai xâu ngẫu nhiên khó thực bốn nhánh chƣơng trình nghiên cứu đặt phải đƣa liệu tốt để thực thi chƣơng trình với tất nhánh Để thực thi nhánh cần xây dựng tất ràng buộc đƣờng dẫn có chƣơng trình Trong chƣơng trình có tất 12 điều kiện đƣờng dẫn nhƣng nghiên cứu chọn hai điều kiện đƣờng dẫn để minh họa cho nghiên cứu Điều kiện đầu tiên, nhánh dòng đƣợc lấy, nhánh dòng cuối nhánh dòng để đáp ứng luồng liệu theo ràng buộc phải thỏa mãn Ràng buộc Cạnh s1.startsWith(' ') (startsWith, s1,‟˽‟) s1.equals(s2 ) (equals, s1, s2) news1.endsWith('ab') (notEndsWith, s3,”ab”) s1.equals(s2) (notEquals, s1, s2) 82 s1.indexOf (5) == ('a') (indexOf , s1,‟a‟,5) (trim, s1, s3) Việc chọn điều kiện đƣờng dẫn dẫn đến phải xây dựng đồ thị xâu đƣợc đƣa hình 3.10 với cạnh đƣợc đƣa bảng Hình 3.10 Đồ thị xâu Chạy tiền xử lý đồ thị cho thấy ràng buộc tồn giá trị không thỏa mãn cho cặp cạnh (equals,s1, s2 notequals(s1,s2) tiền xử lý kết luận UNSAT điều kiện đƣờng dẫn đƣợc lựa chọn Giả sử điều kiện đƣờng dẫn trƣờng hợp dòng 1, 3, hay s phải đƣợc bắt đầu kí tự trắng s2 sau đƣớc cắt khoảng trắng hai đầu phải kết thúc xâu ―ab‖ có kí tự thứ kí tự ‗a‟ tạo ràng buộc Ràng buộc Cạnh s1.startsWith(' ') (startsWith, s1,‟˽‟) s1.equals(s2 ) (equals, s1, s2) news1.endsWith('ab') (endsWith, s3,”ab”) s1.indexOf (5) == ('a') (indexOf , s1,‟a‟,5) (trim, s1, s3) Điều kiện đƣờng dẫn tƣơng ứng với đồ thị xâu: 83 Hình 3.11 Đồ thị xâu Áp dụng tiền xử lý đồ thị xâu loại bỏ đỉnh s2 khỏi đồ thị xâu ghi nhớ(giải pháp s1 giải pháp s2) giải pháp đƣợc báo cáo ngƣợc lại cho lời gọi Các ràng buộc nguyên sau đƣợc thêm vào để chuẩn bị cho giải ràng buộc kiểu nguyên cho giải pháp nó, theo nhƣ cách tiếp cận nghiên cứu đƣợc gọi dự đốn tốt (li độ dài biến biểu trƣng si): l1>0 l2>0 l3>0 l1=l2 l3 l1 l3 l1 l1>5 Trƣớc bắt đầu giải xâu, giải ràng buộc số nguyên đƣợc gọi để đƣa số nguyên cụ thể thỏa mãn Giả sử giá trị l1=6, l2=6, l3=2 Các giá trị giải pháp phù hợp chúng giá trị nhỏ mà mối biến thỏa mãn ràng buộc Hãy xem xét cách tiếp cận Otomat đầu tiện thực ánh xạ xâu si biểu trƣng cho Otomat Mi Otomat đƣợc khởi tạo để chứa tất từ có độ dại li M1=…… M3=… Ta thực duyệt qua cạnh đồ thị i startsWith(s1,‘˽‘) M1 giao với ngôn ngữ ‗˽‘.* gán lại cho M1 kết đƣợc gán cho M1 là: ˽… ii trim(s1,s3) M1 giao với ngơn ngữ M3 dó M3 ngơn ngữ từ có khoảng trắng đầu vào cuối M1 ˽.* M3 ˽.* ngôn ngữ M1 là: ˽… , M3 giao với ngôn ngữ M1 sau loại bỏ khoảng trắng hai đầu ngơn ngữ M3 là: [a-b],[b-a] 84 iii indexOf(s1,‘a‘,5) M1 giao với ngôn ngữ ….a.* kết phép giao đƣợc gán cho M1 là: ˽….a iv endsWith(s3,‖ab‖) M3 giao với ngôn ngữ ―ab‖ kết ngôn ngữ M3 ―ab‖ Theo cách tiếp cận nghiên cứu lặp lại cạnh lần thứ hai cạnh gây thay đổi cho nhiều autoata đƣợc đặt lại danh sách cơng việc dịng 12 hình 3.11 lợi ích mối quan tâm cạnh đầu tiên, lần qua cạnh (trim,s1,s3) M1= ˽….a M3=‖ab‖ ta thấy giao hai ngôn ngữ rỗng M1 kết thúc kí tự a M3 kết thúc kí tự b điều dẫn đến giải xâu trả UNSAT ràng buộc số nguyên đƣợc thêm vào với ràng buộc số nguyên chuẩn bị đƣợc giải là: l1 l3 cho kết l1=7 l2=7, l3=2 Tƣơng tự với bƣớc thực bên sau thực duyệt qua cạnh cho kết M1= ˽….a M3=ab Cạnh (trim,s1,s3) không làm cho kết phép giao M1 M3 rỗng nhƣng làm thay đổi lại M1= ˽….ab chọn giải pháp ngắn cho Otomat cho kết cuối s1,s3 ―˽ ˽ ˽ ˽ ˽ab‖ s3 ―ab‖ Chuyển sang cách tiếp cận Bitvector trở lại dự đoán tốt l1=6, l2=6, l3=2 hai biến Bitvector b1 b3 đƣợc khởi tạo tƣơng ứng với độ dài 2, duyệt qua cạnh đồ thị i startsWith(s1,‘˽‘) sinh ràng buộc tƣơng ứng b1[0]= ‘˽‘ đƣợc thêm vào ii trim(s1,s3) vài ràng buộc đƣợc thêm vào b1[i]=b3[0] b1[i+1]=b3[1] i=0,i