Tải bản đầy đủ (.pdf) (66 trang)

Kiểm chứng tính đúng đắn hệ thống tính toán của chương trình bằng kiểm duyệt mô hình

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.37 MB, 66 trang )


ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ




NGUYỄN THỊ LOAN





KIỂM CHỨNG TÍNH ĐÚNG ĐẮN HỆ THỐNG TÍNH TOÁN
CỦA CHƯƠNG TRÌNH BẰNG KIỂM DUYỆT MÔ HÌNH



Ngành: Công nghệ thông tin
Chuyên ngành: Công nghệ phần mềm
Mã số: 60 48 10




TÓM TẮT LUẬN VĂN THẠC SĨ











Hà Nội - 2012

1
MỤC LỤC
LỜI CẢM ƠN 0
LỜI CAM ĐOAN Error! Bookmark not defined.
MỤC LỤC 1
DANH MỤC VIẾT TẮT 4
DANH MỤC CÁC BẢNG 5
DANH MỤC HÌNH VẼ 6
MỞ ĐẦU 7
1. Đặt vấn đề 7
2. Nội dung nghiên cứu 7
3. Phương pháp nghiên cứu 7
4. Cấu trúc luận văn 8
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 9
1.1. Khái niệm và ý nghĩa của kiểm duyệt mô hình 9
1.2. Quy trình hoạt động của kiểm duyệt mô hình 10
1.3. Đặc trưng của kiểm duyệt mô hình 11
1.3.1. Mô hình hóa (Modeling) 11
1.3.2. Thực thi chương trình (Running the model checker) 12
1.3.3. Phân tích (Analysis) 12
1.4. Điểm mạnh và điểm yếu của kiểm duyệt dựa trên mô hình 13
1.5. Sử dụng logic thời gian (Temporal Logic) mô tả các thuộc tính cần kiểm
chứng 14

1.5.1. Logic thời gian (Temporal Logic) 14
1.5.1.1 Cú pháp của LTL 14
1.5.1.2 Ngữ nghĩa 15
1.5.1.3. Sự tương đương của công thức LTL 16
1.5.1.4. Toán tử Weak Until – W 16
1.5.2. Các thuộc tính cần kiểm chứng 17
1.5.2.1. Thuộc tính an toàn (Safety) 17
1.5.2.2. Thuộc tính sống (Liveness) 17
1.5.2.3. Thuộc tính công bằng (Fairness) 17
1.6. Máy trạng thái hữu hạn 18
1.6.1. Định nghĩa máy trạng thái hữu hạn 18
1.6.2. Các máy trạng thái hữu hạn trao đổi thông tin 19
CHƯƠNG 2: GIỚI THIỆU VỀ SPIN VÀ PROMELA 20
2.1. Ngôn ngữ Promela 20
2.1.1. Cấu trúc chương trình Promela 20

2
2.1.2. Biến 21
2.1.3. Kiểu dữ liệu 21
2.1.3.1. Các kiểu dữ liệu cơ bản trong Promela 21
2.1.3.2. Kiểu dữ liệu có cấu trúc 22
2.1.3.3. Kiểu mtype 24
2.1.4. Định danh, hằng, và biểu thức 25
2.1.5. Tiến trình 26
2.1.5.1. Tiến trình process 26
2.1.5.2. Tiến trình init 26
2.1.5.3. Active proctype 27
2.1.6. Run và atomic 28
2.1.6.1. Run và tiến trình init() 28
2.1.6.2. Atomic 28

2.1.7. Cấu trúc điều khiển 30
2.1.7.1. Lệnh lựa chọn if 30
2.1.7.2. Lệnh lặp do 30
2.1.7.3. Lệnh nhảy goto 31
2.2. Công cụ Spin 31
2.2.1. Kiểm chứng chương trình trong Spin 31
2.2.1.1. Đặc trưng của SPIN 31
2.2.1.2. Mô hình hệ thống trong SPIN 32
2.2.1.3. Cấu trúc của Spin 32
2.2.1.4. Giả lập ngẫu nhiên 33
2.2.1.5. Kiểm chứng (Verify) 34
2.2.2. Giao diện người dùng Xspin 36
2.2.3. Logic thời gian tuyến tính (LTL - Linear Temporal Logic) trong Spin
41
2.2.3.1. Cú pháp Logic thời gian tuyến tính 42
2.2.3.2. Biểu diễn tính chất bất biến của hệ thống bằng LTL 42
2.2.4. Cấu trúc Never claim 43
CHƯƠNG 3: ỨNG DỤNG 44
3.1. Xây dựng biến và tiến trình đồng hồ 44
3.2. Hệ thống báo động, báo cháy mức trừu tượng 48
3.2.1. Mô tả hệ thống mức trừu tượng 48
3.2.2. Mô hình Promela cho hệ thống báo động, báo cháy mức trừu tượng và
kiểm chứng thuộc tính đơn giản 49
3.3. Hệ thống báo động, báo cháy mức 2 52

3
3.3.1. Mô tả hệ thống mức 2 52
3.3.2. Mô hình Promela cho hệ thống báo động, báo cháy mức 2 và kiểm
chứng thuộc tính đơn giản 53
KẾT LUẬN 58

TÀI LIỆU THAM KHẢO 60
PHỤ LỤC 61



4
DANH MỤC VIẾT TẮT
TỪ VIẾT
TẮT
TÊN TIẾNG ANH
TÊN TIẾNG VIỆT
AP
Atomic Proposition
Mệnh đề nguyên tử
CTL
Branching Temporal Logic
Logic thời gian rẽ nhánh
FSM
Finite State Machine
Máy trạng thái hữu hạn
LTL
Linear Temporal Logic
Logic thời gian tuyến tính
VHDL
Very High Speed Intergrated Circuit
Mạch tích hợp tốc độ cao
FIFO
First In First Out
Vào trước ra trước


5
DANH MỤC CÁC BẢNG
Bảng 2.1: Các kiểu dữ liệu cơ bản trong Promela 21
Bảng 2.2: Các toán tử trong Promela 25
Bảng 2.3: Các phép toán mệnh đề trong LTL 42
Bảng 2.4: Các phép toán thời gian của LTL 42

6
DANH MỤC HÌNH VẼ
Hình 1.1: Sơ đồ hoạt động của phương pháp kiểm duyệt mô hình 10
Hình 1.2 Ví dụ về mô hình 12
Hình 1.3: Ví dụ máy hữu hạn trạng thái dạng đồ thị 18
Hình 1.4: Truyền thông điệp đồng bộ hóa (!m, ?m), (?m, !m) 19
Hình 1.5: Đồng bộ hóa thông điệp 19
Hình 2.1: mô hình của hệ thống trong Spin 32
Hình 2.2: Cấu trúc của Spin 33
Hình 2.3: Màn hình cửa sổ chính của XSpin 37
Hình 2.4: Các chức năng trong menu Run 37
Hình 2.5: Cửa sổ chính chức năng Set Simulation Parameters 38
Hình 2.6: Cửa sổ khi chạy chức năng Run Simulation 39
Hình 2.7: Cửa sổ chính chức năng Set Verification Parameters 40
Hình 2.8: Cửa sổ khi chạy chức năng Run Verification 40
Hình 2.9: Cửa sổ khi chạy chức năng LTL Property Manager 41
Bảng 2.3: Các phép toán mệnh đề trong LTL 42
Bảng 2.4: Các phép toán thời gian của LTL 42
Hình 3.1: Kiến trúc trừu tượng của hệ thống báo động, báo cháy 48
Hình 3.2: Kết quả khi mô phỏng mô hình hệ thống báo động, báo cháy mức
trừu tượng 51
Hình 3.3: Kết quả kiểm chứng mô hình hệ thống báo động, báo cháy 52
Hình 3.4: Kiến trúc mức 2 của hệ thống báo động, báo cháy 53

Hình 3.5: Kết quả khi mô phỏng mô hình hệ thống báo động, báo cháy mức
trừu tượng 56
Hình 3.6: Kết quả kiểm chứng mô hình hệ thống báo động, báo cháy 57

7
MỞ ĐẦU
1. Đặt vấn đề
Ngày nay chúng ta phụ thuộc rất nhiều vào hệ thống máy tính (phần cứng
và phần mềm) cả trong sản xuất lẫn đời sống hàng ngày. Các hệ thống này cần
phải đảm bảo sự tin cậy và an toàn khi sử dụng. Do đó chúng cần phải được
kiểm duyệt kỹ càng ngay từ mô hình của hệ thống để đảm bảo hệ thống hoạt
động chính xác tránh gây thiệt hại cả về con người lẫn tiền của. Hơn nữa việc áp
dụng kỹ thuật kiểm chứng hệ thống qua mô hình hệ thống sẽ làm tăng hiệu quả
kinh tế bởi nhờ có kiểm chứng mô hình mà nhà sản xuất có thể xác định sớm các
lỗi trong hệ thống nên chi phí vào quá trình kiểm thử hoặc khắc phục lỗi sẽ giảm
đáng kể.
Kỹ thuật kiểm chứng mô hình đã được sử dụng để kiểm chứng cho các mô
hình hệ thống trong thực tế. Tuy nhiên để phát huy được hết hiệu quả của kỹ
thuật này cần có công cụ kiểm chứng đi kèm để hỗ trợ quá trình kiểm chứng.
Các công cụ kiểm chứng hiện nay hay dùng như Spin, Kronos, NuSMV,…
Công cụ Spin mặc dù rất đơn giản, gọn nhẹ nhưng có tầm ảnh hưởng lớn trong
phát triển phần mềm cho các hệ thống phức tạp như hệ thời gian thực, hệ thống
nhúng, hệ tương tác, …
Từ thực tiễn đó, chúng tôi chọn đề tài “Kiểm chứng tính đúng đắn hệ thống
tính toán của chương trình bằng kiểm duyệt mô hình” nhằm mục đích là tiếp
cận, nghiên cứu phương pháp kiểm chứng mô hình, dùng công cụ kiểm chứng
Spin và ngôn ngữ mô hình hóa Promela để kiểm chứng tính đúng đắn của hệ
thống.
2. Nội dung nghiên cứu
Nội dung đề tài nghiên cứu về kỹ thuật kiểm chứng mô hình (Model

Checking), dùng công cụ Spin để thực hiện kiểm chứng mô hình hệ thống báo
động, báo cháy, sử dụng ngôn ngữ mô hình hóa Promela để mô hình hóa hệ
thống báo động, báo cháy, và mô tả các thuộc tính cần kiểm chứng qua Logic
thời gian tuyến tính để kiểm chứng tính đúng đắn của hệ thống báo động, báo
cháy qua mô hình của nó.
3. Phương pháp nghiên cứu
 Phương pháp thu thập tài liệu: Các thông tin sử dụng trong luận văn
được thu thập từ các nguồn: Sách tham khảo, giáo trình, giáo án, các bài
báo.
 Phương pháp phân tích: Dựa trên các tài liệu thu thập được, phân tích,
đánh giá và đưa ra kết luận.


8
4. Cấu trúc luận văn
Chương 1 trình bày về cơ sở lý thuyết của kiểm duyệt mô hình (Model
checking).
Chương 2 trình bày về công cụ Spin, giao diện Xspin, và ngôn ngữ mô hình
hóa Promela.
Chương 3 xây dựng tiến trình đồng hồ, mô hình hóa hệ thống báo động, báo
cháy, kết hợp tiến trình đồng hồ với kỹ thuật kiểm duyệt mô hình để kiểm chứng
tính đúng đắn của hệ thống đó.
Phần kết luận tóm tắt kết quả đã đạt được, kết luận, những hạn chế cũng
như hướng phát triển trong tương lai của đề tài.

9
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
Trong chương 1 sẽ trình bày các khải niệm cơ bản về kỹ thuật kiểm duyệt
mô hình (Model Checking), và giới thiệu về logic thời gian tuyến tính cũng như
máy trạng thái hữu hạn.

1.1. Khái niệm và ý nghĩa của kiểm duyệt mô hình
Theo Clarke và Emerson – 1981, kiểm duyệt mô hình được định nghĩa:
“Kiểm duyệt mô hình là một kỹ thuật được tự động hóa nhằm đưa ra mô
hình hữu hạn trạng thái của hệ thống và thuộc tính hình thức, kỹ thuật này sẽ
kiểm tra có hay không thuộc tính được thõa mãn bởi mô hình của hệ thống” [5].
Trong giai đoạn thiết kế phần mềm và phần cứng của các hệ thống phức tạp
hiện nay, các chuyên gia dành rất nhiều thời cho việc kiểm chứng hơn là việc
xây dựng hệ thống. Có rất nhiều kỹ thuật đã được tìm ra để làm tăng phạm vi
ứng dụng của kiểm chứng. Các phương pháp hình thức là một trong những kỹ
thuật đó. Nó được tích hợp vào việc kiểm chứng trong quá trình thiết kế, để đưa
ra những kỹ thuật kiểm chứng hiệu quả và làm giảm thời gian kiểm chứng hệ
thống. Một trong những phương pháp hình thức mạnh mẽ nhất là kiểm duyệt mô
hình [1, 2].
Kỹ thuật kiểm duyệt mô hình miêu tả hành vi của hệ thống bằng một
phương pháp toán học chính xác và rõ ràng. Một mô hình hệ thống chính xác có
thể giúp chúng ta phát hiện ra những gì chưa đầy đủ, mơ hồ và không nhất quán
trong đặc tả hệ thống, điều này thường được phát hiện sau giai đoạn thiết kế. Do
đó cần kỹ thuật kiểm duyệt mô hình để làm rõ những điều nêu trên trước giai
đoạn thiết kế. Các mô hình của hệ thống thường được đi kèm với những thuật
toán mà có thể giúp chúng ta tìm ra tất cả các trạng thái của mô hình hệ thống
đó. Nhờ có sự nghiên cứu phát triển về thuật toán và cấu trúc dữ liệu, cùng với
khả năng của máy tính ngày càng nhanh và dung lượng lưu trữ ngày càng cao,
những kỹ thuật dựa trên mô hình đã cực kỳ phát triển và không chỉ áp dụng
trong những ví dụ đơn giản mà hiện nay đã được ứng dụng vào những bản thiết
kế dành cho các hệ thống phức tạp [2].
Các thuộc tính điển hình có thể được kiểm tra bằng kiểm duyệt mô hình
thông thường là: Kết quả sinh ra có đúng không?, hệ thống có lâm vào trạng thái
bế tắc không? Thậm chí các thuộc tính trên thời gian cũng có thể được kiểm
tra như: Có thể xảy ra bế tắc trong vòng 1 giờ sau khi hệ thống khởi động lại?
hoặc sự phản hồi có được nhận lại trong vòng 10 phút? …

Mô hình của hệ thống thông thường được sinh ra tự động từ một sự mô tả
mô hình được đặc tả trên các ngôn ngữ lập trình như C, Java hoặc ngôn ngữ mô
tả phần cứng như Verilog. Các thuộc tính nói lên rằng hệ thống nên làm những

10
gì, và không nên làm gì, nhưng ngược lại bản mô tả mô hình tập trung vào hệ
thống hành động như thế nào. Công cụ kiểm chứng có khả năng kiểm tra mọi
trạng thái của hệ thống để kiểm tra xem chúng có hay không thỏa mãn thuộc
tính mong muốn.
Kỹ thuật kiểm duyệt mô hình có nhiều phiên bản. Phiên bản kể đến đầu tiên
là dùng kỹ thuật kiểm duyệt mô hình để mô hình hóa và kiểm chứng hệ thống
không có ràng buộc thời gian, tiếp đến là ứng dụng kỹ thuật này để kiểm chứng
hệ thống có ràng buộc thời gian và hệ xác suất. Tuy nhiên với việc tìm hiểu và
dùng kỹ thuật kiểm duyệt mô hình để kiểm chứng hệ thống không có ràng buộc
thời gian sẽ đơn giản hơn. Do đó trong luận văn tác giả sẽ nghiên cứu và sử
dụng phiên bản này kết hợp với kỹ thuật xây dựng biến và tiến trình đồng hồ để
kiểm chứng tính chất ràng buộc thời gian trong hệ thống báo động, báo cháy.
1.2. Quy trình hoạt động của kiểm duyệt mô hình




















Hình 1.1: Sơ đồ hoạt động của phương pháp kiểm duyệt mô hình [2]
Mô hình của hệ thống được xây dựng từ đặc tả của hệ thống. Mô hình này
thể hiện hành vi của hệ thống và có thể được viết bởi ngôn ngữ C, Java, hay các
ngôn ngữ mô tả phần cứng.
Requirements
System
Formalizing
Modeling
Property
Specification

System Model
Model checking
Satisfied
Violated +
Counterexample
Simulation
Location error

11
`Sự đặc tả thuộc tính yêu cầu những gì hệ thống nên làm và những gì không
nên làm trong khi mô hình mô tả hệ thống hoạt động như thế nào?
Kiểm duyệt mô hình sẽ kiểm tra tất cả các trạng thái hệ thống liên quan

xem có thỏa mãn không, nếu không thỏa mãn sẽ đưa ra một phản ví dụ - một
trạng thái của hệ thống không thỏa mãn - cho thấy cách đạt đến trạng thái không
thỏa mãn, sử dụng phản ví dụ cùng với sự mô phỏng ta sẽ có được những thông
tin gỡ lỗi và từ đó sẽ có được mô hình phù hợp.
1.3. Đặc trưng của kiểm duyệt mô hình
Quá trình kiểm duyệt một mô hình có thể chia thành những pha như sau:
 Pha mô hình hóa (Modeling): Xây dựng mô hình cho hệ thống bằng cách
mô hình hóa hệ thống sử dụng ngôn ngữ mô tả mô hình của công cụ kiểm duyệt.
Sau đó kiểm tra sự đúng đắn và đánh giá nhanh mô hình bằng sự mô phỏng.
Hình thức hóa thuộc tính cần được kiểm duyệt sử dụng ngôn ngữ đặc tả thuộc
tính.
 Pha thực thi (Running): Sử dụng chương trình kiểm duyệt để kiểm tra tính
hợp lệ của thuộc tính trên mô hình hệ thống vừa xây dựng.
 Pha phân tích (Analysis): Kiểm tra xem nếu thuộc tính được thỏa mãn thì
kiểm tra thuộc tính tiếp theo (nếu còn). Nếu thuộc tính bị vi phạm thì tiến hành
phân tích phản ví dụ bằng sự mô phỏng; Tinh chỉnh mô hình, bản thiết kế, hoặc
thuộc tính; Lặp lại toàn bộ các pha. Nếu tràn bộ nhớ thì cố gắng giảm bớt mô
hình và thử lại.
Sau đây, là chi tiết nội dung của từng pha:
1.3.1. Mô hình hóa (Modeling)
Để có thể áp dụng được kiểm duyệt mô hình cần yêu cầu đầu vào là một
mô hình của hệ thống và các thuộc tính đặc tả hình thức sẽ được kiểm chứng.
Mô hình của hệ thống mô tả hành vi của nó một cách đúng đắn và rõ ràng.
Chúng thường được diễn tả bằng otomat hữu hạn trạng thái (finite state
automata). Một otomat hữu hạn trạng thái gồm tập các trạng thái (states) và tập
các phép chuyển (transitions). Các trạng thái chứa thông tin về giá trị hiện tại
của các biến, của câu lệnh được thực thi trước đó, hoặc gì đó tương tự. Các phép
chuyển diễn tả làm thế nào hệ thống chuyển từ trạng thái này sang trạng thái
khác. Với các hệ thống thực tế, otomat hữu hạn trạng thái được diễn tả bằng
ngôn ngữ mô tả mô hình như C, Java, VHDL,






12












Hình 1.2 Ví dụ về mô hình [5]
Để tăng chất lượng của mô hình, cần có sự mô phỏng trước khi kiểm duyệt
mô hình có. Sự mô phỏng này được sử dụng để loại bỏ những vấn đề đơn giản
hơn trước khi kiểm duyệt. Điều này giúp làm giảm thời gian cũng như chi phí.
Và cuối cùng, để có thể kiểm duyệt chính xác. Các thuộc tính nên được
diễn đạt rõ ràng, ngắn gọn nhưng đầy đủ. Do vậy, cần sử dụng một ngôn ngữ
đặc tả thuộc tính. Trong luận văn này chỉ tập trung vào cách sử dụng logic thời
gian (temporal logic) như là ngôn ngữ đặc tả thuộc tính. Thực chất, logic thời
gian là sự mở rộng của logic mệnh đề với những toán tử biểu diễn hành vi của
hệ thống theo thời gian. Logic thời gian hoàn toàn có khả năng biểu diễn những
thuộc tính của hệ thống như sự đúng đắn chức năng (functional correctness),
thuộc tính sống (liveness property), thuộc tính an toàn (safety property), thuộc

tính công bằng (fairness property).
1.3.2. Thực thi chương trình (Running the model checker)
Sau khi có được mô hình của hệ thống và các thuộc tính, chúng ta cần sử
dụng một công cụ kiểm chứng để kiểm tra các thuộc tính có thỏa mãn mô hình
vừa xây dựng không. Trong luận văn sẽ sử dụng công cụ kiểm chứng Spin để
thực hiện điều đó.
1.3.3. Phân tích (Analysis)
Sau pha thực thi kiểm chứng mô hình, cần phải phân tích kết quả đạt được.
Thường thì chúng ta có ba trường hợp xảy ra: Các thuộc tính có thỏa mãn hay
không, hoặc mô hình quá lớn ngoài khả năng vật lý của bộ nhớ máy tính.
Khi các thuộc tính được thõa mãn, mô hình đáp ứng được tất cả những
thuộc tính mong muốn.


03:58

03:59

04:00

A model of wach
inc

0

1

2
inc
dec

dec
dec
inc
A modulo 3 counter

13
Khi một thuộc tính không thỏa mãn, tức có thể xuất hiện lỗi trong mô hình,
hoặc có thể do thuộc tính được hình thức hóa sai.
Còn về khả năng thứ 3, mô hình quá lớn để có thể xử lý thì có rất nhiều giải
pháp để khắc phục. Tuy nhiên, giải pháp hiệu quả nhất là cố gắng làm giảm
không gian trạng thái (state space) khi kiểm chứng.
1.4. Điểm mạnh và điểm yếu của kiểm duyệt dựa trên mô hình
Kiểm duyệt mô hình có một vài điểm mạnh như [2]:
 Là phương pháp kiểm chứng tổng quan được áp dụng cho các ứng dụng
trong phạm vi lớn như hệ thống nhúng, công nghệ phần mềm, thiết kế
phần cứng,…
 Hỗ trợ kiểm duyệt cục bộ, các thuộc tính có thể được kiểm tra riêng lẻ,
từ đó tập chung kiểm duyệt các thuộc tính quan trọng trước mà không
cần thiết đặc tả hệ thống hoàn chỉnh.
 Quá trình kiểm duyệt sau không ảnh hưởng đến các lỗi đã được phát
hiện trước đó.
 Cung cấp các thông tin có ý nghĩa cho việc gỡ lỗi khi phát hiện một
thuộc tính không thỏa mãn.
 Kiểm duyệt mô hình là tiềm năng của công nghệ “push – botton”, sử
dụng kiểm duyệt mô hình làm tăng mức độ tương tác người dùng và
chuyên môn.
 Kiểm duyệt mô hình dễ dàng tích hợp trong chu kỳ phát triển phần
mềm, làm giảm thời gian phát triển phần mềm.
 Kiểm duyệt mô hình có nền tảng của toán học, nó dựa trên lý thuyết
thuật toán đồ thị, cấu trúc dữ liệu và logic.

Bên cạnh những ưu điểm trên, phương pháp kiểm duyệt mô hình cũng có
những yếu điểm như [2]:
 Kiểm duyệt mô hình chủ yếu phù hợp với các ứng dụng điều khiển,
không phù hợp với các ứng dụng hướng dữ liệu do khối lượng dữ liệu
thường tăng vô hạn.
 Kiểm duyệt mô hình kiểm chứng mô hình của hệ thống chứ không phải
bản thân hệ thống, mọi kết quả đạt được là về mặt mô hình hệ thống, do
đó cần có những kỹ thuật khác hỗ trợ như kiểm duyệt để tìm ra lỗi chế
tạo (trong phần cứng) và lỗi lập trình (phần mềm).
 Kiểm duyệt mô hình chỉ kiểm chứng những thuộc tính được đặc tả.
 Việc sử dụng kiểm duyệt mô hình yêu cầu kinh nghiệm trừu tượng hóa
hệ thống thích hợp để đưa ra mô hình hệ thống theo logic thời gian.

×