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ố a và b, 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)