1. Trang chủ
  2. » Tất cả

44-89-1-SM

20 4 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

Nội dung

TẠP CHÍ KHOA HỌC ĐẠI HỌC ĐÀ LẠT Tập 6, Số 2, 2016 254–131 254 THỰC THI TƯỢNG TRƯNG TRONG SINH TỰ ĐỘNG DỮ LIỆU KIỂM THỬ PHẦN MỀM Tô Hữu Nguyêna*, Nguyễn Hồng Tâna, Hà Thị Thanha, Đỗ Thanh Maib a Trường Đại học Công nghệ Thông tin Truyền thông, Đại học Thái Nguyên, Thái Nguyên, Việt Nam b Khoa Ngoại ngữ, Đại học Thái Nguyên, Thái Nguyên, Việt Nam Nhận ngày 04 tháng 01 năm 2016 Chỉnh sửa ngày 10 tháng 03 năm 2016 | Chấp nhận đăng ngày 16 tháng 03 năm 2016 Tóm tắt 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í thời gian để hồn thành công đoạn Thực thi tượng trưng (Symbolic execution) biết đến kỹ thuật tiếng với khả tự động sinh test case 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 Bài báo trình bày vấn đề tổng quan số kết nghiên cứu gần kỹ thuật thực thi tượng trưng Bài báo đư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, khả giải ràng buộc, mơ hình hóa nhớ, vấn đề tương tranh vv đồng thời đưa số đánh giá từ kết công bố Từ khóa: Dữ liệu kiểm thử; Giải ràng buộc; Ràng buộc; Sinh liệu kiểm thử; Thực thi tượng trưng; Thực thi tượng trưng động GIỚI THIỆU Hiện có nhiều công cụ tảng phục vụ cho hoạt động kiểm thử phần mềm JUnit [33] cho ngôn ngữ Java, NUnit [34], VSUnit [29] cho NET để thực thi ca kiểm thử mức đơn vị Tuy nhiên, công cụ kiểm thử không hỗ trợ việc sinh tự động ca kiểm thử đơn vị Viết ca kiể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 khác hỗ trợ việc sinh tự động ca kiểm thử (Test Case) giúp giảm chi phí thời gian thực nghiên cứu đưa như: Dựa mơ hình (Model Checking), kểm thử ngẫu nhiên (Random Testing [1]) Nhưng hạn chế kiểm tra hành vi thực thi chương trình nhiều lần với đầu vào khác kiểm tra số trường hợp * Tác giả liên hệ: Email: thnguyen@ictu.edu.vn TẠP CHÍ KHOA HỌC ĐẠI HỌC ĐÀ LẠT [ĐẶC SAN CÔNG NGHỆ THÔNG TIN] 255 thực thi chương trình Thêm vào đó, kiểm thử ngẫu nhiên khó xác định việc kiểm thử nên dừng lại khơng biết điểm không gian trạng thái thám hiểm hết Để xác định việc kiểm thử dừng lại hệ thống kiểm thử ngẫu nhiên kết hợp với tiêu chuẩn an toàn [3] Để khắc phục hạn chế kiểm thử ngẫu nhiên, phương pháp thực thi tương trưng xây dựng ràng buộc giá trị tượng trưng giải ràng buộc để sinh giá trị đầu vào cho chương trình mà bao phủ tất dòng lệnh nhánh thực thi chương trình Ý tưởng thực thi tượng trưng đề xuất King [Comm ACM 1976], Clarke [IEEE TSE 1976] [2,10,18,21] việc thực ý tưởng thực năm gần qua tiến đáng kể lý thuyết giải ràng buộc (Constrain satisfiability) [11] tiếp cận mở rộng thực thi tượng trưng động (dynamic Symbolic execution) [30,16], kỹ thuật kết hợp giá trị cụ thể giá trị tượng trưng cho giá trị đầu vào TỔNG QUAN VỀ KỸ THUẬT THỰC THI TƯỢNG TRƯNG Ý tưởng thực thi tượng trưng thực thi chương trình với giá trị tượng trưng (Symbolic value) thay giá trị cụ thể (concrete value) tham số đầu vào kết giá trị đầu tính tốn chương trình biểu diễn biểu thức tượng trưng Trong kiểm thử phần mềm, kỹ thuật thực thi tượng trưng sử dụng để sinh liệu kiểm thử cho đường thực thi khác chương trình Ví dụ Hình minh họa thực thi tượng trưng Trong trình thực thi tượng trưng, việc theo nhánh cụ thể khơng phụ thuộc vào giá trị tham số đầu vào Tại tất điểm rẽ nhánh tất nhánh xem xét kiểm tra nhằm định hướng cho thực thi chương trình Với chương trình dạng đơn giản có hai loại thực thi chủ yếu: câu lệnh gán câu lệnh rẽ nhánh Tại câu lệnh gán, giá trị tượng trưng biến chương trình tham số đầu vào có liên quan tới câu lệnh tính tốn cập nhật lại, cịn điểm rẽ nhánh, chương trình điều khiển thực thi theo hai nhánh tương ứng đồng thời ràng buộc đường (path condition) tương ứng với TẠP CHÍ KHOA HỌC ĐẠI HỌC ĐÀ LẠT [ĐẶC SAN CÔNG NGHỆ THÔNG TIN] 256 hai nhánh tạo Một ràng buộc biểu thức điều kiện tương ứng với giá trị true ràng buộc tương ứng với giá trị sai biểu thức ràng buộc Các ràng buộc cập nhật vào điều kiện đường tương ứng với nhánh Các điều kiện xem xét giải ràng buộc để đánh giá xem đường có khả thi hay khơng hay nói cách khác kiểm tra xem có tồn giá trị thỏa mãn ràng buộc hay không Nếu không thỏa mãn ràng buộc đánh giá sai, thực thi tượng trưng dừng quay lui thực thi theo nhánh khả thi Hình Ví dụ đơn giản cho thực thi tượng trưng Các ràng buộc đường tạo cách thu gom điều kiện đường tương ứng Giải ràng buộc sinh giá trị cụ thể cho tham số đầu vào tương ứng với nhánh thực thi chương trình Tất các đường thực thi chương trình biểu diễn cấu trúc gọi thực thi (execution tree) Hình thực thi tượng trưng cho hàm testme() Hình Các cạnh biểu diễn cho chuyển đổi từ trạng thái sang trạng thái khác Với ví dụ phương thức testme() Hình có thực thi mơ tả đường thực thi chương trình với biến đầu vào {x=0, y=1}, {x=2, y=1} {x=30, y=15}, mục tiêu sinh tập ca kiểm thử thỏa mãn thực thi cho tất nhánh chương trình phụ thuộc vào giá trị tượng trưng tham biến đầu vào nhiều khoảng thời gian định đảm bảo khám phá TẠP CHÍ KHOA HỌC ĐẠI HỌC ĐÀ LẠT [ĐẶC SAN CƠNG NGHỆ THƠNG TIN] 257 xác tất đường thực thi lần với giá trị đầu vào cho Hình Cây thực thi tượng trưng tương ứng với hàm testme() ví dụ Bắt đầu thực thi tượng trưng hàm testme() việc gán giá trị cho tham số đầu vào x y x0 y0 Khởi tạo PC (Path Condition) nhận giá trị True, tới câu lệnh rẽ nhánh if(2*y0= x0) hai nhánh chương trình tương ứng thực thi với giá trị tượng trưng x0 y0 Tại biểu thức điều kiện rẽ nhánh 2*y0=x0 !(2*y0=x0 ) bổ sung PC theo hai nhánh khác Sau thực thi câu lệnh if(2*y0= x0) hàm testme() thực thi theo nhánh mà tồn giá giá trị x,y thỏa mãn Tương tự gặp câu lệnh if(x0>y0+10) PC theo hai nhánh tương ứng cập nhật bổ sung (2*y0=x0)^(x0>y0+10) (2*y0=x0)^(x0y0+10) để sinh ràng buộc tương ứng {x=30, y=15} Chương trình gặp câu lệnh ERROR với đầu vào này, sau lần thực thi lần thứ Concolic testing báo tất đường thực thi chương trình khám phá dừng thực Chú ý ví dụ concolic testing khám phá tất đường thực thi chương trình sử dụng chiến thuật tìm kiếm theo chiều sâu, nhiên áp dụng chiến thuật khác cho việc tìm kiếm đề cập mục 4.1 3.2 Execution Generated Testing (EGT) Phương pháp tiếp cận EGT thực mở rộng hai công cụ EXE [8] phương pháp KLLE [4] Nó hoạt động dựa nguyên lý tạo khác biệt giá trị cụ thể trạng thái tượng trưng chương trình EGT trộn lẫn giá trị cụ thể thực thi tượng trưng cách kiểm tra động trước toán hạng Nếu giá trị liên quan hồn tồn giá trị cụ thể tốn hạng thực thi chương trình gốc Cịn có giá trị tượng trưng tốn hạng thực thực thi tượng trưng cập nhật điều kiện ràng buộc đường cho đường thực thi thời Ví dụ chương trình Hình lệnh dịng 17 thay đổi y=10, sau dòng cần gọi phương thức twice() với tham biến cho giá trị cụ thể 20 Lời gọi thực thi với chương trình gốc Do dòng câu lệnh rẽ nhánh if(x0=20) thực thi tượng trưng cho phép thực theo hai nhánh if else tương ứng với ràng buộc x0=20 x0≠20 Khi gặp câu lệnh dòng 8, biểu thức ràng buộc tương ứng với nhánh (x0=20)&(x0>20) Lúc giải ràng buộc đánh giá đường thực thi không khả thi thực thi tượng trưng quay lui 261 TẠP CHÍ KHOA HỌC ĐẠI HỌC ĐÀ LẠT [ĐẶC SAN CƠNG NGHỆ THÔNG TIN] Concolic EGT hai đại diện cho kỹ thuật thực thi đại tiến khả trộn giá trị cụ thể với thực thi tượng trưng gọi chung kỹ thuật thực thi tượng trưng động (Dynamic symbolic execution) 3.3 Tính tương đối đầy đủ thực thi tượng trưng động Một lợi phương pháp kết hợp “tương đối” phải tương tác với mã nguồn bên ngồi khơng thể đưa giá trị thỏa mãn ràng buộc giải ràng buộc đơn giản hóa sử dụng giá trị cụ thể Ví dụ chương trình thực tế ln phải tương tác với giới từ bên là: sử dụng thư viện ngồi mà khơng hỗ trợ thực thi tượng trưng sử dụng lời gọi từ hệ điều hành Nếu tất đối số truyền cho lời gọi hàm giá trị cụ thể lời gọi hàm thực cách đơn giản với giá trị cụ thể thực thi với chương trình gốc Tuy nhiên, vài toán hạng tượng trưng thực thi tượng trưng động sử dụng giá trị cụ thể tốn hạng tương ứng EGT thực đơn giản hóa ràng buộc để kiểm tra thỏa mãn đường (EGT tối ưu hóa thơng qua ví dụ đề cập mục 4.2) Trong concolic sử dụng giá trị cụ thể thời điểm thực thi chương trình cho đầu vào từ thực thi concolic thời Bên cạnh mã nguồn bên ngoài, thiếu xác (tương đối) thực thi tượng trưng cịn thể hện vài điểm khơng giải số toán tử (dấu phảy động) hàm phức tạp không giải giải ràng buộc, việc sử dụng giá trị cụ thể cho phép thực thi tượng trưng động khôi phục lại thiếu sót chi phí thiếu vài đường thực thi Do EGT tính đầy đủ Để làm rõ điều minh họa hành vi Concolic testing với ví dụ thực hàm twice() mà giá trị trả phi tuyến (v*v)%50 (xem Hình 4) Giả sử concolic bắt đầu thực với giá trị ngẫu nhiên cho tham số đầu vào {x=22, y=7} Với giá trị concolic sinh ràng buộc đường là: x0≠y0*y0%50 Nếu giả TẠP CHÍ KHOA HỌC ĐẠI HỌC ĐÀ LẠT [ĐẶC SAN CƠNG NGHỆ THÔNG TIN] 262 sử giải ràng buộc khơng giải với với ràng buộc phi tuyến Concolic testing thất bại việc sinh liệu đầu vào cho đường thực thi Chúng ta có trường hợp tương tự mã nguồn cho hàm twice() không xác định (do bên thứ cung cấp mã nguồn đóng lời gọi từ hệ thống) Trong trường hợp ràng buộc đường x0=twice(y0) twice() hàm không xác định (interpreted function) Concolic testing giải tình cách thay vài giá trị tượng trưng giá trị cụ thể Kết ràng buộc trở lên đơn giản giải giải thời Với ví dụ trên, Concolic testing thay y0 giá trị cụ thể đơn giản hóa ràng buộc x0=49 Khi giải ràng buộc này, Concolic testing có kết {x=49, y=8} để thực thi đường chưa khám phá trước Chú ý khả đơn giản hóa ràng buộc sử dụng giá trị cụ thể giúp sinh liệu test cho đường thực thi chương trình mà thực thi tượng tưng bị cản trở Nhưng, đơn giản hóa kèm với với số thiếu sót định, Nó tính đầy đủ có nghĩa khơng sinh liệu kiểm thử cho vài đường thực thi Tuy nhiên, rõ ràng phù hợp cho việc thay bỏ qua vài đường thực thực thi không hỗ trợ hay hàm mở rộng từ bên gặp phải NHỮNG THÁCH THỨC VÀ MỘT VÀI GIẢI PHÁP Trong phần thảo luận thách thức quan trọng thực thi tượng trưng vài giải pháp thú vị cho việc giải thách thức đặt 4.1 Bùng nổ đường Một thách thức quan trọng thực thi tượng 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 Trước hết, lưu ý thực thi tượng trưng ngầm lọc tất đường thực thi không phụ thuộc vào biến tượng trưng đầu vào đường dẫn khơng khả 263 TẠP CHÍ KHOA HỌC ĐẠI HỌC ĐÀ LẠT [ĐẶC SAN CÔNG NGHỆ THÔNG TIN] thi (Infeasiblle path) trình giải ràng buộc Mặc dù vậy, bùng nổ đường dẫn thách thức lớn thực thi tượng trưng Hiện có cách tiếp cận để giải vấn đề ưu tiên tìm kiếm kinh nghiệm (Heuristic search) sử dụng kỹ thuật phân tích tính đắn chương trình q trình phân tích trình bày 4.1.1 Tìm kiếm kinh nghiệm (Heuristic search) Cơ chế quan sử dụng công cụ thực thi tượng trưng để ưu tiên đường dẫn khai phá sử dụng tìm kiếm kinh nghiệm Hầu hết Heuristic đặt trọng tâm vào vấn đề bao phủ dòng lệnh bao phủ rẽ nhánh Nhưng chúng sử dụng để tối ưu hóa tiêu chí mong muốn khác Một cách tiếp cận đặc biệt hiệu sử dụng đồ thị luồng điều khiển (Control Flow Graph) Để điều hướng đường gần từ đường dẫn khám phá [4,8], cách tương tự EXE [8] ưu tiên câu lệnh thực thi mà có số lần chạy Một ví dụ khác với tìm kiếm Heuristic dựa khám phá ngẫu nhiên chứng minh tính hiệu [4,8] Ý tưởng phương pháp bắt đầu chương trình với câu lệnh rẽ nhánh thực thi tượng trưng nhánh khả thi chọn ngẫu nhiên nhánh để khám phá Một tiếp cận thành công khác xen vào kiểm thử ngẫu nhiên khám phá tượng trưng (symbolic exploration) Phương pháp kết hợp khả kiểm thử ngẫu nhiên để nhanh chóng đến trạng thái thực thi sâu chương trình Với sức mạnh thực thi tượng trưng việc kết hợp khai phá triệt để trạng thái vùng lân cận Gần thực thi tượng trưng kết hợp với kỹ thuật tìm kiếm tiến hóa(evolutionnary seach) Trong hàm mục tiêu sử dụng để định hướng không gian đầu vào của biến [3,19,22,27] Ví dụ với cơng cụ Austin [22] sử dụng tìm kiếm tiến hóa tìm kiếm đường thực thi Trong sử dụng hàm mục tiêu phát triển tìm kiếm không gian liệu kiểm thử đầu vào Với thực thi TẠP CHÍ KHOA HỌC ĐẠI HỌC ĐÀ LẠT [ĐẶC SAN CÔNG NGHỆ THÔNG TIN] 264 tượng trưng động khai thác tốt hai lĩnh vực trên, hiệu kiểm thử phần mềm phụ thuộc vào chất lượng hàm mục tiêu Một vài tiếp cận hứa hẹn khác [3,19,27] khai thác thông tin trạng thái thực thi giá trị cụ thể thực thi tượng trưng từ thực thi tượng trưng động phân tích tĩnh để cải tiến hàm mục tiêu cho kết sinh liệu kiểm thử tốt Kiểm thử đột biến nới test đầy đủ đánh giá cách kiểm tra khả xác định khác đột biến chương trình kết hợp thành cơng với thực thi tượng trưng động [20] Nhìn chung phương pháp việc kết hợp thực thi tượng trưng kỹ thuật tìm kiếm kinh nghiệm cho kết hứa hẹn tin tiến lĩnh vực đóng vai trị quan trọng việc giải bùng nổ đường dẫn thực thi tượng trưng 4.1.2 Kỹ thuật phân tích tính đắn chương trình Một cách tiếp cận quan trọng khác cho vấn đề bùng nổ đường dẫn từ phân tích chương trình kiểm chứng phần mềm nhằm giảm độ phức tạp đường dẫn thực thi chương trình sử dụng thơng qua phân tích tính đắn chương trình Cách tiếp cận đơn giản sử dụng để giảm số lượng đường thực thi chương trình gộp lại theo hướng tĩnh sử dụng biểu diễn cấu trúc lựa chọn, sau truyền trực tiếp cho giải [13] Tiếp cận có hiệu nhiều trường hợp khơng phù hợp truyền độ phức tạp cho giải Nội dung trình bày phần sau Các kỹ thuật kết hợp (Compositional) cải tiến thực thi tượng trưng cách sử dụng nhớ đệm sử dụng lại phân tích hàm mức thấp tính tốn Ý tưởng kỹ thuật thể tài liệu [14,15] tính tốn, tóm tắt hàm hàm kiểm thử mô tả điều kiện trước giá trị đầu hàm sử dụng lại tóm tắt hàm mức cao 265 TẠP CHÍ KHOA HỌC ĐẠI HỌC ĐÀ LẠT [ĐẶC SAN CÔNG NGHỆ THÔNG TIN] Sinh liệu kiểm thử lười (Lazy test generation )[23] Nó cách tiếp cận liên quan để tránh lặp lại khai phá đường dẫn cách tự động cắt tỉa đường dẫn dư thừa trình khám phá đường dẫn Kỹ thuật dựa ý tưởng đường dẫn đạt đến điểm có ràng buộc tương tự với đường dẫn trước thực thi tương tự đồng thời đường dẫn bị loại bỏ 4.2 Giải ràng buộc Mặc dù có tiến đáng kể kỹ thuật thực giải ràng buộc năm gần đây, giúp cho thực thi tượng trưng trở nên thực tế hơn, việc giải ràng buộc cản trở đáng kể thực thi tượng trưng Nó thường chiếm nhiều thời gian trình thực lý khiến thực thi tương trưng khơng mở rộng với số loại chương trình mà mã nguồn sinh với yêu cầu lớn việc giải ràng buộc Kết cần thiết phải thực tối ưu giải ràng buộc sinh trình thực thi tượng trưng chương trình thực tế Chúng tơi trình bày hai phương pháp tối ưu sử dụng công cụ 4.2.1 Loại bỏ ràng buộc không liên quan Phần lớn yêu cầu thực thi tượng trưng đặt xác định tính khả thi câu lệnh rẽ nhánh Ví dụ: Concolic testing loại biến thể thực thi tượng trưng Một nhánh ràng buộc đường dẫn thời phủ định tập kết ràng buộc kiểm tra tính thỏa mãn để xác định chương trình rẽ sang nhánh khác ràng buộc tương ứng với phủ định ràng buộc hay không Một ý quan trọng trường hợp chung nhất, nhánh chương trình phụ thuộc vào số lượng nhỏ tham biến chương trình số lượng nhỏ ràng buộc điều kiện đường Do cách tối ưu hóa hiệu loại bỏ khỏi ràng buộc đường ràng buộc không liên quan định đến kết đường dẫn thời Ví dụ: Xem xét ràng buộc đường thời thực thi là: (x+y>0)^(z>0)^(y0)^(z>0)& (y

Ngày đăng: 17/09/2016, 19:32

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

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN