Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 106 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
106
Dung lượng
1,89 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN - NGUYỄN THANH LIÊM NGHIÊN CỨU KỸ THUẬT GIẢI THÍCH TRỪU TƯỢNG LUẬN VĂN THẠC SĨ KHOA HỌC Hà Nội – Năm 2014 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN - NGUYỄN THANH LIÊM NGHIÊN CỨU KỸ THUẬT GIẢI THÍCH TRỪU TƯỢNG Chuyên ngành: CƠ SỞ TOÁN HỌC CHO TIN HỌC Mã số: LUẬN VĂN THẠC SĨ KHOA HỌC NGƯỜI HƯỚNG DẪN KHOA HỌC TS NGUYỄN TRƯỜNG THẮNG Hà Nội – Năm 2014 LỜI CAM ĐOAN Tôi xin cam đoan công trình nghiên cứu tơi có giúp đỡ giáo viên hướng dẫn TS Nguyễn Trường Thắng - Viện Công nghệ thông tin – Viên Hàn lâm Khoa học Công nghệ Việt Nam Các nội dung kết nghiên cứu luận văn hoàn toàn trung thực, tham khảo theo tài liệu tác giả giáo viên hướng dẫn cung cấp liệt kê mục tài liệu tham khảo Học viên Nguyễn Thanh Liêm LỜI CẢM ƠN Lời xin gửi lời cảm ơn chân thành bày tỏ lòng biết ơn sâu sắc tới giáo viên hướng dẫn TS Nguyễn Trường Thắng – Phó Viện trưởng - Viện Cơng nghệ thơng tin - Viện Hàn lâm Khoa học Công nghệ Việt Nam, thầy hướng dẫn tận tình, giúp đỡ truyền đạt cho kiến thức, kinh nghiệm quí báu suốt thời gian vừa qua, thầy cung cấp cho tơi tài liệu hữu ích để hồn thành luận văn Tôi xin gửi lời cảm ơn chân thành tới tất thầy, cô mơn Tin học - Khoa Tốn - Cơ - Tin học - Trường Đại học Khoa học Tự nhiên - ĐHQG Hà Nội giúp đỡ kiến thức, tinh thần lời khuyên quí báu suốt trình học tập vừa qua Cảm ơn đến tất bạn bè, đồng nghiệp Viện Công nghệ thông tin - Viện Hàn lâm Khoa học Công nghệ Việt Nam, trường Đại học Hải Dương cung cấp cho tơi tài liệu q báu, giúp đỡ, động viên tạo điều kiện cho tất mặt suốt năm qua Cuối xin gửi lời cảm ơn tới thành viên gia đình tạo điều kiện tốt cho tơi, động viên, cổ vũ tơi q trình học tập nghiên cứu để tơi hồn thành luận văn Học viên Nguyễn Thanh Liêm MỤC LỤC LỜI CAM ĐOAN LỜI CẢM ƠN MỤC LỤC DANH MỤC CÁC THUẬT NGỮ VÀ CHỮ VIẾT TẮT DANH MỤC CÁC HÌNH VẼ MỞ ĐẦU Chương - TỔNG QUAN 10 1.1 Tổng quan phân tích chương trình 10 1.1.1 Ý tưởng tốn phân tích chương trình 11 1.1.2 Phân tích chương trình tĩnh 12 1.2 Tổng quan kỹ thuật giải thích trừu tượng 13 1.3 Tổng quan tình hình nghiên cứu 15 1.4 Kết luận chương 16 Chương - CỞ SỞ LÝ THUYẾT CỦA KỸ THUẬT GIẢI THÍCH TRỪU TƯỢNG 17 2.1 Khái niệm kỹ thuật giải thích trừu tượng 17 2.2 Ứng dụng kỹ thuật giải thích trừu tượng 17 2.3 Một số khái niệm 18 2.3.1 Ngữ nghĩa cụ thể chương trình 18 2.3.2 Thuộc tính an tồn chương trình 19 2.3.3 Miền trừu tượng 20 2.3.4 Độ phủ kỹ thuật giải thích trừu tượng 21 2.3.5 Các phương pháp hình thức 22 2.3.6 Tính chất cần thiết ngữ nghĩa trừu tượng 23 2.4 Lý thuyết dàn 25 2.5 Lý thuyết điểm cố định 28 2.5.1 Điểm cố định 28 2.5.2 Mở rộng ký hiệu điểm cố định 29 2.5.3 Bước lặp 29 2.5.4 Đồ thị luồng điều khiển (Control Flow Graphs - CFG) 33 2.5.5 Phân tích luồng liệu (Data Flow Analysis) 36 2.5.6 Thuật tốn tìm điểm cố định 36 2.6 Tiếp cận kết nối Galois cho kỹ thuật giải thích trừu tượng 38 2.6.1 Kết nối Galois 38 2.6.2 Tính đủ tính xác (Soundness and Precision) .39 2.6.3 Mở rộng tới không gian hàm (Extension to Function Spaces) 40 2.6.4 Trừu tượng hàm (Functional Abstraction) 41 2.7 Trừu tượng hóa ngữ nghĩa chương trình 41 2.7.1 Hệ dịch chuyển 41 2.7.2 Ngữ nghĩa vết (Trace semantics) 43 2.7.3 Biểu diễn ngữ nghĩa vết dạng điểm cố định 44 2.7.4 Bao đóng phản xạ bắc cầu (RTC - reflexive transitive closure) trừu tượng hóa ngữ nghĩa vết 45 2.7.5 Thỏa mãn kết nối Galois 45 2.7.6 Biểu diễn ngữ nghĩa RTC dạng điểm cố định 46 2.7.7 Ngữ nghĩa tới trừu tượng hoá ngữ nghĩa RTC 47 2.7.8 Biểu diễn ngữ nghĩa tới dạng điểm cố định .47 2.8 Kết luận chương 48 Chương - THỰC NGHIỆM 49 3.1 Giới thiệu TVLA 49 3.2 Phân tích TVLA 50 3.2.1 Cấu trúc 3-valued Logic 51 3.2.2 Biểu diễn trạng thái nhớ Heap qua cấu trúc Logic 52 3.2.3 Trừu tượng heap 53 3.2.4 Biểu diễn ngữ nghĩa chương trình 55 3.2.5 Ví dụ phân tích chương trình 57 3.3 Thuật toán sinh hệ ràng buộc Coerce thuật tốn giải hệ ràng buộc tìm điểm cố định Focus 59 3.3.1 Công thức 59 3.3.2 Các lớp công thức 60 3.3.3 Ngữ nghĩa 60 3.3.4 Focus 61 3.3.5 Công thức cập nhật 63 3.3.6 Thuật toán Coerce xác định hệ ràng buộc 65 3.3.7 Thuật toán Focus giải hệ ràng buộc 67 3.4 Thử nghiệm 70 3.4.1 Đặc tả hệ thống TVLA 70 3.4.2 Giới thiệu toán 71 3.4.3 Đặc tả liệu đầu vào 71 3.4.4 Kết phân tích 76 3.5 Kết luận chương 77 KẾT LUẬN 78 TÀI LIỆU THAM KHẢO 79 PHỤ LỤC A: 81 PHỤ LỤC B: 83 DANH MỤC CÁC THUẬT NGỮ VÀ CHỮ VIẾT TẮT TT Tiếng Anh - Viết tắt Abstract domain Abstract semantics Concrete domain Concrete semantics Continue - Control Flow Graphs - CFG Data Flow Analysis - DFA 10 Fixpoint - fix Fixpoint approximation Galois connections 11 Interval semantics 12 Lattice 13 14 15 16 17 Monotone - mon Narrowing Partial Ordered Set - Poset Precise Reachability semantics 18 19 20 Reflexive transitive closure - RTC Reflexive semantics - RTCs Soundness 21 Trace semantics 22 23 Transition system Widening DANH MỤC CÁC HÌNH VẼ TT 10 11 Hình ảnh sử dụng Hình 1.1: Bài tốn phân tích chương trình tổng qt Hình 1.2: Trừu tượng hóa theo điểm cố định Hình 1.3: Các thành phần phân tích chương tr Hình 2.1 Sơ đồ hành vi chương trình Hình 2.2: Quĩ đạo an tồn thực thi Hình 2.3: Quĩ đạo khơng an tồn kiểm thử/gỡ lỗ Hình 2.4: Biểu diễn miền trừu tượng Hình 2.5: Trừu tượng hóa quĩ đạo hành vi chương tr Hình 2.6: Trừu tượng hóa quĩ đạo hành vi khơng đảm b Hình 2.7: Lỗi trừu tượng hóa quĩ đạo hành vi khơng chí Hình 2.8: Tiêu chuẩn trừu tượng hóa theo khoảng 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 Hình 2.9: Biểu đồ Hasse dàn (2 , Hình 2.10: Biểu diễn ngữ nghĩa chương trình th Hình 2.11: Biểu diễn điểm cố định hàm cosx = x Hình 2.12: Tính tốn điểm cố định dàn Hình 2.13: Phép cộng dàn Hình 2.14: Phép nâng dàn Hình 2.15: Dàn phẳng Hình 2.16: CFG cho lệnh đơn giản Hình 2.17: CFG cho cấu trúc Hình 2.18: CFG cho cấu trúc rẽ nhánh Hình 2.19: CFG cho cấu trúc lặp Hình 2.20: CFG hàm tính n! Hình 2.21: ¯F(¯x) xấp xỉ F(x) Hình 2.22: Biểu diễn quan hệ chuyển tiếp ngữ nghĩa chư Hình 2.23: Hệ chuyển dịch quĩ đạo thực thực thi ch Hình 2.24: Biểu diễn ngữ nghĩa vết thực thi Hình 2.25: Biểu diễn ngữ nghĩa vết dạng điểm cố đ Hình 2.26: Trừu tượng hóa đến ngữ nghĩa tới Hình 3.1: Các tốn tử 3-valued logic Kleene Hình 3.2: Biểu diễn heap cụ thể Hình 3.3: Trừu tượng hóa heap Hình 3.4: Kết heap trừu tượng đầu Hình 3.5: Trạng thái chương trình sử dụng cấu trúc Hình 3.6: Trạng thái chương trình sử dụng 3-valued Hình 3.7: Biểu diễn q trình làm việc phân tích ch Hình 3.8: Ứng dụng giải thích trừu tượng cho phân Hình 3.9: Kết phân tích hàm tạo danh sách liên kết A MỞ ĐẦU Ngày nay, hệ thống phần mềm sử dụng cách phổ biến tất lĩnh vực đời sống, sản xuất, kinh doanh như: kinh tế, tài chính, kế tốn, y tế, giáo dục, phủ,… , thiết bị điện tử công nghiệp dân dụng, phát triển trở lên ngày phức tạp Sự phức tạp lớn hệ thống điều khiển hệ thống nhúng thiết bị công nghiệp, hàng không, vũ trụ, … Đối với đơn vị, cá nhân tổ chức làm phần mềm chuyên nghiệp họ hiểu sản phẩm phần mềm họ tạo khơng thể chạy cách hồn hảo từ lúc mà không mắc lỗi Trong trình phát triển đưa vào sử dụng phần mềm bất kỳ, hầu hết tất lỗi phát sau phần mềm đưa vào sử dụng Do vậy, hoạt động kiểm thử đóng góp vai trị quan trọng nhằm đảm bảo chất lượng hệ thống phần mềm Các hoạt động kiểm thử nhà phát triển phần mềm tính đến suốt trình phát triển cho hệ thống phần mềm Tuy nhiên, hoạt động kiểm thử thường có chi phí cao, chiếm đến 40% tồn chi phí phát triển phần mềm, cịn mặt thời gian đơi cịn nhiều việc xây dựng hệ thống Hầu hết hoạt động kiểm thử nhằm mục đích phân tích thành phần cấu trúc phần mềm để xác định số lượng lớn lỗi tiến trình phát triển: từ đặc tả mã hóa Đối với hệ thống phần mềm phức tạp, cách giải đưa ban đầu với hệ thống cẩn thận khâu: phân tích, thiết kế, lập trình, kiểm thử để giảm thiểu cách tối đa lỗi phát sinh Các nguồn lực cần thiết cho hoạt động kiểm thử quan trọng Vì vậy, việc nghiên cứu phương pháp nhằm mục đích giảm chi phí q trình kiểm thử đưa ra, đảm bảo mục tiêu tính hiệu phần mềm biện pháp hữu hiệu %action Assert_ListInvariants(lhs) { %t "assertListInvariants(" + lhs + ")" %f { lhs(v) } %p E(v) r[n,lhs](v) & is[n](v) %message ( E(v) r[n,lhs](v) & is[n](v) ) -> "The list pointed by " + lhs + " may be shared!" } %action Assert_No_Leak(lhs) { %t "assertNoLeak(" + lhs + ")" %f { lhs(v) } %p E(v) !r[n,lhs](v) %message ( E(v) !r[n,lhs](v) ) -> "There may be a list element not reachable from variable " + lhs + "!" } 3.4.3.4 Tệp TVP đặc tả ngữ nghĩa thực thi Trong phạm vi luận văn tơi trình bày việc kiểm tra hàm chương trình gọi Create(), hàm tạo danh sách gắn thêm vào danh sách trỏ tới x [13] // Sets %s PVar {x, f} #include "predicates.tvp" %% #include "actions.tvp" %% / Transition system for a function that creates new list of elements and / appends them to the list pointed by x L1 uninterpreted() L2 // for (i=0; i a+b) { a = a+1; x = a+b; 81 } } Ta có biểu thức khác nhau, dàn cho phân tích với chương trình là: =(2 { ,∗ , , } ,⊇) Ta có sơ đồ luồng chương trình sau: Các ràng buộc sinh sau: W\ ={} / ,,,,; = W\ = + = W (+)↓ = ∗ =( = +∪ > + =( = ∗∩ W (∗))↓ = + )∪W (> 82 +) + ∪ W ( +1))↓ = +1 =( > = + =( = W = > + +1 ∪ W ( + ))↓ Áp dụng thuật tốn lặp Chaotic tìm điểm cố định ta thu nghiệm nhỏ nhất: W\ ={} / > + ={+,> +} = +1 ={} = + ={+} W ={+} Nhận thấy biểu thức có sẵn điểmchương trình kế trước nút v tính ⋂ ∈ Ơ ®( ) Từ đó, trình biên dịch tối ưu hóa hệ thống làm chương trình trở nên hiệu quả/đơn giản [2]: int func(){ var x,y,z,a,b,t; t = a+b; z = t; y = a*b; while (y > t) { a = a+1; t = a+b; x = t; } } PHỤ LỤC B: Kết phân tích @ VER SIO N@ (bu ilt on / @ D A T E @ ) , _ } % p % l o c a t i o n = { i n a c = { _ : , L = { % n = { } % p = { } % n = { _ _ : } r [ n , x ] = { _ : , _ : } s m = { _ : / } 83 x = {_0:1} n = {_1->_1:1/2, _0->_1:1/2} t[n] = {_1->_1:1/2, _0->_1:1, _0->_0:1} } %n = {_1} %p = { inac = {_1:1} r[n,x] = {_1:1} x = {_1:1} t[n] = {_1->_1:1} } %n = {_1} %p = { inac = {_1:1} f = {_1:1} r[n,f] = {_1:1} r[n,x] = {_1:1} x = {_1:1} t[n] = {_1->_1:1} } %n = {_2, _1} %p = { inac = {_2:1, _1:1} f = {_2:1} r[n,f] = {_2:1, _1:1} r[n,x] = {_2:1, _1:1} sm = {_1:1/2} x = {_2:1} n = {_2->_1:1/2, _1->_1:1/2} t[n] = {_2->_2:1, _2->_1:1, _1->_1:1/2} } } %location L2 = { %n = {_2, _1} %p = { inac = {_2:1, _1:1} f = {_2:1} r[n,f] = {_2:1, _1:1} r[n,x] = {_2:1, _1:1} sm = {_1:1/2} x = {_2:1} 84 n = {_2->_1:1/2, _1->_1:1/2} t[n] = {_2->_2:1, _2->_1:1, _1->_1:1/2} } %n = {} %p = {} %n = {_1, _0} %p = { inac = {_1:1, _0:1} r[n,x] = {_1:1, _0:1} sm = {_1:1/2} x = {_0:1} n = {_1->_1:1/2, _0->_1:1/2} t[n] = {_1->_1:1/2, _0->_1:1, _0->_0:1} } %n = {_1} %p = { inac = {_1:1} r[n,x] = {_1:1} x = {_1:1} t[n] = {_1->_1:1} } %n = {_1} %p = { inac = {_1:1} f = {_1:1} r[n,f] = {_1:1} r[n,x] = {_1:1} x = {_1:1} t[n] = {_1->_1:1} } } %location L3 = { %n = {_2, _1} %p = { inac = {_2:1, _1:1} f = {_2:1} r[n,f] = {_2:1} r[n,x] = {_1:1} x = {_1:1} t[n] = {_2->_2:1, _1->_1:1} } 85 %n = {_1} %p = { inac = {_1:1} f = {_1:1} r[n,f] = {_1:1} t[n] = {_1->_1:1} } %n = {_2, _1, _0} %p = { inac = {_2:1, _1:1, _0:1} f = {_2:1} r[n,f] = {_2:1} r[n,x] = {_1:1, _0:1} sm = {_1:1/2} x = {_0:1} n = {_1->_1:1/2, _0->_1:1/2} t[n]={_2->_2:1, _1->_1:1/2, _0->_1:1, _0->_0:1} } } %location L4 = { %n = {_2, _1} %p = { inac = {_2:1, _1:1} f = {_2:1} r[n,f] = {_2:1} r[n,x] = {_1:1} x = {_1:1} t[n] = {_2->_2:1, _1->_1:1} } %n = {_1} %p = { inac = {_1:1} f = {_1:1} r[n,f] = {_1:1} t[n] = {_1->_1:1} } %n = {_2, _1, _0} %p = { inac = {_2:1, _1:1, _0:1} f = {_2:1} r[n,f] = {_2:1} 86 r[n,x] = {_1:1, _0:1} sm = {_1:1/2} x = {_0:1} n = {_1->_1:1/2, _0->_1:1/2} t[n]={_2->_2:1, _1->_1:1/2, _0->_1:1, _0->_0:1} } } %location L5 = { %n = {_1} %p = { inac = {_1:1} f = {_1:1} r[n,f] = {_1:1} t[n] = {_1->_1:1} } %n = {_2, _1} %p = { inac = {_2:1, _1:1} f = {_2:1} r[n,f] = {_2:1, _1:1} r[n,x] = {_1:1} x = {_1:1} n = {_2->_1:1} t[n] = {_2->_2:1, _2->_1:1, _1->_1:1} } %n = {_2, _1, _0} %p = { inac = {_2:1, _1:1, _0:1} f = {_2:1} r[n,f] = {_2:1, _1:1, _0:1} r[n,x] = {_1:1, _0:1} sm = {_1:1/2} x = {_0:1} n = {_2->_0:1, _1->_1:1/2, _0->_1:1/2} t[n]={_2->_2:1,_2->_1:1,_2->_0:1,_1>_1:1/2, _0->_1:1, _0->_0:1} } } %location exit = { %n = {_1, _0} %p = { 87 inac = {_1:1, _0:1} r[n,x] = {_1:1, _0:1} sm = {_1:1/2} x = {_0:1} n = {_1->_1:1/2, _0->_1:1/2} t[n] = {_1->_1:1/2, _0->_1:1, _0->_0:1} } %n = {} %p = {} %n = {_1} %p = { inac = {_1:1} f = {_1:1} r[n,f] = {_1:1} r[n,x] = {_1:1} x = {_1:1} t[n] = {_1->_1:1} } %n = {_2, _1} %p = { inac = {_2:1, _1:1} f = {_2:1} r[n,f] = {_2:1, _1:1} r[n,x] = {_2:1, _1:1} sm = {_1:1/2} x = {_2:1} n = {_2->_1:1/2, _1->_1:1/2} t[n] = {_2->_2:1, _2->_1:1, _1->_1:1/2} } %n = {_1} %p = { inac = {_1:1} r[n,x] = {_1:1} x = {_1:1} t[n] = {_1->_1:1} } } %location error = {} Như kết TVLA sinh biểu diễn trừu tượng heap điểm chương trình tương ứng CFG Các tính chất kiểm tra thỏa mãn phần %location error {} rỗng 88 ... dụng kỹ thuật giải thích trừu tượng: Phân tích trừu tượng ứng dụng phân tích cú pháp, trình biên dịch, gỡ lỗi chương trình 2.2 Ứng dụng kỹ thuật giải thích trừu tượng Kỹ thuật giải thích trừu tượng. .. GIẢI THÍCH TRỪU TƯỢNG 2.1 Khái niệm kỹ thuật giải thích trừu tượng Kỹ thuật giải thích trừu tượng (Abstract interpretation): Là kỹ thuật phân tích chương trình, kỹ thuật giúp giải thích ngữ nghĩa... trình tĩnh Cụ thể nghiên cứu kỹ thuật giải thích trừu tượng, mục tiêu cập nhật xu hướng kỹ thuật giới để nâng cao chất lượng phần mềm Các đề tài nghiên cứu kỹ thuật giải thích trừu tượng chưa phổ