Ngày nay với sự phát triển vượt bậc của công nghệ thông tin, thì phần mềmcó vai trò cốt lõi và ngày càng chiếm vị trí quan trọng không những trong côngnghệ thông tin mà còn trong đời sống kinh tế xã hội. Khi đó sự phụ thuộc củakinh tế xã hội vào phần mềm ngày càng lớn. Chính vì vậy, vấn đề chất lượngphần mềm (software quality) chắc chắn là mối quan tâm và thách thức đối vớixã hội hiện đại ngày càng phụ thuộc vào các dịch vụ do máy tính đem lại nàyTừ trước đến nay, kĩ thuật kiểm thử thường được sử dụng để kiểm tra chươngtrình. Nó đóng vai trò quan trọng trong việc đánh giá và thu được chất lượng caocủa sản phẩm phần mềm trong quá trình phát triển. Thông qua chu trình “kiểmthử – tìm lỗi – sửa lỗi” ta hy vọng chất lượng của sản phẩm phần mềm sẽ đượccải tiến. Tuy nhiên phương pháp này bộc lộ điểm yếu quan trọng nhất đó là chỉcó thể khẳng định được chương trình không gặp lỗi đối với các trường hợp kiểmthử đã kiểm tra, tức là không tìm thấy lỗi chứ không thể khẳng định là chươngtrình hoàn toàn không còn lỗi.
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ BÙI THỊ THƯ ỨNG DỤNG KỸ THUẬT DIỄN GIẢI TRỪU TƯỢNG TRONG PHÂN TÍCH BỘ NHỚ HEAP LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN Hà Nội – 2014 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ BÙI THỊ THƯ ỨNG DỤNG KỸ THUẬT DIỄN GIẢI TRỪU TƯỢNG TRONG PHÂN TÍCH BỘ NHỚ HEAP Ngành: Công nghệ thông tin Chuyên ngành: Kỹ thuật phần mềm Mã số: 60480103 LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN NGƯỜI HƯỚNG DẪN KHOA HỌC: TS Nguyễn Trường Thắng Hà Nội – 2014 LỜI CAM ĐOAN Tôi xin cam đoan công trình nghiên cứu có giúp đỡ Thầy giáo hướng dẫn đồng nghiệp quan Các nội dung kết nghiên cứu luận văn hoàn toàn trung thực Trong luận văn, có tham khảo đến số tài liệu số tác giả liệt kê mục tài liệu tham khảo Hà Nội, tháng 03 năm 2014 Học viên Bùi Thị Thư LỜI CẢM ƠN Tôi xin chân thành cảm ơn thầy cô giáo Khoa Công nghệ Thông tin, Trường Đại học Công nghệ – Đại học Quốc gia Hà Nội tận tình giảng dạy trang bị cho kiến thức, giúp hoàn thành luận văn Tôicũng xin bày tỏ lòng kính trọng lời cảm ơn sâu sắc tới 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 động viên hướng dẫn hoàn thành luận văn tốt nghiệp Mặc dù cố gắng để hoàn thành luận văn, phạm vi khả cho phép tránh khỏi thiếu sót, mong nhận cảm thông tận tình bảo thầy cô Hà Nội, tháng 03 năm 2014 Học viên Bùi Thị Thư MỤC LỤC LỜI CAM ĐOAN LỜI CẢM ƠN MỤC LỤC DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT DANH SÁCH HÌNH VẼ MỞ ĐẦU CHƯƠNG GIỚI THIỆU CHUNG 1.1 Vấn đề quản lý nhớ 1.2 Phân tích chương trình tĩnh 1.3 Các kỹ thuật phân tích chương trình tĩnh 10 CHƯƠNG LÝ THUYẾT NỀN TẢNG 14 2.1 Nền tảng phân tích ngữ nghĩa chương trình 14 2.1.1 Lý thuyết giàn 14 2.1.2 Lý thuyết điểm cố định 15 2.1.3 Hệ dịch chuyển 17 2.1.4 Ngữ nghĩa vết 17 2.1.5 Biểu diễn ngữ nghĩa vết dạng điểm cố định 17 2.2 Phân tích hình dạng 18 2.3 Nền tảng diễn giải trừu tượng 20 2.3.1 Phân tích miền trừu tượng 21 2.3.2 Kết nối Galois 26 2.3.3 Trừu tượng hóa ngữ nghĩa chương trình 28 2.3.4 Giàn phân cấp ngữ nghĩa chương trình 32 2.3.5 Các kỹ thuật tăng tốc độ hội tụ 34 2.4 Kết luận chương 35 CHƯƠNG ỨNG DỤNG KỸ THUẬT DIỄN GIẢI TRỪU TƯỢNG TRONG PHÂN TÍCH BỘ NHỚ HEAP VÀ THỰC NGHIỆM 36 3.1 Ứng dụng kỹ thuật diễn giải trừu tượng phân tích heap 36 3.1.1 Heap cụ thể 36 3.1.2 Trừu tượng hóa heap 37 3.2 Thực nghiệm 39 3.2.1 Giới thiệu TVLA 39 3.2.2 Đặc tả hệ thống TVLA 40 3.2.3 Biểu diễn ngữ nghĩa chương trình 41 3.2.4 Tinh chỉnh trừu tượng hóa 43 3.2.5 Ví dụ minh họa 44 KẾT LUẬN 50 TÀI LIỆU THAM KHẢO 51 PHỤ LỤC A 53 PHỤ LỤC B 54 PHỤ LỤC C 56 PHỤ LỤC D 59 PHỤ LỤC E 60 DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT Ký hiệu CFG TVLA Thuật ngữ Control Flow Graph Three - Valued Logic Analysis Engine DFG Data Flow Graph TVS Three Valued logical Structure TVP Three Valued Program SMT Satisfiability Modulo Theories SAT Satisfiability Testing DANH SÁCH HÌNH VẼ Hình 1.1 Các thành phần kỹ thuật diễn giải trừu tượng 12 Hình 2.1 Quan hệ thứ tự phần giàn 15 Hình 2.2 Quan hệ thứ tự phần giàn 15 Hình 2.3 Tính toán điểm cố định giàn 16 Hình 2.4 Ngữ nghĩa cụ thể chương trình 22 Hình 2.5 Thuộc tính an toàn 23 Hình 2.6 Kỹ thuật kiểm thử 23 Hình 2.7 Trừu tượng hóa ngữ nghĩa cụ thể 24 Hình 2.8 Trừu tượng hóa không đảm bảo tính đủ 25 Hình 2.9 Trừu tượng hóa không đủ xác 26 Hình 2.10 Sự trừu tượng hóa kết nối 27 Hình 2.11 Cây phân cấp ngữ nghĩa 33 Hình 3.1 Biểu diễn heap cụ thể 37 Hình 3.2 Các toán tử logic 38 Hình 3.3 Trừu tượng hóa heap 38 Hình 3.4 Kết heap trừu tượng đầu 42 Hình 3.5 Kết truy cập trường f 44 Hình 3.6 Thông số phân tích TVLA 49 MỞ ĐẦU Ngày với phát triển vượt bậc công nghệ thông tin, phần mềm có vai trò cốt lõi ngày chiếm vị trí quan trọng công nghệ thông tin mà đời sống kinh tế xã hội Khi phụ thuộc kinh tế xã hội vào phần mềm ngày lớn Chính vậy, vấn đề chất lượng phần mềm (software quality) chắn mối quan tâm thách thức xã hội đại ngày phụ thuộc vào dịch vụ máy tính đem lại Từ trước đến nay, kĩ thuật kiểm thử thường sử dụng để kiểm tra chương trình Nó đóng vai trò quan trọng việc đánh giá thu chất lượng cao sản phẩm phần mềm trình phát triển Thông qua chu trình “kiểm thử – tìm lỗi – sửa lỗi” ta hy vọng chất lượng sản phẩm phần mềm cải tiến Tuy nhiên phương pháp bộc lộ điểm yếu quan trọng khẳng định chương trình không gặp lỗi trường hợp kiểm thử kiểm tra, tức không tìm thấy lỗi khẳng định chương trình hoàn toàn không lỗi Liên quan tới khía cạnh đảm bảo tính chất lượng phần mềm, lĩnh vực công nghệ phần mềm giới tập trung vào phương pháp hình thức (formal methods) kiểm chứng chương trình Bài toán kiểm chứng chương trình mô tả đơn giản sau: Cho trước chương trình (program ) đặc tả (specification ), kiểm chứng xác định xem ngữ nghĩa chương trình có thỏa mãn đặc tảS hay không Trường hợp không thỏa mãn, trình kiểm chứng cho biết nguồn gốc lỗi để truy ngược vết thông qua phản ví dụ Cách tiếp cận đặc biệt quan trọng hệ thống cần tính toàn vẹn cao Các phương pháp sử dụng nhiều mức trình phát triển phần mềm, cố gắng chứng minh cách tự động chương trình thực thi đắn môi trường đặc tả Mảng nghiên cứu bao gồm phương pháp suy dẫn (deductive methods), kiểm chứng mô hình (model checking), định kiểu chương trình (program typing), kiểm chứng tĩnh mở rộng (extended static checking – ESC) phân tích chương trình tĩnh (static program analysis) Ba phương pháp đầu tập trung vào việc kiểm chứng phần mềm mức mô hình, hai nhóm cuối xử lý phần mềm mức mã nguồn Phân tích chương trình tĩnh thu hút quan tâm lớn tảng lý thuyết hình thức mục đích ứng dụng thực tế Kỹ thuật phát tính chất/hành vi chương trình mà không yêu cầu chạy chương trình Mục tiêu luận văn tìm hiểu kỹ thuật phân tích chương trình tĩnh, cập nhật xu hướng nghiên cứu nước lĩnh vực phân tích chương trình tĩnh, cải tiến kỹ thuật Cụ thể, luận văn tập trung vào nghiên cứu kỹ thuật liên quan tới xấp xỉ ngữ nghĩa gọi diễn giải trừu tượng (abstract interpretation), thể kỹ thuật thông qua phân tích hình dạng nhớ heapdựa giá trị logic (shape analysis via three-valued logic) Tiến hành thực nghiệm công cụ TVLA, công cụ mã nguồn mở phân tích chương trình viết Java Luận văn có cấu trúc sau: Chương giới thiệu tổng quan phân tích chương trình tĩnh Trong chương trình bày định nghĩa kỹ thuật phân tích chương trình tĩnh, ứng dụng, điểm mạnh điểm yếu kỹ thuật Tiếp luận văn trình bày vài kỹ thuật phân tích chương trình tĩnh phổ biến nay, toán kỹ thuật mà luận văn thực tìm hiểu Chương trình bày tảng toán phân tích chương trình, lý thuyết kỹ thuật diễn giải trừu tượng (abstract interpretation) Chương trình bày kỹ thuật phân tích hình dạng nhớ heap dựa giá trị logic Thực nghiệm với TVLA – công cụ mã nguồn mở để phân tích chương trình Cuối phần kết luận tài liệu tham khảo 54 PHỤ LỤC B Tệp tin TVP (predicates.tvp) mô tả vị từ sử dụng // Các vị từ lõi (Core Predicates) // Với biến chương trình phần tử trỏ tới // Từ khóa tử sử dụng để rõ vị từ thỏa mãn với phần ℎ( % ( ) tạo vị từ đơn nguyênthỏa mãn ){ } // Vị từ n biểu diễn trường n danh sách liên kết % ( _1, _2) // Các vị từ dẫn xuất từ vị từ lõi // Vị từ % [ ] thỏa mãn với phần tử trỏ tới hai phần tử khác [ ]( ) = ( _1, _2) ( _1 ! = _2 & ( _1, ) & ( _2, )) // Vị từ [ ] biểu diễn tính tới theo phản xạ bắc cầugiữa phần tử thông qua trường n % [ ]( _1, _2) = ∗ ( _1, _2) // Ràng buộc toàn vẹn cho tính tới bắc cầu % ! [ ]( _1, _2) ==> ! ( _1, _2) % ! [ ]( _1, _2) ==> % _1 ! = _2 ( _1) ( [ ]( _1, _2) & [ ]( _1, _3) & ! [ ]( _2, _3)) ==> [ ]( _3, _2) // Với biến chương trình , vị từ [ , ] thỏa mãn đối vớicác phần tử tới từ thông quatrường trỏ 55 ℎ( {% [ , ]( ) = ) ( _1) ( ( _1) & [ ]( _1, ))} 56 PHỤ LỤC C Tệp tin TVP (actions.tvp) mô tả actions sử dụng % () { % " " } // Các Actions lệnh thao tác biến trỏvà trường trỏ % _ _ ( ℎ , ℎ ){ % ℎ + " = " + ℎ % { ℎ ( )} { ℎ ( ) = ℎ ( ) } } % _ ( ℎ ){ % ℎ + " = ( ) ( ( )) " % { ℎ ( ) = ( ) [ ]( _1, _2) = ( ( _1) ? _1 == [ , ℎ ]( ) = ℎ( ( ) − { ℎ }) { [ , ]( ) = [ , ]( ) } [ ]( ) = } } [ ]( ) _2 ∶ [ ]( _1, _2)) 57 % _ _ % ℎ + "−> " + _ ( ℎ ){ + " = " % { ℎ ( ), ( _1, _2) ℎ ( _1) & ( _1, _2) & [ ]( _2, ) } % (! ( ) ℎ ( )) −> " ℎ ℎế ℎô ℎợ ệ ớ\ " + + " ℎà ℎ ℎầ ủ " + ℎ { ( _1, _2) = ( _1, _2) & ! ℎ ( _1) } } % _ _ ( ℎ , ℎ ){ % ℎ + "−> " + + " = " + ℎ % { ℎ ( ), ℎ ( ), ( _4) ℎ ( _4) & [ ]( _4, _2) } % " ỗ ( ( _1, _2) ℎ ( _1) & ( _1, _2)) −> ộ % " ộ ộ! " + ℎ + "−> " + + "!= " ( ( _1, _2) ℎ ( _1) & ℎ ( _2) & [ ]( _2, _1)) −> ℎ ì ℎ ó ℎể đượ + ℎ + "−> " + ằ ℎé " + "=" + ℎ { ( _1, _2) = ( _1, _2) | ℎ ( _1) & ℎ ( _2) 58 } } // Actions dành cho việc kiểm tra thuộc tính % _ ( ℎ ){ % " (" + ℎ + ")" % { ℎ ( )} % ( ) [ , ℎ ]( ) & % " [ ]( ) ( ( ) [ , ℎ ]( ) & ℎ ℎ đượ ỏ đế [ ]( ) ) −> " + ℎ + " ó ℎể ị ℎ } % _ % " _ ( ℎ ){ (" + ℎ + ")" % { ℎ ( )} % ( ) ! [ , ℎ ]( ) % ( ( ) ! [ , ℎ ]( ) ) −> " ó ℎể ó đượ ộ ℎ ℎ ℎầ ℎô ế " + ℎ + "! " } đạ đế ẻ! " 59 PHỤ LỤC D Tệp create.tvp mô tả nội dung hàm Create(), hàm tạo danh sách gắn thêm vào danh sách trỏ tới // Tập biến % { , } // Gọi đến tệp TVP chứa vị từ actions đượcđịnh nghĩa # " " %% # " " %% // CFG cho hàm Create() với cạnh thể actions để biểu diễn ngữ nghĩa thực thi hàm () // () _ ( ) // ( = 0; = ( _ _ _ _ ( , ) // −> _ < _ ( ) // −> _ ( , ) // = = ; + +) { ( = )); ; ; ; // } // Kiểm tra thuộc tính hàm thực thi xong // Kiểm tra tính không chia sẻ _ ( ) // Kiểm tra tính thất thoát nhớ _ _ ( ) 60 PHỤ LỤC E Tệp create.out.tvs mô tả thông tin TVLA phân tích // @ @( % @ @) = { % = {} % = {} % = {_1, _0} % = { = {_1: 1, _0: 1} [ , ] = {_1: 1, _0: 1} = {_1: 1/2} = {_0: 1} = {_1−> _1: 1/2, _0−> _1: 1/2} [ ] = {_1−> _1: 1/2, _0−> _1: 1, _0−> _0: 1} } % = {_1} % = { = {_1: 1} [ , ] = {_1: 1} = {_1: 1} [ ] = {_1−> _1: 1} } % = {_1} % = { 61 = {_1: 1} = {_1: 1} [ , ] = {_1: 1} [ , ] = {_1: 1} = {_1: 1} [ ] = {_1−> _1: 1} } % = {_2, _1} % = { = {_2: 1, _1: 1} = {_2: 1} [ , ] = {_2: 1, _1: 1} [ , ] = {_2: 1, _1: 1} = {_1: 1/2} = {_2: 1} = {_2−> _1: 1/2, _1−> _1: 1/2} [ ] = {_2−> _2: 1, _2−> _1: 1, _1−> _1: 1/2} } } % = { % = {_2, _1} % = { = {_2: 1, _1: 1} = {_2: 1} [ , ] = {_2: 1, _1: 1} 62 [ , ] = {_2: 1, _1: 1} = {_1: 1/2} = {_2: 1} = {_2−> _1: 1/2, _1−> _1: 1/2} [ ] = {_2−> _2: 1, _2−> _1: 1, _1−> _1: 1/2} } % = {} % = {} % = {_1, _0} % = { = {_1: 1, _0: 1} [ , ] = {_1: 1, _0: 1} = {_1: 1/2} = {_0: 1} = {_1−> _1: 1/2, _0−> _1: 1/2} [ ] = {_1−> _1: 1/2, _0−> _1: 1, _0−> _0: 1} } % = {_1} % = { = {_1: 1} [ , ] = {_1: 1} = {_1: 1} [ ] = {_1−> _1: 1} } 63 % = {_1} % = { = {_1: 1} = {_1: 1} [ , ] = {_1: 1} [ , ] = {_1: 1} = {_1: 1} [ ] = {_1−> _1: 1} } } % = { % = {_2, _1} % = { = {_2: 1, _1: 1} = {_2: 1} [ , ] = {_2: 1} [ , ] = {_1: 1} = {_1: 1} [ ] = {_2−> _2: 1, _1−> _1: 1} } % = {_1} % = { = {_1: 1} = {_1: 1} 64 [ , ] = {_1: 1} [ ] = {_1−> _1: 1} } % = {_2, _1, _0} % = { = {_2: 1, _1: 1, _0: 1} = {_2: 1} [ , ] = {_2: 1} [ , ] = {_1: 1, _0: 1} = {_1: 1/2} = {_0: 1} = {_1−> _1: 1/2, _0−> _1: 1/2} [ ] = {_2−> _2: 1, _1−> _1: 1/2, _0−> _1: 1, _0−> _0: 1} } } % = { % = {_2, _1} % = { = {_2: 1, _1: 1} = {_2: 1} [ , ] = {_2: 1} [ , ] = {_1: 1} = {_1: 1} [ ] = {_2−> _2: 1, _1−> _1: 1} } 65 % = {_1} % = { = {_1: 1} = {_1: 1} [ , ] = {_1: 1} [ ] = {_1−> _1: 1} } % = {_2, _1, _0} % = { = {_2: 1, _1: 1, _0: 1} = {_2: 1} [ , ] = {_2: 1} [ , ] = {_1: 1, _0: 1} = {_1: 1/2} = {_0: 1} = {_1−> _1: 1/2, _0−> _1: 1/2} [ ] = {_2−> _2: 1, _1−> _1: 1/2, _0−> _1: 1, _0−> _0: 1} } } % = { % = {_1} % = { = {_1: 1} = {_1: 1} 66 [ , ] = {_1: 1} [ ] = {_1−> _1: 1} } % = {_2, _1} % = { = {_2: 1, _1: 1} = {_2: 1} [ , ] = {_2: 1, _1: 1} [ , ] = {_1: 1} = {_1: 1} = {_2−> _1: 1} [ ] = {_2−> _2: 1, _2−> _1: 1, _1−> _1: 1} } % = {_2, _1, _0} % = { = {_2: 1, _1: 1, _0: 1} = {_2: 1} [ , ] = {_2: 1, _1: 1, _0: 1} [ , ] = {_1: 1, _0: 1} = {_1: 1/2} = {_0: 1} = {_2−> _0: 1, _1−> _1: 1/2, _0−> _1: 1/2} [ ] = {_2−> _2: 1, _2−> _1: 1, _2−> _0: 1, _1−> _1: 1/2, _0−> _1: 1, _0− > _0: 1} } 67 } % = { % = {_1, _0} % = { = {_1: 1, _0: 1} [ , ] = {_1: 1, _0: 1} = {_1: 1/2} = {_0: 1} = {_1−> _1: 1/2, _0−> _1: 1/2} [ ] = {_1−> _1: 1/2, _0−> _1: 1, _0−> _0: 1} } % = {} % = {} % = {_1} % = { = {_1: 1} = {_1: 1} [ , ] = {_1: 1} [ , ] = {_1: 1} = {_1: 1} [ ] = {_1−> _1: 1} } % = {_2, _1} 68 % = { = {_2: 1, _1: 1} = {_2: 1} [ , ] = {_2: 1, _1: 1} [ , ] = {_2: 1, _1: 1} = {_1: 1/2} = {_2: 1} = {_2−> _1: 1/2, _1−> _1: 1/2} [ ] = {_2−> _2: 1, _2−> _1: 1, _1−> _1: 1/2} } % = {_1} % = { = {_1: 1} [ , ] = {_1: 1} = {_1: 1} [ ] = {_1−> _1: 1} } } % = {} [...]... được sử dụng phổ biến trong thực tế như C, C++ thì vấn đề quản lý bộ nhớ vẫn được dựa hoàn toàn vào lập trình viên[14] Liên quan tới bài toán này kỹ thuật phân tích chương trình tĩnh của mảng các kỹ thuật kiểm chứng chương trình là có tính ứng dụng và hiệu quả cao Và việc áp dụng kỹ thuật phân tích chương trình tĩnh vào trong bài toán quản lý bộ nhớ sẽ là nội dung chính của luận văn này 1.2 Phân tích. .. đắn của kỹ thuật diễn giải trừu tượng, đương nhiên thỏa mãn Tính ưu việt của kỹ thuật này là độ phức tạp của nhỏ hơn rất nhiều tùy theo quá trình trừu tượng hóa (ánh xạ trừu tượng hóa từ vào ) như thế nào Trong thực tế, kỹ thuật diễn giải trừu tượng có một thành phần là bộ sinh (generator) ngữ nghĩa trừu tượng đọc mã nguồn chương trình và tạo ra các ràng buộc hoặc hệ các phương trình cần được giải bởi... nghĩa trừu tượng đảm bảo tính mạnh, chính xác và có khả năng lập luận được lại là một vấn đề khó khăn Điều này đặc biệt đúng với một số vấn đề trong thực tế như: Phân tích hình dạng (Shape Analysis), phân tích con trỏ, trong đó ngữ nghĩa cụ thể liên quan trực tiếp tới cấu trúc dữ liệu và bộ nhớ .Trừu tượng hóa heap được chứng minh là một vấn đề khó khăn trong phân tích tĩnh 2.3 Nền tảng diễn giải trừu tượng. .. đi kèm một số kĩ thuật xấp xỉ nhằm đưa về bài toán giải được hoặc để tối ưu hóa kết quả 1.3 Các kỹ thuật phân tích chương trình tĩnh Hiện nay, trên thế giới có nhiều hướng nghiên cứu về các kỹ thuật phân tích chương trình tĩnh Về các kỹ thuật hình thức phân tích chương trình tĩnh có thể chia thành 4 hướng chính như sau: Thứ nhất, kỹ thuật phân tích chương trình tĩnh dựa trên phân tích luồng dữ liệu... kỹ thuật dạng này Hình 2.6 minh họa cơ chế của kỹ thuật kiểm thử, chỉ một số nhánh thực thi (nét liền) của chương trình được kiểm tra trong quá trình kiểm thử Hình 2.6 Kỹ thuật kiểm thử 24 Kỹ thuật diễn giải trừu tượng thực hiện trên ngữ nghĩa trừu tượng của chương trình Ngữ nghĩa trừu tượng được xem là tập cha của ngữ nghĩa cụ thể, nó phủ hết các trường hợp trong ngữ nghĩa cụ thể[2] Mục đích của diễn. .. các sản phẩm phần mềm, kỹ thuật diễn giải trừu tượng là một dải nghiên cứu và ứng dụng quan trọng đối với ngành công nghệ phần mềm Việc tiến hành nghiên cứu trong lĩnh vực này là cần thiết trong việc nâng cao chất lượng nghiên cứu ứng dụng vào thực tế kiểm soát chất lượng phần Do đó, luận văn sẽ tập trung vào nhóm các kỹ thuật liên quan tới xấp xỉ ngữ nghĩa là diễn giải trừu tượng 14 CHƯƠNG 2 LÝ THUYẾT... bởi các kỹ thuật liên quan tới phân tích tĩnh Phương pháp suy diễn (Deductive methods) - Ngữ nghĩa trừu tượng được chỉ định bởi các điều kiện kiểm chứng (verification conditions); - Người dùng phải cung cấp ngữ nghĩa trừu tượng dưới dạng các tham số quy nạp; - Có thể được tính toán tự động bởi các kỹ thuật liên quan tới phân tích tĩnh 25 Phân tích tĩnh (Static analysis): Ngữ nghĩa trừu tượng được... đích của diễn giải trừu tượng là chuyển vấn đề cần chứng minh về dạng: nếu ngữ nghĩa trừu tượng thỏa mãn (không giao với vùng vi phạm) thì điều này cũng được thỏa mãn với ngữ nghĩa cụ thể Hình 2.7 minh họa cơ chế của diễn giải trừu tượng Ngữ nghĩa cụ thể của chương trình gồm vô số đường thực thi được trừu tượng hóa thành một miền ngữ nghĩa trừu tượng Miền ngữ nghĩa trừu tượng này bao toàn bộ ngữ nghĩa... graph) và sử dụng thuật toán điểm cố định để giải hệ phương trình này Và một số ứng dụng phổ biển của phân tích luồng dữ liệu là phân tích tính tới được (reaching definitions), biểu thức có sẵn (available expressions), biểu thức bận rộn (very busy expressions) và phân tích tính sống (liveness analysis)[15] 11 Thứ hai, nhóm kỹ thuật liên quan tới xấp xỉ ngữ nghĩa được gọi là diễn giải trừu tượng (abstract... thể cũng không giao với vùng vi phạm Hình 2.7 Trừu tượng hóa ngữ nghĩa cụ thể Các phương pháp hình thức bản chất đều là diễn giải trừu tượng, chỉ khác nhau ở kỹ thuật xấp xỉ để tạo ra ngữ nghĩa trừu tượng từ ngữ nghĩa cụ thể[5] Kiểm chứng mô hình (Model checking) - Ngữ nghĩa trừu tượng được đưa ra thủ công bởi người dùng; - Ngữ nghĩa trừu tượng biểu diễn dưới dạng mô hình hữu hạn trạng thái của chương