Thay vì kiểmchứng trên toàn bộ hệ thống, công cụ này chia bài toán kiểm chứng thành cácbài toán nhỏ hơn ứng với các thành phần phần mềm và kiểm chứng các thànhphần này một cách riêng biệ
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Đậu Quốc Toản
NGHIÊN CỨU KHẢ NĂNG CHUYỂN ĐỔI
GIỮA CÁC ĐẶC TẢ HÌNH THỨC
VÀ ỨNG DỤNG TRONG KIỂM CHỨNG PHẦN MỀM
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
HÀ NỘI-2015
Trang 2ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Đậu Quốc Toản
NGHIÊN CỨU KHẢ NĂNG CHUYỂN ĐỔI
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
NGƯỜI HƯỚNG DẪN KHOA HỌC: TIẾN SĨ PHẠM NGỌC HÙNG
Trang 3Lời cảm ơn
Trước tiên, tôi muốn gửi lời cảm ơn sâu sắc nhất đến thầy giáo, TS Phạm NgọcHùng, người đã tận tình chỉ bảo và hướng dẫn tôi trong suốt quá trình học tập,nghiên cứu và thực hiện luận văn tốt nghiệp
Tôi xin bày tỏ lời cảm ơn sâu sắc đến những thầy cô giáo đã giảng dạy tronghai năm qua, đã tạo cho tôi những điều kiện thuận lợi để học tập và nghiên cứutại trường Đại Học Công Nghệ
Tôi xin chân thành cảm ơn GS Jeff Magee - Trưởng khoa Kỹ Thuật, trường
đại học Hoàng Gia London, tác giả cuốn sách "Concurrency - state models and Java
programs (2 ed.)" Giáo sư đã nhiệt tình giải đáp các vấn đề mà tôi gặp phải trongquá trình thực hiện luận văn
Xin gửi lời cảm ơn tới bạn Nguyễn Bảo Ngọc, người đã giúp đỡ tôi các vấn
đề kỹ thuật liên quan tới luận văn cũng như các vấn đề khác trong cuộc sống.Tôi muốn gửi lời cảm ơn sâu sắc đến gia đình và tất cả bạn bè, nhữngngười luôn kịp thời động viên và giúp đỡ tôi vượt qua những khó khăn trongcuộc sống
Cuối cùng, tôi xin gửi lời cảm ơn chân thành tới phòng thí nghiệm côngnghệ phần mềm Toshiba Phòng thí nghiệm đã tạo điều kiện cho tôi có khônggian để nghiên cứu và trao đổi cùng với bạn bè
Tôi xin chân thành cảm ơn !
Hà Nội, 28 tháng 05 năm 2015
Học viên
Đậu Quốc Toản
Trang 4Lời cam đoan
Tôi xin cam đoan luận văn này là công trình nghiên cứu của riêng tôi Các sốliệu, kết quả được trình bày trong luận văn là hoàn toàn trung thực và chưatừng được công bố trong bất kỳ một công trình nào khác Tôi đã trích dẫn đầy
đủ các tài liệu tham khảo, công trình nghiên cứu liên quan ở trong nước và quốc
tế Ngoại trừ các tài liệu tham khảo này, luận văn hoàn toàn là công việc củariêng tôi
Hà Nội, 28 tháng 5 năm 2015
Học viên
Đậu Quốc Toản
Trang 5Tóm tắt
Assume-Guarantee Tool(AGTool) là một công cụ sinh giả định, có ý nghĩa quan
trọng trong việc giải quyết bài toán "bùng nổ không gian trạng thái" của phương
pháp kiểm chứng mô hình Hiện tại, AGTool là một trong những công cụ tiềmnăng trong việc hỗ trợ kiểm chứng phần mềm hướng thành phần Thay vì kiểmchứng trên toàn bộ hệ thống, công cụ này chia bài toán kiểm chứng thành cácbài toán nhỏ hơn ứng với các thành phần phần mềm và kiểm chứng các thànhphần này một cách riêng biệt Tuy nhiên, công cụ AGTool còn tồn tại nhiều hạnchế để có thể ứng dụng vào trong thực tế và tương tác với các công cụ kiểm
chứng phần mềm khác như LTSA AGTool sử dụng kiểu dữ liệu liệt kê (LF), đây
là một trong những kiểu biểu diễn của hệ thống dịch chuyển được gán nhãn (LTS).
Với mục đích tăng khả năng tương tác với các công cụ kiểm chứng phần mềm
khác, luận văn nghiên cứu sử dụng các tiến trình hữu hạn trạng thái (FSP) thay
thế cho kiểu dữ liệu LF của AGTool Mục tiêu của luận văn là đưa ra phươngpháp chuyển đổi qua lại giữa các kiểu dữ liệu LF-FSP và ứng dụng vào công
cụ kiểm chứng AGTool Luận văn đề xuất một thuật toán để chuyển từ LF sangFSP Dựa trên công cụ LTSA của tác giả Jeff Magee, luận văn đã tiến hành tíchhợp giữa AGTool và LTSA để chuyển đổi từ FSP sang LF Những cải tiến này sẽgiúp AGTool trở thành một công cụ hiệu quả và tốt hơn trong thực tế
Trang 6Bảng từ viết tắt
đảm bảo giả địnhGUI-AGTool Graphical User Interface for
OCaml
Trang 7Mục lục
2.1 Labeled Transition System (LTS) 4
2.2 Các phương pháp biểu diễn LTS 5
2.2.1 Phương pháp liệt kê 6
2.2.2 FSP 6
2.3 Dẫn xuất 7
2.4 Ghép nối song song 7
2.5 LTS an toàn và thuộc tính an toàn 8
2.6 Tính thỏa mãn 9
2.7 Đặc tả ngôn ngữ FSP 9
2.7.1 Định nghĩa FSP 10
2.7.2 Các định danh 10
2.7.3 Nhãn hành động 11
2.7.4 Const, Range, Set 12
2.7.5 Định nghĩa tiến trình 12
2.7.6 Tiến trình kết hợp 13
2.7.7 Tham số 14
2.7.8 Phép gán lại nhãn và phép ẩn 15
2.7.9 Property, Progress và Menu 16
2.7.10 Biểu thức 16
Trang 8M ỤC LỤC
2.8 Ngôn ngữ lập trình hàm OCaml 17
2.8.1 Đặc trưng của OCaml 17
2.8.2 Cú pháp và ngữ nghĩa 18
2.9 OCamllex và OCamlyacc 23
2.9.1 OCamllex 23
2.9.2 OCamlyacc 23
3 AGTool 25 3.1 Giới thiệu AGTool 25
3.2 Hạn chế của AGTool 27
4 Chuyển đổi giữa các dạng biểu diễn của LTS 28 4.1 Chuyển đổi FSP sang LF 29
4.1.1 Ý tưởng 29
4.1.2 Thiết kế 32
4.1.3 Phân tích đánh giá 32
4.2 Chuyển đổi LF sang FSP 33
4.2.1 Ý tưởng 33
4.2.2 Phân tích đánh giá 36
5 Thực nghiệm 37 5.1 Cài đặt chương trình 37
5.2 Giới thiệu về chương trình 37
5.3 Thực nghiệm 39
5.4 Đánh giá thực nghiệm 43
Trang 9Danh sách hình vẽ
2.1 Ví dụ của LTS 5
2.2 Phương pháp biểu diễn liệt kê của LTS 6
2.3 Ví dụ của LF 6
2.4 Ví dụ của FSP 7
2.5 Ghép nối song song giữa INPUT và OUTPUT 8
2.6 Biểu diễn LTS của thuộc tính an toàn Safety Property 9
2.7 Ví dụ định nghĩa hằng số 9
2.8 Ví dụ định nghĩa danh sách đối số 10
2.9 Định nghĩa FSP 10
2.10 Định nghĩa các định danh 11
2.11 Định nghĩa các chữ hoa, thường 11
2.12 Định nghĩa nhãn hành động 11
2.13 Định nghĩa tập các nhãn hành động 12
2.14 Định nghĩa Const, Range, Set 12
2.15 Định nghĩa tiến trình 13
2.16 Định nghĩa tiến trình địa phương 14
2.17 Định nghĩa thành phần tuần tự 15
2.18 Định nghĩa thành phần tuần tự 15
2.19 Định nghĩa tham số 16
2.20 Định nghĩa phép gán lại nhãn 16
2.21 Định nghĩa phép ẩn 17
2.22 Định nghĩa Property 17
2.23 Định nghĩa Progress 18
Trang 10D ANH SÁCH HÌNH VẼ
2.24 Định nghĩa Menu 18
2.25 Định nghĩa biểu thức 19
2.26 Định nghĩa biểu thức (tiếp) 20
2.27 Định nghĩa biểu thức (tiếp) 21
2.28 Ví dụ khai báo hàm 21
2.29 Ví dụ gọi hàm 21
2.30 Ví dụ hàm mức cao 22
2.31 Ví dụ hàm nặc danh 22
2.32 Ví dụ hàm đệ quy 22
2.33 Cấu trúc lệnh của so sánh mẫu 22
2.34 Ví dụ so sánh mẫu 22
2.35 Cấu trúc tập tin đặc tả từ vựng 23
2.36 Ví dụ tập tin đặc tả từ vựng 24
2.37 Cấu trúc tập tin đặc tả cú pháp 24
3.1 Mô hình công cụ kiểm chứng AGTool 25
3.2 Thành phần đầu vào của AGTool 26
3.3 Kết quả được sinh ra bởi AGTool 26
4.1 Kiến trúc của GUI-AGTool 28
4.2 Cấu trúc thành phần chuyển đổi từ FSP sang LF 29
4.3 FSP M 29
4.4 Mô hình FSP Compiler 32
4.5 Cấu trúc thành phần chuyển đổi từ LF sang FSP 33
5.1 Giao diện chính của GUI-AGTool 38
5.2 Giao diện thể hiện giả định sinh ra bởi GUI-AGTool 39
5.3 Ví dụ FSP đầu vào của AGTool 40
5.4 LTS của thành phần M1 41
5.5 LTS của thành phần M2 41
5.6 LTS của thành phần P 41
Trang 11D ANH SÁCH HÌNH VẼ
5.7 LTS của thành phần M1 sinh ra bởi LTSA 425.8 LTS của thành phần M2 sinh ra bởi LTSA 425.9 LTS của thành phần P sinh ra bởi LTSA 42
Trang 12Danh sách bảng
2.1 Các kiểu dữ liệu cơ bản của OCaml 185.1 Bảng kích cỡ số trạng thái các mẫu đầu vào 40
Trang 13Chương 1
Giới thiệu
Trong ngành công nghiệp phần mềm, việc đảm bảo chất lượng phần mềm làmột vấn đề quan trọng nhằm đảm bảo tính đúng đắn, giảm tỉ lệ lỗi, tìm khiếmkhuyết, v.v của phần mềm trước khi đưa vào sử dụng [1] Vấn đề này không chỉ
là yếu tố quyết định thành công của các công ty phần mềm trong việc nâng cao
uy tín và giảm chi phí bảo trì mà nó còn góp phần quan trọng tới sự thành côngcủa khách hàng Vấn đề này càng cấp thiết hơn khi phát triển các phần mềmnhúng/điều khiển Lỗi trong phần mềm có thể gây ra thiệt hại không mongmuốn cho người sử dụng phần mềm hoặc có thể ảnh hưởng nghiêm trọng tớitình hình kinh tế, chính trị, an ninh của quốc gia Ví dụ, sự cố Therac-25 vàokhoảng giữa tháng 6 năm 1985 và tháng giêng năm 1987 Nguyên nhân của sự
cố này được xác định là do tương tác giữa các thành phần của hệ thống và lỗichương trình song song khi thực hiện một chức năng quan trọng của chươngtrình [2, 3] Sự cố này được xem như là tai nạn bức xạ tồi tệ nhất trong lịch sử
35 năm phát triển của ngành y học kể từ năm 1985 [2,3] Hơn nữa, trong tươnglai các tiện ích phục vụ cho con người đang dần được thay thế bởi các hệ thốngnhúng/điều khiển Nên các hệ thống này sẽ trở nên phổ biến
Để đảm bảo chất lượng phần mềm, hầu hết các công ty hiện nay sử dụngcác kỹ thuật kiểm thử trong đó chủ yếu là kỹ thuật kiểm thử hộp đen [1] Tuynhiên, các kỹ thuật kiểm thử chỉ có thể phát hiện ra lỗi/khiếm khuyết chứ khôngchỉ ra được phần mềm không còn lỗi Một số dự án phần mềm hiện nay yêu cầuphải chứng minh được tính đúng đắn của chương trình (đảm bảo rằng chươngtrình không còn lỗi) trước khi đưa vào sử dụng Điều này có nghĩa là chỉ ápdụng phương pháp kiểm thử là chưa đủ để đảm bảo chất lượng phần mềm,đặc biệt đối với những phần mềm yêu cầu tính đúng đắn và chất lượng caonhư : hệ thống điều khiển máy bay/tên lửa, hệ thống giám sát hạt nhân, v.v.Một trong những phương pháp nhằm chứng minh tính đúng đắn của chươngtrình đang được quan tâm nghiên cứu và áp dụng vào thực tế là kiểm chứng mô
Trang 14Chương 1 Giới thiệu
hình (model checking) [4] Ý tưởng của phương pháp này là xây dựng mô hìnhcủa hệ thống và các thuộc tính cần kiểm tra bằng các công cụ toán học và chứngminh tự động tính đúng đắn của nó dựa trên mô hình này Tuy nhiên, một trongnhững hạn chế lớn nhất của phương pháp này là vấn đề "bùng nổ không giantrạng thái" khi áp dụng vào các hệ thống có kích thước lớn [4] Phương phápkiểm chứng giả định-đảm bảo (Assume-Guarantee Verification) [5] được xem làgiải pháp tiềm năng để giải quyết vấn đề trên cho các hệ thống dựa trên thànhphần Phương pháp này được xây dựng dựa trên phương pháp kiểm chứng môhình kết hợp với kỹ thuật chia để trị nhằm mục đích chia nhỏ công việc kiểmchứng cả hệ thống thành các bài toán con để kiểm chứng các thành phần riêngbiệt Bằng cách tiếp cận này, bài toán bùng nổ không gian trạng thái hứa hẹn
sẽ được giải quyết Để áp dụng phương pháp này, chúng ta cần cài đặt công cụ
hỗ trợ nhằm mục tiêu ứng dụng nó trong thực tế Mặc dù phương pháp nàyđược đề xuất bởi Dimitra Giannakopoulou [5] và đã có công cụ hỗ trợ [6] nhưngcông cụ này không được công bố Một công cụ hỗ trợ phương pháp này có tên
là AGTool 1 đã được cài đặt bởi nhóm nghiên cứu [7] AGTool cho phép ngườidùng sinh ra một giả thiết kiểm chứng để kiểm tra một thành phần và cả hệthống có thỏa mãn một thuộc tính hay không
Các thành phần đầu vào của AGTool được biểu diễn dưới dạng một loạimáy hữu hạn trạng thái (LTS) và được truyền vào AGTool bằng cách liệt kê các
hàm chuyển trạng thái (trong luận văn này được gọi là dạng biểu diễn liệt kê (LF)).
Cách biểu diễn này yêu cầu phải chuẩn bị các thành phần đầu vào một cách chitiết, tốn nhiều thời gian và dễ gây ra lỗi Bên cạnh đó, dạng biểu diễn liệt kêkhông được ứng dụng rộng rãi như một số ngôn ngữ mô hình hóa khác, ví dụnhư FSP Vì vậy, AGTool gặp khó khăn trong việc tương tác và sử dụng lại đặc
tả của các chương trình kiểm chứng phần mềm khác như LTSA 2 [8] Để giảiquyết những vấn đề này, AGTool đã được nâng cấp lên phiên bản mới có tên gọi
là GUI-AGTool3 bởi [9,10] GUI-AGTool cung cấp giao diện người dùng hỗ trợnhập liệu trực quan và dễ dàng Bên cạnh đó, GUI-AGTool cũng có khả năngtương tác với các kiểu dữ liệu LF, FSP đơn giản Những cải tiến này là một bướctiến quan trọng trong quá trình đưa AGTool tiếp cận với thực tế và mở ra mộttiềm năng ứng dụng mới Tuy nhiên, GUI-AGTool vẫn còn tồn tại nhiều vấn đềcần được cải tiến GUI-AGTool cần có khả năng sử dụng được kiểu dữ liệu FSPhoàn chỉnh Kết quả của quá trình chuyển đổi từ LF sang FSP cần được tối ưunhiều hơn
Mục tiêu của luận văn này là đưa GUI-AGTool trở thành một công cụ làmviệc được với ngôn ngữ FSP hoàn chỉnh Ý tưởng cơ bản của luận văn là nghiên
1 http://uet.vnu.edu.vn/~hungpn/AGTools/
2 http://www.doc.ic.ac.uk/ltsa/
3 http://uet.vnu.edu.vn/~hungpn/GUI-AGTool/
Trang 15Chươ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ớithiệ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ảiquyế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ảnnhằ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ạntrạ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ểmchứ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àytrong chương 4 Trong chương này đưa ra hai phương pháp chuyển đổi qua lạigiữ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ệmbằng công cụ GUI-AGTool được trình bày ở chương 5 Cuối cùng, chương 6 tómtắ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
Trang 16Chương 2
Kiến thức cơ bản
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ốnhQ, αM, σ, q0i Trong đó :
• Q là một tập hữu hạn các trạng thái không rỗng,
• αM ⊆ Actlà 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 ∈ Qlà trạng thái ban đầu, và
• σ ⊆ Q× (αM∪τ) ×Qlà 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 = hQ, αM, δ, q0i đượ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 =hQ1, αM1, δ1, q10i, trong đó :
• Q1 = {0, 1, 2},
• αM1 = {in, send, ack},
• σ1 = {(0, in, 1),(1, send, 2),(2, ack, 0)}, và
• q10 = {0}
Trang 17Chương 2 Kiến thức cơ bản
(a) LTS Input.
(b) LTS Output.
Hình 2.1: Ví dụ của LTS.
LTS Input được mô tả trực quan bởi Hình 2.1a 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 =hQ2, αM2, σ2, q20i, 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.1b 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.
Để 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
Trang 18Chương 2 Kiến thức cơ bản
2.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ápnà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áicùng với trạng thái khởi tạo Hình 2.2 định nghĩa đệ quy phương pháp biểudiễn này với State đại diện cho một trạng thái của hệ thống, Action đại diệncho 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ễnbằ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.
Hình 2.2: Phương pháp biểu diễn liệt kê của LTS.
Hình 2.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áchtrực trực quan bởi Hình 2.1a Hình 2.3b biểu diễn tiến trình OUTPUT Tiến trìnhnà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ìnhOUTPUT được biểu diễn một cách trực quan bởi Hình 2.1b
Trang 19Chươ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ếntrình OUTPUT được biểu diễn một cách trực quan bởi Hình 2.1b
(b) FSP của tiến trình OUTPUT.
Hình 2.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ỗiFSP 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ốngLTS/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]
Một dẫn xuất [12, 13] của một LTS M = hQ, αM, σ, q0i là một chuỗi hữu hạncá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, , qnthỏa mãn điều kiện (qi−1, ai, qi) ∈ σ với i=1 n 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
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ầnphần mềm bằng cách đội bộ các hành động chung và gối đầu các hành độngcòn lại [11] Giả sử M1 = hQ1, αM1, σ1, q10i và M2 = hQ2, αM2, σ2, q20i , ghépnối song song giữa M1 và M2, ký hiệu M1kM2 được định nghĩa như sau Nếu
M1 = Π hoặc M2 = Π thì M1kM2 = Π Ngược lại, M1kM2 = hQ, αM, σ, q0i,trong đó : Q = Q1×Q2, αM = αM1∪αM2, q0 = (q10, q20) và hàm σ được xác
định như sau :
(i)α ∈ αM1 ∩αM2,(p, α, p0) ∈ δ1,(q, α, q0) ∈ δ2
((p, q), α,(p0, q0)) ∈ δ (2.4.1)
Trang 20Chương 2 Kiến thức cơ bản
k INPUT_OUPUT = (INPUT k OUTPUT).
(a) FSP của INPUT||OUTPUT.
Kết quả ghép nối song song được biểu diễn trực quan bởi LTS trong Hình2.5b 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ỏ
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ựchiệ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 antoà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ình2.6 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áchà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ớitrạ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
Trang 21Chương 2 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.
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ủaLTS an toàn (Safety LTS), sau đó thực hiện phép toán ghép nối song song Mkperr.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ãnthuộc tính p [3]
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ôngkế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ếtthú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 innghiêng, các kí hiệu kết thúc được thể hiện bằng kiểu in đậm Các định nghĩacủa một kí hiệu không kết thúc được theo sau bởi dấu hai chấm Nếu một kí hiệukhông kết thúc có nhiều định nghĩa ở phía bên phải, thì các định nghĩa nằm trêncác dòng khác nhau [3] Ví dụ 2.7 là định nghĩa đặc tả cú pháp của một hằng sốtrong FSP
ConstantDef:
const ConstantIdent = Expression
Hình 2.7: Ví dụ định nghĩa hằng số.
Trang 22Chương 2 Kiến thức cơ bản
Ví dụ 2.8 là định nghĩa một danh sách các tham số, bao gồm một hoặc nhiềucác biểu thức đơn cách nhau bởi dấu phẩy
ArgumentList:
Expression ArgumentList , Expression
Hình 2.8: Ví dụ định nghĩa danh sách đối số.
Hậu tố opt có thể xuất hiện sau các kí hiệu kết thúc, không kết thúc để chỉ
rõ đó là một kí hiệu tùy chọn
2.7.1 Định nghĩa FSP
FSPdescription:
FSPdefinition FSPdescription FSPdefinition FSPdefinition:
ConstantDef RangeDef SetDef ProcessDef CompositeDef PropertyDef ProgressDef MenuDef FluentDef AssertDef
Hình 2.9: Định nghĩa FSP.
Bên cạnh các định nghĩa dành cho tiến trình và kết hợp các tiến trình, một
mô tả FSP còn bao gồm các định nghĩa của các hằng số, dãy số nguyên, tập cácnhãn hành động, thuộc tính an toàn, thuộc tính progress, các menu, fluent vàassert Các luật sinh mô tả FSP được định nghĩa trong Hình 2.9
2.7.2 Các định danh
Các định nghĩa FSP và các tham số tiến trình là các định danh bắt đầu bởi chữhoa Nhãn hành động và các biến là các định danh được bắt đầu bằng chữthường [3] Các luật sinh mô tả định danh được định nghĩa trong Hình 2.10Hình 2.11 đặc tả các định danh hoa, thường U pperCaseLetter đặc tả mộtchữ cái hoa LowerCaseLetter đặc tả một chữ cái thường hoặc gạch dưới ’_’ Digitđặc tả chữ số thập phân
Trang 23Chương 2 Kiến thức cơ bản
LowerCaseIdentifier
Hình 2.10: Định nghĩa các định danh.
UpperCaseIdentifier:
UpperCaseLetter UpperCaseIdentifier Letter UpperCaseIdentifier Digit LowerCaseIdentifier:
LowerCaseLetter LowerCaseIdentifier Letter LowerCaseIdentifier Digit Letter:
UpperCaseLetter LowerCaseLetter
Hình 2.11: Định nghĩa các chữ hoa, thường.
2.7.3 Nhãn hành động
Các hành động trong FSP được gán nhãn bởi các định danh thường hoặc bởimột giá trị được kết hợp từ một biểu thức đóng kín bằng ngoặc vuông Nhãnhành động cũng được tạo nên bằng việc kết hợp các nhãn đơn giản hơn với mộtdấu chấm ’.’ [3] Nhãn hành động được đặc tả trong Hình 2.12
ActionLabel:
LowerCaseIdentifier ActionLabel LowerCaseIdentifier
[Expression]
ActionLabel [Expression]
Hình 2.12: Định nghĩa nhãn hành động.
Ví dụ nhãn hành động: in [43] in[12] in[2][i*2] x[1].y[3]
Một tập các nhãn hành động được định nghĩa trong Hình 2.13
Ví dụ tập các nhãn hành động: a,b,c X.a in[x:1 3] in[x:T] a.x,y,z
Trang 24Chương 2 Kiến thức cơ bản
ActionLabels:
ActionLabel Set
[ActionRange]
ActionLabels ActionLabel ActionLabels Set ActionLabels [ActionRange]
ActionLabels [Expression]
ActionRange:
Range Set Variable : Range Variable : Set Range:
RangeIdent Expression Expression ActionLabels:
SetIdent
{SetElements}
ActionLabels:
ActionLabels SetElements , ActionLabels
Hình 2.13: Định nghĩa tập các nhãn hành động.
2.7.4 Const, Range, Set
Định nghĩa Const, Range, Set được đặc tả trong Hình 2.14 [3]
set SetIdent = { setElements}
Hình 2.14: Định nghĩa Const, Range, Set.
Trang 25Chương 2 Kiến thức cơ bản
ProcessDef:
ProcessIdent Paramopt= ProcessBody AlphabetExtensionoptRelabeloptHidingopt ProcessBody:
LocalProcess LocalProcess , LocalProcessDefs LocalProcessDefs:
LocalProcessDef LocalProcessDefs, LocalProcessDef LocalProcessDef:
ProcessIdent IndexRangesopt= LocalProcess AlphabetExtension:
Tiến trình kết hợp được phân biệt với tiến trình chính bằng cách thêm tiền tố k
vào trước định nghĩa Các tiến trình kết hợp được tạo ra bằng cách sử dụng cácthành phần song song, gán lại nhãn, độ ưu tiên và phép ẩn Gán nhãn và chia sẻ
Trang 26Chương 2 Kiến thức cơ bản
LocalProcess:
BaseLocalProcess SequentialComposition
if Expression then LocalProcess
if Expression then LocalProcess else LocalProcess
(Choice)
BaseLocalProcess:
END STOP ERROR
ProcessIdent Indicesopt
Choice:
ActionPrefix Choice | ActionPrefix
ActionPrefix:
GuardoptPrefixActions -> LocalProcess
PrefixActions:
ActionLabels PrefixActions -> ActionLabels
Hình 2.16: Định nghĩa tiến trình địa phương.
tiến trình là các cấu trúc đặc biệt của việc gán lại nhãn [3] Hình 2.18 mô tả địnhnghĩa của tiến trình kết hợp
Trang 27Chương 2 Kiến thức cơ bản
SequentialComposition:
SeqProcessList ; BaseLocalProcess SeqProcessList:
ProcessRef SeqProcessList ; ProcessRef ProcessRef:
ProcessIdent ArgumentoptArgument:
(ArgumentList)
ArgumentList:
Expression ArgumentList , Expression
Hình 2.17: Định nghĩa thành phần tuần tự.
CompositeDef:
kProcessIdent Paramopt= CompositeBody PriorityoptHidingopt
CompositeBody:
PrefixLabeloptProcessRef Relabelopt
PrefixLabelopt(ParallelComposition)Relabelopt
forall Ranges CompositeBody
if Expression then CompositeBody
if Expression then CompositeBody else CompositeBody
tương đương với
P/{ a[1]/x[1], a[2]/x[2], a[3]/x[3] }
Hình 2.21 định nghĩa phép ẩn
Trang 28Chương 2 Kiến thức cơ bản
Param:
( ParameterList )
ParameterList:
Parameter ParameterList , Parameter Parameter:
ActionLabels / ActionLabels
forall IndexRanges { RelabelDefs }
Hình 2.20: Định nghĩa phép gán lại nhãn.
2.7.9 Property, Progress và Menu
Thuộc tính an toàn được định nghĩa bởi một tiến trình có tiền tố là property [3].Hình 2.22 định nghĩa Property
Hình 2.23 định nghĩa Progress
Một Menu định nghĩa các thể loại tập hợp các hành động mà người dùng
có thể điều khiển trong một hoạt cảnh [3] Hình 2.24 định nghĩa Menu
2.7.10 Biểu thức
Biểu thức của FSP là một tập con biểu thức của Java Có một vài bất lợi khi cáctoán tử tiến của FSP có ý nghĩa khác nhau khi được dùng trong ngữ cảnh củabiểu thức Cụ thể hơn, các phép toán ưu tiên « và » có nghĩa là dịch trái và dịchphải khi sử dụng trong một biểu thức Toán tử kết hợp song songk có ý nghĩalogic khi sử dụng trong biểu thức Toán tử lựa chọn | có nghĩa là bit-wise ortrong biểu thức Và toán tử gán lại nhãn / có nghĩa là phép chia trong biểu thức[3] Hình 2.25, 2.26, 2.27 biểu diễn đặc tả biểu thức
Biểu thức @(A, e) trả về giá trị nhãn của phần tử thứ e của tập A Biểu thức
#A trả về số lượng phần tử của tập A
Trang 29Chương 2 Kiến thức cơ bản
2.8.1 Đặc trưng của OCaml
Trình biên dịch của OCaml [14] gán kiểu tĩnh cho dữ liệu trong chương trình vàkiểm tra tại thời điểm biên dịch để đảm bảo rằng lỗi không xuất hiện Kiểu củabiến được suy diễn tự động trong suốt quá trình dịch bởi ngữ cảnh mà chúngxuất hiện trong chương trình Vì vậy, kiểu của giá trị và kiểu trả về của hàmtrong ngôn ngữ OCaml không cần đặc tả rõ, điều này sẽ làm cho dung lượng
mã nguồn giảm xuống Mã nguồn OCaml cũng có thể kiểm chứng được Công
cụ kiểm chứng tự động có thể kiểm tra mã nguồn OCaml và chứng thực rằng cáckiểu được sử dụng hợp lệ Công cụ kiểm tra sẽ đi sâu vào phân tích tĩnh chươngtrình ở một mức độ nào đó mà các ngôn ngữ lập trình khác (trừ Ada) hiện nàychưa thể thực hiện được Bên cạnh tính năng an toàn thì OCaml còn có tốc độthực thi nhanh Trình biên dịch có khả năng tối ưu hóa mã nguồn nên sinh ra mãthực thi nhanh OCaml đã phát triển hệ thống Module và thư viện chuẩn Hệthống Module cho phép lập trình viên viết các ứng dụng lớn Một chương trìnhđược viết bằng OCaml thường có kích thước bé hơn chính nó được viết bằngcác ngôn ngữ khác OCaml là một ngôn ngữ hết sức ngắn gọn, với các ngoại
lệ và so khớp mẫu thì lập trình viên thường không phải viết nhiều mã nguồnnhư đã làm với các ngôn lập trình khác Việc rút ngắn khối lượng mã nguồn sẽgiúp lập trình viên làm việc hiệu quả hơn, nhanh hơn và ít lỗi hơn OCaml làmột ngôn ngữ lập trình hàm nên việc học nhanh chóng OCaml là một điều khókhăn Thông thường, để rút ngắn gọn mã nguồn trong OCaml và để làm chochương trình phát huy được hết sức mạnh của OCaml thì lập trình viên đượckhuyên nên sử dụng đệ quy, so khớp mẫu trong chương trình của mình OCamlthừa hưởng phong cách lập trình của Meta Language Vì vậy, người dùng phảimất một thời gian khá dài để hiểu được ngôn ngữ Bên cạnh đó, cần có một sốkiến thức lập trình và tư duy làm nền tảng