Tải bản đầy đủ (.doc) (65 trang)

Kiểm chứng mô hình ứng dụng cho hệ thống thang máy

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.9 MB, 65 trang )

TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2
KHOA CÔNG NGHỆ THÔNG TIN

TRƯƠNG THỊ NGỌC BÍCH

KIỂM CHỨNG MÔ HÌNH ỨNG DỤNG
CHO HỆ THỐNG THANG MÁY

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC
Chuyên ngành: Sư phạm Tin học
Người hướng dẫn khoa học

ThS. NGUYỄN THỊ LOAN

HÀ NỘI – 2017


LỜI CẢM ƠN
Lời đầu tiên em xin bày tỏ lòng biết ơn sâu sắc tới ThS. Nguyễn Thị Loan,
người đã tận tình giúp đỡ, chỉ bảo em trong suốt quá trình học tập và làm khóa luận.
Em xin bày tỏ lòng biết ơn tới các thầy, cô giáo trong Khoa Công nghệ
Thông tin – Trường Đại học Sư phạm Hà Nội 2. Các thầy cô đã dạy bảo, chỉ dẫn
chúng em và luôn tạo điều kiện tốt nhất cho chúng em học tập trong suốt quá trình
học đại học.
Tôi xin cảm ơn các bạn sinh viên lớp K39 Sư phạm Tin học đã giúp đỡ, động
viên tôi trong suốt 4 năm học tại trường.
Cuối cùng con xin gửi lời cảm ơn tới gia đình, những người thân yêu đã
động viên, luôn sát bên con trong suốt quãng thời gian qua.
Hà Nội, ngày 20 tháng 4 năm 2017
Sinh viên


Trương Thị Ngọc Bích


LỜI CAM ĐOAN
Tôi xin cam đoan đây là kết quả nghiên cứu của riêng tôi. Nội dung nghiên
cứu và kết quả trong khóa luận hoàn toàn trung thực, không sao chép ở đâu, và chưa
từng được ai công bố trong bất kì công trình nghiên cứu nào trước đây. Các tài liệu
tham khảo có nguồn gốc, xuất xứ rõ ràng.

Người cam đoan

Trương Thị Ngọc Bích


MỤC LỤC
MỞ ĐẦU .............................................................................................................................. 1
CHƯƠNG 1. TỔNG QUAN VỀ KIỂM CHỨNG MÔ HÌNH ...................................... 5
1.1. Tổng quan về kiểm chứng mô hình [2] ..................................................................... 5
1.2. Hoạt động của kiểm chứng mô hình .................................................................... 6
1.3. Ưu điểm và nhược điểm của kiểm chứng mô hình [2]............................................ 7
1.3.1. Ưu điểm.............................................................................................................7
1.3.2. Nhược điểm.......................................................................................................7
1.4. Ý nghĩa của kiểm chứng mô hình .............................................................................. 8
1.5. Sự khác nhau giữa kiểm chứng mô hình phần mềm và kiểm thử phần mềm ...... 8
1.6. Máy hữu hạn trạng thái ............................................................................................... 9
1.6.1. Định nghĩa FSM................................................................................................9
1.6.2. Biểu diễn FSM ..................................................................................................9
CHƯƠNG 2. CÔNG CỤ KIỂM CHỨNG SPIN VÀ NGÔN NGỮ MÔ HÌNH HÓA
PROMELA.......................................................................................................................... 12
2.1. Ngôn ngữ PROMELA [2] ......................................................................................... 12

2.1.1. Kiểu dữ liệu và toán tử cơ bản ........................................................................14
2.1.2. Dữ liệu kiểu kênh trong PROMELA ..............................................................15
2.1.3. Các cú pháp .....................................................................................................16
2.1.4. Run và atomic .................................................................................................19
2.2. Công cụ SPIN ............................................................................................................. 21
2.2.1. Đặc trưng của SPIN [3]...................................................................................21
2.2.2. Mô hình hệ thống trong SPIN [3] ...................................................................22
2.2.3. Kiểm chứng chương trình trong SPIN [2] ......................................................22
2.2.4. Logic thời gian tuyến tính (LTL – Linear Temporal Logic) ..........................28
2.3. Giao diện người dùng ISPIN .................................................................................... 29


CHƯƠNG 3. ỨNG DỤNG .............................................................................................. 34
3.1. Xây dựng biến và tiến trình đồng hồ [7] ................................................................. 34
3.2. Hệ thống thang máy mức 1

38

3.2.1. Mô tả hệ thống mức 1 .....................................................................................38
3.2.2. Mô hình PROMELA cho hệ thống thang máy mức 1 và kiểm chứng thuộc
tính đơn giản..............................................................................................................40
3.3. Hệ thống thang máy mức 2 ....................................................................................... 41
3.3.1. Mô tả hệ thống mức 2 .....................................................................................41
3.3.2. Mô hình PROMELA cho hệ thống thang máy mức 2 và kiểm chứng thuộc
tính đơn giản..............................................................................................................42
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ..................................................................... 45
TÀI LIỆU THAM KHẢO ................................................................................................ 46


DANH MỤC HÌNH VẼ

Hình 2.2. Màn hình cửa sổ chính của ISPIN ............................................................30
Hình 2.3. Các chức năng trong menu Edit/View ......................................................31
Hình 2.4. Các chức năng trong menu Simulate/Replay ............................................32
Hình 2.5. Các chức năng trong menu Verification ...................................................33
Hình 3.1. Kiến trúc mức 1 của hệ thống thang máy .................................................39
Hình 3.2. Kết quả khi mô phỏng mô hình hệ thống thang máy mức
1.............................40
Hình 3.3. Kết quả kiểm chứng mô hình hệ thống thang máy ...................................41
Hình 3.4. Kiến trúc mức 2 của hệ thống thang máy .................................................42
Hình 3.5. Kết quả khi mô phỏng mô hình hệ thống thang máy mức 2 .....................43
Hình 3.6. Kết quả kiểm chứng mô hình hệ thống thang máy ...................................44


DANH MỤC BẢNG BIỂU
Bảng 2.1. Các kiểu dữ liệu cơ bản trong PROMELA................................................... 14
Bảng 2.2. Các toán tử cơ bản trong PROMELA xếp theo thứ tự độ ưu tiên giảm dần
từ trên xuống dưới. ............................................................................................................ 14
Bảng 2.3. Mô tả các toán tử của LTL ............................................................................. 28
Bảng 2.4. Các toán tử thời gian của LTL ....................................................................... 28


MỞ ĐẦU
1. Lý do chọn đề tài
Ngày nay, Công nghệ Thông tin ngày càng phát triển và được ứng dụng vào
các lĩnh vực khác nhau của đời sống xã hội. Nó tạo ra một diện mạo mới cho xã hội
mà nhờ đó nền văn minh nhân loại được nâng lên một tầm cao mới. Công nghệ
phần mềm là một bộ phận không thể tách rời trong Công nghệ Thông tin. Hiện nay,
công nghệ phần mềm trên thế giới đã và đang phát triển mạnh mẽ như vũ bão.
Những tiến bộ của khoa học kỹ thuật phần cứng đã tạo điều kiện thuận lợi cho
ngành công nghệ phần mềm phát triển không ngừng.

Phần mềm được coi là sản phẩm chính của công nghệ phần mềm. Quá trình
phát triển của phần mềm gồm nhiều giai đoạn: Thu thập, yêu cầu, phân tích, thiết
kế, xây dựng, kiểm chứng, triển khai và bảo trì. Trong đó kiểm chứng phần mềm là
rất quan trọng để đảm bảo chất lượng của một phần mềm.
Kiểm chứng mô hình cũng đóng góp một phần quan trọng vào kiểm chứng
phần mềm. Nhờ kiểm chứng mô hình mà chúng ta có thể kiểm tra một hệ thống
phần mềm trước khi đưa vào xây dựng triển khai có đúng đặc tả không, có đúng
thiết kế không, từ đó phát hiện được các lỗi trong quá trình phân tích các trường
hợp, các khả năng có thể xảy ra của hệ thống phần mềm nhằm khắc phục các lỗi
giúp hệ thống làm việc đúng hướng, tránh rủi ro, sai sót.
Trong thực tế có rất nhiều công cụ khác nhau hỗ trợ việc kiểm chứng mô
hình như NuSMV, SPIN, KRONOS,… nhưng trong phạm vi bài khóa luận này em
lựa chọn công cụ SPIN. SPIN là công cụ kiểm chứng mạnh mẽ, thân thiện, và dễ sử
dụng đồng thời nó có tầm ảnh hưởng trong phát triển phần mềm dành cho các hệ
thống phức tạp như các hệ thống nhúng, hệ thống tương tác, hệ điều hành...
Ý thức được tầm quan trọng của kiểm chứng mô hình cùng với những gì mà
công cụ SPIN mang lại em đã lựa chọn đề tài “Kiểm chứng mô hình ứng dụng
cho hệ thống thang máy”, đây là một đề tài không quá mới nhưng có thể nói đây là
một vấn đề cần được quan tâm khi mà ngày nay các hệ thống được xây dựng lên

1


ngày một nhiều thì việc kiểm chứng mô hình lại càng cần phải được lưu tâm nhiều
hơn nữa. Bởi vì nó có thể giải quyết được các vấn đề liên quan đến phát hiện các
lỗi, giảm thiểu sai sót trong quá trình lắp đặt cũng như vận hành một hệ thống.
2. Mục đích nghiên cứu
Như chúng ta đã biết, Khoa học Công nghệ có nhiều ứng dụng thực tiễn rất
quan trọng trong đời sống. Một trong số đó phải kể đến là hệ thống thang máy.
Ngày nay, khi nhu cầu về nơi ở của người dân tăng cao tại khu vực các trung tâm đô

thị lớn thì việc xây các ngôi nhà Cấp 4 không còn được khả thi. Thay vào đó người
ta xây dựng những ngôi nhà nhiều tầng. Những ngôi nhà nhiều tầng có chiều cao
lớn thì việc trang bị thang máy là tất yếu để phục vụ việc đi lại trong tòa nhà. Nếu
vấn đề vận chuyển người trong những tòa nhà này không được giải quyết thì các dự
án xây dựng các tòa nhà cao tầng sẽ khó thành hiện thực.
Thang máy là một thiết bị vận chuyển đòi hỏi tính an toàn nghiêm ngặt, nó
liên quan trực tiếp đến tài sản và tính mạng con người. Vì vậy yêu cầu chung đối
với thang máy khi thiết kế, chế tạo, lắp đặt, vận hành, sử dụng và sửa chữa là phải
tuân thủ một cách nghiêm ngặt các yêu cầu về kỹ thuật an toàn được quy định trong
các tiêu chuẩn, quy trình, quy phạm…
Trong đó, việc kiểm thử mô hình hệ thống thang máy trước khi đi vào chế
tạo và vận hành mang một ý nghĩa hết sức quan trọng, nó giúp phát hiện các lỗi
trong thiết kế nhờ đó giảm thiểu khả năng sai sót trong chế tạo, tránh xảy ra những
rủi ro không đáng có.
Là sinh viên Công nghệ Thông tin hiểu được tầm quan trọng của việc kiểm
thử mô hình sau khi nghiên cứu các tài liệu liên quan em đã bắt tay vào mô phỏng
mô hình hệ thống thang máy bằng ngôn ngữ PROMELA và sử dụng công cụ SPIN
để hỗ trợ quá trình kiểm chứng mô hình. Các vấn đề như: Thang máy chỉ di chuyển
lên (xuống) khi tất cả các cửa thang máy được đóng, khi cabin đang di chuyển thì
không cửa nào được mở,… sẽ được mô phỏng và kiểm chứng trong phần ứng dụng
của đề tài.


3. Nhiệm vụ nghiên cứu
Đề tài “Kiểm chứng mô hình ứng dụng cho hệ thống thang máy” đi vào
nghiên cứu thế nào là kiểm chứng, kiểm chứng mô hình, đặc điểm của kiểm chứng
mô hình, các giai đoạn của quá trình kiểm chứng mô hình, công cụ SPIN, ngôn ngữ
mô hình hóa PROMELA và ứng dụng vào kiểm chứng mô hình hệ thống thang
máy.
4. Đối tượng và phạm vi nghiên cứu

Đối tượng nghiên cứu của đề tài là Kiểm chứng mô hình, SPIN – công cụ hỗ
trợ kiểm chứng mô hình, ngôn ngữ mô hình hóa PROMELA, mô hình hệ thống
thang máy.
Phạm vi nghiên cứu của đề tài là kiểm chứng mô hình hệ thống thang máy
được mô hình hóa bằng ngôn ngữ PROMELA, sử dụng công cụ SPIN.
5. Ý nghĩa khoa học và thực tiễn
Đề tài “Kiểm chứng mô hình ứng dụng cho hệ thống thang máy” giúp
chúng ta có thể tiếp cận gần hơn với kiểm chứng mô hình thông qua một công cụ cụ
thể là SPIN. Từ đó, công việc chế tạo, xây dựng các hệ thống sẽ trở nên dễ dàng,
đầy đủ về chức năng cũng như các thao tác mà hệ thống đó cần phải thực hiện, sửa
được các lỗi logic, tránh được các sai sót cũng như rủi ro.
6. Phương pháp nghiên cứu

 Phương pháp nghiên cứu lý luận
Nghiên cứu qua việc đọc sách báo các tài liệu liên quan nhằm xây dựng cơ
sở lý thuyết của khóa luận và các biện pháp cần thiết để giải quyết các vấn đề của
khóa luận.

 Phương pháp chuyên gia
Tham khảo ý kiến của các chuyên gia để kiểm thử mô hình phù hợp với yêu
cầu thực tiễn, nhận biết sai sót giúp kịp thời bổ sung, sửa chữa nhằm đáp ứng nhu
cầu ngày càng cao của người sử dụng.


 Phương pháp thực nghiệm
Thông qua quan sát, kiểm nghiệm thực tế, các yêu cầu của cơ sở, những lý
luận đã được nghiên cứu và kết quả đạt được qua những phương pháp trên.
7. Cấu trúc khóa luận
Ngoài lời cảm ơn, lời cam đoan, mở đầu, kết luận và hướng phát triển, tài
liệu tham khảo, khóa luận có những nội dung sau:

Chương 1. Tổng quan về kiểm chứng mô hình
1. Tổng quan về kiểm chứng mô hình
2. Hoạt động của kiểm chứng mô hình
3. Ưu điểm và nhược điểm của kiểm chứng mô hình
4. Ý nghĩa của kiểm chứng mô hình
5. Sự khác nhau giữa kiểm chứng mô hình phần mềm và kiểm thử phần
mềm
6. Máy hữu hạn trạng thái
Chương 2. Công cụ kiểm chứng SPIN và ngôn ngữ mô hình hóa
PROMELA
1. Ngôn ngữ PROMELA
2. Công cụ SPIN
3. Giao diện người dùng ISPIN
Chương 3. Ứng dụng
1. Hệ thống thang máy mức 1
2. Hệ thống thang máy mức 2


CHƯƠNG 1
TỔNG QUAN VỀ KIỂM CHỨNG MÔ HÌNH
Kiểm chứng mô hình (model checking) là một hướng tiếp cận hiệu quả cho
việc đảm bảo chất lượng phần mềm. Kỹ thuật này được áp dụng để chứng minh một
cách tự động tính đúng đắn của phần mềm hoặc chỉ ra tại sao phần mềm không chạy
đúng thông qua phản ví dụ. Kiểm chứng mô hình thường được áp dụng ở giai đoạn
thiết kế vì việc mô hình hóa bản thiết kế hệ thống dễ dàng hơn mô hình hóa mã
nguồn của hệ thống. Ngoài ra, việc sớm tìm ra lỗi ở bản thiết kế sẽ giúp giảm thiểu
rủi ro của quá trình phát triển phần mềm.
1.1. Tổng quan về kiểm chứng mô hình [2]
Kiểm chứng mô hình là kỹ thuật phân tích hệ thống để xác định tính hợp lệ
của một hay nhiều tính chất mà người dùng quan tâm trong một mô hình cho trước.

Cụ thể, với một mô hình M và thuộc tính p cho trước, nó kiểm tra liệu thuộc tính p
có thỏa mãn trong mô hình M hay không: M |= p. Về mặt thực thi, kiểm chứng mô
hình là kỹ thuật tĩnh, nó duyệt qua tất cả các trạng thái, các đường thực thi có thể có
trong mô hình M để xác định tính khả thỏa của p.
Trên thực tế, kiểm chứng mô hình là một phương thức hiệu quả để phát hiện
lỗi trong pha thiết kế ban đầu.
Kiểm chứng mô hình gồm có 3 bước: Mô hình hóa, đặc tả và kiểm chứng.
Ở bước mô hình hóa, kết quả tạo ra là một mô hình mà các công cụ kiểm
chứng có thể sử dụng được. Đầu vào của bước này có thể là bản thiết kế phần mềm
hoặc là các dòng mã lập trình.
Trong bước tiếp theo, đặc tả các thuộc tính mà bản thiết kế cần thỏa mãn.
Các thuộc tính này thường được diễn đạt bằng các biểu thức logic. Kết quả của hai
bước trên là đầu vào của bước cuối cùng – kiểm chứng mô hình.
Bước cuối cùng là kiểm chứng, công cụ kiểm chứng sẽ tự động thực hiện và
trả về kết quả là thỏa mãn nếu mô hình thỏa mãn các thuộc tính, hoặc đưa ra một


phản ví dụ nếu mô hình không thỏa mãn. Dựa vào phản ví dụ, có thể tìm ra được lý
do vì sao mô hình không thỏa mãn các thuộc tính đặt ra.
Tóm lại, kiểm chứng mô hình là một kỹ thuật giúp kiểm tra một chương trình
hoặc một bản thiết kế có thỏa mãn các tính chất đặt ra hay không một cách tự động.
Đầu vào của nó là một mô hình cần kiểm chứng và các thuộc tính mà nó cần thỏa
mãn. Đầu ra là kết luận mô hình thỏa mãn các tính chất hoặc đưa ra một phản ví dụ
nếu mô hình không thỏa mãn.
1.2. Hoạt động của kiểm chứng mô hình

Requirements

System


Formalizing

Modeling

Property

System model

specification
Model checking
Satisfied

Violated +
Counterexample

Simulation

Location
error

Hình 1.1. Sơ đồ hoạt động của phương pháp kiểm chứng mô hình [1]


Sau khi đặc tả hệ thống cần xây dựng một mô hình hệ thống thể hiện các
hành vi của hệ thống, mô hình này có thể được viết bằng ngôn ngữ C, các ngôn ngữ
tương tự C hay Java. Cùng với đó ta biểu diễn các tính chất cần kiểm chứng của hệ
thống dưới dạng các biểu thức hình thức.
1.3. Ưu điểm và nhược điểm của kiểm chứng mô hình [2]
1.3.1. Ưu điểm
 Là phương pháp kiểm chứng tổng quát có thể áp dụng cho một phạm vi lớn

các ứng dụng như: Hệ thống nhúng, thiết kế phần cứng,...
 Hỗ trợ kiểm chứng cục bộ, các tính chất có thể được kiểm tra một cách
riêng lẻ từ đó có thể tập trung kiểm chứng một tính chất quan trọng trước
mà không cần đặc tả một hệ thống hoàn chỉnh.
 Cung cấp các thông tin cho việc gỡ lỗi khi phát hiện tính chất không thỏa
mãn.
 Kiểm chứng mô hình đang ngày càng trở nên phổ biến và được ưa chuộng
hơn vì vậy ngày càng xuất hiện thêm nhiều nhà kiểm chứng mô hình.
 Có thể được tích hợp một cách dễ dàng vào những quy trình phát triển
phần mềm hiện tại.
 Kiểm chứng mô hình có nền tảng đúng đắn của toán học, nó dựa trên lý
thuyết về thuật toán đồ thị, cấu trúc dữ liệu và logic.
1.3.2. Nhược điểm
 Chủ yếu phù hợp với các ứng dụng tập trung vào điều khiển, không phù
hợp với các ứng dụng hướng dữ liệu do khối lượng dữ liệu thường tăng vô
tận.
 Kiểm duyệt mô hình kiểm chứng mô hình của hệ thống chứ không phải
bản thân hệ thống, mọi kết quả đạt được là về mặt mô hình hệ thống, do đó
cần có những kỹ thuật khác hỗ trợ như kiểm duyệt để tìm ra lỗi chế tạo
(trong phần cứng) và lỗi lập trình (trong phần mềm).


 Kiểm chứng mô hình chỉ kiểm tra những tính chất được đặc tả, ta không
thể biết được thông tin về các tính chất không được kiểm chứng.
 Việc sử dụng kiểm chứng mô hình đòi hỏi kinh nghiệm trừu tượng hóa hệ
thống để cho ra một mô hình hệ thống và thể hiện các tính chất của hệ
thống theo logic hình thức.
1.4. Ý nghĩa của kiểm chứng mô hình
Kiểm chứng mô hình phần mềm cho phép tìm ra được các lỗi ngay từ giai
đoạn thiết kế của quy trình phát triển. Điều này có vai trò rất quan trọng vì các lỗi từ

giai đoạn thiết kế nếu tìm ra muộn có thể gây thiệt hại rất lớn. Vì vậy, nó có ý nghĩa
quan trọng trong quy trình phát triển phần mềm.
Trong cuộc sống hàng ngày, sự xuất hiện và vận hành của các hệ thống phần
mềm là rất cần thiết và hết sức quan trọng. Nhiều công việc có mức độ ảnh hưởng
lớn được thực hiện bởi phần mềm như điều khiển đèn giao thông, giao dịch ngân
hàng, điều khiển các thiết bị y tế, điều khiển thang máy,... Những phần mềm thực
hiện các công việc đó phải đảm bảo có độ tin cậy cao và không được phép xuất hiện
lỗi.
1.5. Sự khác nhau giữa kiểm chứng mô hình phần mềm và kiểm thử phần
mềm
Cả kiểm chứng mô hình và kiểm thử phần mềm đều thực hiện vai trò đảm
bảo chất lượng phần mềm bằng việc tìm ra các lỗi nếu có của phần mềm.
Tuy nhiên giữa kiểm chứng mô hình và kiểm thử phần mềm có một số điểm
khác nhau quan trọng sau:
Kiểm thử phần mềm đòi hỏi phải có chương trình để thực hiện, còn kiểm
chứng mô hình thì ngoài kiểm thử trên mã nguồn còn có thể dùng để kiểm chứng
bản thiết kế, nghĩa là khi chương trình vẫn còn trên giấy.
Kiểm thử phần mềm chỉ có thể khẳng định được chương trình không gặp lỗi
đối với các trường hợp kiểm thử đã kiểm tra tức không tìm thấy lỗi chứ không


khẳng định được là chương trình hoàn toàn không còn lỗi. Ngược lại, kiểm chứng
phần mềm cho phép ta kết luận được chương trình hoàn toàn không còn lỗi.
Tuy nhiên, kiểm thử phần mềm có ưu điểm rất lớn là dễ thực hiện. Một
người bình thường cũng có thể thực hiện được. Trong khi đó, kiểm chứng mô hình
đòi hỏi phải mô hình hóa và đặc tả, công việc này rất khó và đòi hỏi người thực hiện
cần có trình độ kinh nghiệm và kiến thức nhất định.
Tóm lại, kiểm chứng mô hình là một phương pháp hiệu quả nhất để kiểm
chứng phần mềm. Tuy nhiên để sử dụng được nó một cách hiệu quả đòi hỏi phải
mất nhiều thời gian và công sức để nghiên cứu và thực hiện.

1.6. Máy hữu hạn trạng thái
Máy hữu hạn trọng thái (FSM – Finite State Machines) hay còn gọi là máy tự
động trạng thái hữu hạn (FSA – Finite State Automaton) là một trong số những loại
máy được sử dụng trong kiểm chứng mô hình. Trong khóa luận này sẽ chỉ đề cập
đến định nghĩa thế nào là FSM, cách biểu diễn FSM (liệt kê, đồ thị, bảng).
1.6.1. Định nghĩa FSM
Máy hữu hạn trạng thái là một bộ M = <S, I, O, s0, δ, λ>. Trong đó:
 S là tập các trạng thái
 I là tập thông tin đầu vào
 O là tập thông tin đầu ra
 s0 là tập thông tin ban đầu
 δ: S x I  S là hàm chuyển trạng thái
 λ: S x I  O là hàm thông tin đầu ra
1.6.2. Biểu diễn FSM
1.6.2.1. Biểu diễn kiểu liệt kê
Cho FSM M = <S, I, O, s0, δ, λ>
 Trạng thái ban đầu s0
 Tập trạng thái S = {s1, s2, ..., sn}


 Tập Inputs I= {i1, i2, ..., in}
 Tập chuyển trạng thái {δ(ii, sj) = st} với ∀ ii ∈ I và sj, st ∈ S
 Tập Outputs O = {λ(si, ik) = ot} với si ∈ S; ∀ ik ∈ I; ∀ ot ∈ O
1.6.2.2. Biểu diễn bằng đồ thị
Các FSM và các yếu tố của chúng được biểu diễn bằng đồ thị. Các yếu tố
chính trong đồ thị bao gồm:
 Mỗi trạng thái được mô tả như là một nút (node) trong đồ thị. Mỗi sự
chuyển tiếp được diễn tả như một đường link được kết nối trực tiếp từ
trạng thái này sang trạng thái khác được coi là cạnh của đồ thị với nhãn
là cặp Input/Output (ký hiệu “/“ để phân biệt Input và Output).

 Ví dụ máy hữu hạn trạng thái bằng đồ thị.
0/0

1/0

1/0
s0

s1
0/0

1/0

s2
1/1

0/0

s3

0/0
Trong đó:
I = {0,1};
S = {s0, s1, s2, s3};
O = {0,1};
s0 = s0;
δ = {δ(s0,0) = s0, δ(s0,1) = s1, δ(s1,0) = s0, δ(s1,1) = s2, δ(s2,0) = s3,
δ(s2,1) = s2, δ(s3,0) = s0, δ(s0,0) = s0, δ(s3,1) = s1};
λ = {λ(s0,0) = 0, λ(s0,1) = 0, λ(s1,0) = 0, λ(s1,1) = 0, λ(s2,0) = 0,



λ(s2,1) = 0, λ(s3,0) = 0, λ(s3,1) = 1}.
Mô hình máy hữu hạn trạng thái FSM được sử dụng để mô tả hoạt động của
nhiều hệ thống trong thực tế.
1.6.2.3. Biểu diễn bằng dạng bảng
Một FSM có thể biểu diễn bằng dạng bảng, bảng thường là kiểu ma trận
vuông (n x n ô).


CHƯƠNG 2
CÔNG CỤ KIỂM CHỨNG SPIN VÀ NGÔN NGỮ MÔ HÌNH HÓA
PROMELA
Như chúng ta đã biết, để có thể làm việc được với SPIN chúng ta phải xây
dựng mô hình của hệ thống bằng ngôn ngữ PROMELA. Chương này sẽ lần lượt
trình bày những khái niệm cơ bản về ngôn ngữ mô hình hóa PROMELA, công cụ
kiểm chứng SPIN, và giao diện người dùng ISPIN.
2.1. Ngôn ngữ PROMELA [2]
PROMELA là tên viết tắt của PRocess MEta LAnguage. Nó là một ngôn ngữ
đơn giản và hiệu quả trong việc mô hình các hệ thống hữu hạn trạng thái, là một
ngôn ngữ mô hình hóa không phải là một ngôn ngữ lập trình.
Mô hình được mô hình hóa bởi PROMELA sẽ được phân tích với SPIN để
kiểm chứng rằng hệ thống được mô hình hóa sẽ có những hành vi mong muốn hay
không.
Một mô hình PROMELA bao gồm có:
- Các khai báo kiểu
- Các khai báo kênh – channel
- Các khai báo biến
- Các khai báo tiến trình
Một chương trình PROMELA gồm một hay nhiều tiến trình, mỗi tiến trình
chứa một chuỗi các câu lệnh. Các tiến trình có thể có tham số hoặc không. Các tiến

trình được khai báo với từ khóa active sẽ được khởi tạo và gán một giá trị pid
(process id) duy nhất.
active proctype P() {
lenh_1;
...
lenh_n;
}

//tiến trình P không có tham số


Ví dụ 2.1: Dưới đây là một ví dụ cơ bản về tiến trình không sử dụng tham số
active proctype P() {

printf("Hello guys! My name's Bich");
}
Tiến trình khai báo mà không có từ khóa active sẽ không được pid và không
thể chạy.
proctype P() {

//tiến trình P không có tham số

lenh_1;
...
lenh_n;
}
Ví dụ 2.2: Nếu tiến trình ở ví dụ 2.1 không sử dụng từ khóa active, tức là:
proctype P(){
printf("Hello guys! My
name's Bich");

}
Khi chạy mô phỏng không có tiến trình nào được tạo ra (0 processes
created). Đồng nghĩa với việc, chương trình không thể chạy nếu thiếu từ khóa
active.
PROMELA có tính chất không tất định. Khi SPIN chạy chương trình, các
tiến trình được chọn bất kì để thực thi, do vậy các lệnh trong các tiến trình được
thực thi xen kẽ một cách ngẫu nhiên.
Mỗi tiến trình có riêng một biến lưu trữ vị trí của câu lệnh sẽ được thực thi
khi đến lượt nó chạy.


2.1.1. Kiểu dữ liệu và toán tử cơ bản
2.1.1.1. Kiểu dữ liệu cơ bản
Không giống như một số ngôn ngữ lập trình, trong PROMELA không tồn tại
kiểu số thực, kiểu kí tự và kiểu xâu.
PROMELA định nghĩa kiểu mtype
mtype= {name_1, name_2, ..., name_n};
Bảng 2.1. Các kiểu dữ liệu cơ bản trong PROMELA
Bảng 2.1. Kiểu dữ liệu cơ bản trong PROMELA
Tên kiểu

Kích thước (bits)

Dữ liệu

bit, bool

1

0, 1, false, true


byte

8

0...255

short

16

-32768...32767

int

32

-2 ...2 – 1

unsigned

≤32

0...2 – 1

31

31

n


2.1.1.2. Toán tử cơ bản
Bảng 2.2. Các toán tử cơ bản trong PROMELA xếp theo thứ tự độ ưu tiên
giảm dần từ trên xuống dưới
Kí hiệu

Tên

=

toán tử gán

||

hoặc (toán tử logic)

&&
= =, !=
<, <=, >, >=

và (toán tử logic)
bằng, khác (toán tử so sánh)
nhỏ hơn, nhỏ hơn hoặc bằng, lớn hơn, lớn hơn hoặc bằng (toán tử
so sánh)


++, --

tăng, giảm


!

phủ định (toán tử logic)

()

đóng mở ngoặc

Có thể dễ dàng nhận thấy, các toán tử cơ bản trong PROMELA tương tự với
các toán tử trong C.
2.1.2. Dữ liệu kiểu kênh trong PROMELA
2.1.2.1. Cú pháp
Kiểu kênh trong PROMELA đi kèm với hai toán tử gửi: ! và nhận: ?, được
khai báo với kiểu dữ liệu (kiểu của thông điệp) mà nó có thể nhận và gửi [2].
Khai báo:
chan ch = [dung_luong] of {kieu_du_lieu_1, ..., kieu_du_lieu_n};
Có hai kiểu kênh trong PROMELA:
 Kênh gặp: Được khai báo với dung lượng bằng 0.
 Kênh đệm: Được khai báo với dung lượng lớn hơn 0.
Lệnh truyền dữ liệu trên kênh:
 Gửi: ten_bien_kenh ! bieu_thuc_1, ..., bieu_thuc_n.
 Nhận: ten_bien_kenh ? bien_1, ..., bien_n.
 Giá trị các biểu thức có kiểu tương ứng với kiểu khi kênh được khai
báo.
Các biểu thức trong lệnh gửi sẽ được tính toán và giá trị thu được sẽ trở
thành thông điệp truyền trên kênh, lệnh nhận được thực thi sau lệnh đó sẽ gán các
giá trị này cho các biến của nó.
Khi có thông điệp gửi lên kênh lệnh nhận được thực thi.
2.1.2.2. Kênh gặp
Như ở phần trên đã giới thiệu, kênh gặp được khai báo với dung lượng bằng

0 biểu thị rằng nơi gửi (tiến trình chứa lệnh gửi) và nơi nhận thông điệp (tiến trình


chứa câu lệnh nhận) truyền dữ liệu một cách đồng bộ. Khi đó, tiến trình chứa lệnh
gửi sẽ bị chặn cho đến khi lệnh nhận trong tiến trình nhận được thực thi.
Nếu trong một tiến trình có một lệnh gửi (nhận) được khởi tạo mà không có
lệnh nhận (gửi) nào tương ứng (về của kiểu thông điệp) thì tiến trình đó sẽ bị khóa
(block).
2.1.3. Các cú pháp
2.1.3.1. Lệnh printf()
Câu lệnh printf
printf (“xau_ki_tu“, cac_bien);
Trong xâu kí tự có thể chứa các định dạng in tương ứng với các biến như
%d.
Ví dụ 2.3: Ví dụ một lệnh in cơ bản
x=2;
printf (“Number %d is a prime number“, x);
2.1.3.2. Lệnh lựa chọn if
Tương tự như một số ngôn ngữ lập trình bậc cao khác như: Pascal, C, C++,
C#, PROMELA cung cấp cho chúng ta câu lệnh rẽ nhánh với cú pháp như sau:
if
::bieu_thuc_logic_1  lenh_11; lenh_12; ...lenh_1n;
::bieu_thuc_logic_2  lenh_21; lenh_22; ...lenh_2n;
...
::bieu_thuc_logic_n  lenh_n1; lenh_n2; ...lenh_nn;
fi;
Trong đó:
o Biểu thức logic (từ 1 tới n) chỉ có thể mang giá trị hoặc true, hoặc
false.



o Ma trận lệnh n x n là các câu lệnh trong PROMELA.

Ví dụ 2.4: Kiểm tra một số là số chẵn hay số lẻ?
1 active proctype Q()
2{
3 int x=6;
4 if
5 :: x%2==0 –> printf("%d la so chan\n",x);
6 :: x%2!=0 –> printf("%d la so le\n",x);
7 fi;
8}
2.1.3.3. Lệnh lặp do
Lệnh lặp do dùng để kiểm tra điều kiện (biểu thức logic) nếu đúng (giá trị là
true) thì các câu lệnh tương ứng với biểu thức sẽ được thực thi. Nếu hai hay nhiều
biểu thức logic từ biểu thức logic 1 tới biểu thức logic n có giá trị true, chuỗi lệnh
theo sau biểu thức có giá trị true sẽ được thực thi.
do
::bieu_thuc_logic_1  lenh_11; lenh_12; ...lenh_1n;
::bieu_thuc_logic_2  lenh_21; lenh_22; ...lenh_2n;
...
::bieu_thuc_logic_n  lenh_n1; lenh_n2; ...lenh_nn;
::bieu_thuc_logic  break;
od;
Ví dụ 2.5:
active proctype P() {
int a=2,b=3,c=1,d;


d=b*b–4*a*c;

do
::d>0 –> printf("Phuong trinh co 2 nghiem phan biet");
::d=0 –> printf("Phuong trinh co 1 nghiem");
::d<0 –> printf("Phuong trinh vo nghiem");
od;
}
2.1.3.4. Lệnh nhảy goto
Giúp nhảy đến một đoạn chương trình sau một nhãn với tên nhãn đặt trước
dấu hai chấm.
goto: ten_nhan;
Ví dụ 2.6:
do
::(x > y)  x = x – y;
::(y > x)  y = y – x;
::(y = x)  goto done;
od
done: skip
2.1.3.5. Lệnh define
Define là lệnh macro dùng để định nghĩa kí hiệu cho một biểu thức và được
đặt ở đầu chương trình
Ví dụ 2.7: Định nghĩa cho biến length có giá trị mặc định là 10
#define length 10


×