1. Trang chủ
  2. » Luận Văn - Báo Cáo

nghiên cứu về kiểm chứng phần mềm sử dụng công cụ spin

50 641 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Nghiên Cứu Về Kiểm Chứng Phần Mềm Sử Dụng Công Cụ Spin
Tác giả Trần Thị Vân Dung
Người hướng dẫn PGS. TS. Nguyễn Việt Hà, TS. Phạm Ngọc Hùng
Trường học Trường Đại học Công Nghệ, Đại học Quốc Gia Hà Nội
Chuyên ngành Công Nghệ Thông Tin
Thể loại Khóa luận tốt nghiệp
Năm xuất bản 2010
Thành phố Hà Nội
Định dạng
Số trang 50
Dung lượng 659,57 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Các bộ kiểm chứng không kiểm tra trực tiếp chương trình mà kiểm tra một mô hình là thể hiện mức cao của hệ thống.. Khóa luận nghiên cứu việc kiểm chứng phần mềm sử dụng Spin, cụ thể là v

Trang 1

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Trang 2

Ngành: Công Nghệ Thông Tin

Cán bộ hướng dẫn: PGS TS Nguyễn Việt Hà

Cán bộ đồng hướng dẫn: TS Phạm Ngọc Hùng

Trang 3

Lời cảm ơn

Lời đầu tiên, em xin được bày tỏ lòng biết ơn sâu sắc tới thầy TS Nguyễn Việt Hà

và thầy TS Phạm Ngọc Hùng đã tận tình giúp đỡ em làm và hoàn thiện khóa luận trong suốt năm học vừa qua

Em xin được bày tỏ lòng biết ơn tới các thầy, cô trong khoa Công Nghệ Thông Tin, trường Đại Học Công Nghệ, ĐHQGHN Các thầy cô đã nhiệt tình dạy bảo và tạo mọi điều kiện học tập tốt nhất cho chúng em trong những năm học tập tại ĐHCN, đặc biệt là trong thời gian thực hiện khóa luận tốt nghiệp

Tôi xin cảm ơn các bạn sinh viên lớp K51CC và K51CNPM Trường Đại học Công nghệ, những người bạn đã cùng tôi học tập và rèn luyện trong suốt những năm học đại học

Cuối cùng con xin gửi tới Bố Mẹ và gia đình tình thương yêu và lòng biết ơn Bố Mẹ

đã nuôi dưỡng và luôn là chỗ dựa tinh thần cho con

Hà Nội, ngày 18 tháng 5 năm 2010 Trần Thị Vân Dung

Trang 4

Tóm tắt nội dung

Kiểm chứng mô hình (model checking) là một phương pháp hình thức dùng cho việc kiểm chứng hệ thống Kiểm chứng mô hình khảo sát tất cả các trạng thái có thể của hệ thống và kiểm tra rằng chúng chứa sự đúng đắn đã được đặc tả Việc sinh ra các trạng thái

và kiểm tra có thể được thực hiện một cách tự động bằng phần mềm và Spin là một trong những bộ kiểm chứng (model checker) được sử dụng rộng rãi Các bộ kiểm chứng không kiểm tra trực tiếp chương trình mà kiểm tra một mô hình là thể hiện mức cao của hệ thống Mô hình này mô tả hành vi của hệ thống Để áp dụng được các công cụ kiểm chứng mô hình, việc đầu tiên là phải xây dựng mô hình của hệ thống Các mô hình này cùng với đặc tả của thuộc tính cần kiểm tra là đầu vào của các bộ kiểm chứng

Khóa luận nghiên cứu việc kiểm chứng phần mềm sử dụng Spin, cụ thể là việc kiểm chứng mô hình máy hữu hạn trạng thái, sau đó đưa ra một công cụ chuyển một mô tả ban đầu của hệ thống ở dạng máy hữu hạn trạng thái (chứa trong 1 tệp txt) thành mô hình và kiểm chứng bằng Spin

Trang 5

MỤC LỤC

Mục Lục

1 Mở đầu

1.1 Đặt vấn đề 6

1.2 Mục tiêu và phạm vi của đề tài 7

1.3 Cấu trúc khóa luận 7

2 Sơ lược về Model Checking 2.1 Kiểm chứng hệ thống 8

2.2 Model Checking 9

2.2.1 Phương pháp hình thức và Model Checking 9

2.2.2 Hoạt động của Model Checking 9

2.2.3 Ưu nhược điểm của Model Checking 10

3 Ngôn ngữ Promela 3.1 Kiểu dữ liệu và toán tử cơ bản 13

3.1.1 Kiểu dữ liệu cơ bản 13

3.1.2 Toán tử cơ bản 13

3.2 Dữ liệu kiểu kênh trong Promela 14

3.2.1.Cú pháp 14

3.2.2 Kênh gặp (rendezvous channel) 15

3.3 Các cú pháp 15

3.3.1 Lệnh printf() 15

3.3.2 Lệnh lựa chọn if 15

3.3.3 Lệnh lặp do 16

3.3.4 Lệnh nhảy goto 16

Trang 6

MỤC LỤC

3.3.5 Lệnh define 16

3.4 run và atomic 17

3.4.1 run và tiến trình init() 17

3.4.2 atomic 17

4 Kiểm chứng chương trình trong Spin 4.1 Kiểm chứng chương trình trong Spin 20

4.1.1 Giả lập ngẫu nhiên 20

4.1.2 Verify 22

4.2 Logic thời gian tuyến tính (LTL) 24

4.2.1 Cú pháp 25

4.2.2 Biểu diễn tính chất bất biến của hệ thống bằng LTL 26

4.3 Cấu trúc Never Claim 26

5 Thực nghiệm 5.1.Mô hình máy hữu hạn trạng thái 28

5.1.1.Mô hình máy hữu hạn trạng thái 28

5.1.2.Ví dụ về mô hình máy hữu hạn trạng thái 28

5.2.Thực nghiệm 31

5.2.1.Áp dụng kiểm chứng mô hình hệ thống đèn 32

5.2.2.Áp dụng kiểm chứng mô hình không đáp ứng thuộc tính 33

6 Kết luận 6.1 Kết quả của khóa luận 36

6.2 Hướng nghiên cứu tiếp theo 36

Trang 7

MỤC LỤC

Phụ lục B: Tệp lampcode.pml khi chạy verify trong Spin 38

Phụ lục C: Tệp lamp2code.txt 40

Phụ lục D: Tệp lamp2code.pml khi chạy verify trong Spin 41

Phụ lục E: Mã nguồn của chương trình 43

Tài liệu tham khảo 47

Trang 8

Danh sách hình vẽ

2.1 Sơ đồ việc kiểm chứng hệ thống 8

2.2 Sơ đồ hoạt động của phương pháp model checking 10

5.1 Mô hình máy hữu hạn trạng thái mô tả hoạt động của đèn 29

5.2 Kết quả khi chạy giả lập mô hình hệ thống đèn ở hình 5.1 31

5.3 Kết quả kiểm chứng mô hình 5.1 của hệ thống đèn 33

5.4 Mô hình sai của hệ thống đèn 34

5.5 Kết quả kiểm chứng mô hình 5.4 của hệ thống đèn 35

Trang 9

Bên cạnh đó có những trường hợp chúng ta không thể chấp nhận những ứng dụng có thể có lỗi dù là nhỏ nhất, đó là những ứng dụng mà sự trục trặc có thể dẫn đến tử vong, tổn thất nặng nề hay ảnh hưởng đến môi trường sống Kỹ nghệ phần mềm dành cho các

hệ thống này là vô cùng khó khăn

Cách giải quyết luôn là phân tích, lập trình cẩn thận, kiểm tra lại, kiểm thử Bên cạnh

đó, chúng ta luôn tìm kiếm các công nghệ và kĩ thuật giúp cho việc kiểm chứng các phần mềm trở nên nhẹ nhàng hơn trong khi tăng sự bao quát và chính xác của nó [1]

Công cụ Spin chạy kỹ thuật model checking nhận mô hình của hệ thống và khảo sát tất cả các trạng thái có thể của hệ thống theo kiểu vét cạn Công việc chủ yếu là phát triển một mô hình đủ chi tiết để biểu diễn hệ thống một cách chính xác nhưng cũng đủ đơn giản để Spin có thể chạy việc kiểm tra (với giới hạn về tài nguyên và bộ nhớ)

Vấn đề đặt ra là xây dựng công cụ tự động chuyển 1 mô tả các hành vi, tính chất của

hệ thống thành đoạn mã biểu diễn mô hình mà Spin có thể chạy Do vậy, giảm nhẹ công sức giành cho việc kiểm chứng

Trang 10

CHƯƠNG 1: MỞ ĐẦU

1.2.Mục tiêu và phạm vi của đề tài

Đề tài nghiên cứu việc kiểm chứng hệ thống sử dụng Spin, các mô hình hệ thống dành cho Spin được viết bằng ngôn ngữ Promela Công cụ được xây dựng với mong muốn có thể tự động sinh mã Promela chính xác và đầy đủ phục vụ cho việc kiểm chứng trong Spin

Công cụ được xây dựng đã tự động sinh mô hình Promela cho những hệ thống đã được biểu diễn ở mô hình máy hữu hạn trạng thái

1.3.Cấu trúc khóa luận

Chương 2 trình bày về Model checking, là kỹ thuật kiểm chứng mà đề tài nghiên cứu, những nguyên tắc hoạt động của Model checking

Chương 3 trình bày về các cấu trúc của ngôn ngữ Promela, là ngôn ngữ để viết các

mô hình cho Spin

Chương 4 bắt đầu đi vào giai đoạn kiểm chứng một mô hình trong Spin

Chương 5 Trình bày kết quả thực nghiệm của khóa luận dựa trên các khái niệm đã nêu trong chương 2 và 3

Chương 6 tổng kết lại quá trình nghiên cứu, đưa ra kết quả đạt được và hướng nghiên cứu tiếp theo

Trang 11

CHƯƠNG 2: SƠ LƯỢC VỀ MODEL CHECKING

Chương 2

Sơ Lược Về Model Checking

Chương này giới thiệu về kiểm chứng hệ thống, những lợi thế của kiểm chứng hệ thống Sau đó là khái niệm về model checking, những ưu nhược điểm của phương pháp model checking

2.1.Kiểm chứng hệ thống

Trong giai đoạn kiểm thử khi kỹ nghệ phần mềm, phần mềm được chạy trên một số hữu hạn những bộ dữ liệu đầu vào đã được thiết kế sẵn, phần mềm chạy đúng hay sai dựa trên việc so sánh dữ liệu đầu ra thực tế với đầu ra mong muốn Việc chạy hết các trường hợp có thể của dữ liệu đầu vào là không thể, do vậy kiểm thử không đảm bảo chắc chắn rằng phần mềm không chứa lỗi [1] Bên cạnh đó, lỗi được phát hiện trong giai đoạn này là muộn và dẫn đến tiêu tốn nhiều nỗ lực khắc phục lỗi

Hình 2.1.Sơ đồ việc kiểm chứng hệ thống [1]

Trang 12

CHƯƠNG 2: SƠ LƯỢC VỀ MODEL CHECKING

Kiểm chứng hệ thống thực hiện việc xác minh một thiết kế hay một sản phẩm phần mềm đảm bảo những tính chất cụ thể mà thường đã được nêu ra trong đặc tả của hệ thống [2]

Đặc tả hệ thống trở thành cơ sở của mọi hoạt động kiểm chứng Một thiếu sót được phát hiện khi hệ thống không thỏa mãn một trong các tính chất đã được đặc tả, hệ thống được chứng minh là đúng khi nó thỏa mãn tất cả các tính chất được nêu trong đặc tả hệ thống Từ đó, kiểm chứng có khả năng phát hiện lỗi sớm [1]

2.2.Model checking

2.2.1.Phương pháp hình thức và model checking

Phương pháp hình thức được xem như là toán học được áp dụng vào mô hình hóa và phân tích hệ thống [1]

Từ những nghiên cứu về phương pháp hình thức, chúng ta đã có được những kỹ thuật kiểm chứng dựa trên mô hình, trong đó có model checking, đi kèm với chúng là các phần mềm để tự động hóa nhiều bước kiểm chứng khác nhau

Cơ sở của kiểm chứng dựa trên mô hình là mô tả các hành vi của hệ thống theo một cách không nhập nhằng, điều này giúp phát hiện ra những điểm nhập nhằng, mâu thuẫn

và chưa hoàn thiện trong những đặc tả không hình thức của hệ thống [1]

Kỹ thuật này giúp tích hợp kiểm chứng vào quá trình thiết kế, nó trở thành công cụ

để kỹ nghệ những phần mềm buộc phải hoạt động không có sai sót [2]

2.2.2.Hoạt động của model checking

Từ đặc tả của hệ thống, ta 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

Trang 13

CHƯƠNG 2: SƠ LƯỢC VỀ MODEL CHECKING

Hình 2.2.Sơ đồ hoạt động của phương pháp model checking [1]

Sau đó công cụ chạy model checking (bộ kiểm chứng) được dùng để sinh ra tất cả các trạng thái của hệ thống và kiểm tra chúng thỏa mãn các tính chất đó hay không, nếu không, model checking sẽ tìm được một phản ví dụ - một trạng thái của hệ thống không thỏa mãn – và chỉ ra tính toán dẫn đến trạng thái đó

Sử dụng phản ví dụ này cùng với việc chạy giả lập mô hình trong model checker, ta

có thể tìm ra lỗi trong mô hình (có thể là sự không nhất quán, không rõ nghĩa trong đặc tả

hệ thống) và sửa lỗi

2.2.3.Ưu nhược điểm của model checking

Model checking mang một số ưu điểm như sau [1]

 Là một phương pháp kiểm chứng tổng quát áp dụng được cho một phạm vi lớn các ứng dụng: hệ thống nhúng, kỹ nghệ phần mềm, thiết kế phần cứng…

 Hỗ trợ kiểm chứng 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 chung kiểm chứng một tính chất quan trọng trước mà không cần tới một đặc tả hệ thống hoàn chỉnh

 Cung cấp các thông tin ý nghĩa cho việc gỡ lỗi khi phát hiện được môt tính chất không được thỏa mãn

Trang 14

CHƯƠNG 2: SƠ LƯỢC VỀ MODEL CHECKING

 Model cheking đang càng ngày trở nên phổ biến hơn và được ưa chuộng, đã xuất hiện thêm nhiều model checker

 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

 Model checking 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

Bên cạnh đó phương pháp model checking cũng chứa những nhược điểm [1]

 Chủ yếu phù hợp với các ứng dụng tập trung vào điều khiển là chủ yếu, 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

 Model checking kiểm chứng mô hình của hệ thống, không phải bản thân hệ thống, mọi kết quả đạt được đều chỉ về mô hình của hệ thống, do vậy cần đến những kỹ thuật khác bổ trợ như kiểm thử để tìm ra những lỗi chế tạo (đối với phần cứng) và lỗi lập trình (đối với phần mềm)

 Model checking 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 model checking kiểm chứng

 Việc sử dụng model checking đò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

Trang 15

CHƯƠNG 3: NGÔN NGỮ PROMELA

Chương 3

Ngôn Ngữ Promela

Với Spin, ngôn ngữ Promela được sử dụng để xây dựng mô hình của hệ thống và các tính chất của nó, chương này trình bày các thành phần và câu lệnh cơ bản của Promela được

sử dụng trong khóa luận

Promela là ngôn ngữ không tất định, là một trong các ngôn ngữ có cú pháp và ngữ nghĩa tương tự ngôn ngữ C [6]

Một chương trình Promela bao 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

lenh_1;

… lenh_n }

Tiến trình khai báo mà không có từ khóa active sẽ không được pid và đó đó chưa thể chạy

lenh_1;

… lenh_n }

Trang 16

CHƯƠNG 3: NGÔN NGỮ PROMELA

Tính không tất định của Promela thể hiện ở chỗ 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 vị trí của câu lệnh sẽ được thực thi khi đến lượt

nó chạy

3.1.Kiểu dữ liệu và toán tử cơ bản

3.1.1.Kiểu dữ liệu cơ bản

Bảng 3.1 nêu các kiểu dữ liệu cơ bản trong Promela

Bảng 3.1.Kiểu dữ liệu cơ bản trong Promela

Promela không có 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};

3.1.2.Toán tử cơ bản

Trang 17

CHƯƠNG 3: NGÔN NGỮ PROMELA

Bảng 3.2.Các toán tử cơ bản trong Promela xếp theo thứ tự độ ưu tiên giảm dần

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

một 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:

kieu_du_lieu_1, ,kieu_du_lieu_n } ;

Có 2 kiểu kênh trong Promela

Lệnh truyền dữ liệu trên kênh

 Gửi :

Trang 18

CHƯƠNG 3: NGÔN NGỮ PROMELA

ten_bien_kenh ! bieu_thuc_1, , bieu_thuc_n

 Nhận :

ten_bien_kenh ? bien_1, , bien_n

 Giá trị của 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ó

Một lệnh nhận chỉ được thực khi tồn tại thông điệp được gửi lên kênh

3.2.2.Kênh gặp

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 [2]

Nếu trong một tiến trình có một lệnh gửi (hay nhận) được khởi tạo mà không có lệnh nhận (hay 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 [2]

3.3.Các cú pháp

3.3.1.Lệnh printf( )

Câu lệnh prinf

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

3.3.2.Lệnh lựa chọn if

if

Trang 19

CHƯƠNG 3: NGÔN NGỮ PROMELA

fi;

Ngoài ra, biểu thức logic có thể là else hoặc true Chuỗi lệnh theo sau else sẽ được thực thi nếu các biểu thức logic còn lại đều nhận giá trị false Chuỗi lệnh theo sau

true luôn luôn được chọn để thực thi

Chuỗi lệnh theo sau biểu thức logic có thể trống, khi gặp chuỗi lệnh trống, chương

trình bỏ qua chuyển sang câu lệnh sau câu lệnh if skip có ý nghĩa tương đương với một

chuỗi lệnh trống

3.3.3.Lệnh lặp do

do

Trang 20

CHƯƠNG 3: NGÔN NGỮ PROMELA

#define length 10

3.4 run và atomic

3.4.1.run và tiến trình init()

run là một cách khác để khởi tạo một tiến trình Trước đó một tiến trình được khai

báo mà không có từ khóa active

proctype P(){

… } run P ();

Với việc sử dụng run ta có thể khai báo tất cả các tiến trình có trong chương trình

sau đó “run” (khởi tạo) chúng trong một tiến trình có tên init()

Tiến trình init() luôn là tiến trình đầu tiên được khởi tạo và do vậy luôn có pid bằng 0

proctype P(){

… } proctype Q(){

… } init {

run P();

run Q();

}

3.4.2 atomic

Trang 21

CHƯƠNG 3: NGÔN NGỮ PROMELA

Ví dụ 3.1 Chuỗi lệnh dùng atomic

atomic {

temp = n;

n = temp+1 }

Đoạn mã trong ví dụ 3.1 tương đương với lệnh

n=n+1;

 Ta có thể sử dụng atomic để kết hợp các câu lệnh giữa các tiến trình

chan ch = [0] of {int};

active proctype P(){ atomic {A;ch!1;B}}

active proctype Q(){ atomic {ch?1 -> C}

Trong ví dụ trên, sau khi khối lệnh A trong tiến trình P được thực thi, dữ liệu kiểu

int với giá trị 1 được gửi lên kênh ch kiểu gặp (câu lệnh ch!1; được thực hiện),

tiến trình Q nhận dữ liệu trên kênh (bởi ch?1) và khối lệnh C được thực thi, khi khối lệnh C kết thúc, việc thực thi sẽ tự động chuyển về tiến trình P và thực thi khối lệnh

B

 atomic có thể được sử dụng để khởi tạo một số các tiến trình và đảm bảo rằng không một tiến trình nào bắt đầu chạy cho tới khi tất cả các tiến trình được khởi tạo hết

Trong ví dụ về khởi tạo hai tiến trình P, Q ở 3.4.1, do tiến trình init đã được khởi tạo và có thể chạy, một trong hai tiến trình P, Q có thể được chạy trước khi tiến trình còn lại được khởi tạo, điều đó không có lợi cho chúng ta Bổ sung atomic sẽ loại

bỏ được điều này:

proctype P(){

… } proctype Q(){

Trang 22

CHƯƠNG 3: NGÔN NGỮ PROMELA

… } init {

atomic { run P();

run Q();

} }

Trang 23

CHƯƠNG 4: KIỂM CHỨNG CHƯƠNG TRÌNH VỚI SPIN

Chương 4

Kiểm Chứng Chương Trình Với Spin

Chương này trình bày về thêm một số khái niệm trong Promela để mô hình hóa được một

hệ thống thực tế, cách chạy môt chương trình Promela trong Spin tại các chế độ khác nhau, giới thiệu về logic thời gian tuyến tính (LTL) là ngôn ngữ biểu diễn tính chất mong muốn (hay tính chất cần kiểm chứng) của hệ thống

4.1.Kiểm chứng chương trình trong Spin

4.1.1.Giả lập ngẫu nhiên

Trong chế độ giả lập, Spin biên dịch và chạy một chương trình promela, sau đó in ra các trạng thái của chương trình Khóa luận sử dụng công cụ jSpin cho ta giao diện đồ họa của Spin và xem xét kết quả kiểm chứng một cách trực quan

Một trạng thái của chương trình là một bộ các giá trị gồm của các biến, các giá trị của biến đếm vị trí của các tiến trình Một tính toán của chương trình là chuỗi các trạng thái bắt đầu bởi trạng thái khởi tạo và tiếp tục với những trạng thái xuất hiện khi mỗi câu lệnh được thực hiện [3]

Trong ví dụ 4.1 biến n được khởi tạo với giá trị 0, chương trình bao gồm 2 tiến trình:

P và Q tương ứng gán biến n giá trị 1 hoặc 2 và in ra giá trị của n cùng tên tiến trình

Ví dụ 4.1.Chương trình với 2 tiến trình

Trang 24

CHƯƠNG 4: KIỂM CHỨNG CHƯƠNG TRÌNH VỚI SPIN

Trong jSpin ta chạy Random, chương trình không có lỗi và nhận được kết quả:

Starting P with pid 0 0: proc - (:root:) creates proc 0 (P)

Starting Q with pid 1 0: proc - (:root:) creates proc 1 (Q)

1 Q 7 n = 2 Process Statement n

0 P 3 n = 1 2 Process P, n=1

0 P 4 printf('Proces 1 Process Q, n=1

1 Q 8 printf('Proces 1 4: proc 1 (Q) terminates

4: proc 0 (P) terminates

2 processes created

Trong ví dụ 4.1, đầu tiên P và Q lần lượt được tạo với pid (process id) là 0 và 1

Các lệnh trong cả hai tiến trình được thực thi xen kẽ một cách tùy ý

jSpin hiển thị trạng thái của chương trình sau mỗi câu lệnh được thực thi (theo thứ

tự: pid, tên tiên trình chứa câu lệnh, vị trí câu lệnh, nội dung câu lệnh đã được cắt ngắn,

giá trị của biến)

Trong lần chạy ở trên các câu lệnh được thực hiện theo thứ tự:

Trang 25

CHƯƠNG 4: KIỂM CHỨNG CHƯƠNG TRÌNH VỚI SPIN

Ví dụ 4.2 tìm số lớn nhất trong 2 số a và b, trong câu lệnh if, nếu a >=b biến max

sẽ được gán giá trị a, nếu b>=a biến max sẽ được gán giá trị b, ở cuối chương trình ta kiểm tra lại bởi biểu thức logic (a >= b -> max = = a : max = = b)

(Spin Version 4.3.0 22 June 2007)

+ Partial Order Reduction Full statespace search for:

never claim - (none specified) assertion violations +

Ngày đăng: 17/02/2014, 22:59

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[5] Sagar Chaki, Introduction to Spin and Promela, Carnegie Mellon University. [6] http://spinroot.com Link
[1] C. Baier, JP Katoen, K. Larsen, Principale of Model Checking, MIT Press, May 2008 Khác
[2] Clarke, Grumberg, and Peled, Model Checking, MIT Press, 2000 Khác
[3] Mordechai Ben-Ari, Principale of the Spin Model Checker Khác
[4] Dang Van Hung, Model-Checking and the Spin Modelchecker, The United Nations University, International Institute for Software Technology Khác

HÌNH ẢNH LIÊN QUAN

Hình 2.1.Sơ đồ việc kiểm chứng hệ thống [1] - nghiên cứu về kiểm chứng phần mềm sử dụng công cụ spin
Hình 2.1. Sơ đồ việc kiểm chứng hệ thống [1] (Trang 11)
Hình 2.2.Sơ đồ hoạt động của phƣơng pháp model checking [1] - nghiên cứu về kiểm chứng phần mềm sử dụng công cụ spin
Hình 2.2. Sơ đồ hoạt động của phƣơng pháp model checking [1] (Trang 13)
Bảng 3.1 nêu các kiểu dữ liệu cơ bản trong Promela - nghiên cứu về kiểm chứng phần mềm sử dụng công cụ spin
Bảng 3.1 nêu các kiểu dữ liệu cơ bản trong Promela (Trang 16)
CHƢƠNG 3: NGÔN NGỮ PROMELA - nghiên cứu về kiểm chứng phần mềm sử dụng công cụ spin
3 NGÔN NGỮ PROMELA (Trang 17)
Bảng 1.4.Các toán tử của LTL Toán tử  Ký hiệu  phủ định ! - nghiên cứu về kiểm chứng phần mềm sử dụng công cụ spin
Bảng 1.4. Các toán tử của LTL Toán tử Ký hiệu phủ định ! (Trang 28)
Bảng 4.1 mơ tả các tốn tử của LTL - nghiên cứu về kiểm chứng phần mềm sử dụng công cụ spin
Bảng 4.1 mơ tả các tốn tử của LTL (Trang 28)
Hình 5.1.Mơ hình máy hữu hạn trạng thái mô tả hoạt động của đèn - nghiên cứu về kiểm chứng phần mềm sử dụng công cụ spin
Hình 5.1. Mơ hình máy hữu hạn trạng thái mô tả hoạt động của đèn (Trang 32)
Trong mơ hình trên giá trị của biến state là 0, 1, 2 lần lƣợt mô tả ba trạng thái của đèn  là  off,  low,  high - nghiên cứu về kiểm chứng phần mềm sử dụng công cụ spin
rong mơ hình trên giá trị của biến state là 0, 1, 2 lần lƣợt mô tả ba trạng thái của đèn là off, low, high (Trang 33)
Hình 5.2.Kết quả khi chạy giả lập mơ hình hệ thống đèn ở hình 5.1 - nghiên cứu về kiểm chứng phần mềm sử dụng công cụ spin
Hình 5.2. Kết quả khi chạy giả lập mơ hình hệ thống đèn ở hình 5.1 (Trang 34)
Ta thêm vào mơ hình promela định nghĩa các kí hiệu - nghiên cứu về kiểm chứng phần mềm sử dụng công cụ spin
a thêm vào mơ hình promela định nghĩa các kí hiệu (Trang 36)
5.2.2.Áp dụng kiểm chứng mơ hình khơng đáp ứng thuộc tính - nghiên cứu về kiểm chứng phần mềm sử dụng công cụ spin
5.2.2. Áp dụng kiểm chứng mơ hình khơng đáp ứng thuộc tính (Trang 37)
Hình 5.5.Kết quả kiểm chứng mơ hình 5.4 của hệ thống đèn - nghiên cứu về kiểm chứng phần mềm sử dụng công cụ spin
Hình 5.5. Kết quả kiểm chứng mơ hình 5.4 của hệ thống đèn (Trang 38)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w