1. Trang chủ
  2. » Giáo Dục - Đào Tạo

NGHIÊN cứu về KIỂM CHỨNG PHẦN mềm sử DỤNG CÔNG cụ SPIN

50 1 0

Đ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

Định dạng
Số trang 50
Dung lượng 755,92 KB

Nội dung

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Trần Thị Vân Dung NGHIÊN CỨU VỀ KIỂM CHỨNG PHẦN MỀM SỬ DỤNG CƠNG CỤ SPIN KHỐ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Cơng Nghệ Thơng Tin HÀ NỘI - 2010 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Trần Thị Vân Dung NGHIÊN CỨU VỀ KIỂM CHỨNG PHẦN MỀM SỬ DỤNG CÔNG CỤ SPIN KHỐ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Công Nghệ Thông Tin Cán hướng dẫn: PGS TS Nguyễn Việt Hà Cán đồng hướng dẫn: TS Phạm Ngọc Hùng HÀ NỘI - 2010 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 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à thầy TS Phạm Ngọc Hùng tận tình giúp đỡ em làm hồn thiện khóa luận suốt năm học vừa qua Em xin đƣợc bày tỏ lòng biết ơn tới thầy, cô khoa Công Nghệ Thông Tin, trƣờng Đại Học Cơng Nghệ, ĐHQGHN Các thầy nhiệt tình dạy bảo tạo điều kiện học tập tốt cho chúng em năm học tập ĐHCN, đặc biệt thời gian thực khóa luận tốt nghiệp Tôi xin cảm ơn bạn sinh viên lớp K51CC K51CNPM Trƣờng Đại học Công nghệ, ngƣời bạn học tập rèn luyện suốt năm học đại học Cuối xin gửi tới Bố Mẹ gia đình tình thƣơng u lịng biết ơn Bố Mẹ ni dƣỡng chỗ dựa tinh thần cho Hà Nội, ngày 18 tháng năm 2010 Trần Thị Vân Dung LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Tóm tắt nội dung Kiểm chứng mơ hình (model checking) 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 trạng thái hệ thống kiểm tra chúng chứa đắn đƣợc đặc tả Việc sinh trạng thái kiểm tra đƣợc thực cách tự động phần mềm Spin kiểm chứng (model checker) đƣợc sử dụng rộng rãi Các kiểm chứng khơng kiểm tra trực tiếp chƣơng trình mà kiểm tra mơ hình thể mức cao hệ thống Mơ hình mơ tả hành vi hệ thống Để áp dụng đƣợc công cụ kiểm chứng mơ hình, việc phải xây dựng mơ hình hệ thống Các mơ hình với đặc tả thuộc tính cần kiểm tra đầu vào 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ể việc kiểm chứng mơ hình máy hữu hạn trạng thái, sau đƣa cơng cụ chuyển mô tả ban đầu hệ thống dạng máy hữu hạn trạng thái (chứa tệp txt) thành mơ hình kiểm chứng Spin LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com MỤC LỤC Mục Lục Mở đầu 1.1 Đặt vấn đề 1.2 Mục tiêu phạm vi đề tài 1.3 Cấu trúc khóa luận Sơ lược Model Checking 2.1 Kiểm chứng hệ thống 2.2 Model Checking 2.2.1 Phƣơng pháp hình thức Model Checking 2.2.2 Hoạt động Model Checking 2.2.3 Ƣu nhƣợc điểm Model Checking 10 Ngôn ngữ Promela 3.1 Kiểu liệu toán tử 13 3.1.1 Kiểu liệu 13 3.1.2 Toán tử 13 3.2 Dữ liệu kiểu kênh 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 16 3.3.4 Lệnh nhảy goto 16 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com MỤC LỤC 3.3.5 Lệnh define 16 3.4 run atomic 17 3.4.1 run tiến trình init() 17 3.4.2 atomic 17 Kiểm chứng chương trình Spin 4.1 Kiểm chứng chƣơng trình 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 hệ thống LTL 26 4.3 Cấu trúc Never Claim 26 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ụ 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 Kết luận 6.1 Kết khóa luận 36 6.2 Hƣớng nghiên cứu 36 Phụ lục Phụ lục A: Tệp lampcode.txt 37 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com MỤC LỤC Phụ lục B: Tệp lampcode.pml chạy verify Spin 38 Phụ lục C: Tệp lamp2code.txt 40 Phụ lục D: Tệp lamp2code.pml chạy verify Spin 41 Phụ lục E: Mã nguồn chƣơng trình 43 Tài liệu tham khảo 47 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Danh sách hình vẽ 2.1 Sơ đồ việc kiểm chứng hệ thống 2.2 Sơ đồ hoạt động 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 đèn 29 5.2 Kết chạy giả lập mơ hình hệ thống đèn hình 5.1 31 5.3 Kết kiểm chứng mơ hình 5.1 hệ thống đèn 33 5.4 Mơ hình sai hệ thống đèn 34 5.5 Kết kiểm chứng mơ hình 5.4 hệ thống đèn 35 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com CHƢƠNG 1: MỞ ĐẦU Chương Mở đầu 1.1.Đặt vấn đề Hiện ngày phụ thuộc vào hệ thống máy tính phần mềm chuyên dụng hỗ trợ mặt sản xuất đời sống ngày Bất kỳ lập trình viên hiểu điều chƣơng trình hầu nhƣ chạy từ lần biên dịch chƣa thể hoàn hảo từ lần biên dịch thành cơng Chƣơng trình trơng ln tiềm ẩn lỗi Các phần mềm đƣợc phát triển quy trình chun nghiệp ln chứa lỗi mà đƣợc phát sau đƣợc phân phối đƣa vào sử dụng Trong thiết kế phần cứng phần mềm, nỗ lực thời gian tiêu tốn nhiều vào việc kiểm chứng nhiều thời gian nỗ lực dành cho việc xây dựng Bên cạnh có trƣờng hợp khơng thể chấp nhận ứng dụng có lỗi dù nhỏ nhất, ứng dụng mà trục trặc 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 hệ thống vơ khó khăn Cách giải ln phân tích, lập trình cẩn thận, kiểm tra lại, kiểm thử Bên cạnh đó, ln tìm kiếm cơng nghệ kĩ thuật giúp cho việc kiểm chứng phần mềm trở nên nhẹ nhàng tăng bao quát xác [1] Cơng cụ Spin chạy kỹ thuật model checking nhận mơ hình hệ thống khảo sát tất trạng thái hệ thống theo kiểu vét cạn Công việc chủ yếu phát triển mơ hình đủ chi tiết để biểu diễn hệ thống cách xác nhƣng đủ đơn giản để Spin chạy việc kiểm tra (với giới hạn tài nguyên nhớ) Vấn đề đặt xây dựng công cụ tự động chuyển mơ tả hành vi, tính chất hệ thống thành đoạn mã biểu diễn mơ hình mà Spin chạy Do vậy, giảm nhẹ cơng sức giành cho việc kiểm chứng LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com CHƢƠNG 1: MỞ ĐẦU 1.2.Mục tiêu phạm vi đề tài Đề tài nghiên cứu việc kiểm chứng hệ thống sử dụng Spin, mơ hình hệ thống dành cho Spin đƣợc viết ngôn ngữ Promela Cơng cụ đƣợc xây dựng với mong muốn tự động sinh mã Promela xác đầy đủ phục vụ cho việc kiểm chứng Spin Công cụ đƣợc xây dựng tự động sinh mơ hình Promela cho 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 trình bày Model checking, kỹ thuật kiểm chứng mà đề tài nghiên cứu, nguyên tắc hoạt động Model checking Chƣơng trình bày cấu trúc ngôn ngữ Promela, ngôn ngữ để viết mơ hình cho Spin Chƣơng bắt đầu vào giai đoạn kiểm chứng mô hình Spin Chƣơng Trình bày kết thực nghiệm khóa luận dựa khái niệm nêu chƣơng Chƣơng tổng kết lại trình nghiên cứu, đƣa kết đạt đƣợc hƣớng nghiên cứu LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com CHƢƠNG 5: THỰC NGHIỆM [] !((state = = 2) && (state != 1) U (state = =0)) (không xảy trƣờng hợp biến state và, ln khác 0) Ta thêm vào mơ hình promela định nghĩa kí hiệu #define a0 (state = = 0) #define a1 (state != 1) #define a2 (state = = 2) Biểu thức LTL đƣa vào Spin [] !(a2 && (a1 U a0)) Spin sinh cấu trúc never claim, ta thêm vào chƣơng trình (phụ lục B) chạy verify, kết cho thấy khơng có lỗi vi phạm hệ thống thỏa mãn tính chất cần kiểm tra Hình 5.3.Kết kiểm chứng mơ hình 5.1 hệ thống đèn 33 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com CHƢƠNG 5: THỰC NGHIỆM 5.2.2.Áp dụng kiểm chứng mơ hình khơng đáp ứng thuộc tính up up down down off low high down down Hình 5.4.Mơ hình sai hệ thống đèn Ta xem xét mơ hình hệ thống đèn khơng thỏa mãn tính chất nêu phần 5.2.1.Trong mơ hình từ trạng thái high, đèn chuyển trạng thái off mà không qua trạng thái low Tệp mô tả trạng thái đèn lamp2.txt: off:up:low off:down:off low:up:high low:down:off high:up:high high:down:off Sau dùng công cụ để chuyển mơ hình sang mã promela (phụ lục C) thêm cấu trúc never claim để kiểm chứng tính chất nhƣ nêu 5.2.1 ta có mơ hình promela cho mơ hình đèn (phụ lục D) chạy verify, kết cho thấy Spin báo lỗi vi phạm, suy mơ hình vừa đƣa vào khơng thỏa mãn tính chất cần kiểm tra 34 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com CHƢƠNG 5: THỰC NGHIỆM Hình 5.5.Kết kiểm chứng mơ hình 5.4 hệ thống đèn 35 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com CHƢƠNG 6: KẾT LUẬN Chương Kết Luận 6.1.Kết khóa luận Sau tìm hiểu tƣ tƣởng cách tiếp cận kỹ thuật model checking với hoạt động model checker Spin, ngơn ngữ Promela mơ hình máy hữu hạn trạng thái, em xây dựng đƣợc cách chuyển đổi mô hình máy hữu hạn trạng thái sang ngơn ngữ Promela Từ em cài đặt đƣợc cơng cụ từ mô tả thô hệ thống (dƣới dạng máy hữu hạn trạng thái) sinh đoạn mã Promela mô hình hóa hệ thống, từ dùng để kiểm chứng hệ thống Spin 6.2.Hướng nghiên cứu Tiếp theo, chƣơng trình đƣợc phát triển để từ mơ tả thơ tốn đƣợc nhập trực tiếp dịng với giao diện, báo lỗi tệp đƣa vào không định dạng (nhƣ trƣờng hợp dịng có dấu hai chấm, nhƣ chƣơng trình chƣa xử lý đƣợc) 36 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Phụ lục Phụ lục A: Tệp lampcode.txt /* Trang thai Gia tri state off low high */ byte state = 0; mtype={up,down}; chan message=[0] of {mtype}; proctype action(){ ::atomic {message?up -> if ::state=0 -> state = ::state=1 -> state = ::state=2 -> state = ::else -> skip fi } ::atomic {message?down -> if ::state=0 -> state = ::state=1 -> state = ::state=2 -> state = ::else -> skip fi } od } proctype control(){ ::message!up; ::message!down; od } init{ atomic{ run action(); run control();} } 37 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Phụ lục B: Tệp lampcode.pml chạy verify Spin /* Trang thai Gia tri state off low high */ byte state = 0; mtype={up,down}; chan message=[0] of {mtype}; proctype action(){ ::atomic {message?up -> if ::state==0 -> state = ::state==1 -> state = ::state==2 -> state = ::else -> skip fi } ::atomic {message?down -> if ::state==0 -> state = ::state==1 -> state = ::state==2 -> state = ::else -> skip fi } od } proctype control(){ ::message!up; ::message!down; od } init{ atomic{ run action(); run control();} } #define a0 (state == 0) #define a1 (state != 1) #define a2 (state == 2) 38 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com never { /* !([](!(a2 && (a1 U a0)))) */ T0_init: if :: ((a0) && (a2)) -> goto accept_all :: ((a1) && (a2)) -> goto T0_S4 :: (1) -> goto T0_init fi; T0_S4: if :: ((a0)) -> goto accept_all :: ((a1)) -> goto T0_S4 fi; accept_all: skip } 39 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Phụ lục C: Tệp lamp2code.txt /* Trang thai Gia tri state off low high */ byte state = 0; mtype={up,down}; chan message=[0] of {mtype}; proctype action(){ ::atomic {message?up -> if ::state==0 -> state = ::state==1 -> state = ::state==2 -> state = ::else -> skip fi } ::atomic {message?down -> if ::state==0 -> state = ::state==1 -> state = ::state==2 -> state = ::else -> skip fi } od } proctype control(){ ::message!up; ::message!down; od } init{ atomic{ run action(); run control();} } 40 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Phụ lục D: Tệp lamp2code.pml chạy verify Spin /* Trang thai Gia tri state off low high */ byte state = 0; mtype={up,down}; chan message=[0] of {mtype}; proctype action(){ ::atomic {message?up -> if ::state==0 -> state = ::state==1 -> state = ::state==2 -> state = ::else -> skip fi } ::atomic {message?down -> if ::state==0 -> state = ::state==1 -> state = ::state==2 -> state = ::else -> skip fi } od } proctype control(){ ::message!up; ::message!down; od } init{ atomic{ run action(); run control();} } #define a0 (state == 0) 41 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com #define a1 (state != 1) #define a2 (state == 2) never { /* !([](!(a2 && (a1 U a0)))) */ T0_init: if :: ((a0) && (a2)) -> goto accept_all :: ((a1) && (a2)) -> goto T0_S4 :: (1) -> goto T0_init fi; T0_S4: if :: ((a0)) -> goto accept_all :: ((a1)) -> goto T0_S4 fi; accept_all: skip } 42 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Phụ lục E: Mã nguồn chương trình #include #include using namespace std; void read(char* inFile, char* outFile) { ifstream input(inFile, ios::in); ofstream output(outFile, ios::out); if(!input) { cerr s; int len = s.length(); while (s[i] != ':' && i > s) { 43 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com len = s.length(); i = 0; while(s[i]!=':' && i

Ngày đăng: 01/11/2022, 19:24

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

TÀI LIỆU LIÊN QUAN

w