software quality with code contracts and pex - codecamp16oct2010

22
Software quality with Code Contracts and PEX Sorin DAMIAN

Upload: codecampiasi

Post on 22-Nov-2014

1.296 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Software quality with Code Contracts and PEX - CodeCamp16oct2010

Software quality with Code Contracts and PEXSorin DAMIAN

Page 2: Software quality with Code Contracts and PEX - CodeCamp16oct2010

ContractsDesign by Contract ™ Code contracts and runtime checking (Foxtrot)

Static verification (Clousot)DocumentationAutomated unit testing (PEX)

Page 3: Software quality with Code Contracts and PEX - CodeCamp16oct2010

Design by contractDescribed in articles since 1986Around since the Eiffel language

Bertand MeyerAnalogy with business contractsContracts

Preconditions (What does the method expect?)

Postconditions (What does it guarantee?) Invariants (What does it maintain?)

Page 4: Software quality with Code Contracts and PEX - CodeCamp16oct2010

Microsoft Code Contracts LibraryMicrosoft Research

Code contracts and runtime checking (Foxtrot)Static checker (Clousot)

Available for .NET 2.0 as an external assembly

Included in .NET 4.0Integration with Visual Studio 2008/2010Available in all .NET programming languages

Page 5: Software quality with Code Contracts and PEX - CodeCamp16oct2010

Microsoft Code Contracts ToolsRuntime checking

ccrewrite.exeStatic program verification

cccheck.exeDocumentation generation

ccdoc.exeAutomatic testing tools like PEX can take advantage of contracts

Page 6: Software quality with Code Contracts and PEX - CodeCamp16oct2010

Expressing contractsRequirement and specification documents

Code commentsGuards / defensive programmingCodeContracts

Contract.Requires(arg != null);Contract.Ensures(Contract.Result<int>() > 0);

Contract.Invariant(this.Total > 0);AssertionsAssumptions

Page 7: Software quality with Code Contracts and PEX - CodeCamp16oct2010

Code Contracts Contracts vs. Validation Handling legacy code Pre and post conditions Documentation Handling contract failures

Contract violation events Assert on contract failure

Contracts on interfaces and base classes Contracts inheritance Adding contracts to external libraries

Contract reference assemblies Using a baseline for large projects

Page 8: Software quality with Code Contracts and PEX - CodeCamp16oct2010

Demousing System.Diagnostics.Contracts;

Page 9: Software quality with Code Contracts and PEX - CodeCamp16oct2010

Code ContractsPreconditionsLegacy contractsPost conditionsInvariantsSide effects and pure methods

Page 10: Software quality with Code Contracts and PEX - CodeCamp16oct2010

DemoInterfaces and contracts inheritance

Page 11: Software quality with Code Contracts and PEX - CodeCamp16oct2010

Known issues Build slowdown due to the assembly rewriter No mechanism to provide contracts on delegates Static checker doesn’t work with closures and yield

iterators You may get static checker errors for generated code No edit and continue support

Page 12: Software quality with Code Contracts and PEX - CodeCamp16oct2010

Static verification Floyd-Hoare logic proposed in 1969

Sir Charles Antony Richard Hoare Design by Contract

Bertrand Meyer Spec#

Microsoft Research (credits go here..) Code contracts library in .NET Framework 4.0

Page 13: Software quality with Code Contracts and PEX - CodeCamp16oct2010

Static verification Verification vs. Testing Abstract interpretation Working with existing projects

Page 14: Software quality with Code Contracts and PEX - CodeCamp16oct2010

Pex Explorer

Page 15: Software quality with Code Contracts and PEX - CodeCamp16oct2010

Pex Explorer Automated white box testing tool for .NET Parameterized unit tests Supports multiple frameworks Test cases for free!!!

Page 16: Software quality with Code Contracts and PEX - CodeCamp16oct2010

Input• [runs the code +

monitors it]

Collects observed constraints• [picks a branch]

Builds constraints system to solve• [solve “Z3”]

Page 17: Software quality with Code Contracts and PEX - CodeCamp16oct2010

Pex Explorer

Page 18: Software quality with Code Contracts and PEX - CodeCamp16oct2010

Demo

Page 19: Software quality with Code Contracts and PEX - CodeCamp16oct2010

Pex understands your code Pex does not guess

No random inputs No brute force

Pex analyzes Partitions inputs into equivalence classes One equivalence class per branching behavior Test inputs computed by Z3 (the constraint solver for program

analysis from Microsoft Research) Performs inter-procedural, path-sensitive analysis

Results: Small test suite with high test coverage (new test == new

branch in code)

Page 20: Software quality with Code Contracts and PEX - CodeCamp16oct2010

Q&A

?

Page 21: Software quality with Code Contracts and PEX - CodeCamp16oct2010

Thank You!And please fill the feedback forms