2014-12-14 13 views
11

Tôi hiểu các ngôn ngữ như Coq và Idris có thể được sử dụng như thế nào để chứng minh các thuộc tính của các chương trình được viết bằng ngôn ngữ đó (đánh giá bằng kinh nghiệm nhỏ của tôi trong chủ đề này), nhưng tôi tự hỏi liệu có cách tiếp cận tương tự bên ngoài hay không đã tồn tại codebase.Có cách nào để chứng minh các thuộc tính về các chương trình C++ của tôi không?

Có cách nào để sử dụng một công cụ như Coq hay một số công cụ chuyên biệt khác để chứng minh tính đúng đắn của các thuật toán được viết bằng C++ không? Nếu vậy, các yêu cầu để làm như vậy là gì?

+1

Đối với C, có [Frama-C] (http://frama-c.com/), cố gắng giải thích về hành vi của một chương trình. Nếu mã thuật toán mã của bạn tương thích với/compilable như C, bạn có thể sử dụng nó. –

Trả lời

5

Tùy thuộc vào ý bạn bằng cách "chứng minh thuộc tính". Theo như tôi biết, có rất nhiều công cụ phân tích tĩnh để kiểm tra các thuộc tính đơn giản của các chương trình C, và chúng thay đổi rộng rãi về tính biểu cảm, dễ sử dụng, độ phân tích, vv. Chúng thường được sử dụng để kiểm tra các chương trình đó các lỗi thời gian chạy, nhưng không phải là rất tốt để kiểm tra các đặc tả chức năng đầy đủ. Đối với loại tài sản này, bạn có thể phải sử dụng một trình giải mã mạnh mẽ hơn yêu cầu bạn viết bằng chứng một cách thủ công, thay vì tự động kiểm tra một bằng chứng.

Vì bạn đề cập đến Coq, tôi muốn giới thiệu cho bạn hai công cụ dựa trên Coq để xác minh chương trình C (chúng không hoạt động với C++): trên danh mục thứ hai, có Verified Software Toolchain, lý luận về các chương trình C được nhúng bên trong Coq. Bạn có thể sử dụng nó để viết bằng chứng về hành vi của chương trình của bạn và có Coq kiểm tra chúng, bao gồm hiển thị rằng một chương trình đáp ứng đặc tả chức năng của nó. Trên danh mục cũ, có Verasco, một công cụ phân tích tĩnh tự động kiểm tra chương trình của bạn nếu không có lỗi thời gian chạy. Một tính năng thú vị của các công cụ này là chúng là các chương trình được xác minh, ngụ ý rằng bạn có thể có thêm mức độ tin cậy trong các phân tích mà chúng phân phối.

Các công cụ thú vị khác bao gồm Frama-C, như đã đề cập trong nhận xét ở trên và VCC, một máy phân tích tĩnh của Microsoft. Tuy nhiên, chúng không hoạt động với C++.

Các vấn đề liên quan