chương 1 sẽ trình bày các khải niệm cơ bản về kỹ thuật kiểm duyệt mô hình (Model Checking), và giới thiệu về logic thời gian tuyến tính cũng như máy trạng thái hữu hạn. Khái niệm và ý nghĩa của kiểm duyệt mô hình Theo Clarke và Emerson – 1981, kiểm duyệt mô hình được định nghĩa: “Kiểm duyệt mô hình là một kỹ thuật được tự động hóa nhằm đưa ra mô hình hữu hạn trạng thái của hệ thống và thuộc tính hình thức, kỹ thuật này sẽ kiểm tra có hay không thuộc tính được thõa mãn bởi mô hình của hệ thống” [5]. Trong giai đoạn thiết kế phần mềm và phần cứng của các hệ thống phức tạp hiện nay, các chuyên gia dành rất nhiều thời cho việc kiểm chứng hơn là việc xây dựng hệ thống. Có rất nhiều kỹ thuật đã được tìm ra để làm tăng phạm vi ứng dụng của kiểm chứng.
Các phương pháp hình thức là một trong những kỹ thuật đó. Nó được tích hợp vào việc kiểm chứng trong quá trình thiết kế, để đưa ra những kỹ thuật kiểm chứng hiệu quả và làm giảm thời gian kiểm chứng hệ thống. Một trong những phương pháp hình thức mạnh mẽ nhất là kiểm duyệt mô hình [1, 2]. Kỹ thuật kiểm duyệt mô hình miêu tả hành vi của hệ thống bằng một phương pháp toán học chính xác và rõ ràng.
Một mô hình hệ thống chính xác có thể giúp chúng ta phát hiện ra những gì chưa đầy đủ, mơ hồ và không nhất quán trong đặc tả hệ thống, điều này thường được phát hiện sau giai đoạn thiết kế. Do đó cần kỹ thuật kiểm duyệt mô hình để làm rõ những điều nêu trên trước giai đoạn thiết kế. Các mô hình của hệ thống thường được đi kèm với những thuật toán mà có thể giúp chúng ta tìm ra tất cả các trạng thái của mô hình hệ thống đó. Nhờ có sự nghiên cứu phát triển về thuật toán và cấu trúc dữ liệu, cùng với khả năng của máy tính ngày càng nhanh và dung lượng lưu trữ ngày càng cao, những kỹ thuật dựa trên mô hình đã cực kỳ phát triển và không chỉ áp dụng trong những ví dụ đơn giản mà hiện nay đã được ứng dụng vào những bản thiết kế dành cho các hệ thống phức tạp [2].
Các thuộc tính điển hình có thể được kiểm tra bằng kiểm duyệt mô hình thông thường là: Kết quả sinh ra có đúng không?, hệ thống có lâm vào trạng thái bế tắc không?. Thậm chí các thuộc tính trên thời gian cũng có thể được kiểm tra như: Có thể xảy ra bế tắc trong vòng 1 giờ sau khi hệ thống khởi động lại? hoặc sự phản hồi có được nhận lại trong vòng 10 phút? … Mô hình của hệ thống thông thường được sinh ra tự động từ một sự mô tả mô hình được đặc tả trên các ngôn ngữ lập trình như C, Java hoặc ngôn ngữ mô tả phần cứng như Verilog. Các thuộc tính nói lên rằng hệ thống nên làm những z 10 gì, và không nên làm gì, nhưng ngược lại bản mô tả mô hình tập trung vào hệ thống hành động như thế nào. Công cụ kiểm chứng có khả năng kiểm tra mọi trạng thái của hệ thống để kiểm tra xem chúng có hay không thỏa mãn thuộc tính mong muốn.
Kỹ thuật kiểm duyệt mô hình có nhiều phiên bản. Phiên bản kể đến đầu tiên là dùng kỹ thuật kiểm duyệt mô hình để mô hình hóa và kiểm chứng hệ thống không có ràng buộc thời gian, tiếp đến là ứng dụng kỹ thuật này để kiểm chứng hệ thống có ràng buộc thời gian và hệ xác suất. Tuy nhiên với việc tìm hiểu và dùng kỹ thuật kiểm duyệt mô hình để kiểm chứng hệ thống không có ràng buộc thời gian sẽ đơn giản hơn. Do đó trong luận văn tác giả sẽ nghiên cứu và sử dụng phiên bản này kết hợp với kỹ thuật xây dựng biến và tiến trình đồng hồ để kiểm chứng tính chất ràng buộc thời gian trong hệ thống báo động, báo cháy.
Quy trình hoạt động của kiểm duyệt mô hình Requirements System Formalizing Modeling Property System Model Specification Model checking Satisfied Violated + Simulation Counterexample Location error Hình 1.1: Sơ đồ hoạt động của phương pháp kiểm duyệt mô hình [2] Mô hình của hệ thống được xây dựng từ đặc tả của hệ thống. Mô hình này thể hiện hành vi của hệ thống và có thể được viết bởi ngôn ngữ C, Java, hay các ngôn ngữ mô tả phần cứng. z 11 `Sự đặc tả thuộc tính yêu cầu những gì hệ thống nên làm và những gì không nên làm trong khi mô hình mô tả hệ thống hoạt động như thế nào? Kiểm duyệt mô hình sẽ kiểm tra tất cả các trạng thái hệ thống liên quan xem có thỏa mãn không, nếu không thỏa mãn sẽ đưa ra một phản ví dụ - một trạng thái của hệ thống không thỏa mãn - cho thấy cách đạt đến trạng thái không thỏa mãn, sử dụng phản ví dụ cùng với sự mô phỏng ta sẽ có được những thông tin gỡ lỗi và từ đó sẽ có được mô hình phù hợp. Đặc trưng của kiểm duyệt mô hình Quá trình kiểm duyệt một mô hình có thể chia thành những pha như sau: Pha mô hình hóa (Modeling): Xây dựng mô hình cho hệ thống bằng cách mô hình hóa hệ thống sử dụng ngôn ngữ mô tả mô hình của công cụ kiểm duyệt.
Sau đó kiểm tra sự đúng đắn và đánh giá nhanh mô hình bằng sự mô phỏng. Hình thức hóa thuộc tính cần được kiểm duyệt sử dụng ngôn ngữ đặc tả thuộc tính. Pha thực thi (Running): Sử dụng chương trình kiểm duyệt để kiểm tra tính hợp lệ của thuộc tính trên mô hình hệ thống vừa xây dựng. Pha phân tích (Analysis): Kiểm tra xem nếu thuộc tính được thỏa mãn thì kiểm tra thuộc tính tiếp theo (nếu còn).
Nếu thuộc tính bị vi phạm thì tiến hành phân tích phản ví dụ bằng sự mô phỏng; Tinh chỉnh mô hình, bản thiết kế, hoặc thuộc tính; Lặp lại toàn bộ các pha. Nếu tràn bộ nhớ thì cố gắng giảm bớt mô hình và thử lại. Sau đây, là chi tiết nội dung của từng pha: 1. Mô hình hóa (Modeling) Để có thể áp dụng được kiểm duyệt mô hình cần yêu cầu đầu vào là một mô hình của hệ thống và các thuộc tính đặc tả hình thức sẽ được kiểm chứng.
Mô hình của hệ thống mô tả hành vi của nó một cách đúng đắn và rõ ràng. Chúng thường được diễn tả bằng otomat hữu hạn trạng thái (finite state automata). Một otomat hữu hạn trạng thái gồm tập các trạng thái (states) và tập các phép chuyển (transitions). Các trạng thái chứa thông tin về giá trị hiện tại của các biến, của câu lệnh được thực thi trước đó, hoặc gì đó tương tự.
Các phép chuyển diễn tả làm thế nào hệ thống chuyển từ trạng thái này sang trạng thái khác. Với các hệ thống thực tế, otomat hữu hạn trạng thái được diễn tả bằng ngôn ngữ mô tả mô hình như C, Java, VHDL,. z 12 … 03:58 03:59 04:00 … A model of wach inc 0 dec 1 dec dec inc inc 2 A modulo 3 counter Hình 1.2 Ví dụ về mô hình [5] Để tăng chất lượng của mô hình, cần có sự mô phỏng trước khi kiểm duyệt mô hình có. Sự mô phỏng này được sử dụng để loại bỏ những vấn đề đơn giản hơn trước khi kiểm duyệt.
Điều này giúp làm giảm thời gian cũng như chi phí. Và cuối cùng, để có thể kiểm duyệt chính xác. Các thuộc tính nên được diễn đạt rõ ràng, ngắn gọn nhưng đầy đủ. Do vậy, cần sử dụng một ngôn ngữ đặc tả thuộc tính.
Trong luận văn này chỉ tập trung vào cách sử dụng logic thời gian (temporal logic) như là ngôn ngữ đặc tả thuộc tính. Thực chất, logic thời gian là sự mở rộng của logic mệnh đề với những toán tử biểu diễn hành vi của hệ thống theo thời gian. Logic thời gian hoàn toàn có khả năng biểu diễn những thuộc tính của hệ thống như sự đúng đắn chức năng (functional correctness), thuộc tính sống (liveness property), thuộc tính an toàn (safety property), thuộc tính công bằng (fairness property). Thực thi chương trình (Running the model checker) Sau khi có được mô hình của hệ thống và các thuộc tính, chúng ta cần sử dụng một công cụ kiểm chứng để kiểm tra các thuộc tính có thỏa mãn mô hình vừa xây dựng không.
Trong luận văn sẽ sử dụng công cụ kiểm chứng Spin để thực hiện điều đó. Phân tích (Analysis) Sau pha thực thi kiểm chứng mô hình, cần phải phân tích kết quả đạt được. Thường thì chúng ta có ba trường hợp xảy ra: Các thuộc tính có thỏa mãn hay không, hoặc mô hình quá lớn ngoài khả năng vật lý của bộ nhớ máy tính. Khi các thuộc tính được thõa mãn, mô hình đáp ứng được tất cả những thuộc tính mong muốn.
z 13 Khi một thuộc tính không thỏa mãn, tức có thể xuất hiện lỗi trong mô hình, hoặc có thể do thuộc tính được hình thức hóa sai. Còn về khả năng thứ 3, mô hình quá lớn để có thể xử lý thì có rất nhiều giải pháp để khắc phục. Tuy nhiên, giải pháp hiệu quả nhất là cố gắng làm giảm không gian trạng thái (state space) khi kiểm chứng. Điểm mạnh và điểm yếu của kiểm duyệt dựa trên mô hình Kiểm duyệt mô hình có một vài điểm mạnh như [2]: Là phương pháp kiểm chứng tổng quan được áp dụng cho các ứng dụng trong phạm vi lớn như hệ thống nhúng, công nghệ phần mềm, thiết kế phần cứng,… Hỗ trợ kiểm duyệt cục bộ, các thuộc tính có thể được kiểm tra riêng lẻ, từ đó tập chung kiểm duyệt các thuộc tính quan trọng trước mà không cần thiết đặc tả hệ thống hoàn chỉnh.
Quá trình kiểm duyệt sau không ảnh hưởng đến các lỗi đã được phát hiện trước đó. Cung cấp các thông tin có ý nghĩa cho việc gỡ lỗi khi phát hiện một thuộc tính không thỏa mãn. Kiểm duyệt mô hình là tiềm năng của công nghệ “push – botton”, sử dụng kiểm duyệt mô hình làm tăng mức độ tương tác người dùng và chuyên môn. Kiểm duyệt mô hình dễ dàng tích hợp trong chu kỳ phát triển phần mềm, làm giảm thời gian phát triển phần mềm.
Kiểm duyệt mô hình có nền tảng của toán học, nó dựa trên lý thuyết thuật toán đồ thị, cấu trúc dữ liệu và logic. Bên cạnh những ưu điểm trên, phương pháp kiểm duyệt mô hình cũng có những yếu điểm như [2]: Kiểm duyệt mô hình chủ yếu phù hợp với các ứng dụng điều khiển, 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ô hạn.