Phương pháp

Một phần của tài liệu Ứng dụng của spin để kiểm chứng sự tuân thủ thể thức tương tác của chương trình (Trang 54)

Đặc tả giao diện của chương trình và thành phần có thể cung cấp các dịch vụ như read, write, close đối với tệp v.v. Các dịch vụ mà một thành phần yêu cầu phải là các dịch vụ mà chương trình cung cấp. Thể thức tương tác của chương trình và các thành phần đó là việc thực hiện các lời gọi hàm, thủ tục v.v. theo một thứ tự đã định sẵn được đặc tả bằng ngôn ngữ automata hoặc biểu thức chính qui, hoặc các thể thức này có thể là các ràng buộc như đã nêu (trong phần 2.6). Ở đây kiểm chứng là kiểm tra xem thứ tự các lời gọi dịch vụ của thành phần từ chương trình có tuân thủ thứ tự lời gọi dịch vụ được qui định bởi thành phần hay không.

Nhận xét: Vì thành phần cung cấp dịch vụ và chương trình gọi cùng các loại dịch vụ đó nên ta có thể kiểm chứng sự tuân thủ hoặc không tuân thủ bằng cách mô hình hóa thể thức của thành phần thành và hành vi gọi dịch vụ của chương trình bằng hai tiến trình sử dụng một kênh dữ liệu chung, hai tiến trình sử dụng kênh dữ liệu chung này là kênh gặp (rendezvous). Tiến trình thể hiện sự ung cấp dịch vụ của thành phần thực hiện việc truyền dữ liệu trên kênh. Tiến trình thể hiện yêu cầu dịch vụ của chương trình thực hiện việc nhận dữ liệu trên kênh.

Hai tiến trình trên chạy song song và thực hiện việc gửi và nhận dữ liệu trên kênh một cách đồng bộ (thực hiện gửi và nhận được coi là một atomic), do đó, nếu tiến trình gửi một thông điệp mà tiến trình còn lại không nhận được thông điệp thì nó sẽ dẫn tới tình trạng deadlock. Điều này thể hiện là thể thức tương tác của chương trình không tuân thủ thể thức tương tác của thành phần. Nếu như không xảy ra tình trạng deadlock thì thể thức của thành phần tuân thủ thể thức của chương trình.

Các bước thực hiện:

Bước 1. Như đã nêu (chương 3), ta mô tả kiểu thông báo là kiểu mtype =

{u, v, s, … } trong đó u, v, s, … là tên của các dịch vụ cung cấp bởi thành phần.

Khai báo một kênh truyền thông điệp dạng kênh gặp (rendezvous) để thực hiện

việc truyền, nhận thông điệp kiểu mtype ở trên: chan k = [0] of mtype. Sau đó

dịch giao thức tương tác của thành phần (automat, biểu thức chính qui v.v.) thành

một tiến trình P trong SPIN bằng ngôn ngữ mô hình hóa Promela.

Bước 2. Trừu tượng hóa chương trình (chương trình người dùng) thành một

được làm tự động. Tư tưởng chủ đạo là trừu tượng hóa các tính toán địa phương thành các lệnh rỗng (lệnh skip), lệnh lặp thành do .. od, lệnh rẽ nhánh thành if .. fi.

Chú ý: Nếu giao diện là biểu thức chính qui mô tả giao thức, thì phép (*)

tương đương với (do – od -> break), phép (+) tương đương với (if – fi hoặc do –

od), phép tuần tự tương đương với (;). Việc gọi dịch vụ s của chương trình người

dùng dịch thành lệnh k?s, việc cung cấp dịch vụ s của thành phần được dịch thành lệnh k!s.

Sau khi kiểm tra lỗi cú pháp thực hiện bước 3.

Bước 3. Chạy song song hai tiến trình P và U trong SPIN (thực hiện xác minh verification).

Kết qủa sau khi xác minh, nếu chương trình không báo lỗi deadlock

(Invaled End State) trong cửa sổ pan.out nghĩa là thể thức của chương trình người

dùng tuân thủ thể thức của thành phần. Ngược lại, nếu báo lỗi deadlock (Invalid

End State) thì không tuân thủ.

Một phần của tài liệu Ứng dụng của spin để kiểm chứng sự tuân thủ thể thức tương tác của chương trình (Trang 54)

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

(69 trang)