.8 Kết quả chạy ví dụ 2 với 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 45 - 48)

Để đảm bảo rằng hàm philosopher() luôn luôn thực hiện 2 lời gọi hàm (hay 2 hành động) pick_left và put_left một cách tuần tự bắt đầu bằng pick_left chúng ta sử dụng LST PhilSpec1, kiểm chứng abs_1 với công cụ Copper theo câu lệnh:

$ copper --default --specification abs_1 philosopher.pp philosopher.spec

Kết quả Copper kết luận hàm philosopher() thõa mãn đặc tả PhilSpec1 như trên hình 4.7.

conformance relation exists !!

specification abs_1 is valid ...

Để kiểm chứng rằng trong hàm philosopher() sẽ đảm bảo thực hiện hai lời gọi hàm pick_left và put_left liên tiếp mà không thực hiện lời gọi hàm pick_right xen giữa. Thực hiện kiểm chứng abs_2 với Copper rõ ràng hàm philosopher không thõa mãn đặc tả PhilSpec2 (hình 4.8)

$ copper --default --specification abs_2 philosopher.pp philosopher.spec - --trace

conformance relation does not exist !!

specification abs_2 is invalid ...

Các tham số được sử dụng trong các câu lệnh của công cụ Copper có thể tìm hiểu thêm trong file manual.html được cung cấp sau khi công cụ được cài đặt thành công.

KẾT LUẬN

Luận văn tập trung vào nghiên cứu phương pháp kiểm chứng mô hình một chương trình C từ mã nguồn và ứng dụng thực tiễn của phương pháp trên công cụ kiểm chứng tự động Copper. Phương pháp kiểm chứng này giúp chúng ta hạn chế được vấn đề bùng nổ không gian trạng thái thường gặp phải trong kiểm chứng mô hình. Đồng thời là cơ sở để xây dựng các công cụ kiểm chứng tự động phục vụ cho việc nghiên cứu hoặc ứng dụng trong công nghiệp.

Nội dung chính của đề tài trình bày cách xây dựng mô hình LTS đặc tả hành vi của chương trình từ mã nguồn bằng cách sử dụng các PA giả thiết mô tả các hàm thư viện không có mã nguồn, cùng với một tập các biểu thức logic (predicates) trên các biến của chương trình và nêu cách kiểm chứng sự thõa mãn của một LTS M với một đặc tính p bằng cách sử dụng phép ghép nối song song LTS M và một LTS lỗi của p.

Luận văn chỉ mới trình bày được các kiến thức cơ bản và ý tưởng giải thuật của phương pháp, áp dụng trên các ví dụ đơn giản. Hướng nghiên cứu tiếp theo của luận văn này là tìm hiểu về kĩ thuật chứng minh định lý (theorem prover) ứng dụng trong quá trình xây dựng mô hình từ mã nguồn, nghiên cứu áp dụng phương pháp cho việc kiểm chứng một chương trình viết bằng ngôn ngữ lập trình hướng đối tượng như JAVA, C++ …, tìm hiểu và áp dụng với các ví dụ phức tạp hơn.

Mặc dù đã rất cố gắng và nỗ lực trong quá trình làm luận văn tuy nhiên, với khả năng và kiến thức bản thân còn nhiều hạn chế, chắc chắn luận văn không tránh khỏi những chỗ sai sót cần bổ sung, em kính mong nhận được sự góp ý của các thầy cô cũng như các bạn đồng nghiệp.

TÀI LIỆU THAM KHẢO

[1] Magic tool website http://www.cs.cmu.edu/~chaki/magic/

[2] Copper tool website http://www.sei.cmu.edu/predictability/tools/copper/

[3] Sagar Chaki, Edmund Clarke, Alex Groce, Somesh Jha, Helmut Veith (June 2004), “Modular Verification of Software Component in C”, IEEE Transactions on Software Engineering, vol.30, no.6, pp.388-402.

[4] S.Chaki, E.Clarke, A.Groce, J.Ouaknine, O.Strichman, K.Yorav (June 2004), “Efficient Verification of Sequential and Concurrent C”, Formal Methods in System Design, vol.25, no.3, pp.129-166.

[5] Robert Gold (December 2010), “Control Flow Graphs And Code Coverage”, Internal Journal of Applied Mathematics and Computer Science, vol.20, no.4, pp.739-749.

[6] E. M. Clarke, O. Grumberg, and D. Peled (2000), "Model Checking", The MIT Press.

[7] P.N.Hung (2009), Assume-Guarantee verification of Evolving component based software, PhD. Dissertation.

[8] Sagar Chaki, Edmund Clarke, Alex Groce, Ofer Strichman (2003) “Predicate Abstraction with Minimum Predicates”, In Proceedings of CHARME, pp.19-34.

[9] Jeff Magee (2006), “Concurrency: State Models And Java Programs”. John Wiley & Sons.

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 45 - 48)

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

(48 trang)