<VCC笔记>VCC简介与安装
最近在学校跟着老师参与了一个代码验证的工作,需要使用Microsoft Research(微软学术)开发的VCC工具,是开源的,托管在Codeplex上。这东西英语资料极其少,中文资料基本没有。我只能看官方给的英文文档。因此,我也就有了心思写几篇简单的博客,也包括文档的一些翻译。留个纪念也好。
VCC主页(https://vcc.codeplex.com/)

翻译了一下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源码在一起。
你可以通过命令行或者Visual Studio 2008/2010使用VCC(译者:更新的版本也没关系)。Visual Studio 提供接口让你方便地访问VCC工具链的不同的组件,因而一般推荐使用它。VCC可以从VCC主页(http://vcc.codeplex.com/)下载,一定要阅读安装说明,里面提供了关于安装条件和设置工具路径的方法等重要信息。”
安装
安装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上使用的,成功装上了插件。

准备好以上的环境之后,你就可以前往VCC主页(http://vcc.codeplex.com/)下载最新的安装程序进行安装了。
<VCC笔记>VCC简介与安装的更多相关文章
- MongoDB学习笔记-01 简介、安装
MongoDB简介 MongoDB是一种强大.灵活.可拓展的存储方式.是一个面向文档(相当于"行"的概念)的数据库. 可拓展:通过添加服务器而增加存储量. Windows下安装 版 ...
- ElasticSearch学习笔记-01 简介、安装、配置与核心概念
一.简介 ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进 ...
- MongoDB入门学习笔记之简介与安装配置
一.MongoDB简介 1.文档数据库 MongoDB是一款开源的文档型非关系数据库,具有高性能.高可靠性和自动扩展等特点.MongoDB中的每一条记录是一个文档,其数据存储结构为键/值对,类似JSO ...
- Nginx网络架构实战学习笔记(一):Nginx简介、安装、信号控制、nginx虚拟主机配置、日志管理、location 语法、Rewrite语法详解
文章目录 nginx简介 nginx安装 nginx信号控制 nginx虚拟主机配置 日志管理 location 语法 精准匹配的一般匹配 正则匹配 总结 Rewrite语法详解 nginx简介 Ng ...
- java大数据最全课程学习笔记(1)--Hadoop简介和安装及伪分布式
Hadoop简介和安装及伪分布式 大数据概念 大数据概论 大数据(Big Data): 指无法在一定时间范围内用常规软件工具进行捕捉,管理和处理的数据集合,是需要新处理模式才能具有更强的决策力,洞察发 ...
- nodejs之简介及安装(一)
@[nodejs|个人学习笔记] nodejs简介 什么是node.js Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. 参考网站 一.nodejs.cn 二 ...
- Oracle记录(一)Oracle简介与安装
Oracle笔记(一) Oracle简介及安装 一.轨迹 二.Oracle简介 Oracle是现在全世界最大的数据库提供商,编程语言提供商,应用软件提供商,它的地位等价于微软的地位. Oracle在古 ...
- HBase学习笔记之HBase的安装和配置
HBase学习笔记之HBase的安装和配置 我是为了调研和验证hbase的bulkload功能,才安装hbase,学习hbase的.为了快速的验证bulkload功能,我安装了一个节点的hadoop集 ...
- Zabbix学习笔记(yum源安装)
Zabbix学习笔记(yum源安装) 链接:https://pan.baidu.com/s/19RXhumkB-ulpI4BGOa5b_A 提取码:115h 复制这段内容后打开百度网盘手机App,操作 ...
随机推荐
- 获取访问用户的客户端IP(适用于公网与局域网).
/** * 获取访问用户的客户端IP(适用于公网与局域网). */ public final String getIpAddr(final HttpServletRequest requ ...
- Multisim-74LS08\74LS02\74LS86逻辑功能仿真实验
一. 实验目的 了解TTL门电路的外观封装.引脚分布和使用方法. 掌握数字电路试验台.万用表和示波器的使用方法. 掌握TTL与门.或非门和异或门的逻辑功能. 认识门电路对信号的控制作用. 二.实验内容 ...
- Blazor WebAssembly 候选版迁移手记
前言 之前我写过一篇关于 Blazor WebAssembly 的文章浏览器中的 .Net Core —— Blazor WebAssembly 初体验,如今已经更新到 RC-1,与预览版有着较大的差 ...
- Java获取主板序列号、MAC地址、CPU序列号工具类
import java.io.File; import java.io.FileWriter; import java.io.BufferedReader; import java.io.IOExce ...
- “造轮运动”之 ORM框架系列(一)~谈谈我在实际业务中的增删改查
想想毕业已经快一年了,也就是大约两年以前,怀着满腔的热血正式跨入程序员的世界,那时候的自己想象着所热爱的技术生涯会是多么的丰富多彩,每天可以与大佬们坐在一起讨论解决各种牛逼的技术问题,喝着咖啡,翘着二 ...
- 注解@NotNull/@NotEmpty/@NotBlank
@NotNull:不能为null,但可以为empty @NotEmpty:不能为null,而且长度必须大于0 @NotBlank:只能作用在String上,不能为null,而且调用trim()后,长度 ...
- Linux(十) —— 使用 rz 和 sz 命令上传与下载
以CentOS 7 系统为例,一般上传下载都是使用的第三方工具,但是在操作上并不方便,每次都要找到对应的目录才可以执行上传.下载操作,比较麻烦. 而CentOS为例的 Linux 系统可以通过安装 插 ...
- webpack+vue2.0项目 (一) vue-cli脚手架
很早以前就开始看vue2.0和webpack,但总是留不下深刻的印象,一直缺少一个可以贯通的项目,而且工作也没有时间,最近辞职在家,从网上找了个项目,写了大概八天,踩了无数的坑啊!! 下载的项目包括, ...
- Java实现 LeetCode 688 “马”在棋盘上的概率(DFS+记忆化搜索)
688. "马"在棋盘上的概率 已知一个 NxN 的国际象棋棋盘,棋盘的行号和列号都是从 0 开始.即最左上角的格子记为 (0, 0),最右下角的记为 (N-1, N-1). 现有 ...
- Java实现 LeetCode 350 两个数组的交集 II(二)
350. 两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入 ...