Kiểm tra mô hình phần mềm sử dụng lý thuyết Ôtômat Buchi và Logic thời gian tuyến tính

51 420 0
Kiểm tra mô hình phần mềm sử dụng lý thuyết Ôtômat Buchi và Logic thời gian tuyến tính

Đ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

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - LUẬN VĂN THẠC SỸ KHOA HỌC KIỂM TRA MÔ HÌNH PHẦN MỀM SỬ DỤNG LÝ THUYẾT ÔTÔMAT BUCHI VÀ LOGIC THỜI GIAN TUYẾN TÍNH NGÀNH: CÔNG NGHỆ THÔNG TIN MÃ SỐ: PHẠM THỊ THÁI NINH Người hướng dẫn khoa học: TS HUỲNH QUYẾT THẮNG HÀ NỘI 2006 LỜI CẢM ƠN Trước hết xin gửi lời cảm ơn đặc biệt tới Thầy TS Huỳnh Quyết Thắng, người định hướng đề tài tận tình hướng dẫn bảo LỜI CAM ĐOAN suốt trình thực luận văn cao học này, từ ý tưởng đề cương nghiên cứu, phương pháp giải vấn đề Tôi xin cam đoan công trình nghiên cứu riêng Các kết nêu lần kiểm tra cuối để hoàn tất luận văn Tôi xin chân thành bày tỏ lòng biết ơn sâu sắc tới Trung tâm Đào tạo Sau đại học thầy cô giáo khoa Công nghệ thông tin, trường luận văn trung thực chưa công bố công trình khác Đại học Bách Khoa Hà Nội cho nhiều kiến thức quý báu vấn đề đại ngành công nghệ thông tin, cho môi trường tập thể, khoảng thời gian học cao học ngắn ngủi khó quên TÁC GIẢ LUẬN VĂN đời Tôi xin bày tỏ lòng cảm ơn chân thành tới tất bạn bè, đồng nghiệp động viên suốt thời gian thực luận văn Cuối xin dành tình cảm biết ơn sâu nặng tới Bố, Mẹ gia đình, người luôn bên cạnh nơi, lúc suốt trình làm luận văn cao học suốt đời Hà nội, tháng 11 năm 2006 Tác giả Phạm Thị Thái Ninh PHẠM THỊ THÁI NINH MỤC LỤC LỜI CẢM ƠN LỜI CAM ĐOAN MỤC LỤC DANH MỤC CÁC TỪ VIẾT TẮT DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ LỜI MỞ ĐẦU CHƯƠNG I: TỔNG QUAN VỀ KIỂM TRA MÔ HÌNH PHẦN MỀM 12 1.1 Lịch sử phát triển 12 1.2 Kiểm tra mô hình phần mềm 15 1.2.1 Khái niệm kiểm tra mô hình 15 1.2.2 Kiểm tra mô hình phần mềm 15 3.2 Mô hình hoá hệ thống phần mềm 38 3.2.1 Vấn đề đặt 38 3.2.2 Hệ thống đánh nhãn dịch chuyển 39 3.2.2.1 Các định nghĩa 39 3.2.2.2 Áp dụng mô hình hoá chương trình 40 3.3 Đặc tả hình thức thuộc tính hệ thống 43 3.3.1 Vấn đề đặt 43 3.3.2 Logic thời gian 44 3.3.3 Logic thời gian tuyến tính (Linear Temporal Logic - LTL) 44 3.3.3.1 Thuộc tính trạng thái 45 3.3.3.2 Cú pháp LTL 46 3.3.3.3 Ngữ nghĩa LTL 46 3.3.4 Logic thời gian nhánh (Branching Temporal Logic - BTL) 50 3.4 Ôtômat đoán nhận xâu vô hạn 51 3.4.1 Một số khái niệm ôtômat cổ điển: 51 3.4.2 Ôtômat Buchi 53 1.5 Kết luận chương 22 3.5 Chuyển đổi từ LTL sang Ôtômat Buchi 55 3.5.1 Tổng quan 55 3.5.2 Chuẩn hoá dạng LTL chuẩn 56 3.5.3 Biểu thức 56 3.5.4 Chuyển đổi từ LTL sang Ôtômat Buchi 57 3.5.4.1 Giải thuật chuyển đổi từ LTL sang Ôtômat Buchi 57 3.5.4.2 Ví dụ 60 CHƯƠNG 2: CÁC KỸ THUẬT KIỂM TRA MÔ HÌNH PHẦN MỀM 23 3.6 Chuyển từ hệ thống chuyển trạng thái sang Ôtômat Buchi 64 2.1 Giới thiệu 23 3.7 Tích chập hai Ôtômat Buchi 66 3.7.1 Ôtômat Buchi dẫn xuất 66 3.7.2 Nguyên tắc thực 66 1.3 Phân loại hướng tiếp cận kiểm tra mô hình phần mềm 19 1.3.1 Cách tiếp cận động 19 1.3.2 Cách tiếp cận tĩnh 19 1.3.4 Kết hợp hai cách tiếp cận tĩnh động 19 1.4 Kiểm tra mô hình phần mềm cổ điển đại 20 2.2 Phương pháp ký hiệu biểu diễn 25 2.3 Phương pháp duyệt nhanh 28 3.8 Kiểm tra tính rỗng ngôn ngữ đoán nhận Ôtômat Buchi 68 2.4 Phương pháp rút gọn 30 2.4.1 Rút gọn bậc phần 30 2.4.2 Tối thiểu hoá kết cấu 32 2.4.3 Trừu tượng hoá 33 CHƯƠNG 4: XÂY DỰNG HỆ THỐNG ĐỂ KIỂM TRA MÔ HÌNH PHẦN MỀM 72 2.5 Kỹ thuật xác thực kết cấu 35 4.1 Giới thiệu mô hình SPIN 72 2.6 Kết luận chương 36 4.2 Cấu trúc SPIN 73 CHƯƠNG 3: KỸ THUẬT KIỂM TRA MÔ HÌNH PHẦN MỀM SỬ DỤNG LÝ THUYẾT LOGIC THỜI GIAN TUYẾN TÍNH VÀ ÔTÔMAT BUCHI 37 4.3 Ngôn ngữ PROMELA 76 4.3.1 Giới thiệu chung Promela 76 4.3.2 Mô hình chương trình Promela 77 3.1 Bài toán kiểm tra mô hình phần mềm 37 3.9 Kết luận chương 70 4.3.5 Tiến trình khởi tạo 78 4.3.6 Khai báo biến kiểu 78 4.3.7 Câu lệnh Promela 79 4.3.8 Cấu trúc atomic 81 4.3.9 Các cấu trúc điều khiển thường gặp 81 4.3.9.1 Câu lệnh điều kiện IF 81 4.3.9.2 Câu lệnh lặp DO 82 4.3.10 Giao tiếp tiến trình 83 4.3.10.1 Mô hình chung 83 4.3.10.2 Giao tiếp tiến trình kiểu bắt tay 85 DANH MỤC CÁC TỪ VIẾT TẮT Số Từ viết tắt Giải nghĩa TT OBDD BDD Ordered Binary Decision Diagrams Binary Decision Diagrams LTL Linear Temporal Logic 4.4 Cú pháp LTL SPIN 86 LTS Label Transition System 4.5 Minh hoạ kiểm tra mô hình phần mềm với SPIN 86 BTL Branching Temporal Logic KẾT LUẬN 95 DFS TÀI LIỆU THAM KHẢO 98 SPIN Depth First Search Simple Promela Interpreter PROMELA Protocol / Process Meta Language DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ LỜI MỞ ĐẦU Hình vẽ, đồ thị Trang Với phát triển nhanh bậc lĩnh vực công nghệ thông tin Hình 1.1 Mô hình xác thực phần mềm 10 truyền thông hệ thống phần cứng phần mềm, khả xảy Hình 1.2 Mô hình logic thời gian 11 nhiều lỗi, đặc biệt lỗi tinh vi cao Những lỗi gây Hình 1.3 Mô hình kiểm tra mô hình phần mềm 14 hậu nghiêm trọng tiền bạc, thời gian, chí sống Hình 1.4 Kiểm tra mô hình phần mềm gắn với vòng đời phần 17 người Nhìn chung, lỗi sớm phát công sức để sửa lỗi mềm Hình 2.1: Các cách tiếp cận kiểm tra mô hình phần mềm 19 • Theo thống kê Standish Group (2000) 350 công ty với Hình 2.2 Các bước kiểm tra mô hình phần mềm 19 8000 dự án phần mềm có: 31% dự án phần mềm bị huỷ bỏ Hình 2.3: Các cách tiếp cận để điều khiển bùng nổ không 20 trước hoàn thành Với công ty lớn, có khoảng 9% tổng số dự án hoàn thành tiến độ ngân gian trạng thái Hình 2.4 : Cây định nhị phân theo bậc OBDD cho (a 21 • Theo thống kê PCWeek (2001) 365 công ty chuyên cung ∧b)∨(c∧d) với thứ tự a tmp = state; tmp = tmp+1; state = tmp } 4.3.6 Khai báo biến kiểu Các kiểu liệu bản: 79 bit [0 1] hoãn (blocked) tuỳ thuộc vào trạng thái tổng thể hệ thống Khi điều kiện bool flag; [0 1] thoả mãn, câu lệnh điều kiện lệnh thi hành Lệnh thi hành byte counter; [0 255] short [-216-1 216-1] int turn = 1; 80 s; [-232-1 232-1] msg; Các kiểu liệu có giá trị khởi tạo ngầm định lệnh thi hành lập tức, lệnh blocked lệnh chưa thi hành Câu lệnh gán câu lệnh thi hành Một biểu thức logic câu lệnh thực thi có giá trị khác < : lệnh thi hành Dữ liệu kiểu mảng bắt đầu đánh số từ x < 27 lệnh thi hành giá trị x < 27 byte a[27]; bit flag[4]; Khai báo kiểu ghi typedef + x lệnh thi hành x khác –3 Một số lệnh thường dùng: Record ¾ Lệnh skip: không làm (does nothing), dùng để thay đổi biến { đếm tiến trình tiến trình), lệnh thi hành short f1; ¾ Lệnh run: lệnh thi hành tiến trình tạo ra, ý byte f2; số tiến trình tạo có giới hạn } Các biến biến toàn cục biến cục tuỳ thuộc vào vị trí ¾ Lệnh printf: lệnh thi hành, không dùng để đánh giá khai báo Nếu biến khai báo tất tiến trình biến toàn suốt trình xác thực cục, biến khai báo tiến trình biến cục int x; Gán giá trị cho biến dùng cách sau: proctype Aap() ¾ Sử dụng câu lệnh gán ¾ Sử dụng khai báo kết hợp với khởi tạo short { int y=1; bb = 1; s = -1; ¾ Sử dụng câu lệnh kiểm tra điều kiện i * s + 27 == 23; 4.3.7 Câu lệnh Promela Trong Promela phân biệt lệnh điều kiện câu lệnh, chí điều kiện boolean sử dụng câu lệnh Câu lệnh câu lệnh thi hành (executable) lệnh bị tạm thời trì skip; run Noot(); /*Là lệnh thi hành Noot tạo */ x=2; x>2 && y==1; /* Chỉ thi hành số tiến trình khác làm x>2 */ skip; } ¾ Lệnh assert (): luôn lệnh thi hành Nếu có giá trị sai, SPIN thoát ghi nhận lỗi bị vi phạm 81 82 (violated) Câu lệnh assert thường sử dụng mô hình if Promela để kiểm tra xem điều kiện có thoả mãn hay không :: (n % != 0) -> n=1 :: (n >= 0) -> n=n-2 4.3.8 Cấu trúc atomic Khi thực hiện, tiến trình xen kẽ (các câu lệnh tiến trình khác không xuất thời điểm) Nếu sử dụng cấu trúc: atomic { /*dãy lệnh */ :: (n % == 0) -> n=3 :: else -> skip fi Câu lệnh else làm cho câu lệnh if lệnh thi hành, điều kiện phía thoả mãn, chương trình thực thi công việc sau else 4.3.9.2 Câu lệnh lặp DO } lệnh thuộc cấu trúc thực liên tiếp mà không bị xen vào tiến trình khác Dãy câu lệnh atomic công cụ quan trọng :: choice1 -> stat1.1; stat1.2; stat1.3; … để giảm độ phức tạp xác thực mô hình :: choice2 -> stat2.1; stat2.2; stat2.3; … 4.3.9 Các cấu trúc điều khiển thường gặp 4.3.9.1 Câu lệnh điều kiện IF :: … :: choicen -> statn.1; statn.2; statn.3; … od; Về cấu trúc tổng quát, câu lệnh giống câu lệnh if Tuy if :: choice1 -> stat1.1; stat1.2; stat1.3; … nhiên, khác với lệnh if, câu lệnh lặp lựa chọn gặp câu :: choice2 -> stat2.1; stat2.2; stat2.3; … lệnh break để thoát khỏi vòng lặp :: … Ví dụ: :: choicen -> statn.1; statn.2; statn.3; … fi; :: (count != 0) -> :: count = count – 1; :: (count == 0) -> break Nếu có choicei (điều kiện) thoả mãn, câu lệnh IF thực thi SPIN không đơn định lựa chọn số od; Bài toán đèn giao thông, câu lệnh luôn lựa chọn điều kiện nhánh để thi hành Nếu không tồn choicei thoả mãn, câu thời điểm, tức đơn định: lệnh if lệnh blocked mtype = { RED, YELLOW, GREEN } ; Ví dụ: active proctype TrafficLight() { byte state = GREEN; 83 84 :: (state == GREEN) -> state = YELLOW; :: (state == YELLOW) -> state = RED; :: (state == RED) -> state = GREEN; od; Sự giao tiếp, truyền thông tiến trình qua kênh (channel) thực hai cách sau: truyền thông điệp (message passing), tức tiến trình truyền liệu đến tiến trình khác, theo chế bắt tay tức hai tiến trình thực trình gửi nhận } cách đồng (render vous) Với hai cách này, khai báo 4.3.10 Giao tiếp tiến trình channel theo cách sau: 4.3.10.1 Mô hình chung chan = [] of {,,…,} Mô hình chung trình giao tiếp bên gửi bên nhận minh hoạ sau: Bên gửi (Sender) gửi thông điệp (MSG) cho bên nhận Trong đó: name: tên channel, channel hiểu FIFO buffer (Receiver) Sau nhận thông điệp, bên nhận gửi lại tin xác dim: số lượng phần tử channel, trường hợp render vous thực để bên gửi biết thông điệp có gửi đến xác hay không dim = Sender s2r!MSG Receiver MSG ,,…,: kiểu phần tử truyền kênh Ví dụ: chan c = [1] of {bit} chan toR = [2] of {mtype, bit} chan line[2] s2r?MSG ACK r2s!ACK = [1] of {mtype, record} Gửi (Sending) liệu đến kênh: sử dụng ký hiệu ! ch ! , ,…,; Giá trị biểu thức phải tương ứng với kiểu liệu kênh khai báo r2s?ACK Câu lệnh gửi liệu câu lệnh thi hành kênh không bị tràn Nhận (Receiving) liệu từ kênh: sử dụng ký hiệu ? Trong đó: ch ? , ,…,; Sender: bên gửi Receiver: bên nhận MSG: thông điệp ACK: xác thực !: trình gửi ?: trình nhận s2r: bên gửi đến bên nhận r2s: bên nhận đến bên gửi Hình 4.2 Mô hình giao tiếp hai tiến trình ch ? , ,…,; Nếu kênh không rỗng, liệu gửi từ kênh thông qua phần độc lập message lưu trữ danh sách biến hằng, biến số trộn lẫn với danh sách 85 proctype A(chan q1) { Sau giao tiếp, x nhận giá trị 10 chan q2; q1?q2; q2!123 } proctype B(chan qforb) { 86 4.4 CÚ PHÁP CỦA LTL TRONG SPIN Để diễn tả toán tử logic thời gian tuyến tính LTL, SPIN quy ước sử dụng sau: [9] int x; [] Toán tử always qforb?x; Toán tử tồn ◊ printf("x = %d\n", x) ! Toán tử phủ định } init { U Toán tử U && Toán tử AND chan qname = [1] of { chan }; || Toán tử OR chan qforb = [1] of { int }; -> Toán tử suy run A(qname); Toán tử tương đương run B(qforb); qname!qforb } Giá trị in 123 4.3.10.2 Giao tiếp tiến trình kiểu bắt tay Dựa vào ký hiệu đó, SPIN diễn tả thuộc tính mà hệ thống cần thoả mãn 4.5 MINH HOẠ KIỂM TRA MÔ HÌNH PHẦN MỀM VỚI SPIN Bài toán quản lý tài nguyên găng: Tại thời điểm có tiến trình Khi số lượng phần tử channel = 0, tiến trình giao tiếp với sử dụng tài nguyên găng Khi tiến trình sử dụng tài nguyên theo kiểu bắt tay (render vous) ==0 có nghĩa cổng channel có găng, tài nguyên bị khoá, sau tiến trình sử dụng xong, tài nguyên thể qua, lưu trữ thông điệp Nếu tiến trình gửi ch! thực giải phóng để tiến trình khác sử dụng Như vậy, cần kiểm tra xem có tiến trình nhận ch? tương ứng thực thi đồng thời điểm, không hai tiến trình sử dụng tài nguyên kết hợp với nhau, trình thực Hai trình bắt găng tay (hand-shake) hay gặp (render vous) trao đổi liệu Do đó, thiết kế mô hình toán sau: Ví dụ: bit flag; chan ch = [0] of {bit, byte}; byte mutex; P muốn thực ch ! 1, 3+7 proctype P(bit i) Q muốn thực ch ? x { 87 atomic{ flag != 1; flag = 1; } mutex++; printf("SMC:P(%d)has enter section, mutex= %d\n",i,mutex); mutex ; flag = 0; } proctype monitor() 88 Đầu tiên, chương trình kiểm tra xem biến cờ có khác (hay 0) hay không Nếu không tức flag =1, tiến trình lặp lặp lại kiểm tra để chờ Nếu đúng, tức flag =0, tài nguyên găng sẵn sàng, tiến trình sử dụng tài nguyên găng Sau đó, đặt flag = để báo tài nguyên găng bận Hai công việc phải thực liên tiếp, đặt từ khoá atomic Khi sử dụng tài nguyên găng, biến mutex tăng lên thực công việc (giả sử công việc in hình ) Sau sử dụng xong tài nguyên găng, biến mutex giảm gắn lại biến flag = Tiến trình monitor thực lệnh assert vòng lặp để liên tục kiểm tra xem mutex có khác hay không, tức hai tiến trình { sử dụng chung tài nguyên găng Nếu vi phạm tức mô hình không thoả mãn ::printf("mutex value is %d\n",mutex); assert(mutex!=2); thuộc tính đề hệ thống Tiến trình init kích hoạt tiến trình P(0), P(1) od monitor() } Tạo file pan.c, sau hiển thị bảng trạng thái sau: init proctype P { atomic{ run P(0); run P(1); run monitor(); } } Mô hình mô tả ngôn ngữ Promela sau: Sử dụng biến mutex để đếm số tiến trình sử dụng tài nguyên găng, khởi tạo mutex = Sử dụng biến flag để đánh dấu tài nguyên găng sử dụng Nếu flag = 1, tài nguyên găng sử dụng tiến trình khác không vào Nếu flag = 0, tài nguyên găng giải phóng, tiến trình sử dụng tài nguyên state -> state [A -G] line => ((flag!=1)) state -> state [ G] line state -> state [ G] line 12 => printf('SMC: P(%d) has enter section, mutex 11 => mutex = (mutex+1) = %d\n',i,mutex) state -> state [ G] line 13 => mutex = (mutex-1) state -> state [ G] line 14 => flag = state -> state [ e-L] line 15 => -end- [(257,9)] proctype monitor state -> state [ G] line 19 => printf('mutex value is %d\n',mutex) state -> state [ G] line 20 => assert((mutex!=2)) proctype init state -> state [A -L] line 26 => (run P(0)) state -> state [A -L] line 28 => (run P(1)) state -> state [ L] line 29 => (run monitor()) 89 state -> state 90 [ e-L] line 32 => -end- [(257,9)] [printf('mutex value is %d\\n',mutex)] Transition Type: A=atomic; D=d_step; L=local; G=global 10: proc Source-State Labels: p=progress; e=end; a=accept; SMC: P(0) has enter section, mutex 11: proc Ta kiểm tra mô hình việc chạy số bước hữu hạn, giả sử ta muốn chạy mô hình với số bước chạy không 20 lần, chương trình bước, tiến trình kích hoạt chạy câu lệnh nào, giá trị trả bao nhiêu, có vi phạm điều kiện hay không Starting :init: with pid 0: proc - (:root:) creates proc (:init:) (P) line (P) line 11 12 (state 4) [mutex = (mutex+1)] = (state 5) [printf('SMC: P(%d) has enter section, mutex = %d\\n',i,mutex)] 12: proc (monitor) line 20 (state 2)[assert((mutex!=2))] 13: proc (P) line 13 (state 6) [mutex = (mutex-1)] 14: proc (P) line 14 (state 7) [flag = 0] 15: proc (P) line (state 3) [((flag!=1))] 16: proc (P) line (state 2) [flag = 1] 17: proc (monitor) line 22 (state 4) [.(goto)] mutex value is Starting P with pid 1: proc (:init:) creates proc 1: proc 0(:init:)line 26 (P) (state 4)[(run P(0))] Starting P with pid 2: proc (:init:) creates proc (P) 2: proc 0(:init:)line 28 (state 2)[(run P(1))] (monitor) line 19 (state 3) [printf('mutex value is %d\\n',mutex)] 19: proc (monitor) line 20 (state 2) [assert((mutex!=2))] 20: proc (monitor) line 22 (state 4) [.(goto)] depth-limit (-u20 steps) reached #processes: Starting monitor with pid 3: proc (:init:) creates proc 3: proc 0(:init:) line 29 18: proc (monitor) (state 3) flag = mutex = 20: proc (monitor) line 4: proc (P) line (state 3)[((flag!=1))] 20: proc (P) line 11 (state 4) 5: proc (P) line (state 2)[flag = 1] 20: proc (P) line 15 (state 8) 20: proc (:init:) line [(run monitor())] mutex value is 6: proc (monitor) line 19 (state 3) [printf('mutex value is %d\\n',mutex)] 7: proc (monitor) line 20 (state 2) [assert((mutex!=2))] 8: proc (monitor) line 22 (state 4) [.(goto)] 19 (state 3) mutex value is 9: proc (monitor) line 19 32 (state 3) (state 5) processes created Vậy, thông qua SPIN để kiểm tra mô hình toán, ta khẳng định mô hình thoả mãn thuộc tính đề đảm bảo thời điểm có nhiều tiến trình sử dụng tài nguyên găng 91 92 Vẫn với toán quản lý tài nguyên găng, giả sử ta thiết kê mô hình hệ Ở mô hình khác mô hình trước cách thay đổi thứ tự hai thống sau: câu lệnh flag = 0; mutex ; đồng thời bỏ từ khoá atomic hai bit flag; lệnh flag != 1;flag = 1; byte mutex; Tuy nhiên, thay đổi vị trí câu lệnh, làm cho mô hình hệ thống vi proctype P(bit i) phạm thuộc tính đề { flag != 1; Ta có bảng trạng thái mô hình sau: flag = 1; proctype P state -> state [ G] line => ((flag!=1)) state -> state [ G] line => flag = state -> state [ G] line => mutex = (mutex+1) flag = 0; state -> state mutex ; has enter section, mutex mutex++; printf("SMC: P(%d) has enter section, mutex %d\n",i,mutex); } = [ G] line => printf('SMC: P(%d) = %d\n',i,mutex) state -> state [ G] line 10 => flag = state -> state [ G] line 11 => mutex = (mutex-1) state -> state [ e-L] line 13 => -end-[(257,9)] [ G] line 17 =>assert((mutex!=2)) [A -L] line 24 => (run P(0)) proctype monitor() proctype monitor { state -> state proctype init ::assert(mutex!=2); state -> state od state -> state } state -> state [ L] line 27 => (run monitor()) init state -> state [ e-L] line 30 => -end-[(257,9)] { Transition Type: A=atomic; D=d_step; L=local; G=global atomic{ run P(0); run P(1); run monitor(); } } [A -L] line 26 => (run P(1)) Source-State Labels: p=progress; e=end; a=accept; Kiểm tra mô hình với số bước chạy không vượt 1000, kết sau: Starting :init: with pid 0: proc - (:root:) creates proc (:init:) //Khởi tạo tiến trình init Starting P with pid 1: proc (:init:) creates proc (P) 93 1: proc (:init:) line 94 24 (state 4) [(run P(0))] //P(0): Sử dụng tài nguyên lệnh printf //Init: Chạy tiến trình P(0) 14: Starting P with pid //P(1): Flag =1 2: proc (:init:) creates proc 2: proc (:init:) line (P) 26 (state 2) 15: [(run P(1))] proc proc (P) line (P) line (state 2) 10 (state 5) 16: Starting monitor with pid //P(1) : tăng mutex lên proc (:init:) creates proc 3: proc (:init:) line (monitor) 27 (state 3) 4: proc (monitor) line 17 17: [(run monitor())] //Init: Chạy tiến trình monitor() proc proc (P) line (state 3) [mutex = (mutex+1)] (monitor) line 20 (state 3) [.(goto)] SMC: P(1) has enter section, mutex //Monitor: (state 2) assert((mutex!=2))] [flag = 0] //P(0): Flag = //Init: Chạy tiến trình P(1) 3: [flag = 1] 18: proc = mutex = 2 (P) line (state 4) //Monitor: Kiểm tra xem mutex có khác hay không? [printf('SMC: P(%d) has enter section, mutex 5: %d\\n',i,mutex)] proc (P) line (state 1) [((flag!=1))] = //P(1) Kiểm tra xem flag có khác hay không? spin: line 6: proc (monitor) line 20 (state 3) [.(goto)] //Thực lệnh, kiểm tra thấy mutex != bị vi phạm 7: proc (monitor) line 17 (state 2) assert((mutex!=2))] spin: text of failed assertion: assert((mutex!=2)) //Monitor: Kiểm tra mutex có khác hay không? 8: proc (P) line (state 1) [((flag!=1))] //P(0): Kiểm tra flag có khác hay không? 9: proc (P) line (state 2) (P) line (state 3) [mutex = (mutex+1)] //P(0): Tăng biến mutex lên 11: proc (monitor) line 20 (state 3) [.(goto)] proc 3(monitor) line 17 (state 2) [assert((mutex!=2))] SMC: P(0) has enter section, mutex = //Monitor: Kiểm tra xem mutex có khác hay không? 13: proc (P) line (state 4) [printf('SMC: P(%d) has enter section, mutex %d\\n',i,mutex)] lỗi “Assertion violated” Mô hình SPIN tự động tạo hệ thống chuyển trạng thái cho hệ thống thông qua ngôn ngữ PROMELA, sau tự động chuyển đổi hệ thống thuộc tính LTL sang dạng Ôtômat Buchi áp dụng giải thuật kiểm tra mô hình phần mềm với tất khả hệ thống Khi //Monitor: Khởi tạo tiến trình monitor 12: flag = Khi bị vi phạm điều kiện mutex != 2, chương trình dừng lại thông báo //P(0): Nếu đúng, gán lại flag = để tiến trình P(1) sử dụng proc #processes: mutex = [flag = 1] tài nguyên găng 10: 18 , Error: assertion violated = gặp lỗi SPIN dừng lại đưa vết lỗi 95 KẾT LUẬN Nội dung đồ án trình bày bốn chương vấn đề kiểm 96 • Chương cụ thể hoá việc xây dựng hệ thống kiểm tra mô hình phần mềm cách giới thiệu ngôn ngữ chuyên dụng để đặc tả mô hình hệ thống ngôn ngữ PROMELA hệ thống kiểm tra mô tra mô hình phần mềm, lĩnh vực rộng tiếp tục hình SPIN áp dụng cho hệ thống tương tranh đa tiến trình phát triển mạnh Ngôn ngữ PROMELA ngôn ngữ đơn giản mạnh Tóm tắt luận văn: diễn giải tất tình mô hình phần mềm • Giải thích cần phải nghiên cứu kiểm tra mô hình phần mềm thuộc tính cần thoả mãn SPIN giải toán đặt cách sử dụng giải thuật đề xuất • Nghiên cứu khái niệm kiểm tra mô hình, định nghĩa đa • Cuối cùng, luận văn sử dụng ví dụ minh hoạ nhỏ việc áp dạng kiểm tra mô hình phần mềm, vị trí kỹ thuật kiểm tra mô dụng hệ thống SPIN, ngôn ngữ PROMELA để làm rõ bước hình phần mềm so với công nghệ khác Testing Tiếp theo phân biệt kỹ thuật kiểm tra mô hình phần mềm giới hạn sâu vào nghiên cứu loại kỹ thuật khả thi theo kiểu duyệt nhanh • Chương nghiên cứu đề xuát giải pháp chung để kiểm tra giải thuật tính hiệu việc kiểm tra mô hình phần mềm Đóng góp khoa học luận văn: • Luận văn giải toán kiểm tra mô hình phần mềm là: cho mô hình hệ thống M thuộc tính f, cần kiểm tra xem M có thoả mãn f hay không? Luận văn đề cập đến hướng lý thuyết mô hình phần mềm Từ phác hoạ ta nghiên cứu vấn đề mẻ ngày quan tâm rộng rãi thuyết Ôtômat Buchi cần giải xây dựng hệ thống kiểm tra mô hình phần mềm để đoán nhận xâu vô hạn logic thời gian tuyến tính để biểu diễn Luận văn đề xuất giải thuật kiểm tra mô hình phần mềm sử dụng biểu thức logic có ý nghĩa mặt thời gian Ôtômat Buchi đoán nhận chuỗi vô hạn Logic thời • Luận văn đề xuất kỹ thuật kiểm tra mô hình phần mềm cách gian tuyến tính để mô hình hoá hệ thống thuộc tính mà tích hợp giải thuật tối ưu như: mô hình hoá hệ thống hệ hệ thống cần phải thoả mãn Luận văn đề cập đến vấn đề lý thống chuyển trạng thái LTS, giải thuật chuyển đổi LTS sang thuyết hình thức xung quanh việc mô hình hoá hệ thống, thuộc tính Ôtômat Buchi, chuyển đổi logic thời gian tuyến tính LTL sang vấn đề mấu chốt toán kiểm tra xem hệ thống có thoả Ôtômat Buchi, giải thuật liên quan đến Ôtômat Buchi tính tích mãn thuộc tính hay không Ví dụ, ngữ nghĩa, cú pháp ngôn ngữ chập, kiểm tra tính rỗng…Tất giải thuật chọn lọc logic LTL, Ôtômat Buchi, hệ thống chuyển trạng thái LTS, phép kết hợp với để tạo kỹ thuật kiểm tra mô hình vừa hiệu chuyển đổi LTL LTS sang Ôtômat Buchi, phép tích chập lại mang tính thực thi cao hai Ôtômat Buchi, kiểm tra tính rỗng Ôtômat Buchi v.v 97 98 • Luận văn giới thiệu hệ thống SPIN để minh hoạ việc kiểm tra mô hình phần mềm có sử dụng ngôn ngữ mô hình hoá hệ thống TÀI LIỆU THAM KHẢO PROMELA áp dụng với phần mềm tương tranh đa tiến trình Luận văn giới thiệu chi tiết cú pháp PROMELA cách mô hình hoá [1] Thomas Noll (2006), “Software Model Checking”, Summer term 2006 hệ thống thuộc tính hệ thống đầu vào cho mô hình http://www-i2.informatik.rwth-aachen.de/Teaching/Course/SMC/2006/ SPIN Dựa vào SPIN ta thấy bảng dịch chuyển trạng thái [2] Dimitra Giannakopoulou (1999), “Model Checking for Concurrent hệ thống, bước chạy kiểm tra mô hình, dung lượng Software Architectures”, Ph.D Thesis,University of Twente nhớ cần thiết tổng số trạng thái hệ thống http://ase.arc.nasa.gov/people/dimitra/publications/thesis.pdf • Luận văn giải vấn đề kiểm tra mô hình phần mềm [3] Dino Distefano (2003), “On model checking the dynamics of object – cách tiếp cận nhiều hướng lý thuyết đồng thời đưa hướng based software”, Ph.D Thesis, University of London phát triển tương lai nhằm tối ưu hoá nữa, hỗ trợ người sử http://www.dcs.qmul.ac.uk/%7Eddino/thesis.html dụng nhiều vấn đề đồng thời tăng tính xác việc mô hình [4] Stephen Merz (2000), “Model Checking: A Toturial Overview” hoá hệ thống đầu vào, điều đặc biệt quan trọng với việc kiểm tra mô http://spinroot.com/spin/Doc/course/mc-tutorial.pdf hình phần mềm [5] Gerard J Holzmann (2005), “Software Model Checking with SPIN”, Hướng phát triển tương lai đề tài: • Tối ưu hoá biện pháp giải bùng nổ không gian trạng thái • Kiểm tra mô hình phần mềm cách sử dụng đầu vào biểu đồ trạng thái UML, áp dụng với phần mềm hướng đối tượng • Nghiên cứu để kiểm tra mô hình áp dụng với tiến trình, cho phép người sử dụng kiểm tra mức tiến trình thành phần nhỏ • Xây dựng công cụ kiểm tra mô hình phần mềm sử dụng ngôn ngữ lập trình thông dụng để mô hình hoá phần mềm C, Java… Advances in Computers, Vol 65, Ed M Zelkowitz, Elsevier Publisher, Amsterdam [6] Willem Visser (2002), “Software Model Checking” http://ase.arc.nasa.gov/visser/ASE2002TutSoftwareMC-fonts.ppt [7] Patrice Godefroid (2005), “Software Model Checking: Searching for Computations in the Abstract or the Concrete” http://cm.bell-labs.com/who/god/public_psfiles/talk-ifm2005.pdf [8] Tuba Yavuz-Kahveci and Tevfik Bultan (2003), “Automated Verification of Concurrent Linked Lists with Counters”, Proceedings of the 9th International Static Analysis Symposium (SAS 2002) M V Hermenegildo, G Pueble eds., LNCS 2477, Springer, Madrid, Spain, September 2002 99 100 [9] Maurice H ter Beek (2005), “Model Checking with SPIN” ,Proceedings [19] G.J Holzmann and M.H Smith (2000), “Automating software feature of the Ninth International Workshop on Formal Methods for Industrial verification”, Bell Labs Technical Journal, Vol 5, No 2, pp 72-87, April- Critical Systems (FMICS 2005) June 2000 (Special Issue on Software Complexity) [10] Javier Esparza and Stephan Merz, “Model Checking” [20]I S W B Prasetya, A Azurat, T E J Vos, and A van Leeuwen (2005), http://www.informatik.uni-stuttgart.de/fmi/szs/people/esparza/Talks/slides- “Building Verification Condition Generators by Compositional Extensions”, [11] www.Spinroot.com IEEE International Conference in Software Engineering & Formal Method [12]Joost-Pieter Katoen (2005) , “Software Modeling & Verification” 2005 http://www-i2.informatik.rwth- [21] Stefan Edelkamp (2005), “Tutorial on Directed Model Checking”, The aachen.de/Teaching/Course/MC/2005/mc_lec13.pdf International Conference on Automated Planning and Scheduling , ICAPS- [13]Gerard J Holzmann (1997), “The Model Checker Spin”, IEEE 2005 Transaction on software engineering, Vol 23, No 5, May 1997 [22] Javier Esparza (2004), “An Automata-Theoretic Approach to Software [14] G.J Holzmann (2000), “Software Model Checking”, NATO Summer Model Checking” School, Vol 180, pp 309-355, IOS Press Computer and System Sciences, http://www.informatik.uni- Marktoberdorf Germany, Aug 2000 stuttgart.de/fmi/szs/people/esparza/Talks/POPL2004.pdf [15]A Lluch-Lafuente, S Edelkamp, S Leue (2002), “Partial Order [23] Howard Barringer (2006), “Advanced Algorithms Automata-based Reduction in Directed Model Checking”, In 9th International SPIN Verification” Workshop, SPIN 2002, LNCS 2318,Springer, 2002 [16] Klaus Havelund, Willem Visser (2000), “Program Model Checking as New Trend”, NASA Ames Research Center, USA http://ase.arc.nasa.gov/visser/sttt-spin2000.pdf [17]Willem Visser, Klaus Havelund, Guillaume Brat, and Seung-Joon Park (2000) “Model checking programs” Proceedings of the 15th IEEE International Conference on Automated Software Engineering, Grenoble, France, September 2000 [18] A Coen-Porisini, G Denaro, C Ghezzi, and M Pezz`e (2001) “Using symbolic execution for verifying safety-critical systems” In ESEC/FSE-9: Proc 8th European Software Engineering Conference, ACM Press, 2001 http://www.cs.man.ac.uk/~david/courses/advalgorithms/automata4.pdf [24] M Daniele, F Giunchiglia, and M Y Vardi (1999) “Improved automata generation for linear temporal logic” In Proceedings of 11th Int Conf On Computer Aided Verification (CAV99), number 1633 in LNCS, 1999 [...]... gian trng thỏi kim tra mụ gian trng thỏi ca h thng li thng tng theo hm m (hoc hn th na) hỡnh ú cú tho món vi c t hay khụng c t h thng thng c biu Do ú, thỏch thc k thut ch yu trong vic kim tra mụ hỡnh l thit k cỏc din di dng logic thi gian (temporal logic) hoc ễtụmat, do ú s cú 2 phng thc v cỏc cu trỳc d liu gii quyt c khụng gian trng thỏi cỏch tip cn vic kim tra mụ hỡnh: ú l kim tra mụ hỡnh thi gian. .. khong thi gian ging nhau Ngun gc ca quan h R ó ny sinh ra hai hng phỏt trin, hai mụ hỡnh thi gian v logic: logic thi gian nhỏnh v logic thi gian tuyn tớnh [2] - Tớnh hiu qu: cú kh nng kim tra h thng v cỏc thuc tớnh cú nht quỏn hay khụng? - Kh nng din gii: Cú kh nng din gii cỏc thuc tớnh - D chuyn i: cú th t ng sinh code t c t (s dng lm mn tng bc) 3.3.3 Logic thi gian tuyn tớnh (Linear Temporal Logic -... kim tra ngụn ng c oỏn nhn bi ễtụmat Buchi AT ì Aơf cú bng rng (empty) hay khụng K THUT KIM TRA Mễ HèNH PHN MM S DNG Lí THUYT LOGIC THI GIAN TUYN TNH V ễTễMAT BUCHI 3.1 BI TON KIM TRA Mễ HèNH PHN MM 3.2 Mễ HèNH HO H THNG PHN MM 3.2.1 Vn t ra Ta luụn mong mun tỡm c cỏch biu din mụ hỡnh phn mm ỏp ng cỏc vn t ra: Bi toỏn t ra: Cho mt h thng chuyn trng thỏi T v mt thuc tớnh f Cú kh nng biu din tung tranh:... ta xut s dng logic thi gian (temporal Nhn thy, khụng cú mt c t hỡnh thc sn cú no cú th ỏp ng (l6) pcr = 6 (pcr, x2) := (7, 0), logic) thay cho vic s dng logic tnh biu din mi quan h gia cỏc (l7) pcr = 7 x2 < k pcr := 8, trng thỏi khỏc nhau trong quỏ trỡnh thc thi h thng := 11, 3.3.2 Logic thi gian (l8) pcr = 7 x2 k pcr (l9) pcr = 8 (pcr, x2) := (9, x2 + 1), Kim tra mụ hỡnh thi gian l mụ hỡnh... 9 n - x1 x2 pcr (l11) pcr = 10 (pcr, x3) := (7, x3/x2)} thi gian Logic thi gian (Temporal Logic) ó c chng minh l rt hu 3.3 C T HèNH THC CC THUC TNH CA H THNG ớch cho vic c t cỏc h thng tng tranh, thi gian thc, hng i tng := 10, thuc tớnh cn t c ca h thng c biu din di dng mnh logic bi vỡ nú cú th mụ t th t ca cỏc s kin theo th t thi gian m khụng 3.3.1 Vn t ra - Ta ó bit: H thng c mụ hỡnh hoỏ di... gii thiu mt cỏch rừ rng v thi gian Trong logic thi gian, khụng s dng cỏc toỏn t ch thi gian quỏ kh xỏc thc chng trỡnh m ch cn cỏc toỏn t liờn quan n hin ti v tng lai Mt khung thi gian (temporal frame) l mt cp (S, R) trong ú S l tp thi gian ti nhiu thi im v R l mt quan h trờn S liờn quan mi thi im vi b x lý tc thỡ ca nú Bao úng phn thõn ca R, ký hiu l , biu din th t thi gian: s t ngha l s xy ra trc... ú cú 4 phng phỏp chớnh ú l: Biu din ký hiu (Symbolic tra mụ hỡnh theo lý thuyt ụtụmat (Hỡnh 2.1) representation), Duyt nhanh (On the fly), Rỳt gn (Reduction), Xỏc thc kt KIM TRA Mễ HèNH cu (Compositional reasoning) (Hỡnh 2.3) [2] CC K THUT KIM SOT KHễNG GIAN TRNG LOGIC THI GIAN Lí THUYT ễTễMAT Hỡnh 2.1: Cỏc cỏch tip cn kim tra mụ hỡnh phn mm Kim tra mụ hỡnh phn mm ang cú xu hng rt ang phỏt trin hin... n trng thỏi kt thỳc */ add s to visited push s onto stack mi m ú l: lý thuyt ễtụmat Buchi vi c tớnh cú kh nng oỏn nhn xõu vụ hn v lý thuyt Logic thi gian tuyn tớnh LTL cú kh nng biu din v for each successor s of s mt thi gian i vi cỏc thuc tớnh ca h thng T ú, cp n rt nhiu { cỏc nh ngha, khỏi nim, gii thut xung quanh ễtụmat Buchi v Logic thi ... Temporal Logic - LTL) Cỏc thuc tớnh ca h thng thng c chun hoỏ di dng Logic thi gian tuyn tớnh (LTL) Bt c biu thc logic no ca trng thỏi ca mt h thng v cỏc giỏ tr tng ng ca nú c gi l mt cụng thc trng thỏi 45 LTL l mt dng logic hỡnh thc mụ t mi quan h gia cỏc trng thỏi trong quỏ trỡnh thc thi ca h thng Trong logic thi gian tuyn tớnh, thi gian l mt tp hp th t tuyn tớnh, thng c o bng cỏc s t nhiờn Trong mt... cho kim tra mụ hỡnh 2.1 GII THIU Lm mn quỏ trỡnh tru tng hu ht c t ng Kim tra mụ hỡnh da trờn vic to ra mụ hỡnh hu hn ca h thng v Vi bt c k thut kim tra mụ hỡnh phn mm no u phi gii kim tra mụ hỡnh ú vi cỏc thuc tớnh t ra ca phn mm Mụ hỡnh ca h quyt mt vn khú khn nht ú l: bựng n khụng gian trng thỏi Khụng thng c biu din di dng mỏy trng thỏi hu hn Sau ú, ta phi tỡm gian trng thỏi ca vic kim tra mụ hỡnh

Ngày đăng: 04/08/2016, 13:43

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan