最近在学校跟着老师参与了一个代码验证的工作,需要使用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之前请先在机器上准备好以下的环境:

    1. .Net v4.0 or later - Download installer.
    2. F# 2.0 Redistributable - Download installer.
    3. Microsoft Visual C++ 2010 Redistributable Package - Download installer.
    4. Visual Studio 2010 以上(any edition with C++ support). 注意,Express速成版是不推荐的,它不支持在IDE上使用VCC。 我是在Windows10+VS2010上使用的,成功装上了插件。

  

准备好以上的环境之后,你就可以前往VCC主页(http://vcc.codeplex.com/)下载最新的安装程序进行安装了。

<VCC笔记>VCC简介与安装的更多相关文章

  1. MongoDB学习笔记-01 简介、安装

    MongoDB简介 MongoDB是一种强大.灵活.可拓展的存储方式.是一个面向文档(相当于"行"的概念)的数据库. 可拓展:通过添加服务器而增加存储量. Windows下安装 版 ...

  2. ElasticSearch学习笔记-01 简介、安装、配置与核心概念

    一.简介 ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进 ...

  3. MongoDB入门学习笔记之简介与安装配置

    一.MongoDB简介 1.文档数据库 MongoDB是一款开源的文档型非关系数据库,具有高性能.高可靠性和自动扩展等特点.MongoDB中的每一条记录是一个文档,其数据存储结构为键/值对,类似JSO ...

  4. Nginx网络架构实战学习笔记(一):Nginx简介、安装、信号控制、nginx虚拟主机配置、日志管理、location 语法、Rewrite语法详解

    文章目录 nginx简介 nginx安装 nginx信号控制 nginx虚拟主机配置 日志管理 location 语法 精准匹配的一般匹配 正则匹配 总结 Rewrite语法详解 nginx简介 Ng ...

  5. java大数据最全课程学习笔记(1)--Hadoop简介和安装及伪分布式

    Hadoop简介和安装及伪分布式 大数据概念 大数据概论 大数据(Big Data): 指无法在一定时间范围内用常规软件工具进行捕捉,管理和处理的数据集合,是需要新处理模式才能具有更强的决策力,洞察发 ...

  6. nodejs之简介及安装(一)

    @[nodejs|个人学习笔记] nodejs简介 什么是node.js Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. 参考网站 一.nodejs.cn 二 ...

  7. Oracle记录(一)Oracle简介与安装

    Oracle笔记(一) Oracle简介及安装 一.轨迹 二.Oracle简介 Oracle是现在全世界最大的数据库提供商,编程语言提供商,应用软件提供商,它的地位等价于微软的地位. Oracle在古 ...

  8. HBase学习笔记之HBase的安装和配置

    HBase学习笔记之HBase的安装和配置 我是为了调研和验证hbase的bulkload功能,才安装hbase,学习hbase的.为了快速的验证bulkload功能,我安装了一个节点的hadoop集 ...

  9. Zabbix学习笔记(yum源安装)

    Zabbix学习笔记(yum源安装) 链接:https://pan.baidu.com/s/19RXhumkB-ulpI4BGOa5b_A 提取码:115h 复制这段内容后打开百度网盘手机App,操作 ...

随机推荐

  1. 循序渐进VUE+Element 前端应用开发(1)--- 开发环境的准备工作

    之前一直采用VS进行各种前端后端的开发,随着项目的需要,正逐步融合纯前端的开发模式,开始主要选型为Vue + Element 进行BS前端的开发,后续会进一步整合Vue + AntDesign的界面套 ...

  2. NPM的由来——为什么要使用NPM

    原文:https://blog.csdn.net/qq_37696120/article/details/80507178 https://blog.csdn.net/hong10086/articl ...

  3. protected和private的区别

    1. protected和private在没有继承关系的类A和类B之间其作用都可以视为式一样的--表示私有--每个类中的protected字段/属性都不能被访问到: 2. 当类与类之间存在继承关系时候 ...

  4. web自动化之文件上传操作

    #!/usr/bin/python3 # -*- coding: utf-8 -*- #Author: xiaojian #Time: 2018/11/16 20:49 import win32gui ...

  5. 0515项目优化和List集合

    0515项目优化和List集合 1. 项目优化 1.1 分析当前情况 问题 数据存储是数组形式,数据类型明确.复用度较低. 需求 Student操作使用的代码,StudentManager想要操作考虑 ...

  6. 剑指Offer之替换空格

    题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 函数实现: package s ...

  7. CSS 超出行显示...

    一行超出 overflow:hidden; white-space:nowrap; text-overflow:ellipsis; 多行超出 overflow: hidden; text-overfl ...

  8. 超干货!为了让你彻底弄懂MySQL事务日志,我通宵肝出了这份图解!

    还记得刚上研究生的时候,导师常挂在嘴边的一句话,"科研的基础不过就是数据而已."如今看来,无论是人文社科,还是自然科学,或许都可在一定程度上看作是数据的科学. 倘若剥开研究领域的外 ...

  9. ActiveMQ 笔记(八)高级特性和大厂常考重点

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.可用性保证 引入消息队列之后该如何保证其高可用性? 持久化.事务.签收. 以及带复制的 Leavel ...

  10. (Java实现) 有重复元素排列问题

    有重复元素的排列问题 [问题描述] 设R={ r1, r2 , -, rn}是要进行排列的n个元素.其中元素r1, r2 , -, rn可能相同.试设计一个算法,列出R的所有不同排列. [编程任务] ...