<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,操作 ...
随机推荐
- SQL SERVER sa无法登陆的问题
安装的时候选择了 Windows 身份验证模式,只能windows内置账户登录解决方法:先登录(SQL Server Management Studio ),点服务器,右键->属性->安全 ...
- 在ORACLE中实现SELECT TOP N的方法----[转]
1.在ORACLE中实现SELECT TOP N 由于ORACLE不支持SELECT TOP语句,所以在ORACLE中经常是用ORDER BY跟ROWNUM的组合来实现SELECT TOP N的查询. ...
- logback-spring.xml配置
logback-spring.xml配置 <?xml version="1.0" encoding="UTF-8"?> <configurat ...
- 求平均成绩(hdu2023)
注意:要心细,不要错在小细节上.如int c[6];double agve; c[j]=agve:这是错误的. #include<stdio.h> #include<cmath> ...
- Spring Boot 教程 (3) - RESTful
Spring Boot 教程 - RESTful 1. RESTful风格 1.1 简介与特点 RESTful是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式 ...
- ubuntu18.04.4安装k8s
k8s部署 1.集群所有主机关闭swap sudo swapoff -a sudo sed -i 's/.*swap.*/#&/' /etc/fstab 如果重启后swap还是自动挂载执行sy ...
- Python 每日一练 | Flask 实现半成品留言板
留言板Flask实现 引言 看了几天网上的代码,终于写出来一个半成品的Flask的留言板项目,为什么说是半成品呢?因为没能实现留言板那种及时评论刷新的效果,可能还是在重定向上有问题 或者渲染写的存在问 ...
- Spring_Bean的配置方式
1.通过工厂方法配置bean beans-factory.xml <?xml version="1.0" encoding="UTF-8"?> &l ...
- React面试题(超详细,附答案)
生命周期 组件将要挂载时触发的函数:componentWillMount 组件挂载完成时触发的函数:componentDidMount 是否要更新数据时触发的函数:shouldComponentUpd ...
- 01 . Tomcat简介及部署
Tomcat简介 Tomcat背景 tomcat就是常用的的中间件之一,tomcat本身是一个容器,专门用来运行java程序,java语言开发的网页.jsp就应该运行于tomcat中.而tomcat本 ...