Verifying functional correctness of C programs with VCC

  • Authors:
  • Michał Moskal

  • Affiliations:
  • Microsoft Research Redmond

  • Venue:
  • NFM'11 Proceedings of the Third international conference on NASA Formal methods
  • Year:
  • 2011

Quantified Score

Hi-index 0.00

Visualization

Abstract

VCC [2] is an industrial-strength verification environment for low-level concurrent systems code written in C. VCC takes a program (annotated with function contracts, state assertions, and type invariants) and attempts to prove the correctness of these annotations. VCC's verification methodology [4] allows global two-state invariants that restrict update of shared state and enforces simple, semantic conditions sufficient for checking those global invariants modularly. VCC works by translating C, via Boogie [1] intermediate verification language, to verification conditions handled by the Z3 [5] SMT solver. The environment includes tools for monitoring proof attempts and constructing partial counterexample executions for failed proofs and has been used to verify functional correctness of tens of thousands of lines of Microsoft's Hyper-V virtualization platform and of SYSGOs embedded real-time operating system PikeOS. In this talk, I am going to showcase various tools that come with VCC: the verifier itself, VCC Visual Studio plugin, and Boogie Verification Debugger. I am going to cover the basics of VCC's verification methodology on various examples: concurrency primitives, lock-free data-structures, and recursive data-structures. The sources and binaries of VCC are available for non-commercial use at http://vcc.codeplex.com/. A tutorial [3] is also provided. VCC can be also tried online at http://rise4fun.com/Vcc.