Kiểm chứng (Verify)

Một phần của tài liệu 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 (Trang 35)

4. Cấu trúc luận văn

2.2.1.5.Kiểm chứng (Verify)

Assertion là cách đơn giản để kiểm tra chương trình. Một assertion là một mệnh đề được đặt trong 1 chương trình mà ta cho rằng mệnh đề sẽ luôn đúng tại vị trí đó. Spin sẽ tính toán các assertion trong quá trình tìm kiếm phản ví dụ trong không gian trạng thái của chương trình.

Ví dụ 2.27. Tìm số lớn nhất trong 2 số active proctype P() { int a = 5, b = 5; int max; if :: a >= b -> max = a :: b >= a -> max = b fi;

assert (a >= b -> max == a : max == b) }

Đoạn mã trong ví dụ 2.27 tìm số lớn nhất trong 2 số ab, trong câu lệnh

if, nếu a >=b biến max sẽ được gán giá trị a, nếu b>=a biến max sẽ được gán giá trị b, ở cuối chương trình ta kiểm tra lại bởi biểu thức logic (a >= b -> max = = a : max = = b).

Chạy đoạn mã trong ví dụ 2.27 ở chế độ Verify, kết quả là không có lỗi vi phạm nào được thông báo từ chương trình.

(Spin Version 4.3.0 -- 22 June 2007) + Partial Order Reduction

Full statespace search for:

never claim - (none specified) assertion violations +

cycle checks - (disabled by -DSAFETY) invalid end states +

State-vector 24 byte, depth reached 2, ••• errors: 0 ••• 3 states, stored

1 states, matched

4 transitions (= stored+matched) 0 atomic steps

hash conflicts: 0 (resolved) 2.302 memory usage (Mbyte) unreached in proctype P (0 of 8 states)

Ví dụ 2.28: Chương trình có chứa lỗi

active proctype P() { int a = 5, b = 6; int max;

:: a >= b -> max = a :: b >= a -> max = b+1 fi;

assert (a >= b -> max == a : max == b) }

Trong ví dụ 2.28, ta cũng tìm số lớn nhất trong 2 số a, b nhưng khi b>=a, biến max lại được gán giá trị b+1, do vậy biểu thức (a >= b -> max = = a : max = = b) không được thỏa mãn.

Khi chạy Verify đoạn mã trong ví dụ 2.28 sẽ đưa ra thông báo assertion bị vi phạm.

pan: assertion violated ( ((a>=b)) ? ((max==a)) : ((max==b)) ) (at depth 0)

pan: wrote max.pml.trail

(Spin Version 4.3.0 -- 22 June 2007) Warning: Search not completed + Partial Order Reduction Full statespace search for:

never claim - (none specified) assertion violations +

cycle checks - (disabled by -DSAFETY) invalid end states +

State-vector 24 byte, depth reached 2, ••• errors: 1 ••• 3 states, stored

0 states, matched

3 transitions (= stored+matched) 0 atomic steps

hash conflicts: 0 (resolved) 2.302 memory usage (Mbyte)

Một phần của tài liệu 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 (Trang 35)