Share this page
Projects
Publications
People
Downloads
    Project Tuva Enhanced Video Player
    Project Tuva Enhanced Video Player
    RSS

    Automatically find software defects without running the program using techniques such as deductive verification, model checking, abstract interpretation.

    Projects

    Code Contracts provide a language-agnostic way to express coding assumptions in .NET programs. The contracts take the form of pre-conditions, post-conditions, and object invariants. Contracts act as checked documentation of your external and internal APIs. The contracts are used to improve testing via runtime checking (via code rewriting), enable static contract verification (e.g. via abstract interpretation), and documentation generation.

    Home

    Spec# is a programming system aimed at improving the development and maintenance of correct software. It consists of the Spec# programming language (a superset of the object-oriented .NET language C#, adding non-null types and code contracts), the Spec# compiler (which emits run-time checks to enforce the contracts), and the Boogie-based static program verifier (which attempts to prove a program correct with respect to its contracts).

    Home | Downloads | Channel 9 Video

    HAVOC is a tool for specifying and checking properties of systems software written in C. The tool understands low-level pointer manipulations, internal pointers, and cast operations that are prevalent in systems software. The user provides annotates the program with specifications and HAVOC checks the annotated program modularly, one procedure at a time, using the Z3 automated theorem prover.

    Home | Downloads

    Boogie is an intermediate verification language, designed to make the prescription of verification conditions natural and convenient. It serves as a common intermediate representation for static program verifiers of various source languages, and it abstracts over the interfaces to various theorem provers, including Z3. Boogie is the intermediate language for the program verifiers Spec#, HAVOC, and VCC.

    Home | Downloads

    VCC stands for Verifying C Compiler. It is a tool that proves correctness of annotated concurrent C programs or finds problems in them. VCC extends C with design by contract features, like pre- and postcondition. VCC also introduces claims, which are invariants that are preserved under concurrent modification. VCC's architecture follows the Spec# and Havoc pipeline: VCC translates C and contracts into BoogiePL, Boogie translates its input into formulas for Z3.

    Home

    The VCC Workflow Logo

    SLAM is a joint research/development project for automated verification of C program against temporal safety properties. Groups involved are the SRR and RSE research groups, and the Windows Static Analysis for Drivers group.

    Home | Downloads

    The SLAM Project Logo

    Software performance is traditionally measured using profiling, which is often too little (only certain inputs are profiled) or too late (to make requisite changes to address the root cause before shipping). The SPEED project attempts to address these limitations by static estimation of symbolic computational complexity of programs. It builds over recent advances in static program analysis, which has traditionally been used for checking correctness as opposed to measuring performance.

    Home

    SPEED Project Logo

    Dafny is an experimental language that explores the dynamic frames style of specifications in an object-based sequential setting.

    Home

    Chalice is an experimental language that explores specification and verification of concurrency in programs. The language supports dynamic object creation, dynamic thread creation (fork and join), mutual-exclusion and readers-writers locks, monitor invariants, thread pre- and postconditions. The language allows fine-grained locking via specifications that track fractional permissions for memory locations. The research project also includes an automatic static program verifier for Chalice.

    Home