VCC筆記》VCC簡介與安裝

2022-02-18 09:34:53 字數 1811 閱讀 2035

最近在學校跟著老師參與了乙個**驗證的工作,需要使用microsoft research(微軟學術)開發的vcc工具,是開源的,託管在codeplex上。這東西英語資料極其少,中文資料基本沒有。我只能看官方給的英文文件。因此,我也就有了心思寫幾篇簡單的部落格,也包括文件的一些翻譯。留個紀念也好。

vcc主頁(

翻譯了一下vcc教程上的簡介

「vcc是乙個驗證環境,用與驗證c語言編寫的程式。vcc獲取乙個程式(注釋了功能, 斷言和型別不變數)並試圖證明那些注釋是正確的,

也就是說,他們對每乙個可能的程式執行。環境包括工具監測證明嘗試和構建部分反例執行失敗的證明。

vcc處理細粒度併發性和低階的c語言特性,並已用於驗證成千上萬行商業併發系統的**的功能正確性。本教程描述如何使用vcc驗證c**。它涵蓋了注釋語言、驗證方法和使用vcc本身。

本教程介紹如何使用vcc驗證c**。我們的主要受眾是的想編寫正確的**的c程式設計師。唯一的要求是擁有c語言的工作知識。使用vcc,你首先要注釋你的**,指明他做什麼(如:為你的輸入進行排序),以及為什麼它能這樣做(如:與你的迴圈和資料結構相適應的不變數)。然後vcc會試圖(以數學的方式)證明程式符合你之前訂下的規範。與大多數程式分析器不同,vcc不會尋找bug,或者分析程式的抽象;如果vcc證明程式是正確的,那麼您的程式是就是正確的。

為了檢查程式,vcc使用演繹驗證模式。它生成一定數量的數學表示式(稱為驗證條件),保證程式的正確性的「有效性表示式(?)」,並試圖使用乙個自動定理驗證器來證明這些語句。如果這些證明失敗,vcc會將失敗的原因反映到你的程式**身上(而不是讓你看到定理驗證器用的那些公式)。因此,你通常是在**和程式狀態層面與vcc互動的。通常情況下,你可以忽略在vcc內部的數學推理。例如,如果您的程式使用了除法,如果vcc無法證明除數一定非零,它會報告你的程式有(潛在的)錯誤。這並不意味著你的程式必然是不正確的。事實上,大多數情況下它都沒有問題。(vcc會報錯)那是因為你還沒有提供足夠的資訊來讓vcc推斷出這個疑似錯誤一定不會發生。(例如,你可能沒有指定乙個函式引數是必須非零)。通常,你會通過加強你的注釋來解決這個「錯誤」。不過這可能又會導致其他的錯誤報告,迫使你新增更多的注釋。所以實際的驗證是乙個迭代的過程。有時,這個過程將揭示乙個真正的程式設計錯誤。但即使它沒有,你至少也能會證明你的**不受這種錯誤影響,同時你也會產生精確的規格注釋——一種非常有用的文件。

本教程涵蓋了vcc注釋語言的基礎。當你弄懂了這篇教程,你應該就能夠使用vcc來驗證一些重要的專案了。這篇教程不包括vcc的理論背景,實現細節和高階主題。你可以從vcc主頁上可以找到這些資訊。教程中的所有小結的更多資訊都可以vcc手冊中找到。本教程中的示例和vcc原始碼在一起。

安裝

安裝vcc之前請先在機器上準備好以下的環境:

.net v4.0 or later - download installer.

f# 2.0 redistributable - download installer.

microsoft visual c++ 2010 redistributable package - download installer.

visual studio 2010 以上(any edition with c++ support). 注意,express速成版是不推薦的,它不支援在ide上使用vcc。 我是在windows10+vs2010上使用的,成功裝上了外掛程式。

Git 學習筆記《簡介與安裝》 一

git,開源中國以及github所使用的系統,is a 乙個分布式版本控制系統 be used to 為團隊合作寫 提供方便的管理系統。幾乎滿足你所有關於合作寫 的幻想。has 本地端 工作區 版本庫 版本庫還含有乙個暫存區 遠端倉庫 用於儲存你上傳的檔案,連檔案目錄原封不動地傳上去.甚至有人當網盤...

Redis筆記一之Redis簡介與安裝

本例的redis版本是3.0 簡介 1 redis是基於記憶體的資料庫。2 redis中沒有表的概念它是使用鍵值的方式儲存資料,它支援多種資料型別主要的有五種,分別是string,list,hash,set,sorted set。3 redis是單執行緒的資料庫它的所有命令都是執行緒安全的。4 它支...

LaTeX 簡介與安裝

leslie lamport 開發的 latex 是當今世界上最流行和使用最為廣泛的tex格式。它構築在plain tex的基礎之上,並加進了很多的功能以使得使用者可以更為方便的利用tex的強大功能。使用latex基本上不需要使用者自己設計命令和巨集等,因為latex已經替你做好了。因此,即使使用者...