<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,操作 ...
随机推荐
- Fabric进阶(三)—— 使用SDK动态增加组织
在fabric网络运行过程中动态追加新的组织是相当复杂的,网上的资料也十分匮乏,大多是基于first-network这样的简单示例,而且是使用启动cli容器的方法来增加组织,几乎没有针对实际应用的解决 ...
- UVA10779 Collectors Problem
题目链接:https://cn.vjudge.net/problem/UVA-10779 前言: 本题是关于姜志豪<网络流的一些建模方法>的笔记. 知识点: 最大流 题意摘抄: \(Bob ...
- CF832D
题目链接:http://codeforces.com/contest/832/problem/D 题目大意:在一个无向图上,给出三个点,以其中一个点为终点,另外两个点为起点,请问如何安排起点和终点可以 ...
- Node.js NPM Tutorial: Create, Publish, Extend & Manage
A module in Node.js is a logical encapsulation of code in a single unit. It's always a good programm ...
- nginx四种均衡策略
1.基于轮询的均衡策略: 轮询嘛,就是说对进到nginx的request按照遍历的方式进行分发,如果request 1 分发到 Server A,那么request 2将被分发到 Server B,. ...
- Linux赋权chmod
chmod -R 777 文件名/ 给文件可读.可修改.可执行权限
- OpenStack知识点详解
一:云计算 一.起源 1. 云计算这个概念首次在2006年8月的搜索引擎会议上提出,成为了继互联网.计算机后信息时代的又一种革新(互联网第三次革命). 2. 云计算的核心是将资源协调在一起,使 ...
- SpringMVC入门总结
一.SpringMVC的好处? 1,基于注解,stuts2虽然也有注解但是比较慢,没人用更多的时候是用xml的形式 2,能与spring其它技术整合比如说webflow等, 3,获取request及s ...
- 实验四:Linux系统C语言开发环境学习
项目 内容 这个作业属于哪个课程 班级课程主页链接 这个作业的要求在哪里 作业要求 学号-姓名 17043133-木腾飞 作业学习要求 1.学习Linux系统中如何查看帮助文档:2.在Linux系统中 ...
- Golang源码学习:调度逻辑(三)工作线程的执行流程与调度循环
本文内容主要分为三部分: main goroutine 的调度运行 非 main goroutine 的退出流程 工作线程的执行流程与调度循环. main goroutine 的调度运行 runtim ...