Biểu diễn các thuộc tính thời gian tuyến tính

Một phần của tài liệu (LUẬN văn THẠC sĩ) kết hợp phương pháp kiểm chứng mô hình và các kỹ thuật kiểm thử phần mềm làm tăng độ tin cậy của hệ thống phần mềm (Trang 45 - 47)

Chương 4 Ngôn ngữ Promela và công cụ kiểm chứng mô hình SPIN

4.1. Ngôn ngữ Promela

4.1.5. Biểu diễn các thuộc tính thời gian tuyến tính

a. Biểu diễn và kiểm chứng thuộc tính an toàn

Thuộc tính an toàn được biểu diễn trong LTL như sau: Với A là một công thức LTL và có là một tính toán. , đọc là luôn luôn A là đúng trong trạng thái si khi và chỉ khi A đúng với tất cả trạng thái sj trong với j >= i [3].

Nếu đúng trong một trạng thái s, thì A cũng phải đúng trong s. Công thức []A được gọi là thuộc tính an toàn bởi vì nó đặc tả rằng một tính toán là an toàn nếu không có gì “xấu” xảy ra, tương đương với là những điều xảy ra đều “tốt”.

Ví dụ về một chương trình xử lý tương tranh.

active proctype P() { do :: wantP = true; !wantQ; critical++; critical--; wantP = false; od

} /*Tương tự với tiến trình Q */

Trong Promela ta có một số cách để biểu diễn thuộc tính an toàn. Ví dụ như:

#define mutex (critical <= 1)

Biểu thức trên tương đương với công thức LTL: []mutex

Chúng ta cũng có thể định nghĩa hai biến csp và csq có kiểu Boolean, và gán giá trị cho các biến này khi một tiến trình tiến vào đoạn găng:

active proctype P(){

do

:: wantP = true; !wantQ;

csp = true; csp = false; wantP = false;

od } /* Với tiến trình Q cũng code tương tự*/ Công thức LTL mà chúng ta phải chứng minh bây giờ là: []!(csp && csq)

Cách thứ ba để biểu diễn thuộc tính này là không sử dụng các biến ghost (ghost variables).

Thuộc tính an toàn có thể được kiểm chứng bằng việc lựa chọn tùy chọn kiểm chứng tính an toàn trong iSPIN. Ngoài ra ta cũng có thể kiểm chứng bằng dòng lệnh như sau:

spin –a –f “[]mutex” > safety.ltl

b. Biểu diễn thuộc tính hoạt động được

A là một công thức LTL và là một tính toán thì A, đọc là tồn tại A là đúng trong trạng thái si khi và chỉ khi A đúng với sj bất kỳ trong thỏa mãn j i [3].

Toán tử này là một toán tử phản thân, vì vậy nếu A là đúng trong một trạng thái s, thì ta có A. Công thức A được gọi là thuộc tính hoạt động được bởi vì nó đặc tả cho mệnh đề điều “tốt” tồn tại trong tính toán.

Thông thường thì các đặc tả tính đúng đắn có chứa các thuộc tính hoạt động được bởi vì một thuộc tính an toàn đã được thỏa mãn bởi một chương trình rỗng – chương trình không làm gì cả. Ví dụ, một giải pháp cho vấn đề đoạn găng là không có tiến trình nào cố gắng tiến vào đoạn găng thì sẽ thỏa mãn thuộc tính đúng đắn của tương tranh và sự vắng mặt của khóa chết.

Thuộc tính hoạt động được sẽ được kiểm chứng trong iSPIN bằng cách chọn các tùy chọn “acceptance cycles” và “weak fairness” cũng phải được đặc tả khi chương trình được kiểm chứng. Ngoài ra, nó có thể được chứng minh bằng dòng lệnh với tuỳ chọn –a (acceptance) và –f (weak fairness):

spin –a –f “!<>csp” forth-liveness.pml gcc –o pan pan.c

pan –a -f

c. Biểu diễn tính công bằng

Một tính toán là công bằng yếu (weakly fair) khi và chỉ khi điều kiện sau đúng: nếu một câu lệnh luôn luôn là thực thi được, thì nó tồn tại khả năng thực thi như một phần của phép tính toán [3].

Thuộc tính này được chứng minh trong iSPIN bằng cách đánh dấu vào ô tùy chọn “Weakly fairness” hoặc là kiểm chứng bằng dòng lệnh khi dùng thêm tham số -f.

d. Tính đối ngẫu

Phép toán và là đối ngẫu theo một các tương tự như phép đối ngẫu trong biểu thức deMorgan:

Tương tự, ta cũng có những phép biến đổi toán tử thời gian đơn thân thành các công thức khác tương đương

Một phần của tài liệu (LUẬN văn THẠC sĩ) kết hợp phương pháp kiểm chứng mô hình và các kỹ thuật kiểm thử phần mềm làm tăng độ tin cậy của hệ thống phần mềm (Trang 45 - 47)

Tải bản đầy đủ (PDF)

(79 trang)