Công cụ Copper

Một phần của tài liệu (Luận văn thạc sĩ) kiểm chứng từng phần cho chương trình c (Trang 35 - 37)

Trong các phần trước của luận văn đã đề cập phương pháp kiểm chứng mô hình cho một chương trình viết bằng ngôn ngữ C, trong chương này chúng ta sẽ tìm hiểu một vài ví dụ ứng dụng thực tế của phương pháp trên công cụ có tên là Copper.

Copper là một công cụ kiểm chứng tự động mã nguồn một chương trình C được phát triển bởi một nhóm tác giả của viện nghiên công nghệ phần mềm (SEI) của trường đại học Carnegie Mellon University (CMU).

Copper là công cụ được xây dựng kế thừa trên nền tảng công cụ MAGIC [1], cài đặt trên môi trường UNIX hoặc giả UNIX (Cygwin), giao tiếp với người dùng thông qua các dòng lệnh và sử dụng khái niêm FSP (finite state process) để biểu diễn các LTS. Mô hình hoạt động Input/Output của Copper được miêu tả như trên hình 4.1.

Hình 4.1: Input/Ouput của công cụ Copper.

Đầu vào của Copper là một file chứa mã nguồn C của chương trình và một file đặc tả của nó. File đặc tả sẽ cung cấp thông tin về các LTS của các hàm thư viện được dùng trong chương trình (kể cả các hàm không có mã nguồn) cũng như các LTS của thuộc tính cần kiểm chứng. Copper sẽ đưa ra kết quả thõa mãn nếu mã nguồn chương trình C là đảm bảo với thuộc tính cần kiểm chứng, trong trường hợp ngược lại sẽ đưa ra phản ví dụ.

Copper thực hiện việc kiểm chứng chương trình theo các bước xây dựng mô hình – kiểm chứng – tinh chỉnh.

Copper C files

Các files đặc tả

Valid

Bước 1: Xây dựng mô hình

Các file mã nguồn đầu vào được phân tích cú pháp và xây dựng thành otomat luồng điều khiển (CFA) của chương trình. Sau đó kết hợp với tập PA của các hàm thư viện và tập các mệnh đề logic (hoặc là được cung cấp bởi người sử dụng hoặc Copper tự phân tích từ các lệnh rẽ nhánh của chương trình) để xây dựng nên mô hình LTS MImp của cả chương trình.

Bước 2: Kiểm chứng

Trong Copper chúng ta có thể xây dựng và kiểm chứng nhiều thuộc tính khác nhau của chương trình nhưng ở đây chúng ta chỉ quan tâm đến việc kiểm tra tính thõa mãn theo thuộc tính an toàn (safety) tức là không có lỗi xảy ra tại mọi trạng thái của một hệ thống. Ở bước này Copper thực hiện việc kiểm chứng tính thõa mãn LTS MImp với LTS MSpec (MImp ⊨ MSpec). Nếu kết quả là thõa mãn việc kiểm chứng là thành công và kết thúc, trong trường hợp ngược lại Copper sẽ đưa ra một phản ví dụ và chuyển sang bước 3.

Bước 3: Tinh chỉnh

Mô hình MImp được xây dựng bởi Copper đảm bảo rằng mọi hành vi của chương trình đều được mô hình hóa bằng một vài hành vi trong MImp, tuy nhiên có thể có nhiều hành vi trong mô hình MImp không là hành vi của chương trình. Do vậy, xem xét phản ví dụ được đưa ra ở bước 2, đó có thể là một phản ví dụ chính xác trên chương trình hoặc có thể là một phản ví dụ sai. Nếu đó là một phản ví dụ chính xác, Copper kết thúc và đưa ra kết luận kết thúc quá trình kiểm chứng, ngược lại Copper sử dụng framework CEGAR (Counter Example-Guide Abstraction Refinement) [3] để tinh chỉnh lại việc xây dựng MImp.

Kiến trúc minh họa cho hoạt động của công cụ Copper được biểu diễn như trên hình 4.2. Việc xây dựng mô hình được thực hiện trong giai đoạn I và giai đoạn II. Giai đoạn I tiến hành phân tích cú pháp cho các file đầu vào, xây dựng otomat luồng điều khiển của chương trình. Ở giai đoạn II, thực hiện việc xây dựng mô hình LTS MImp từ CFA của chương trình kết hợp với tập các mệnh đề logic, và các PA của các hàm thư viện. Ở giai đoạn III sẽ thực hiện việc kiểm chứng và đưa ra kết luận.

Hình 4.2: Kiến trúc minh họa công cụ Copper.

Một phần của tài liệu (Luận văn thạc sĩ) kiểm chứng từng phần cho chương trình c (Trang 35 - 37)

Tải bản đầy đủ (PDF)

(48 trang)