Kiểu dữ liệu, toán tử và câu lệnh

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 36)

a. Kiểu dữ liệu

Theo [10], kiểu dữ liệu của ngôn ngữ Promela được mô tả như trong bảng 4.1.

Bảng 4.1. Kiểu dữ liệu số của Promela

Kiểu Giá trị Kích cỡ (bits) Bit, bool 0, 1, false, true 1

Byte 0..255 8

Short -32768 .. 32767 16

Int 32

Ngoài ra thì Promela còn cung cấp các kiểu dữ liệu khác là: chan (kiểu kênh), mtype (kiểu tự định nghĩa).

Promela không cung cấp kiểu ký tự (char), kiểu chuỗi (string) và kiểu dấu phẩy động (floating-point number). Ký tự có thể gán cho biến với kiểu byte và được ghi ra theo cấu trúc %c. Kiểu chuỗi là không cần thiết trong Promela do cần tối giản hóa chương trình, và từ khóa printf chỉ có tác dụng khi mô hình hóa chương trình, còn khi SPIN chứng minh chương trình thì không gọi đến nó. Kiểu dấu phẩy động có thể được sử dụng bằng cách nhúng các mã lệnh C vào trong chương trình.

b. Toán tử và biểu thức

Theo [10], một tập các toán tử trong Promela được định nghĩa như trong Hình 4.1. Các toán tử này được mô tả tương tự như ngôn ngữ C. Có một điểm cần lưu ý là các toán tử này là vô hướng (side-effect free), và chỉ có các hậu tố trong phép toán

chứ không có các tiền tố. Ví dụ: ta chỉ có thể biểu diễn là: a = b++ là đúng

a = ++b là sai

Hình 4.1. Các toán tử trong ngôn ngữ Promela

Các định danh biểu tượng (Symbolic names) được dùng để khai báo một biểu tượng cho một số, một marco tiền xử lý có thể được dùng ở đầu chương trình.

# define max 10

Kiểu mtype (message type – kiểu thông điệp) được dùng để khai báo các định danh bộ nhớ cho các giá trị. Ưu điểm của mtype là các giá trị biểu tượng có thể được

in ra theo cấu trúc %e, và sau đó chúng sẽ xuất hiện trong phần lần vết (traces) của chương trình. Nhược điểm của mtype là nó chỉ có một tập các tên đã định nghĩa trước cho toàn bộ chương trình. Giá trị mtype có thể được in ra bằng lệnh printm.

c. Câu lệnh if

Lệnh if dùng để điều khiển các cấu trúc rẽ nhánh sẽ được khai báo theo cấu trúc:

if

:: điều kiện 1 -> thực hiện biểu thức 1 :: điều kiện 2 -> thực hiện biểu thức 2 :: điều kiện 3 -> skip

fi;

Trong Promela thì câu lệnh điều kiện được định nghĩa bằng cặp từ khóa if và

fi, cùng với cặp dấu hai chấm (::) định nghĩa điều kiện trong chương trình. Từ khóa skip được dùng để thoát ra khỏi chương trình khi mà biểu thức đánh giá luôn có giá

trị true hoặc (1).

d. Câu lệnh lặp do

Chỉ có một loại câu lệnh lặp trong Promela là câu lệnh do. Câu lệnh lặp do được khai báo tương tự như câu lệnh điều kiện if.

do

:: điều kiện 1 -> thực hiện biểu thức 1 :: điều kiện 2 -> thực hiện biểu thức 2 :: điều kiện 3 -> break

od; (adsbygoogle = window.adsbygoogle || []).push({});

Đoạn mã lệnh lặp được bao trong cặp từ khóa do và od, các lệnh ở bên trong

đoạn mã được định nghĩa bởi cặp dấu hai chấm (::), để thoát khỏi vòng lặp thì ta dùng từ khóa break.

e. Câu lệnh nhảy jump

Promela cung cấp các câu lệnh nhảy đến một phần khác trong chương trình là

goto, break, skip. Lệnh nhảy goto có thể thay thế cho lệnh break trong vòng lặp,

nhưng lệnh nhảy goto cần được chỉ định là sẽ nhảy đến phần nào của chương trình bằng một nhãn (label), còn lệnh break chỉ đơn giản là thoát ra khỏi vòng lặp.

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 36)