Chương 1 Kiểm chứng mô hình Sự phụ thuộc của chúng ta vào các hệ thống công nghệ thông tin ngày càng gia tăng. Các hệ thống này ngày càng trở lên phức tạp, tham gia vào hầu hết các hoạt động hàng ngày thông qua Internet và các loại hệ thống nhúng như điện thoại di động, máy tính cầm tay, ô tô. Theo thống kê ngay từ những năm 1995, mỗi người tiếp xúc với khoảng 25 thiết bị công nghệ thông tin hàng ngày [3]. Các dịch vụ như ngân hàng điện tử, mua sắm trực tuyến trở lên phổ biến.
Lượng tiền hàng ngày lưu thông qua Internet là khoảng 1012 triệu đô la Mỹ [3]. Khoảng 20% chi phí phát triển các phương tiện giao thông hiện đại như xe hơi, xe lửa tốc độ cao và máy bay được dành cho các hệ thống xử lý thông tin [3]. Sự phụ thuộc của chúng ta vào các hệ thống nhúng khiến độ tin cậy của chúng có tầm quan trọng lớn trong xã hội hiện đại. Bên cạnh cung cấp hiệu suất tốt thông qua thời gian đáp ứng, năng lực xử lý thì không xảy ra lỗi là một tiêu chí quan trọng trong việc đánh giá chất lượng.
Nhiều lỗi phần mềm hoặc phần cứng không đe dọa trực tiếp cuộc sống của chúng ta nhưng có thể gây ra các hậu quả nghiêm trọng về mặt tài chính. Một số ví dụ nổi tiếng về hậu quả gây ra do lỗi phần mềm và phần cứng như trong [3]. Lỗi dấu phảy động trong bộ xử lý Intel Pentinum II đầu những năm 90 gây ra thiệt hại khoảng 475 triệu đô la Mỹ để thay thế các bộ vi xử lý lỗi, danh tiếng của Intel cũng bị ảnh hưởng nghiêm trọng. Lỗi phần mềm trong hệ thống xử lý hành lý đã trì hoãn việc mở cửa sân bay Denver trong 9 tháng, hãng này phải chịu lỗ 1.1 triệu đô la Mỹ mỗi ngày.
Đối với một số hệ thống, lỗi có thể gây ra thảm họa. Một ví dụ điển hình là lỗi trong phần mềm điều khiển của tàu vũ trụ Ariane-5 vào tháng 4 năm 1996, 36 giây kể từ khi ra khỏi bệ phóng tàu bị rơi chỉ do lỗi chuyển đổi số thực 32 bit sang số nguyên 16 bit (Hình 1. Tầm quan trọng của các hệ thống công nghệ thông tin ngày càng tăng dẫn tới nhu cầu cấp thiết là đảm bảo được tính đúng đắn của hệ thống. Các hệ thống công nghệ thông tin hiện nay không chỉ tồn tại độc lập mà còn được nhúng trong các hệ lớn, kết nối và tương tác với các thành phần thuộc hệ thống khác.
Các hệ thống như thế rất dễ xảy ra lỗi. Đặc biệt, mô hình tương tác giữa các thành phần trong một số hệ thống như hệ tương tranh, lựa chọn không đơn định rất khó để đảm bảo tính đúng đắn với các kỹ thuật tiêu chuẩn. Độ phức tạp ngày càng tăng, cùng với TIEU LUAN MOI download : skknchat@gmail.1: Tàu vũ trụ Ariane-5 vào tháng 4 năm 1996 [3] áp lực giảm thời gian phát triển hệ thống khiến việc cung cấp các hệ thống công nghệ thông tin ít khiếm khuyết là một công việc đầy khó khăn và thử thách. Kiểm chứng Kỹ thuật kiểm chứng được sử dụng trong quá trình thiết kế các hệ thống công nghệ thông tin theo nhiều cách khác nhau.
Về cơ bản, kỹ thuật này sẽ xác định một thiết kế hoặc sản phẩm dưới phạm trù cần xem xét có thỏa mãn các thuộc tính nhất định không. Các thuộc tính được kiểm chứng có thể khá đơn giản, ví dụ như hệ thống có bao giờ rơi vào trạng thái bế tắc (deadlock) không, và hầu hết các thuộc tính đều được lấy ra từ đặc tả của hệ thống. Đặc tả của hệ thống quy định những gì hệ thống phải làm và không được làm, do đó là cơ sở cho mọi hoạt động kiểm chứng. Một lỗi được tìm thấy khi hệ thống không thỏa mãn một thuộc tính trong đặc tả.
Một hệ thống được coi là đúng khi mọi thuộc tính trong đặc tả của nó được thỏa mãn. Do đó tính đúng đắn của hệ thống luôn liên quan đến đặc tả của hệ thống đó. Sơ đồ quy trình kiểm chứng được mô tả trong Hình 1. Đánh giá ngang hàng (peer reviewing) và kiểm thử (testing) là hai kỹ thuật phổ biến được sử dụng trong thực tế để đảm bảo chất lượng phần mềm.
Tuy nhiên, hai kỹ thuật này có chung một nhược điểm lớn là không thể xác định chính xác được tính đúng của hệ thống. Trong khi đánh giá ngang hàng là kỹ thuật chủ yếu dựa trên kinh nghiệm của người tham gia đánh giá thì kiểm thử chỉ có thể được tiến hành trên một số nhánh thực thi của hệ thống. Tiến hành kiểm thử trên đầy đủ các nhánh thực thi là không thể. Vì thế hai kỹ thuật này chỉ có khả năng phát hiện lỗi mà không thể khẳng định là hoàn toàn không còn lỗi trong hệ thống.
Đối với các hệ thống phần mềm phức tạp đòi hỏi độ tin cậy cao, sử dụng các kỹ thuật trên rõ ràng không đáp ứng được yêu cầu. Khi đó, các phương pháp kiểm chứng hình thức (formal verification) được coi là có nhiều tiềm năng. Bản chất của phương pháp kiểm chứng hình thức là áp dụng toán học vào việc mô hình hóa và phân tích các hệ thống công nghệ thông tin, đảm bảo tính đúng đắn cho hệ thống với sự chặt chẽ của toán học. Tiềm năng to lớn của phương pháp hình thức dẫn tới sự gia tăng nhanh chóng việc sử dụng phương pháp này trong kiểm chứng các hệ thống phức TIEU LUAN MOI download : skknchat@gmail.com 10 Đặc tả hệ thống (System specification) Thiết kế Thuộc tính (Design) (Properties ) Sản phẩm / bản thử (Product / Prototype) Tìm thấy lỗi Kiểm chứng (Verification) Không tìm thấy lỗi Hình 1.2: Sơ đồ quy trình kiểm chứng [3] tạp.
Theo thống kê, hiện nay các phương pháp hình thức được sử dụng ở một số dạng khác nhau, trong khoảng 10% đến 15% các dự án phần mềm [3]. Trong công nghệ phần mềm, kiểm chứng hình thức là khái niệm về việc sử dụng các phương pháp hình thức (formal methods) trong toán học để chứng minh hoặc phủ định tính đúng đắn của hệ thống dựa trên một đặc tả hình thức (formal specification) hoặc thuộc tính hình thức (formal property) của hệ thống đó. Quá trình kiểm chứng được tiến hành bằng các chứng minh trên một mô hình toán học trừu tượng của hệ thống, tính chính xác của mô hình toán học này phụ thuộc vào quá trình mô hình hóa. Một số dạng mô hình toán học thường được sử dụng để mô hình hóa hệ thống là: process algebra, máy trạng thái hữu hạn (finite state machines), hệ thống dịch chuyển nhãn (labelled transition systems), mạng Petri (petri nets).
Một cách tiếp cận sớm và đặc thù của kiểm chứng hình thức là kiểm chứng mô hình, quá trình kiểm chứng mô hình bao gồm các bước tiến hành để kiểm tra một cách toàn diện trên mô hình toán học của hệ thống. Nội dung luận văn tập trung vào các phương pháp mô hình hóa hệ thống để phục vụ kiểm chứng mô hình cho các hệ tương tranh. Các kỹ thuật như kiểm thử thường đem lại hiệu quả rất thấp vì lỗi trong hệ tương tranh thường không có xu hướng lặp lại [1]. Trong phát triển phần mềm, các khiếm khuyết của hệ thống được phát hiện càng sớm càng tốt vì chi phí sửa chữa lỗi trong giai đoạn bảo trì cao hơn trong giai đoạn thiết kế ban đầu khoảng 500 lần (Hình 1.
Do đó mục tiêu quan trọng của kiểm chứng mô hình là áp dụng sớm để kiểm chứng ngay trong giai đoạn thiết kế hệ thống. Trong giai đoạn này, mô hình toán học của hệ thống được xây dựng dựa TIEU LUAN MOI download : skknchat@gmail.com 11 trên nội dung bản thiết kế hệ thống và các thuộc tính cần kiểm tra được lấy ra từ đặc tả hoặc các yêu cầu thiết kế.3: Lỗi và chi phí sửa lỗi trong phát triển phần mềm [3] 1. Tổng quan về kiểm chứng mô hình Một vài năm trở lại đây, trong khoa học máy tính, kiểm chứng mô hình (model checking) bắt đầu được sử dụng rộng rãi trong kiểm định các hệ thống phần mềm và các hệ thống điều khiển điện tử [9]. Kiểm chứng mô hình là một nhóm các kỹ thuật kiểm định tự động một cách hình thức một mô hình với đặc tả các tính năng của mô hình đó [10].
Mô hình của một hệ thống bao gồm tập hợp các trạng thái và tập hợp các chuyển dịch giữa các trạng thái đó. Thông thường, một đặc tả hoặc một tính năng của hệ thống được viết dưới dạng công thức lôgic và thường được diễn tả bằng một ngôn ngữ lôgic thời gian [11, 14, 22]. Ý tưởng cơ bản là chứng minh xem một mô hình có thỏa mãn các tính năng đã mô tả trước đó về nó hay không bằng cách duyệt toàn bộ không gian trạng thái của mô hình đó. Nếu mô hình không thỏa mãn một tính năng nào đó, thuật toán cần phải đưa ra một phản ví dụ.
Phản ví dụ là một tập hợp các giá trị của biến đầu vào để chỉ ra rằng với một đầu vào như thế thì mô hình sẽ chạy không đúng như tính năng đã được mô tả. Các nghiên cứu đầu tiên về kiểm chứng mô hình được thực hiện bởi Edmund Melson Clarke và Ernest Allen Emerson cũng như Jean-Pierre Queille và Joseph Sifakis Jean-Pierre. Clarke, Emerson và Sifakis đã được nhận giải thưởng Turing năm 2007 cho các đóng góp của họ về kiểm chứng mô hình. Đặc tả thuộc tính quy định hệ thống phải làm gì và không được làm gì trong TIEU LUAN MOI download : skknchat@gmail.com 12 khi mô hình mô tả hành vi của hệ thống đó.
Hành vi của hệ thống được mô tả trên mô hình một cách rõ ràng, không mập mờ sử dụng lý thuyết toán học. Mô hình hệ thống thường được sinh tự động từ đặc tả mô hình (sử dụng các ngôn ngữ mô hình hóa). Do chỉ thực hiện dựa trên mô hình của hệ thống nên sự thiếu chính xác của mô hình có thể dẫn tới các kết quả không đầy đủ, không rõ ràng, và không nhất quán với đặc tả của hệ thống. Những vấn đề trên thường chỉ được phát hiện rất muộn sau giai đoạn thiết kế.
Mô hình hệ thống thường đi kèm các thuật toán để kiểm tra tất cả các trạng thái có trong mô hình đó để xem chúng có thỏa mãn một thuộc tính mong muốn nào đó không. Nếu bắt gặp một trạng thái vi phạm thuộc tính cần xem xét, bộ kiểm tra mô hình sẽ cung cấp một phản ví dụ để chỉ ra làm thế nào mô hình có thể đạt đến trạng thái đó.