1. Trang chủ
  2. » Luận Văn - Báo Cáo

Xây dựng công cụ kiểm chứng mô hình phần mềm kiểm tra các chương trình hữu hạn, dựa trên hệ thống java path finder

74 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

Thông tin cơ bản

Tiêu đề Xây Dựng Công Cụ Kiểm Chứng Mô Hình Phần Mềm Kiểm Tra Các Chương Trình Hữu Hạn, Dựa Trên Hệ Thống Java Path Finder
Tác giả Lê Anh Tùng
Người hướng dẫn PGS.TS Huỳnh Quyết Thắng
Trường học Đại học Bách Khoa Hà Nội
Chuyên ngành Công nghệ thông tin
Thể loại Đồ án tốt nghiệp
Năm xuất bản 2011
Thành phố Hà Nội
Định dạng
Số trang 74
Dung lượng 750,67 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Mục đích nội dung của ĐATN  Tìm hiểu về Kiểm tra mô hình, thực thi tượng trưng  Làm quen với hệ thống Java Path-Finder áp dụng kiểm tra mô hình  Đưa ra một cách tiếp cận mới để giải q

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

──────── * ────────

ĐỒ ÁN

TỐT NGHIỆP ĐẠI HỌC

NGÀNH CÔNG NGHỆ THÔNG TIN

Xây dựng công cụ kiểm chứng mô hình phần mềm kiểm tra các chương trình hữu hạn, dựa

trên hệ thống Java Path-Finder

Sinh viên thực hiện: Lê Anh Tùng

Lớp CNPM-K51

Giáo viên hướng dẫn: PGS.TS Huỳnh Quyết Thắng

Hà Nội 05-2011

Trang 2

PHIẾU GIAO NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP

1 Thông tin về sinh viên

 Họ và tên sinh viên: Lê Anh Tùng

 Điện thoại liên lạc: 0985170188 Email: atungbk@gmail.com

 Lớp: Công nghệ phần mềm – K51 Hệ đào tạo: Đại học chính quy

 Đồ án tốt nghiệp được thực hiện tại: Bộ môn Công nghệ phần mềm, Viện CNTT &Truyền thông – Đại học Bách Khoa Hà Nội

 Thời gian làm ĐATN: Từ ngày 15/ 01/2011 đến 25 /05/2011

2 Mục đích nội dung của ĐATN

 Tìm hiểu về Kiểm tra mô hình, thực thi tượng trưng

 Làm quen với hệ thống Java Path-Finder áp dụng kiểm tra mô hình

 Đưa ra một cách tiếp cận mới để giải quyết một số vấn đề còn tồn tại của kiểm tra

mô hình trong việc thực thi các chương trình hữu hạn

3 Các nhiệm vụ cụ thể của ĐATN

 Nghiên cứu lý thuyết cơ bản về Kiểm tra mô hình và thực thi tượng trưng và cách

áp dụng chúng vào bài toán kiểm tra các chương trình hữu hạn

 Đưa ra những vấn đề còn tồn tại của phương pháp trên và đề xuất hướng tiếp cậnmới để giải quyết những tồn tại đó

 Xây dựng công cụ từ hướng tiếp cận được đề xuất dựa trên hệ thống Java Finder kết hợp với thực thi tượng trưng để giải quyết bài toán

Path-4 Lời cam đoan của sinh viên

Tôi – Lê Anh Tùng – cam đoan ĐATN là công trình nghiên cứu của bản thân tôi, dưới sự hướng dẫn của PGS.TS Huỳnh Quyết Thắng.

Các kết quả nêu trong ĐATN là trung thực, không phải là sao chép toàn văn của bất kỳcông trình nào khác

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B ii

Trang 3

Hà Nội, ngày tháng…… năm

Tác giả ĐATN

Lê Anh Tùng

5 Xác nhận của giáo viên hướng dẫn về mức độ hoàn thành của ĐATN và cho phép bảo vệ

Hà Nội, ngày tháng…… năm

Giáo viên hướng dẫn

PGS.TS Huỳnh Quyết Thắng

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B iii

Trang 4

TÓM TẮT NỘI DUNG ĐỒ ÁN TỐT NGHIỆP

Đồ án này giới thiệu một phương pháp tiếp cận cho việc kết hợp giữa thực thi tượngtrưng (Symbolic execution) và điều khiển thực thi (Program Monitoring) để kiểm thửcác chương trình Java hữu hạn có thỏa mãn các công đặc tả logic thời gian tuyến tính(Linear Temporal Logic -LTL) hay không LTL là một logic hình thức được sử dụngrộng rãi để biểu diễn các tính chất về thời gian của các hệ thống cả phần cứng cũng nhưphần mềm Để giải quyết bài toán đặt ra, nhiều phương pháp hình thức khác thườngyêu cầu rất nhiều công sức thủ công và thường không phù hợp cho việc kiểm chứngcác hệ thống thật; trong đó đặc biệt là phương pháp kiểm tra mô hình thông thường hay

sử dụng Buchi automat Tuy nhiên Buchi automat lại không được thiết kế cho việckiểm tra các dãy thực thi hữu hạn Chính vì vậy, phương pháp tiếp cận mới ở đây baogồm việc thay đổi thuật toán chuyển đổi từ các công thức LTL sang một automat hữuhạn trạng thái Sau đó dựa vào automata này, hệ thống có thể kết hợp giữa điều khiểnthực thi và thực thi tượng trưng để tự động kiểm chứng các chương trình Java hữu hạntrên tất cả các đường đi của chương trình Hướng tiếp cận này sau đó đã được cài đặtthành một phần mở rộng của hệ thống Java Pathfinder cho việc phân tích và kiểmchứng các chương trình Java

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B iv

Trang 5

ABSTRACT OF THESIS

This thesis represents an approach to combining symbolic execution with programmonitoring for the verification of finite Java programs against Linear Temporal Logic(LTL) specifications LTL has been widely used for expressing temporal properties ofprograms viewed as transition systems Many formal methods require significantmanual effort and not scalable for real sized system; typical model checkingenvironments use Buchi automata which are not designed to deal with finite executiontraces Hence, the approach presented here consists of modifying the standard LTL toBuchi automata conversion technique to generate finite-automata, which are used tocheck finite program traces Besides, the verification can combine with symbolicexecution to allow automatically detect counter-examples in all feasible paths of theprogram The approach has been then implemented in a tool, which is an extension ofthe Java Pathfinder framework for runtime analysis of Java programs

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B v

Trang 6

LỜI CẢM ƠN

Trước tiên, con muốn được gửi lời cảm ơn đến bố mẹ yêu của con Nếu không có

sự nuôi nấng, chăm lo của bố mẹ, con đã không thể có được ngày hôm nay Con sẽkhông bao giờ quên công ơn lớn lao đó của bố mẹ, và sẽ luôn cố gắng phấn đấu sống

và làm việc thật tốt, để có thể là nguồn vui của bố mẹ

Em cũng xin gửi lời cảm ơn sâu sắc đến thầy PGS.TS Huỳnh Quyết Thắng,

thầy đã tận tình giúp đỡ, trực tiếp chỉ bảo, hướng dẫn em trong suốt quá trình làm đồ ántốt nghiệp Trong thời gian làm việc với thầy và được thầy hướng dẫn đồ án, em khôngchỉ tiếp thu thêm nhiều kiến thức bổ ích mà còn học tập được tinh thần làm việc, thái

độ nghiên cứu khoa học nghiêm túc, hiệu quả, đây là những điều rất cần thiết cho

em trong quá trình học tập và công tác sau này

Bên cạnh đó, em cũng xin gửi lời cảm ơn chân thành đến các thầy cô giáo trongtrường đại học Bách Khoa Hà nội nói chung và các thầy cô giáo trong Viện Công nghệThông tin và Truyền thông, bộ môn Công nghệ phần mềm nói riêng đã tận tình giảngdạy, truyền đạt cho em những kiến thức, kinh nghiệm quý báu trong suốt thời gian qua.Ngoài ra, tôi xin được gửi lời cảm ơn sâu sắc đến Dinh Nguyen, EwgenijStarostin, viện Khoa học máy tính, Đại học Berlin, Cộng hòa liên bang Đức; FrancoRaimondi, Đại học Middlesex, Luân Đôn, Anh và nhất là cơ quan quản lý hàng không

vũ trụ Mỹ NASA đã hỗ trợ tôi rất nhiều trong quá trình nghiên cứu, tìm hiểu và pháttriển công cụ

Cuối cùng, anh xin được cám ơn em, người bạn gái mà anh luôn yêu thương.Cám ơn em đã luôn ở bên anh, giúp anh có thêm sức mạnh để vượt qua khó khăn

Hà Nội ngày 15/05/2011

Lê Anh Tùng

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B vi

Trang 7

MỤC LỤC

PHIẾU GIAO NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP ii

TÓM TẮT NỘI DUNG ĐỒ ÁN TỐT NGHIỆP iv

ABSTRACT OF THESIS v

LỜI CẢM ƠN vi

MỤC LỤC 1

DANH MỤC CÁC HÌNH MINH HỌA 3

DANH MỤC CÁC TỪ VIẾT TẮT VÀ THUẬT NGỮ 4

PHẦN MỞ ĐẦU 5

PHẦN 1:ĐẶT VẤN ĐỀ VÀ ĐỊNH HƯỚNG GIẢI PHÁP 7

CHƯƠNG I BÀI TOÁN KIỂM TRA CÁC CHƯƠNG TRÌNH JAVA HỮU HẠN8 1.1 Sơ qua về kiểm tra mô hình trong bối cảnh hiện nay 8

1.2 Bài toán kết hợp thực thi tượng trưng và điều khiển thực thi để kiểm chứng các tính chất LTL trong các chương trình Java hữu hạn 10

1.2.1 Lý do đưa ra bài toán 10

1.2.2 Mô tả bài toán và hướng giải quyết 12

1.3 Tổng kết chương I 13

CHƯƠNG II CÁC KIẾN THỨC NỀN TẢNG 14

2.1 Các tính chất về thời gian 14

2.2 Logic thời gian tuyến tính 15

2.2.1 Ngữ nghĩa chuẩn của logic thời gian tuyến tính 15

2.2.2 Ngữ nghĩa của LTL trong các dãy thực thi hữu hạn 16

2.3 Buchi automat cho các từ vô hạn 17

2.4 Automat cho các từ hữu hạn 18

2.5 Thực thi tượng trưng 18

2.6 Tổng kết chương II 20

CHƯƠNG III BÀI TOÁN KIỂM TRA MÔ HÌNH TRUYỀN THỐNG VÀ CÁC THỰC TRẠNG CỦA NÓ 21

3.1 Định nghĩa bài toán kiểm tra mô hình 21

3.2 Giải quyết bài toán kiểm tra mô hình sau khi quy về vấn đề kiểm tra tính rỗng của một Buchi 22

3.3 Những vấn đề khi áp dụng bài toán kiểm tra mô hình vào các dãy thực thi hữu hạn 25 3.4 Tổng kết chương III 26

PHẦN 2: CÁC KẾT QUẢ ĐÃ ĐẠT ĐƯỢC 27

CHƯƠNG IV KIẾN TRÚC CỦA HỆ THỐNG 28

4.1 Cấu trúc tổng quan của hệ thống được xây dựng 28

4.2 Java PathFinder (JPF) 29

4.2.1 Cấu trúc chính của JPF 29

4.2.2 Choice Generator 31

4.2.3 Property 33

4.2.4 Listener 34

4.3 Symbolic PathFinder 36

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B vii

Trang 8

4.4 Tổng kết chương IV 37

CHƯƠNG V XÂY DỰNG MỘT BỘ CHUYỂN ĐỔI CÁC CÔNG THỨC LTL SANG AUTOMAT HỮU HẠN TRẠNG THÁI 38

5.1 Tạo bộ phân tích cú pháp cho các công thức LTL 38

5.1.1 Các toán tử LTL được hỗ trợ 39

5.1.2 Các mệnh đề nguyên tử được hỗ trợ 39

5.1.3 Ngữ pháp của LTL 41

5.2 Cài đặt thuật toán để chuyển từ các công thức LTL sang automat hữu hạn trạng thái 43 5.3 Tổng kết chương V 48

CHƯƠNG VI KẾT HỢP THỰC THI TƯỢNG TRƯNG VÀ ĐIỀU KHIỂN THỰC THI ĐỂ KIỂM CHỨNG CÁC CHƯƠNG TRÌNH JAVA HỮU HẠN 49

6.1 Cài đặt một listener cho JPF để kiểm chứng các dãy thực thi hữu hạn 49

6.2 Kết hợp giữa thực thi tượng trưng và điều khiển thực thi trong việc kiểm tra các điều kiện chuyển trạng thái 51

6.2.1 Mệnh đề nguyên tử là một lời gọi phương thức 52

6.2.2 Mệnh đề nguyên tử là một biến logic 52

6.2.3 Mệnh đề nguyên tử là một biểu thức logic 52

6.3 Mở rộng lớp PCChoiceGenerator của Symbolic Pathfinder để rẽ nhánh chương trình khi thực thi tượng trưng 54

6.4 Tổng kết chương VI 55

CHƯƠNG VII ỨNG DỤNG CÔNG CỤ LTL VÀO CÁC BÀI TOÁN CỤ THỂ 56

7.1 Bài toán con ếch 56

7.2 Kiểm chứng lỗi Race Condition trong các chương trình đa luồng 58

7.3 Ví dụ kiểm chứng kết hợp với thực thi tượng trưng 60

7.4 Tổng kết chương VII 62

KẾT LUẬN 63

TÀI LIỆU THAM KHẢO 65

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B viii

Trang 9

DANH MỤC CÁC HÌNH MINH HỌA

Hình II-1: Buchi tương đương với công thức o ¬( (p⊃ ◊q) 18

Hình II-2: Cây thực thi tượng trưng với ví dụ tính trị tuyệt đối của hiệu hai số 20

Hình III-1: Thuật toán Nested Depth-First Search 24

Hình IV-1: Sơ đồ tổng quan hệ thống 28

Hình IV-2: Thiết kế chính của JPF 31

Hình IV-3: Trình tự của ChoiceGenerator khi thực thi chỉ thị get_field 33

Hình IV-4: JPF Listeners 34

Hình IV-5: Các loại Listener 36

Hình V-1: Ngữ pháp cho các công thức LTL 41

Hình V-2: Ngữ pháp cho các mệnh đề nguyên tử 42

Hình V-4: Automat sinh ra cho công thức <>(a ∨ b) viết theo cú pháp của PROMELA 48

Hình V-5: Automat được sinh ra với thuật toán bên trên cho công thức <>(a\/ b) 48

Hình VI-1: Thuật toán cho việc điều khiển thực thi 50

Hình VII-1: Bài toán con ếch 57

Hình VII-2: Ví dụ về Race condition 59

Hình VII-3: Kết quả kiểm chứng cho ví dụ Race condition 60

Hình VII-4: Ví dụ về thực thi tượng trưng 61

Hình VII-5: Máy hữu hạn trạng thái theo cú pháp PROMELA 61

Hình VII-6: Kết quả kiểm chứng cho ví dụ về thực thi tượng trưng 62

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B ix

Trang 10

DANH MỤC CÁC TỪ VIẾT TẮT VÀ THUẬT NGỮ ST

T

Từ viết

1 MC Model Checking Kiểm chứng mô hình

2 JPF Java Path-Finder Công cụ MC của NASA

3 SE Symbolic Execution Thực thi tượng trưng

4 SPIN Simple Promela Interpreter Công cụ kiểm chứn

5 LTL Linear Temporal Logic Logic thời gian tuyến tính

6 SPF Symbolic Path-Finder JPF thực thi tượng trưng

7 PC Path Condition Điều kiện rẽ nhánh

8 FA Finite-state Automata Automat trạng thái hữu hạn

9 DFS Depth First Search Tìm kiếm theo chiều sâu

10 JVM Java Vitual Machine Máy ảo Java

11 ANTLR ANother Tool for Language Recognition Bộ phân tích cú pháp

12 SLAM Social Location Annotation Mobile Công cụ MC của Microsoft

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B x

Trang 11

PHẦN MỞ ĐẦU

Tóm tắt các nhiệm vụ đề ra trong đồ án tốt nghiệp

 Nghiên cứu lý thuyết cơ bản về Kiểm tra mô hình và thực thi tượng trưng và cách

áp dụng chúng vào bài toán kiểm tra các chương trình hữu hạn

 Đưa ra những vấn đề còn tồn tại của phương pháp trên và đề xuất hướng tiếp cậnmới để giải quyết những tồn tại đó

 Xây dựng công cụ từ hướng tiếp cận được đề xuất dựa trên hệ thống Java Finder kết hợp với thực thi tượng trưng để giải quyết bài toán

Path-Môi trường thực hiện đồ án tốt nghiệp: Bộ môn Công nghệ phần mềm, Viện

CNTT & Truyền thông – Đại học Bách Khoa Hà Nội

Bố cục đồ án: Bao gồm phần mở đầu, nội dung chính và kết luận

Phần mở đầu: Giới thiệu tóm tắt nội dung, nhiệm vụ đề tài, xác định mục tiêu

o Chương 2: Các kiến thức cơ sở trong kiểm tra mô hình.

o Chương 3: Các vấn đề tồn tại của bài toán kiểm tra mô hình truyền thống

Phần 2: các kết quả đã đạt được

o Chương 4: Kiến trúc hệ thống được xây dựng

o Chương 5: Xây dựng phương pháp, thuật toán chuyển đổi

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xi

Trang 12

o Chương 6: Kết hợp thực thi tượng trưng và điều khiển thực thi để kiểm chứng chương trình Java hữu hạn

o Chương 7: Ứng dụng công cụ LTL vào các bài toán cụ thể

Kết luận: Đánh giá các kết quả nghiên cứu đã đạt được, từ đó đưa ra định

hướng phát triển trong tương lai

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xii

Trang 13

PHẦN 1:ĐẶT VẤN ĐỀ VÀ ĐỊNH HƯỚNG GIẢI PHÁP

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xiii

Trang 14

CHƯƠNG I BÀI TOÁN KIỂM TRA CÁC CHƯƠNG TRÌNH JAVA HỮU HẠN

Chương này được thiết kế nhằm cung cấp những nội dung sau:

 Giới thiệu một cái nhìn tổng quan về kiểm tra mô hình

 Đặt ra bài toán cần giải quyết

 Những khó khăn của các hệ thống hiện tại

 Đưa ra giải pháp để giải quyết bài toán cũng như những khó khăn đã đề ra

I.1 Sơ qua về kiểm tra mô hình trong bối cảnh hiện nay

Kiểm chứng phần mềm là một trong những lĩnh vực nghiên cứu rất cơ bản của kỹnghệ phần mềm Mục đích chung chính là kiểm chứng xem khi nào thì một chươngtrình phần mềm được cho là chính xác, hay nói cách khác là khi nào thì cài đặt của mộtchương trình phù hợp với đặc tả của nó Bài toán kiểm tra mô hình (Model Checking)thường tập trung vào việc kiểm chứng các chương trình phản ứng hữu hạn trạng thái

Để chỉ ra các tính chất của một chương trình như vậy, chúng ta sử dụng logic thời giantuyến tính (Linear Temporal Logic - LTL)

Vậy thì thế nào là một chương trình phản ứng Mô hình thực thi của một chươngtrình thường bao gồm các bước sau: nó nhận vào một tập các giá trị đầu vào, thực hiệncác tính toán cần thiết, rồi đưa ra một giá trị đầu ra nào đó Như vậy, một chương trìnhthông thường có thể được xem xét giống như một hàm trừu tượng từ miền đầu vào đếnmiền đầu ra trong đó, quá trình thực thi là quá trình chuyển đổi từ các trạng thái banđầu tới các trạng thái kết thúc

Ngược lại, một chương trình phản ứng không hướng tới việc kết thúc Giống như têngọi của nó, các hệ thống như vậy “phản ứng” lại môi trường của chúng một cách liêntục, đáp lại một cách tương ứng với các giá trị đầu vào Một số ví dụ của các hệ thốngnhư vậy bao gồm hệ điều hành, bộ lập lịch… (thông thường, các hệ thống phản ứng làcác chương trình phân tán phức tạp, nên việc thực thi song song cần phải được tínhđến)

Để chỉ ra các tính chất của một hệ thống phản ứng, chúng ta cần một kỹ thuật để nói

về cách mà hệ thống đó thực thi, tiến triển theo những dãy tính toán vô hạn có thể xảy

ra Các logic về thời gian [1] đã trở thành một phương pháp hình thức được sử dụng rất

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xiv

Trang 15

rộng rãi cho mục đích này Đã có rất nhiều loại logic thời gian khác nhau được địnhnghĩa trong khoảng hai thập kỷ qua – chúng ta sẽ chỉ tập trung vào một loại đó là logicthời gian tuyến tính.

Có một mối quan hệ mật thiết giữa mô hình của các công thức LTL và ngôn ngữ củacác từ vô hạn – mô hình của một công thức LTL tạo nên một ngôn ngữ chính quy wtrên một bộ chữ cái tương ứng Và kết quả là vấn đề kiểm tra tính thỏa mãn các đặc tảđược quy về kiểm tra tính rỗng của một ngôn ngữ chính quy w Mối quan hệ này lầnđầu tiên được chỉ ra trong [2]

Sau đó, mối quan hệ này giữa LTL và các ngôn ngữ chính quy w được mở rộng rathành vấn đề kiểm tra mô hình (model checking) Không giống như vấn đề kiểm tratính thỏa mãn thông thường chỉ yêu cầu kiểm tra khi nào thì một công thức cho trước

có một mô hình, vấn đề kiểm tra mô hình yêu cầu kiểm chứng xem khi nào thì mộtchương trình hữu hạn trạng thái P thỏa mãn một đặc tả α Việc đó bao gồm kiểm trarằng tất cả các khả năng thực thi của P tạo nên mô hình α Bởi vì các chương trình phảnứng hữu hạn trạng thái có thể biểu diễn tương tự như một automat Buchi nên kiểm tra

mô hình cũng được quy về một vấn đề trong lý thuyết về automat Là đủ để chỉ ra rằngkhông có khả năng thực thi nào của P là mô hình của ¬α cũng giống như việc kiểm trarằng giao giữa ngôn ngữ được đoán nhận bởi P và ngôn ngữ được định nghĩa bởi ¬α làrỗng

Trong vài năm gần đây, các kỹ thuật đưa ra tại [3] đã dịch chuyển từ lý thuyết sangthực tiễn Trong bối cảnh này, có một vài phát hiện mới nhấn mạnh vào việc giảm độphức tạp tính toán của phương pháp sử dụng lý thuyết automat Một trong số nhữnghướng tiếp cận thành công đó là xây dựng automat tương ứng với một công thức cùnglúc với việc kiểm tra (on-the-fly) để cho thay vì phải xây dựng toàn bộ automat trướckhi kiểm tra thì nay chỉ một phần cần thiết cho kiểm tra mô hình được xây dựng màthôi Nói cách khác phương pháp này là kiểm tra tới đâu thì xây dựng automat tươngứng tới đó Bước đầu tiên trong hướng tiếp cận này là thuật toán được đề xuất tại [4]

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xv

Trang 16

I.2 Bài toán kết hợp thực thi tượng trưng và điều khiển thực thi để kiểm chứng các tính chất LTL trong các chương trình Java hữu hạn

I.2.1 Lý do đưa ra bài toán

a) Một số tồn tại khi áp dụng phương pháp kiểm tra mô hình vào việc kiểm chứng các chương trình hữu hạn

Trong vòng một thập kỷ trở lại đây, rất nhiều công trình nghiên cứu đã tập trung vàovấn đề kiểm tra mô hình (model checking) và coi đây là một kỹ thuật đầy hứa hẹntrong kiểm chứng phần mềm Một số ví dụ của các công trình như vậy bao gồm Blast[21] giành cho ngôn ngữ C và Bandera[22] giành cho ngôn ngữ Java Các công trìnhsau này sử dụng những công cụ kiểm tra mô hình có sẵn để thực thi việc kiểm chứng ví

dụ như SPIN [23] Một ví dụ khác là bộ công cụ SLAM [24], bộ công cụ này đã kếthợp các kỹ thuật từ phân tích chương trình, kiểm tra mô hình và suy diễn tự động đểkiểm chứng nếu như một chương trình thỏa mãn một tính chất an toàn nào đó Ngoài racòn có một số công cụ khác như jStar [25] kiểm chứng các giao thức liên lạc giữa một

số các đối tượng trong một hệ thống

Một vấn đề quan trọng trong việc kiểm chứng tự động phần mềm sử dụng các công

cụ kiểm tra mô hình đó là quá trình sinh ra mô hình từ cài đặt thực sự của phần mềm:trong một vài trường hợp, quá trình này yêu cầu sự can thiệp thủ công và không có gìđảm bảo sự tương đương giữa cài đặt thực sự và mô hình được sinh ra Việc tạo ra môhình cho việc kiểm chứng từ mã nguồn yêu cầu phải có hiểu biết chuyên sâu về cáccông cụ cũng như các ngôn ngữ mô hình hóa, và như thế nó mở ra một mức khó hơntrong quá trình kiểm chứng

Ở trong các công cụ kiểm tra mô hình truyền thống, do việc kiểm tra tất cả các khảnăng thực thi của một mô hình thỏa mãn một đặc tả tốn quá nhiều công sức và thườngkhông khả thi, nên bài toán này thường được chuyển về việc chứng minh phản chứngrằng nếu mô hình đó thỏa mãn bất kỳ một dãy thực thi vô hạn nào của phủ định củađặc tả thì nó đã vi phạm đặc tả bạn đầu Quá trình này trước tiên yêu cầu việc chuyểnphủ định của đặc tả LTL thành một Buchi automat mà đoán nhận tất cả các từ vô hạn

mà vi phạm đặc tả LTL ban đầu (Buchi automat là một automat đặc biệt trên các từ vôhạn) Sau đó ta đi tính tích của Buchi automat và của chương trình cần kiểm tra (đượcxem như một automat đặc biệt với tất cả các trạng thái của chương trình đều là trạngthái chấp nhận) Tích này sau đó được kiểm tra nếu như có tồn tại một chu trình chứa ítnhất một trạng thái chấp nhận thì tức là nó bị lỗi và việc kiểm tra mô hình dừng lại.Ngược lại, nếu như tích này mà rỗng thì tức là chương trình đã thỏa mãn công thức ban

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xvi

Trang 17

đầu Tuy nhiên, dễ thấy rằng automat tích này cần phải được lưu trữ cho việc kiểm traxem một trạng thái đã được thăm trước đó hay chưa Không gian trạng thái này thườngrất lớn và dễ gây ra hiện tượng bùng nổ không gian trạng thái [6].

Ngoài ra, Buchi automata chỉ được thiết kế để tính toán trên các dãy thực thi vô hạnnên nó không thể được áp dụng cho các chương trình hữu hạn Một số hệ thống kiểmtra mô hình hiện tại giải quyết việc này bằng cách thêm một vòng lặp vô hạn vào cáctrạng thái cuối cùng của các dãy thực thi hữu hạn Tuy nhiên cách giải quyết này làkhông triệt để vì nó có thể làm thay đổi ngữ nghĩa của chương trình hữu hạn (giả sửnhư nó là một phần của hệ thống lớn hơn và bắt buộc phải kết thúc) Ngoài ra, việcthêm vòng lặp vô hạn vẫn không giải quyết được vấn đề là phải lưu toàn bộ không giantrạng thái để tìm ra các chu trình

Tóm lại, việc áp dụng kiểm tra mô hình để giải quyết bài toán kiểm chứng cácchương trình hữu hạn gặp phải những khó khăn sau:

 Thường yêu cầu nhiều kiến thức chuyên gia để có thể sử dụng

 Thường không thể kiểm chứng chương trình một cách trực tiếp từ mã nguồn

mà kiểm chứng chương trình ở một mức trừu tượng hóa nào đó

 Khả năng xảy ra bùng nổ không gian trạng thái là rất lớn

 Buchi automat sử dụng trong kiểm tra mô hình không phù hợp với việc kiểmtra các chương trình hữu hạn

b) Tính ưu việt của kỹ thuật thực thi tượng trưng trong các bài toán kiểm thử

Gần đây, thực thi tượng trưng (symbolic execution) nổi lên như một kỹ thuật kiểmthử rất mới mẻ và thực sự hữu ích Nó có thể hiểu là một kỹ thuật phân tích chươngtrình bằng cách tính toán trên các giá trị tượng trưng thay vì các giá trị cụ thể được gáncho các biến trong chương trình Dựa trên kỹ thuật này, về mặt lý thuyết mà nói thìchúng ta có thể đi tất cả các nhánh của một chương trình hữu hạn Như vậy, nó có thểphát hiện ra nhiều lỗi mà các kỹ thuật kiểm thử thông thường không phát hiện đượchoặc các ca kiểm thử không được chuẩn bị kỹ lưỡng

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xvi

i

Trang 18

I.2.2 Mô tả bài toán và hướng giải quyết

Bài toán được đặt ra ở đây là kiểm tra trực tiếp các chương trình hữu hạn được viếttrên ngôn ngữ Java có tuân thủ theo một tính chất thời gian nào đó hay không Trong

đó, các tính chất này thường được viết dưới dạng các công thức trong logic thời giantuyến tính LTL - là một ngôn ngữ hình thức được sử dụng rất rộng rãi để miêu tả cáctính chất về thời gian trong nhiều công cụ kiểm tra mô hình ví dụ như SPIN[8]

Trước những vấn đề trên của các hệ thống kiểm tra mô hình đượng đại, ta thấy nókhông phù hợp để kiểm tra các chương trình hữu hạn hoặc đòi hỏi quá nhiều công sứchoặc làm thay đổi ngữ nghĩa của chương trình Chính vì vậy nên việc xây dựng mộtphương pháp hình thức có thể áp dụng cho nhiều ứng dụng thực tế và ít đòi hỏi côngsức thủ công hơn là vô cùng cần thiết Hướng nghiên cứu này gần đây thu hút được rấtnhiều sự chú ý [5, 7] Một trong số những cách tiếp cận mới này được biết đến với têngọi điều khiển thực thi (program monitoring) trong đó ý tưởng đằng sau phương phápnày chính là điều khiển quá trình thực thi của một chương trình nào đó theo đúng nhưđặc tả hình thức của nó Các đặc tả này thường được viết bằng các logic hình thức.Bằng cách này, việc kiểm chứng có thể áp dụng cho nhiều hệ thống hơn vì ở một thờiđiểm thì chỉ có một đường thực thi được kiểm tra, ngoài ra nó còn hữu ích ở chỗ chúng

ta có thể biểu diễn được nhiều tính chất của chương trình hơn so với các môi trườngkiểm thử truyền thống khác

Còn để giải quyết vấn đề Buchi automata không phù hợp cho việc kiểm chứng cácchương trình hữu hạn, ta thay nó bằng một automat hữu hạn trạng thái khác mà có thểdùng kết hợp với kỹ thuật điều khiển thực thi nói trên Định nghĩa chi tiết, và thuật toánxây dựng automat này sẽ được đề cập kỹ hơn ở những phần sau

Vì vậy, đồ án này cố gắng đưa ra một cách tiếp cận hiệu quả hơn bằng việc kết hợpgiữa thực thi tượng trưng và điều khiển thực thi như đã trình bày ở trên để kiểm tra cácchương trình Java hữu hạn so với các đặc tả của nó được biểu diễn bởi ngôn ngữ LTL.Giải pháp được đưa ra bao gồm những bước sau: (1) định nghĩa một ngữ pháp chínhxác cho các công thức LTL; (2) cài đặt một thuật toán [9] để chuyển một công thứcLTL sang một automat hữu hạn trạng thái (không dùng Buchi automat) để điều khiểnthực thi các chương trình hữu hạn so với các công thức LTL ban đầu Và (3) xây dựngmột công cụ dựa trên hệ thống Java Pathfinder (JPF)1, một máy ảo Java cho phép thựcthi đồng thời với việc kiểm thử chương trình Và cuối cùng là (4) kết hợp công cụ trênvới thực thi tượng trưng để kiểm tra đầy đủ các chương trình Java hữu hạn

1 http://babelfish.arc.nasa.gov/trac/jpf

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xvi

ii

Trang 19

I.3 Tổng kết chương I

Chương này được mở đầu với việc giới thiệu sơ qua về bối cảnh của bài toán kiểmtra mô hình hiện nay Trong đó, nó đề cập tới sự liên quan giữa tính chất về thời gian

và các công thức LTL cũng như Buchi automata được áp dụng trong bài toán kiểm tra

mô hình như thế nào Tiếp sau đó, chương này nêu ra bài toán cần phải giải quyết trongphạm vi đồ án này đó là: kiểm tra các chương trình Java hữu hạn bằng cách kết hợpgiữa thực thi tượng trưng và điều khiển thực thi Để giải quyết bài toán này, trước tiênchúng ta được giới thiệu về những hạn chế của các hệ thống kiểm tra mô hình hiện tạivào việc giải quyết bài toán đã đặt ra Sau đó, chương này kết thúc với việc đưa ra mộtgiải pháp cụ thể và một hệ thống cụ thể - JPF- để giải quyết bài toán này và vượt quanhững giới hạn của các hệ thống hiện tại như thế nào

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xix

Trang 20

CHƯƠNG II CÁC KIẾN THỨC NỀN TẢNG

Trước khi đi vào nội dung cụ thể của đồ án, chương này sẽ chuẩn bị cho chúng

ta những kiến thức nền tảng cần thiết có liên quan tới công trình này Chúng bao gồm những nội dung chính sau:

Các tính chất về thời gian (Temporal Properties)

Logic thời gian tuyến tính (Linear Temporal Logic)

Buchi automat cho các từ vô hạn

Automat cho các từ hữu hạn

Thực thi tượng trưng (Symbolic execution)

II.1 Các tính chất về thời gian

Để biểu diễn các tính chất thời gian, chúng ta sử dụng logic thời gian tuyến tínhLTL Một chương trình trong khi thực thi sẽ định nghĩa một dãy các trạng thái; vì thếmột dãy thực thi có thể được xem xét như là một thể hiện của LTL trong đó một tậpcác mệnh đề nguyên tử mà đúng ở một trạng thái cụ thể của chương trình được gán chomột điểm thời gian nào đó

Có hai loại tính chất cơ bản đó là tính an toàn (safety) tức là sẽ không bao giờ cóđiều gì đó xấu xảy ra trong tương lai và tính cuối cùng sẽ tốt (liveness) tức là rồi tớimột thời điểm nào đó một điều mong muốn sẽ xay ra Mọi tính chất thời gian khác cóthể được xây dựng từ hai tính chất cơ bản này Mọi công thức LTL có thể bao gồm cảhai phần safety hoặc liveness hoặc một trong hai

Ta cùng xem xét ví dụ một công thức LTL như sau: [](p ◊q) Nó biểu diễn tính⊃chất: “mọi trạng thái mà trong đó mệnh đề p đúng đều trùng với hoặc theo sau bởi mộttrạng thái mà trong đó mệnh đề q đúng” Tất cả các dãy vô hạn trạng thái mà phù hợpvới yêu cầu này sẽ thỏa mãn công thức này

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xx

Trang 21

II.2 Logic thời gian tuyến tính

II.2.1 Ngữ nghĩa chuẩn của logic thời gian tuyến tính

Logic thời gian tuyến tính được sử dụng để biểu diễn các tính chất của một hệ thốngcho kiểm tra mô hình Cho trước một tập các mệnh đề nguyên tử (atomic proposition)

P, một công thức LTL được định nghĩa một cách đệ quy bằng cách sử dụng các toán tửlogic chuẩn và các toán tử thời gian X (next) và U (strong until) như sau:

 Mỗi thành phần của P là một công thức

 Nếu ϕ và ψ là các công thức thì ¬ϕ, ϕ ψ, ϕ ψ, Xϕ, ϕ U ψ cũng là các công∨ ∧thức

Một thể hiện cho một công thức LTL là một từ vô hạn w = x0x1x2… trên 2P Nóicách khác, một thể hiện tương ứng với mỗi thời điểm của thời gian, tại lúc đó có mộttập các mệnh đề nguyên tử đúng Chúng ta viết w1 là phần tử đầu tiên của từ w bắt đầutại x1 Như vậy, ngữ nghĩa của LTL được định nghĩa một cách đệ quy như sau:

 w |= p khi và chỉ khi p ϵ x0, với p ϵ P

 w |= ¬ ϕ khi và chỉ khi w |= ϕ không đúng

 w |= ϕ ψ khi và chỉ khi ( w |= ϕ ) hoặc ( w |= ψ ) ∨

ϕ

Tuy nhiên, trong khuôn khổ của đồ án này thì chúng ta chỉ quan tâm tới các tính chấtnext-free hay còn gọi là LTL-X của LTL Ở đây next-free có nghĩa là chúng ta khôngchấp nhận toán tử X (next) trong công thức LTL Điều này rất phổ biến trong kiểm tra

mô hình, bởi vì LTL-X được đảm bảo cho việc không bị nhạy cảm với việc lặp cáctrạng thái [11] Tính chất này rất quan trọng bởi vì nó tránh cho việc có một trạng thái

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xxi

Trang 22

tiếp theo tuyệt đối Thông thường ta rất khó xác định thế nào thì được coi là trạng tháitiếp theo như giả sử trong Java, ta sẽ rất khó nói là sau bao nhiêu chỉ thị thì chươngtrình sẽ chuyển sang trạng thái kế tiếp Như vậy, toán tử X sẽ bị mất đi, bởi vì người sửdụng thường giả sử có nhiều mức độ trừu tượng hóa của một chương trình nên ở cấp độnày có thể một trạng thái được coi là kế tiếp nhưng ở mức độ khác lại là không Thêmvào đó, nó không phức tạp bởi vì ý nghĩa thực sự của một công thức có toán tử X đó là

ở trạng thái cuối cùng của dãy thực thi

Trong toàn bộ phần còn lại của đồ án này, các tính chất LTL-X sẽ được coi như nóitới mỗi khi ta đề cập tới LTL Theo cách này, các tính chất LTL-X được định nghĩakhông bao gồm toán tử X theo cách sau:

Các mệnh đề nguyên tử và các toán tử logic được giữ nguyên so với định nghĩa ởtrên Tuy nhiên với các toán tử thời gian, chúng ta bỏ đi toán tử X (next) và thêm vàotoán tử V được định nghĩa như sau: φVψ = !(!φU !ψ)

II.2.2 Ngữ nghĩa của LTL trong các dãy thực thi hữu hạn

Một dãy thực thi đi qua một dãy các trạng thái của hệ thống; một dãy thực thi vô hạn

do đó có thể được coi như một thể hiện của LTL trong đó ta gán cho mỗi biến trạngthái một tập các mệnh đề nguyên tử mà đúng ở một thời điểm nhất định và một trạngthái nhất định của chương trình Kiểm tra mô hình [11] tìm ra các chu trình có chứa cáctrạng thái chấp nhận trên đồ thị của một hệ thống hữu hạn trạng thái thông qua các dãythực thi vô hạn Điều này yêu cầu lưu trữ toàn bộ không gian trạng thái của chươngtrình, kể cả gần đây chúng ta có kỹ thuật để kiểm tra cùng với việc thực thi chươngtrình (on-the-fly) cũng như xây dựng automat tích ngay khi chạy Còn điều khiển thựcthi thì không lưu toàn bộ không gian trạng thái của chương trình Thay vào đó, nó chỉlắng nghe và phản ứng lại các dãy thực thi hữu hạn, trong đó chúng ta cũng cần phảidẫn xuất các công thức LTL bằng cách gán các mệnh đề nguyên tử cho các biến trạngthái ở những thời điểm cụ thể Do có sự khác biệt này giữa các dãy thực thi hữu hạn và

vô hạn, nên ta cần sửa đổi ngữ nghĩa của các toán tử để cho phù hợp với sự khác biệtnày

Như đã thảo luận ở phần trên thì mọi công thức LTL có thể bao gồm cả phần safetyhoặc một phần liveness hoặc thậm chí cả hai Từng phần safety/liveness yêu cầu rằngmột việc xấu nào đó sẽ không bao giờ xảy ra hoặc một việc tốt nào đó cuối cùng sẽ xảy

ra trong dãy thực thi Chúng ta thay đổi ngữ nghĩa của phần safety để nó có nghĩa làtrong khoảng thực thi mà chúng ta nhận được thì không có điều gì xấu xảy ra Nếukhông thì chúng chưa được thỏa mãn tính chất về safety Tương tự như vậy với các

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xxi

i

Trang 23

tính chất liveness, chúng được yêu cầu phải thỏa mãn trong khoảng thời gian thực thi

đã qua Liên quan đến những thay đổi về ngữ nghĩa này, chúng ta định nghĩa lại ngữnghĩa của các toán tử thời gian như sau:

Coi w=x0x1…xn là một thể hiện hữu hạn của một công thức LTL trên 2AP thì các toán

tử thời gian sẽ được định nghĩa như sau:

W |= φUψ khi và chỉ khi tồn tại 0 ≤ i ≤ n để mà wI |= ψ

Và với mọi 0 ≤ j < I, wj |= φ

II.3 Buchi automat cho các từ vô hạn

Automat trên các đầu vào vô hạn được giới thiệu bởi Buchi trong [10] Một automatBuchi là một automat hữu hạn trạng thái không đơn định và lấy các từ vô hạn làm đầuvào Một từ được đoán nhận bởi Buchi nếu như trong khi đọc từ đó, Buchi đi qua mộtvài trạng thái đặc biệt nào đó thường xuyên và vô hạn

Một cách hình thức, Buchi được định nghĩa như một tập A = (Σ,S,∆,s0 ,F), trong đó

Chúng ta định nghĩa một đường chạy σ của A trên một từ w = a1a2… như là một dãy

σ = s0, s1, …, đó là một hàm từ w sang S, ở đây (si-1 , ai, s i) ∆, với mọi i≥1 Một∈đường chạy σ = s0 ,s1 ,… được gọi là được chấp nhận nếu như có một vài trạng tháitrong F được lặp lại thường xuyên và vô hạn hay tức là có một vài trạng thái x F mà∈

ở đó có nhiều vô hạn i ω để cho s∈ i = x Từ w được đoán nhận bởi A nếu như có mộtđường chạy được chấp nhận của A trên từ w

Việc xây dựng Buchi Af từ công thức f trong trường hợp xấu nhất thì độ phức tạptính toán là hàm mũ của độ dài của công thức [12, 13] Tuy nhiên trên thực tế, hầu hếtcác công thức thường rất ngắn và trường hợp xấu nhất rất hiếm khi xảy ra

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xxi

ii

Trang 24

Hình II-1: Buchi tương đương với công thức o ¬( (p⊃ ◊q)

Hình 1 chỉ ra một Buchi mà đoán nhận tất cả các từ vô hạn thỏa mãn công thức ¬fvới f ≡ (p ◊q), nghĩa là tất cả các dãy trạng thái trong đó bao gồm một trạng thái p⊃đúng và từ đó q không bao giờ đúng trong suốt quãng còn lại của dãy

II.4 Automat cho các từ hữu hạn

Trong bài toán kiểm tra mô hình điển hình, chúng ta dịch phủ định của đặc tả LTLsang một Buchi automat sau đó tìm ra một chu trình có chứa ít nhất một trạng thái chấpnhận trong tích của chương trình với Buchi đó Tuy nhiên, Buchi là một automat hữuhạn trạng thái nhưng thực thi trên các từ vô hạn, nên chúng ta không thể áp dụng nó đểkiểm chứng các dãy thực thi hữu hạn được Một nghiên cứu về vấn đề này đã đượcthực hiện và giới thiệu trong [9] Nó cho rằng chúng ta cần phải tạo ra một bộ chuyểnđổi mới để chuyển một công thức LTL sang một automat hữu hạn trạng thái mà đượcdùng để điều khiển các dãy thực thi hữu hạn Trong phần này, chúng ta sẽ định nghĩa

về kiểu automat hữu hạn đó và thuật toán chuyển đổi cụ thể sẽ được bàn đến ở nhữngphần sau trong đồ án này

Một automat hữu hạn trạng thái (FA) được định nghĩa như là một tổ hợp (S, A, ∆, s0,F), trong đó S là một tập hữu hạn các trạng thái, A là một tập hữu hạn các nhãn hay cònđược gọi là bộ chữ cái cho automat, ∆ ⊆S x A x là một hàm chuyển, s0 ∊ S là trạngthái ban đầu và F ⊆S là tập các trạng thái chấp nhận

Một dãy thực thi của FA là hữu hạn σ = s0 a0 s1 … an-1 sn, để mà (si ai si+1) ∊ ∆ vớimỗi 0 ≤ i ≤ n Một dãy thực thi σ của FA được coi là được chấp nhận nếu sn ∊ F Vàcuối cùng, FA chấp nhận một từ hữu hạn w = x0…xn-1 trên A, nếu như nó tồn tại mộtdãy thực thi được chấp nhận σ=s0x0s1…xn-1 sn của FA

II.5 Thực thi tượng trưng

Thực thi tượng trưng là một dạng phân tích chương trình, sử dụng các giá trị tượngtrưng thay vì dữ liệu thật làm đầu vào (input) và các biểu thức tượng trưng để biểu diễngiá trị của các biến có trong chương trình Như thế, đầu ra của chương trình có thểđược biểu diễn như một hàm của các giá trị tượng trưng đầu vào Ở một thời điểm bất

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xxi

v

Trang 25

kỳ, trạng thái của chương trình sẽ được đặc trưng bởi ba thứ đó là giá trị của các biến(biểu thức của các giá trị tượng trưng), biểu thức điều kiện đường đi (path conditionhay PC) và con trỏ chương trình (program counter).

Path condition (PC) là một công thức logic giữa các giá trị đầu vào tượng trưng củachương trình Nó chính là ràng buộc mà các giá trị tượng trưng đó phải thỏa mãn để cóthể thực thi theo một đường nào đó Để phân biệt rõ hơn sự khác nhau giữa thực thitượng trưng (symbolic execution) và thực thi cụ thể (concrete execution) ta xem xétmột ví dụ về thực thi một hàm tính giá trị tuyệt đối của hiệu hai số sau:

Giả sử giá trị tham số đầu vào là x = 3 và y = 2 Thực thi cụ thể sẽ chỉ đi theo mộtnhánh của chương trình ứng với điều kiện if là đúng trong dòng [1] Kết quả là 1 vàkhông vi phạm điều kiện assert của chương trình

Ngược lại, thực thi tượng trưng không bắt đầu bằng giá trị thật nào cả mà bằng hai

giá trị tượng trưng là x = Sym x , y = Sym y và PC được khởi tạo là true Quá trình thực thi

tiếp theo được biểu diễn thành cây như trong hình 2 Ở mỗi điểm phân nhánh , PCđược cập nhật thêm những ràng buộc mới trên những giá trị tượng trưng để có thể đitheo một trong các nhánh đó Ví dụ như khi thực thi đến dòng số [1] thì sẽ có hai khả

năng tiếp theo của biểu thức điều kiện if, khi đó PC sẽ được cập nhật theo Nếu như PC cho kết quả là false thì có nghĩa là nhánh đó không thể đi tiếp được nữa và thực thi

tượng trưng sẽ không tiếp tục theo nhánh đó nữa

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xxv

Trang 26

Hình II-2: Cây thực thi tượng trưng với ví dụ tính trị tuyệt đối của hiệu hai số

Ở ví dụ trên, thực thi tượng trưng đã thực thi theo bốn đường và nó đưa ra mộtđường có giá trị không thỏa mãn điều kiện assert trong chương trình

ở các chương trình vô hạn sẽ được thay đổi sao cho phù hợp sang hữu hạn rồi thì đànhchịu

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xxv

i

Trang 27

CHƯƠNG III BÀI TOÁN KIỂM TRA MÔ HÌNH TRUYỀN THỐNG

 Định nghĩa vấn đề kiểm chứng mô hình

 Tìm hiểu một cách giải quyết kiểm chứng mô hình bằng cách quy nó vềvấn đề kiểm tra tính rỗng của một Buchi

 Những vấn đề mà kiểm chứng mô hình gặp phải khi áp dụng cho các dãythực thi hữu hạn

III.1 Định nghĩa bài toán kiểm tra mô hình

Vấn đề kiểm chứng được xem xét như sau Cho trước một chương trình song song P

và một công thức logic thời gian tuyến tính f, kiểm tra rằng tất cả các tính toán vô hạn của P thỏa mãn f Điều này được biết tới như là vấn đề kiểm tra mô hình (model

checking)

Để giải quyết vấn đề này, giả thiết duy nhất chúng ta cần làm đó là với mỗi công

thức f trong logic thời gian tuyến tính, có thể xây dựng một Buchi A f mà đoán nhận

chính xác các từ vô hạn thỏa mãn công thức thời gian f [10, 2].

Thủ tục kiểm chứng được diễn ra như sau [2, 3] Đầu tiên chúng ta xây dựng một

automat hữu hạn trên các từ vô hạn cho công thức phủ định của công thức ban đầu f.

Automat thu được A¬f đoán nhận tất cả các dãy trạng thái mà vi phạm f (Đương nhiên,

nếu A¬f được cung cấp bởi người sử dụng thì thủ tục phủ định có thể được bỏ qua) Sau

đó chúng ta tính toán automat tích AG = AP x A¬f hay chính là Buchi AG = (Σ,S,∆,s0 ,F)với

 Σ = Σ¬f,

 S = SP ×S¬f, s0 = (s0P ,s0¬f),

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xxv

ii

Trang 28

 ( (s,w) ,a, (u,v) ) ∆ khi (s, t ,u) ∆∈ ∈ P và (w,a,v) ∆∈ ¬f (tức là mỗi hàm chuyểntrạng thái t của AP được đồng bộ với một hàm chuyển trạng thái a của A¬f),

 F = SP ×F¬f

Automat tích này đoán nhận tất cả các tính toán vô hạn của P mà được đoán nhậnbởi A¬f, nói cách khác nó đoán nhận mọi tính toán mà vi phạm f Thủ tục kiểm chứng

kết thúc bằng cách kiểm tra nếu như Buchi AG đoán nhận bất kỳ dãy nào Nếu như AG

là rỗng thì chúng ta đã chứng minh được rằng tất cả các tính toán vô hạn của P được

thỏa mãn bởi công thức f Như vậy bài toán kiểm tra mô hình được quy về bài toán

kiểm tra tính rỗng của Buchi

Cần chú ý rằng chúng ta kiểm chứng các tính chất của các tính toán vô hạn của P.Các tính chất đó được định nghĩa bằng cách coi AP như là một kiểu giới hạn của Buchitrong đó tập hợp các trạng thái chấp nhận F là toàn bộ các trạng thái trong AP Vì vậy,thủ tục kiểm chứng này không xem xét các tính toán hữu hạn của chương trình P Tuynhiên, nếu như được yêu cầu, chúng ta luôn có thể chuyển các tính toán hữu hạn sang

vô hạn bằng cách cho lặp đi lặp lại mãi mãi trạng thái kết thúc của nó

III.2 Giải quyết bài toán kiểm tra mô hình sau khi quy về vấn đề kiểm tra tính rỗng của một Buchi

Để kiểm tra nếu một Buchi AG là không rỗng, ta phải kiểm tra nếu có tồn tại mộtvòng tròn trong AG (ở đây Buchi được xem xét giống như một đồ thị) mà trong vòngtròn đó có chứa một trạng thái chấp nhận và nó có thể đi tới được tính từ trạng thái banđầu s0 Cần chú ý rằng ta không cần xem xét tất cả các vòng tròn trong AG; là đủ khi tachỉ cần kiểm tra rằng nếu như AG chứa ít nhất một thành phần liên thông mạnh mà đitới được từ trạng thái ban đầu và bao gồm một trạng thái chấp nhận từ tập F

Việc tìm kiếm thành phần liên thông mạnh trong AG có thể được thực hiện với thuậttoán Tarjan [17, 18] Thuật toán này dựa trên thuật toán tìm kiếm theo độ sâu trên đồthị AG cộng với việc tính toán thêm ở mỗi trạng thái của AG khi gặp trong khi tìm kiếm.Thuật toán này thăm tất cả n trạng thái của AG không quá một lần Độ phức tạp về thờigian vì thế chỉ là tuyến tính theo kích thước của AG Tuy nhiên, nó yêu cầu phải lưu tất

cả các trạng thái có thể đi tới trong một bộ nhớ truy cập ngẫu nhiên Ngoài ra, với mỗi

trạng thái, giá trị của một biến dfnumber dùng để đánh dấu trạng thái đi tới được theo

trình tự chúng được thăm cũng phải được lưu Thuật toán Tarjan cũng yêu cầu việc sửdụng thêm một ngăn xếp phụ

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xxv

iii

Trang 29

Vì thuật toán này yêu cầu truy cập các thông tin trạng thái, ví dụ như giá trị của

dfnumber, để chắc chắn về tính đúng đắn của nó, nên nó không phù hợp với các kỹ

thuật mà đảm bảo sự toàn vẹn của các thông tin này Ví dụ như kỹ thuật băm trạng tháitheo bit (bit-state hashing) quy việc biểu diễn các trạng thái và các thông tin liên quantới nó thành một hoặc hai bit bộ nhớ [19] Thậm chí kỹ thuật bộ nhớ tạm còn xóa đinhững trạng thái đã thăm hoàn toàn khỏi bộ nhớ [20] Vì vậy, với một không gian bộnhớ cho trước nào đó, kích thước của vấn đề mà thuật toán Tarjan có thể phân tích làkhông thể tránh khỏi nhỏ hơn kích thước vấn đề mà hai thuật toán kể trên có thể phântích

Chính ràng buộc này đã yêu cầu phải phát triển một thuật toán để kiểm tra tính rỗngcủa Buchi [26] mà phù hợp với phương pháp băm theo bit và quy tắc bộ nhớ tạm.Trong [26], việc kiểm tra tính rỗng của một Buchi được quy về một tập các vấn đề xácđịnh khi nào có thể tới được một trạng thái nào đó Điều này đã được chứng minh bởimột thực tế rằng một Buchi là không rỗng khi và chỉ khi có một vài trạng thái x F mà∈vừa có thể đi tới được từ trạng thái ban đầu vừa có thể đi tới từ chính nó

Thuật toán được đề xuất trong [26] chính là thuật toán tìm kiếm theo chiều sâu lồngnhau (nested depth first search) bao gồm hai vòng tìm kiếm theo chiều sâu liên tiếpnhau Mục đích của vòng DFS thứ nhất là để xác định các trạng thái chấp nhận của F

mà có thể đi tới từ trạng thái ban đầu s0 Nó sắp xếp chúng theo kiểu hậu thứ tự(postorder) thành x1, … , xk, trong đó x1 là trạng thái chấp nhận đầu tiên được quay luikhi tìm kiếm trên không gian trạng thái, và xk là trạng thái cuối cùng như vậy Cáctrạng thái chấp nhận này sau đó được lưu vào một hàng đợi Mục đích của vòng DFSthứ hai là để kiểm tra nếu như có bất kỳ một trạng thái chấp nhận nào trong hàng đợi là

có thể đi tới từ chính nó Vòng DFS thứ hai bắt đầu từ x1 Nếu x1 được đi tới trong quátrình tìm kiếm, một vòng đi qua x1 được phát hiện và một lỗi (tức là một trường hợp viphạm tính chất đang được kiểm tra) sẽ được báo cáo Một vòng DFS mới sẽ được khởiđộng từ x2 và cứ như vậy cho tới khi nào tất cả k trạng thái chấp nhận đều được kiểmtra Dựa theo hậu thứ tự, ta có thể chỉ ra rằng các trạng thái đã thăm trong suốt lần tìmkiếm thứ I không thể bị thăm lại trong suốt quá trình tìm kiếm thứ j sau đó, với i < j

Hệ quả là k lần tìm kiếm có thể được thực hiện chỉ với việc sử dụng một bảng băm đểlưu các trạng thái đã được thăm Nói cách khác, tất cả các lần tìm kiếm từ x F cùng∈với nhau sẽ tương ứng với duy nhất một vòng DFS thứ hai trên AG

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xxi

x

Trang 30

Trong trường hợp xấu nhất, thuật toán này thăm tất cả các trạng thái có thể tới đượccủa AG hai lần: mỗi lần trong mỗi pha tìm kiếm Độ phức tạp thời gian tính toán của nóvẫn là tuyến tính theo kích thước của AG Nó yêu cầu lưu tất cả các trạng thái trong một

bộ nhớ ngẫu nhiên Trong trường hợp lỗi, các trạng thái trong ngăn xếp của lần tìmkiếm thứ hai tương ứng với một vòng tròn xấu (“bad” cycle) đi qua một trạng thái chấpnhận xi Tuy nhiên, trường hợp lỗi với toàn bộ đường đi từ trạng thái ban đầu không thểđưa ra được Vì thế cần phải thực hiện một vòng tìm kiếm thứ ba để tìm ra một đường

đi từ trạng thái ban đầu tới trạng thái xi

Hình III-3: Thuật toán Nested Depth-First Search

Trong [26], một phiên bản khác của thuật toán này cũng được giới thiệu với giả mãnhư hình 4 trên đây Thuật toán này không sử dụng thêm một hàng đợi mà thay vào đó

là một ngăn xếp thứ hai và một bảng băm Ý tưởng chính đằng sau việc này là để thựchiện hai lượt DFS trên chỉ với một lượt lồng nhau thay vì hai lượt liên tiếp nhau Mỗilần một trạng thái chấp nhận được quay lui trong vòng DFS thứ nhất, pha tìm kiếm đóđược tạm ngừng và một pha tìm kiếm thứ hai bắt đầu tìm xem khi nào thì trạng tháichấp nhận đó có thể đi tới từ chính nó Nếu không tìm ra một vòng như vậy, thuật toánkhôi phục lại pha tìm kiếm thứ nhất để tìm kiếm trạng thái chấp nhận tiếp theo Phiênbản này yêu cầu không gian bộ nhớ gấp đôi so với phiên bản kể trên nhưng ưu điểmcủa nó là nếu như có một lỗi được tìm ra, một trường hợp lỗi đầy đủ đường đi kể từtrạng thái ban đầu có thể được đưa ra dựa vào hai ngăn xếp

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xxx

Trang 31

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xxx

i

Trang 32

III.3 Những vấn đề khi áp dụng bài toán kiểm tra mô hình vào các dãy thực thi hữu hạn

Theo như bài toán kiểm tra mô hình đề ra, ta có thể thấy rằng nó chỉ quan tâm tớinhững dãy thực thi vô hạn và nó giả sử rằng mọi dãy thực thi đều là vô hạn không baogiờ kết thúc Điều giả sử này tuy ở mức tổng quát là không sai vì ta có thể thêm mộtvòng lặp vô hạn vào các trạng thái cuối cùng của các dãy thực thi hữu hạn để làm cho

nó thành vô hạn Tuy nhiên, cách này chưa được hoàn toàn thuyết phục vì trong nhiềutrường hợp nó làm thay đổi ngữ nghĩa của chương trình cần kiểm tra

Lây đơn giản một ví dụ khi một chương trình là một phần của một hệ thống lớn hơn.Khi đó, nó sẽ có thể bị bắt buộc phải kết thúc khi tương tác với các phần khác trong hệthống Trong trường hợp này, ngữ nghĩa đã bị thay đổi và kết quả kiểm tra mô hình sẽkhông còn giá trị nữa

Bên cạnh đó, khi áp dụng thuật toán tìm kiếm theo độ sâu lồng nhau (Nested DepthFirst Search), hay thậm chí bất kỳ thuật toán tìm kiếm thành phần liên thông mạnh nàokhác trong đồ thị trạng thái, ta sẽ phải lưu lại toàn bộ trạng thái vào hai ngăn xếp Điềunày dẫn đến bùng nổ trạng thái rất nhanh chóng, và thường thì ta không thể kiểm tratrực tiếp từ mã nguồn mà bắt buộc người dùng phải trừu tượng hóa chương trình củamình xuống một mức độ nào đó Như thế, người dùng phải là chuyên gia với đầy đủkiến thức về phương pháp hình thức mới có thể sử dụng nổi

Ngoài ra, như ta thấy, Buchi là một automat hữu hạn trạng thái nhưng chỉ đoán nhậncác từ vô hạn Chính vì vậy mà nó không thể dùng để kiểm tra các dãy thực thi hữu hạn

vì nó có thể cho kết quả kiểm chứng sai so với những gì chúng ta mong đợi

Trước những thực trạng này, việc phát triển một công cụ để kiểm tra các chươngtrình Java hữu hạn một cách trực tiếp và đúng đắn là vô cùng hữu ích Những chươngsau đây sẽ đi vào cụ thể công cụ này được xây dựng từng bước như thế nào

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xxx

ii

Trang 33

III.4 Tổng kết chương III

Chương này đã giới thiệu một cách chi tiết bài toán kiểm tra mô hình dùng để kiểmchứng các công thức LTL Đồng thời, nó cũng đưa ra những điểm chưa tốt mà kiểm tra

mô hình còn gặp phải nhất là khi kiểm tra các chương trình hữu hạn được yêu cầu phảikết thúc ở một thời điểm nào đó Từ đó, chúng ta có thể rút ra kết luận về sự cần thiếtphải phát triển một công cụ để khắc phục những khó khăn này Về chi tiết quá trìnhphát triển công cụ đó, chúng ta sẽ cùng tìm hiểu ở những chương sau

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xxx

iii

Trang 34

PHẦN 2: CÁC KẾT QUẢ

ĐÃ ĐẠT ĐƯỢC

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xxx

iv

Trang 35

CHƯƠNG IV KIẾN TRÚC CỦA HỆ THỐNG

Trước khi đi vào tìm hiểu cụ thể cài đặt cũng như thực nghiệm của công cụ đượcphát triển trong đồ án này, sẽ tốt hơn nếu chúng ta có một cái nhìn tổng quan về nó

Vì thế chương này được đưa ra nhằm các mục đích sau:

 Giới thiệu về cấu trúc tổng quan của hệ thống

 Cấu trúc của Java Pathfinder

 Cấu trúc của Symbolic Pathfinder

IV.1 Cấu trúc tổng quan của hệ thống được xây dựng

Hình dưới đây mô tả sơ đồ cấu trúc tổng quan của hệ thống dùng để kiểm tra mộtchương trình Java hữu hạn có thỏa mãn một tính chất LTL nào đó hay không

Hình IV-4: Sơ đồ tổng quan hệ thống

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xxx

v

Trang 36

Trong sơ đồ trên, LTL properties chính là các tính chất thời gian được viết dướidạng các công thức LTL Các công thức này đầu tiên được ghi vào trong các tệp Javabằng cách sử dụng chú thích Annotation có sẵn trong ngôn ngữ Java (1) Sau khi cáctệp mã nguồn Java này được biên dịch (2), nó được đưa vào thực thi tượng trưng bởiSPF (Symbolic Pathfinder – hệ thống hỗ trợ thực thi tượng trưng của JPF và sẽ được đềcập kỹ hơn ở phần sau) Trong khi các tệp Java bytecode được nạp vào trong máy ảocủa Java Pathfinder (3.1), chúng ta sẽ lấy ra các công thức LTL từ các chú thích (3.2) ởbước trước.

Công thức LTL này sau đó sẽ được dịch sang thành một automat hữu hạn trạng tháiFSA – Finite State Automata (4) Và sau đó, automat này sẽ được dùng để điều khiểnthực thi chương trình Java dựa trên một thuật toán điều khiển sẽ được mô tả kỹ hơn ởchương sau Việc điều khiển thực thi này được cài đặt thành một phần mở rộng củaJPF (jpf-ltl) có màu đỏ ở trên hình, nó có thể tương tác với JPF trong suốt quá trìnhthực thi và thực hiện các công việc kiểm chứng

Bởi vì chúng ta chỉ quan tâm tới các chương trình hữu hạn nên khi nó kết thúc, hoặc

bị lỗi ngay trong quá trình thực thi, jpf-ltl sẽ dừng chương trình và đưa ra các thôngbáo phù hợp

Sau đây, chúng ta sẽ tìm hiểu về cấu trúc cụ thể của hệ thống JPF và những côngnghệ chúng ta sẽ sử dụng trong quá trình phát triển hệ thống kiểm chứng này Cuốicùng, một cái nhìn tổng quan về cơ chế thực thi tượng trưng của JPF cũng sẽ được xemxét

IV.2 Java PathFinder (JPF)

JPF bắt đầu như một môi trường cho việc kiểm tra mô hình các chương trình Java

ở dạng tệp Java bytecode Nó bao gồm một máy ảo mới và kết hợp thêm nhiều kỹ thuậtkhác để giảm thiểu không gian trạng thái như Partial order reduction, symmetryreduction, abstraction,… Cho tới nay, nó đã phát triển thêm rất nhiều ứng dụng và phần

mở rộng khác nhau nhưng chức năng chính của JPF vẫn là kiểm tra mô hình

IV.2.1 Cấu trúc chính của JPF

Toàn bộ framework này được thiết kế xoay quanh hai thành phần chính là máy ảoJVM và đối tượng Search

Thứ nhất là JVM Máy ảo này chạy trên nền máy ảo Java thật, nó thực hiện các chỉthị Java bytecode và đồng thời sinh ra các trạng thái (state) cùng với đó là các lớp để

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xxx

vi

Trang 37

quản lý không gian trạng thái này JVM có thể kiểm tra việc trùng lặp các trạng thái(matching) xem trạng thái đó đã được thăm hay chưa, có thể lưu lại trạng thái (storing)

để sau này có thể quay lại trạng thái đó (backtracking) và thực thi theo một đườngkhác

Đối tượng Search thì ta có thể coi nó như là bộ điều khiển hoạt động của JVM Nó

có trách nhiệm hướng dẫn JVM khi nào phải tạo ra trạng thái mới hay khi nào nênquay lại một trạng thái cũ đã được sinh ra trước đó Cứ như thế cho tới khi JVM thămhết tất cả các không gian trạng thái thì thôi Nó sử dụng thuật toán tìm kiếm theo độ sâuđơn giản ngoài ra còn có các kiểu tìm kiếm kinh nghiệm khác Chúng ta hoàn toàn cóthể tự tạo ra đối tượng Search cho mình bằng cách kế thừa lớp Search này và cài đặt

phương thức search() theo các thuật toán tìm kiếm mà ta mong muốn.

JPF áp dụng rất nhiều kỹ thuật khác nhau trong cài đặt của mình mà không thể nêuhết trong phạm vi báo cáo này Do đó ta chỉ nêu ra ba kỹ thuật đã dùng trong côngtrình nghiên cứu này và có thể sẽ dùng tiếp trong thời gian tới đó là Choice Generator,Property và Listener

Sinh viên thực hiện [Lê Anh Tùng – 20063601] Khóa 51 Lớp CNPM B xxx

vii

Ngày đăng: 27/06/2023, 21:34

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] A. Pnueli: The temporal logic of programs, Proc. 18 th IEEE FOCS (1977) 46-57 [2] A.P. Sistla, M. Vardiand P. Wolper: Reasoning about infinite computationpaths, Proc. 24 th IEEE FOCS (1983) 185–194 Sách, tạp chí
Tiêu đề: Proc. 18"th" IEEE FOCS" (1977) 46-57[2] A.P. Sistla, M. Vardiand P. Wolper: Reasoning about infinite computationpaths,"Proc. 24"th" IEEE FOCS
[3] M. Vardiand P. Wolper: An automata theoretic approach to automatic program verification, Proc. 1 st IEEE LICS, (1986) 332–345 Sách, tạp chí
Tiêu đề: Proc. 1"st" IEEE LICS
[4] R. Gerth, D. Peled, M. Vardiand P. Wolper: Simple on-the-fly automatic verification of linear temporal logic, Proc. IFIP/WG6.1 Symp. On Protocol Specification, Testing and Verification, Warsaw, Poland, June 1995 Sách, tạp chí
Tiêu đề: Proc. IFIP/WG6.1 Symp. On ProtocolSpecification, Testing and Verification
[6] Daniele, M., Giunchiglia, F., and Vardi, M.Y. "Improved Automata Generation for Linear Temporal Logic", in Proc. of the 11th International Conference on Computer Aided Verification (CAV 1999). July 1999, Trento, Italy. Springer, LNCS 1633 Sách, tạp chí
Tiêu đề: Improved Automata Generation forLinear Temporal Logic
[7] Visser, W., Havelund, K., Brat, G., and Park, S. "Model Checking Programs", in Proc. of the 15th IEEE International Conference on Automated Software Engineering (ASE'2000). 11-15 September 2000, Grenoble, France. IEEE Computer Society, pp. 3- 11. Y. Ledru, P. Alexander, and P. Flener, Eds Sách, tạp chí
Tiêu đề: Model Checking Programs
[8] G. Holzmann. SPIN model checker, the: primer and reference manual. Addison- Wesley Professional, 2003 Sách, tạp chí
Tiêu đề: SPIN model checker, the: primer and reference manual
[9] Giannakopoulou, D., Havelund, K.: Automata-based verification of temporal properties on running programs. In ASE 2001, pp. 412–416 (2001) Sách, tạp chí
Tiêu đề: Automata-based verification of temporalproperties on running programs
[10] J. R. Buchi: On a decision method in restricted second order arithmetic, Z. Math.Logik Grundlag. Math, 6 (1960)66–92 Sách, tạp chí
Tiêu đề: Z. Math."Logik Grundlag. Math
[11] E. M. Clarke, O. Grumberg, and D. A. Peled. Model Checking. The MIT Press, Cambridge, Massachusetts, 1999 Sách, tạp chí
Tiêu đề: Model Checking
[12] P. Wolper, ‘On the relation of programs and computations to models of temporal logic.’ In: Proc. Temporal Logic in Specification, LNCS 398, pp. 75−123, 1989 Sách, tạp chí
Tiêu đề: Proc. Temporal Logic in Specification
[13] A. Thayse, et al., From Modal Logic to Deductive Databases: Introducing a Logic Based Approach to Artificial Intelligence, Wiley, 1989 Sách, tạp chí
Tiêu đề: From Modal Logic to Deductive Databases: Introducing a LogicBased Approach to Artificial Intelligence
[14] R.Gamma, R. Helm, R. Johnson, and J.Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison Wesley, 1995 Sách, tạp chí
Tiêu đề: Design Patterns: Elements ofReusable Object-Oriented Software
[16] Tim Lindholm and Frank Yellin. The Java Virtual Machine Specification.Addison-Wesley, 1997 Sách, tạp chí
Tiêu đề: The Java Virtual Machine Specification
[17] A.V. Aho, J.E. Hopcroft, and J.D. Ullman, The Design and Analysis of Computer Algorithms, Addison Wesley, Reading, 1974 Sách, tạp chí
Tiêu đề: The Design and Analysis of ComputerAlgorithms
[18] R. E. Tarjan, ‘Depth first search and linear graph algorithms,’ SIAM J. Computing, 1:2, pp. 146−160, 1972 Sách, tạp chí
Tiêu đề: SIAM J. Computing
[19] G.J. Holzmann, ‘An improved protocol reachability analysis technique,’ Software, Practice and Experience, 18(2):137−161, 1988 Sách, tạp chí
Tiêu đề: Software,Practice and Experience
[20] P. Godefroid, G.J. Holzmann, and D. Pirottin, ‘State space caching revisited,’ In:Proc. 4 th Workshop on Computer Aided Verification, Montreal, June 1992 Sách, tạp chí
Tiêu đề: Proc. 4"th" Workshop on Computer Aided Verification
[21] D. Beyer, T. A. Henzinger, R. Jhala, and R. Majumdar. The software model checker blast: Applications to software engineering. Int. J. Softw. Tools Technol.Transf., 9(5):505-525, 2007 Sách, tạp chí
Tiêu đề: Int. J. Softw. Tools Technol."Transf
[22] J. Hatcliff and M. B. Dwyer. Using the Bandera tool set to model-check properties of concurrent java software. In CONCUR'01: Proceedings of the 12 th International Conference on Concurrency Theory, pages 39-58, London, UK, 2001.Springer-Verlag Sách, tạp chí
Tiêu đề: CONCUR'01: Proceedings of the 12"th"International Conference on Concurrency Theory
[23] G. Holzmann. SPIN model checker, the: primer and reference manual. Addison- Wesley Professional, 2003 Sách, tạp chí
Tiêu đề: SPIN model checker, the: primer and reference manual

HÌNH ẢNH LIÊN QUAN

Hỡnh II-1: Buchi tương đương với cụng thức o ơ( (p⊃ ◊q) - Xây dựng công cụ kiểm chứng mô hình phần mềm kiểm tra các chương trình hữu hạn, dựa trên hệ thống java path finder
nh II-1: Buchi tương đương với cụng thức o ơ( (p⊃ ◊q) (Trang 24)
Hình II-2: Cây thực thi tượng trưng với ví dụ tính trị tuyệt đối của hiệu hai số - Xây dựng công cụ kiểm chứng mô hình phần mềm kiểm tra các chương trình hữu hạn, dựa trên hệ thống java path finder
nh II-2: Cây thực thi tượng trưng với ví dụ tính trị tuyệt đối của hiệu hai số (Trang 26)
Hình dưới đây mô tả sơ đồ cấu trúc tổng quan của hệ thống dùng để kiểm tra một chương trình Java hữu hạn có thỏa mãn một tính chất LTL nào đó hay không - Xây dựng công cụ kiểm chứng mô hình phần mềm kiểm tra các chương trình hữu hạn, dựa trên hệ thống java path finder
Hình d ưới đây mô tả sơ đồ cấu trúc tổng quan của hệ thống dùng để kiểm tra một chương trình Java hữu hạn có thỏa mãn một tính chất LTL nào đó hay không (Trang 35)
Hình IV-5: Thiết kế chính của JPF  2 IV.2.2. Choice Generator - Xây dựng công cụ kiểm chứng mô hình phần mềm kiểm tra các chương trình hữu hạn, dựa trên hệ thống java path finder
nh IV-5: Thiết kế chính của JPF 2 IV.2.2. Choice Generator (Trang 38)
Hình IV-6: Trình tự của ChoiceGenerator khi thực thi chỉ thị get_field  3 IV.2.3. Property - Xây dựng công cụ kiểm chứng mô hình phần mềm kiểm tra các chương trình hữu hạn, dựa trên hệ thống java path finder
nh IV-6: Trình tự của ChoiceGenerator khi thực thi chỉ thị get_field 3 IV.2.3. Property (Trang 40)
Hình IV-7: JPF Listeners  4 - Xây dựng công cụ kiểm chứng mô hình phần mềm kiểm tra các chương trình hữu hạn, dựa trên hệ thống java path finder
nh IV-7: JPF Listeners 4 (Trang 41)
Hình IV-8: Các loại Listener - Xây dựng công cụ kiểm chứng mô hình phần mềm kiểm tra các chương trình hữu hạn, dựa trên hệ thống java path finder
nh IV-8: Các loại Listener (Trang 43)
Hình V-9: Ngữ pháp cho các công thức LTL - Xây dựng công cụ kiểm chứng mô hình phần mềm kiểm tra các chương trình hữu hạn, dựa trên hệ thống java path finder
nh V-9: Ngữ pháp cho các công thức LTL (Trang 48)
Hình V-10: Ngữ pháp cho các mệnh đề nguyên tử - Xây dựng công cụ kiểm chứng mô hình phần mềm kiểm tra các chương trình hữu hạn, dựa trên hệ thống java path finder
nh V-10: Ngữ pháp cho các mệnh đề nguyên tử (Trang 49)
Bảng V-1: Các công thức mở rộng được sử dụng khi phân chia các nút - Xây dựng công cụ kiểm chứng mô hình phần mềm kiểm tra các chương trình hữu hạn, dựa trên hệ thống java path finder
ng V-1: Các công thức mở rộng được sử dụng khi phân chia các nút (Trang 53)
Hình V-11: Automat sinh ra cho công thức &lt;&gt;(a ∨ b) viết theo cú pháp của - Xây dựng công cụ kiểm chứng mô hình phần mềm kiểm tra các chương trình hữu hạn, dựa trên hệ thống java path finder
nh V-11: Automat sinh ra cho công thức &lt;&gt;(a ∨ b) viết theo cú pháp của (Trang 55)
Hình V-12: Automat được sinh ra với thuật toán bên trên cho công thức &lt;&gt;(a\/ - Xây dựng công cụ kiểm chứng mô hình phần mềm kiểm tra các chương trình hữu hạn, dựa trên hệ thống java path finder
nh V-12: Automat được sinh ra với thuật toán bên trên cho công thức &lt;&gt;(a\/ (Trang 55)
Hình VI-13: Thuật toán cho việc điều khiển thực thi - Xây dựng công cụ kiểm chứng mô hình phần mềm kiểm tra các chương trình hữu hạn, dựa trên hệ thống java path finder
nh VI-13: Thuật toán cho việc điều khiển thực thi (Trang 57)
Hình VII-14: Bài toán con ếch - Xây dựng công cụ kiểm chứng mô hình phần mềm kiểm tra các chương trình hữu hạn, dựa trên hệ thống java path finder
nh VII-14: Bài toán con ếch (Trang 64)
Bảng VII-2: Kết quả thực nghiệm cho bài toán con ếch - Xây dựng công cụ kiểm chứng mô hình phần mềm kiểm tra các chương trình hữu hạn, dựa trên hệ thống java path finder
ng VII-2: Kết quả thực nghiệm cho bài toán con ếch (Trang 65)

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w