Mô hình hóa hệ thống bằng ngôn ngữ Promela

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

Từ máy trạng thái hữu hạn mở rộng, ta xậy dựng lên mô hình của máy ATM. Hình 6.2 mô tả các thông điệp được truyền qua lại giữa ba tiến trình là khách hàng, máy ATM và ngân hàng. Nhiệm vụ chính của máy ATM là truyền thông điệp qua lại giữa khách hàng và ngân hàng. Để tránh việc bùng nổ không gian trạng thái, thì các trường Amount_Withdraw, Amount_Deposit, Amount_Balance đều được khai báo kiểu byte. Các giao tác giữa tiến trình cũng sẽ được khai báo với kiểu bool, byte, hoặc mtype.

Hình 6.2. Lược đồ truyền thông điệp trong máy ATM

Hình 6.3 thể hiện các thông điệp truyền trong hệ thống được gán kiểu mtype:

Hình 6.3. Các thông điệp trong máy ATM

Có ba tiến trình chạy trong hệ thống là tiến trình Customer, ATM và Bank. Ba tiến trình này tương tác với nhau thông qua 4 kênh là kênh CusToATM, kênh ATMToCus, kênh ATMToBank và kênh BankToATM được khai báo như trong hình 6.4. Kênh CusToATM gửi thông điệp từ khách hàng tới máy ATM, mỗi thông điệp sẽ gồm bốn trường: trường thứ nhất được khai báo với kiểu byte thể hiện rằng đây là một khách hàng, trường thứ hai có kiểu mtype thể hiện thao tác từ khách hàng với

máy ATM, trường thứ ba có kiểu byte thể hiện số tiền được thực hiện giao dịch và đang được dùng trong giao dịch và trường thứ tư có kiểu mtype thể hiện thông điệp liên quan đế các giao tác trong phiên giao dịch. Tương tự, các kênh ATMToCus, kênh

mtype={PIN,NokPIN,CardLocked,okPIN,Operate_Logon, Operate_Withdraw,Operate_Deposit,Operate_BalInq, Operate_Logout,withdrawOK,depositOK,r2ManyWD, r2ManyD, WithdrawError, ShowBalance,SmbolRequest}

ATMToBank và kênh BankToATM thể hiện việc gửi thông điệp từ máy ATM đến khách hàng, từ máy ATM đến ngân hàng và từ ngân hàng đến máy ATM.

Hình 6.4. Các kênh thông điệp trong máy ATM

Các hình 6.5 là mô tả hàm init để chạy chương trình với khai báo atomic{} để các tiến trình trong ATM sẽ được thực hiện lần lượt cho đến hết mà không bị ngắt quãng và hình 6.6 là mã lệnh tóm tắt của các tiến trình Customer. (Mã lệnh đầy đủ của chương trình được đặt trong phần phụ lục). Giá trị của mỗi lần rút tiền, hay gửi tiền đã được cố dịnh là 10$ hay 20$ để đảm bảo tính đơn giản của hệ thống.

Hình 6.5. Hàm init khởi tạo các tiến trình

chan CusToATM= [0] of {byte, mtype, byte, mtype};

/*Channel message from customer to ATM*/

chan ATMToCus = [0] of {byte, mtype, byte, mtype}; /*Channel message from ATM to customer*/

chan ATMToBank = [0] of {byte, mtype, byte, mtype}; /*Channel message from ATM to bank*/

chan BankToATM = [0] of {byte, mtype, byte, mtype}; /*Channel message from bank to ATM*/

251 init{ 252 atomic{ 253 run Bank(); 254 run ATM(); 255 run Customer(); 256 } 257 }

Hình 6.6. Mã lệnh Promela của tiến trình Customer

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