Chương 1. Giới thiệu cứu đặc tả hoàn chỉnh của FSP và tích hợp GUI-AGTool với công cụ LTSA. Những cải tiến này sẽ biến GUI-AGTool trở thành một công cụ hiệu quả và có tính tương tác rộng rãi hơn trong thực tế. Cấu trúc của luận văn được chia thành sáu phần.
Chương đầu tiên giới thiệu về vai trò của kiểm chứng phần mềm, công cụ hỗ trợ và bài toán cần giải quyết trong luận văn này. Tiếp theo, chương 2 trình bày các khái niệm cơ bản nhằm phục vụ luận văn. Chương này bao gồm các khái niệm về máy hữu hạn trạng thái, dẫn xuất, ghép nối song song, thuộc tính an toàn, đặc tả của ngôn ngữ FSP, ngôn ngữ lập trình hàm OCaml, Ocamllex và Ocamlyacc. Công cụ kiểm chứng phần mềm dựa thành phần AGTool được mô tả ở chương 3.
Những vấn đề còn tồn tại của công cụ kiểm chứng AGTool được nêu ra trong chương này. Các phương pháp chuyển đổi giữa các dạng biểu diễn của LTS được trình bày trong chương 4. Trong chương này đưa ra hai phương pháp chuyển đổi qua lại giữa hai cách biểu diễn của LTS là FSP và LF. Kết quả sau khi làm thực nghiệm bằng công cụ GUI-AGTool được trình bày ở chương 5.
Cuối cùng, chương 6 tóm tắt kết quả đạt được sau khi hoàn thành luận văn, những vấn đề cần khắc phục và hướng phát triển trong tương lai. 3 z Chương 2 Kiến thức cơ bản 2.1 Labeled Transition System (LTS) Trong luận văn này sử dụng LTS [11] để đặc tả hành vi của các thành phần và thuộc tính cần kiểm chứng. Giả sử Act là tập các hành động có thể quan sát được và τ là hành động đại diện cho tất cả các hành động bên trong của hệ thống, một LTS M là một bộ bốn h Q, αM, σ, q0 i. Trong đó : • Q là một tập hữu hạn các trạng thái không rỗng, • αM ⊆ Act là tập các hành động của thành phần (gọi là bảng chữ cái của M), • q0 ∈ Q là trạng thái ban đầu, và • σ ⊆ Q × (αM ∪ τ ) × Q là hàm chuyển trạng thái.
Với π là một trạng thái lỗi của hệ thống. Chúng ta ký hiệu LTS M= h{π }, Act, σ, π i. Một LTS M = h Q, αM, δ, q0 i được gọi là LTS không đơn định nếu nó có phép biến đổi τ hoặc tồn tại (q, a, q0 ), (q, a, q00 ), trong đó q0 6= q00. Ngược lại, LTS M được gọi là LTS đơn định.
LTS Input = h Q1 , αM1 , δ1 , q10 i, trong đó : • Q1 = {0, 1, 2}, • αM1 = {in, send, ack}, • σ1 = {(0, in, 1), (1, send, 2), (2, ack, 0)}, và • q10 = {0}. Kiến thức cơ bản (a) LTS Input.1: Ví dụ của LTS. LTS Input được mô tả trực quan bởi Hình 2. Khi hệ thống ở trạng thái 0 và thực hiện hành động in thì sẽ chuyển sang trạng thái 1, còn nếu hệ thống ở trạng thái 1 thực hiện hành động send thì sẽ chuyển sang trạng thái 2.
LTS Output = h Q2 , αM2 , σ2 , q20 i, trong đó : • Q2 = {0, 1, 2}, • αM2 = {send, ack, out}, • σ2 = {(0, send, 1), (1, send, 1), (1, out, 2), (2, ack, 0)}, • q20 = {0}. LTS Output được mô tả trực quan bởi Hình 2. Nếu hệ thống đang ở trạng thái 1 mà thực hiện hành động send thì vẫn giữ nguyên trạng thái 1.2 Các phương pháp biểu diễn LTS Để chuẩn bị đầu vào cho các công cụ kiểm chứng mà các thành phần được đặc tả bằng LTS, chúng ta biểu diễn LTS bằng một trong hai phương pháp sau. Kiến thức cơ bản 2.1 Phương pháp liệt kê Phương pháp liệt kê được viết tắt là LF (Listing Form) [7].
Trong phương pháp này, một LTS được biểu diễn bằng cách liệt kê tất cả các hàm chuyển trạng thái cùng với trạng thái khởi tạo.2 định nghĩa đệ quy phương pháp biểu diễn này với State đại diện cho một trạng thái của hệ thống, Action đại diện cho một hành động thuộc tập ký tự, Transition là một phép chuyển trạng thái, Transitions là một dãy tuần tự các phép chuyển trạng thái và LTS được biểu diễn bằng Transitions và kết thúc bằng trạng thái khởi tạo. State = Id Action = Id Transition = (State, Action, State) Transitions = Transition | Transition, Transitions LTS = Transitions, State.2: Phương pháp biểu diễn liệt kê của LTS.3a biểu diễn tiến trình INPUT. Tiến trình này bao gồm các trạng thái 0, 1, 2 và các hành động in, send, ack. Tiến trình INPUT được biểu diễn một cách trực trực quan bởi Hình 2.3b biểu diễn tiến trình OUTPUT.
Tiến trình này bao gồm các trạng thái 0, 1, 2 và các hành động send, out, ack. Tiến trình OUTPUT được biểu diễn một cách trực quan bởi Hình 2. (0,in,1),(1,send,2),(2,ack,0),0 (0,send,1),(1,out,2),(2,ack,0),0 (a) LF của tiến trình INPUT. (b) LF của tiến trình OUTPUT.3: Ví dụ của LF.2 FSP FSP là viết tắt của Finite State Processes (Các tiến trình hữu hạn trạng thái), là một ngôn ngữ mô hình hóa biểu diễn tương ứng với LTS.
FSP dùng để xây dựng mô hình các tiến trình, nó có thể được phân tích và kiểm tra bởi công cụ LTSA [3]. Nếu x là một hành động và P là một tiến trình thì kí hiệu ( x → P) thể hiện cho một tiến trình thực hiện hành động x và sau đó chuyển sang trạng thái P.4a biểu diễn tiến trình INPUT. Tiến trình này bao gồm các trạng thái S0, S1, S2 và các hành động in, send, ack. Tiến trình INPUT được biểu diễn một cách trực trực quan bởi Hình 2.4b biểu diễn tiến trình OUTPUT.
Tiến 6 z Chương 2. Kiến thức cơ bản trình này bao gồm các trạng thái S0, S1, S2 và các hành động send, out, ack. Tiến trình OUTPUT được biểu diễn một cách trực quan bởi Hình 2. (a) FSP của tiến trình INPUT.
(b) FSP của tiến trình OUTPUT.4: Ví dụ của FSP. Biểu diễn LTS trực quan và dễ hiểu trong khi FSP mang tính tổng quát và khó hiểu. Tuy nhiên hai biểu diễn là tương đương nhau. Tương ứng với mỗi FSP thì có một biểu diễn LTS và ngược lại.
Để biểu diễn được hết các hệ thống LTS/FSP còn có thêm nhiều từ khóa và cấu trúc khác, có thể tham khảo trong [3].3 Dẫn xuất Một dẫn xuất [12, 13] của một LTS M = h Q, αM, σ, q0 i là một chuỗi hữu hạn các hành động a1 , a2 ,. , an sao cho tồn tại một chuỗi các trạng thái q1 , q2 ,. , qn thỏa mãn điều kiện (qi−1 , ai , qi ) ∈ σ với i=1. Giả sử Σ ⊆ Act , ký hiệu σ ↑ Σ ký hiệu một dẫn xuất thu được bằng cách loại bỏ khỏi σ tất cả các hành động a mà a ∈/ Σ.
Tập tất cả các dẫn xuất của M được gọi là ngôn ngữ đoán nhận M, ký hiệu L( M ). Với LTS Input được mô tả trong Hình 2.4a thì in, in send, in send ack là các dẫn xuất. Còn in in, in send send không phải là các dẫn xuất.4 Ghép nối song song Ghép nối song song (được ký hiệu là k) là phép toán ghép nối hai thành phần phần mềm bằng cách đội bộ các hành động chung và gối đầu các hành động còn lại [11]. Giả sử M1 = h Q1 , αM1 , σ1 , q1 0 i và M2 = h Q2 , αM2 , σ2 , q2 0 i , ghép nối song song giữa M1 và M2 , ký hiệu M1 k M2 được định nghĩa như sau.
Nếu M1 = Π hoặc M2 = Π thì M1 k M2 = Π. Ngược lại, M1 k M2 = h Q, αM, σ, q0 i, trong đó : Q = Q1 × Q2 , αM = αM1 ∪ αM2 , q0 = (q1 0 , q2 0 ) và hàm σ được xác định như sau : α ∈ αM1 ∩ αM2 , ( p, α, p0 ) ∈ δ1 , (q, α, q0 ) ∈ δ2 (i ) (2. Kiến thức cơ bản kINPUT_OUPUT = (INPUTkOUTPUT). (a) FSP của INPUT||OUTPUT.
(b) LTS của INPUT||OUTPUT.5: Ghép nối song song giữa INPUT và OUTPUT.3) (( p, q), α, ( p0 , q0 )) ∈ δ Kết quả ghép nối song song của hai tiến trình INPUT trong Hình 2.4a và OUPUT trong Hình 2. Kết quả ghép nối song song được biểu diễn trực quan bởi LTS trong Hình 2. Các trạng thái send, ack được đồng bộ hóa, còn các trạng thái còn lại xen kẽ nhau. Các trạng thái mà không dẫn tới khi xuất phát từ trạng thái khởi tạo (0, 0) sẽ bị loại bỏ.5 LTS an toàn và thuộc tính an toàn LTS an toàn là một LTS hữu hạn không chứa bất kỳ một trạng thái lỗi π nào.
Thuộc tính an toàn là thuộc tính đảm bảo không lỗi xảy ra trong quá trình thực hiện của hệ thống. Một thuộc tính an toàn được biểu diễn như là một LTS an toàn p [3]. Thuộc tính an toàn Sa f etyProperty của một hệ thống được minh họa ở Hình 2. Thuộc tính này đảm bảo rằng khi hệ thống thực thi phải luôn đảm bảo các hành động in và out phải được thực hiện đúng thứ tự in→out→in→out.
Khi hệ thống đang ở trạng thái 0 và thực hiện hành động out thì hệ thống sẽ dẫn tới trạng thái -1. Trạng thái -1 được kí hiệu là trạng thái lỗi của hệ thống. Kiến thức cơ bản Hình 2.6: Biểu diễn LTS của thuộc tính an toàn Safety Property.6 Tính thỏa mãn Cho một LTS M, ta nói M thoả mãn thuộc tính p, ký hiệu M |= p, nếu và chỉ nếu : ∀σ ∈ L( M) : (σ ↑ αp) ∈ L( p). Để kiểm chứng một thành phần M thoả mãn một thuộc tính p, khi đó cả M và perr phải được biểu diễn dưới dạng của LTS an toàn (Safety LTS), sau đó thực hiện phép toán ghép nối song song M k perr.
Nếu LTS thu được sau phép ghép nối tồn tại một dẫn xuất có thể tới trạng thái π, khi đó ta nói thành phần M vi phạm thuộc tính p. Ngược lại, M thoả mãn thuộc tính p [3].7 Đặc tả ngôn ngữ FSP Cú pháp của ngôn ngữ FSP được đặc tả bằng văn phạm phi ngữ cảnh, gồm có một tập các luật sinh [3]. Mỗi luật sinh được định nghĩa bằng một kí hiệu không kết thúc ở phía bên trái và một hoặc nhiều các kí hiệu kết thúc hoặc không kết thúc ở phía bên phải. Các kí hiệu không kết thúc được thể hiện bằng kiểu in nghiêng, các kí hiệu kết thúc được thể hiện bằng kiểu in đậm.
Các định nghĩa của một kí hiệu không kết thúc được theo sau bởi dấu hai chấm.