Contract First Development with Microsoft Code Contracts and Microsoft Pex at Silicon Valley Code Camp 2011 (2011-10-08)
- 1. Silicon Valley
Code Camp
Contract-First Development with
>
Microsoft Code Contracts
and Microsoft Pex
Foothill College, October 8nd 2011
- 2. Theo Jungeblut
• Senior Software Developer at
Omnicell Inc. in Mountain View
• Has been designing and
implementing .NET based
applications , components and
frameworks for more than 8 years
• Previously worked in factory
automation with focus on
component based software and
framework development for 3 ½
years
theo@csharp-lighthouse.com
• Degree in Software Engineering
and Network Communications www.csharp-lighthouse.com
- 3. Overview
• How to measure Code Quality
• Principles and Practices
• Microsoft Code Contracts
• How is your Code Coverage?
• Microsoft Pex & Moles
• Time for Source Code
• Summary
• Q&A
• References
- 7. Clean Code is maintainable
Source code must be:
• readable & well structured
• extensible
• testable
- 8. Clean Code is maintainable
Source code must be:
• readable & well structured
• extensible
• testable
- 9. Code Maintainability *
Principles Patterns Containers
Why? How? What?
Extensibility Clean Code Tool reuse
* from: Mark Seemann’s “Dependency Injection in .NET” presentation Bay.NET 05/2011
- 11. Don’t repeat yourself (DRY)
by Andy Hunt and Dave Thomas in their book “The Pragmatic Programmer”
// Code Copy and Paste Method // DRY Method
public Class Person public Class Person
{ {
public string FirstName { get; set;} public string FirstName { get; set;}
public string LastName { get; set;} public string LastName { get; set;}
public Person(Person person) public Person(Person person)
{ {
this.FirstName = string.IsNullOrEmpty(person.FirstName) this.FirstName = person.FirstName.CloneSecured();
? string.Empty : (string) person.FirstName.Clone(); this.LastName = person.LastName.CloneSecured();
}
this.LastName = string.IsNullOrEmpty(person.LastName)
? string.Empty : (string) person.LastName.Clone(); public object Clone()
} {
return new Person(this);
public object Clone() }
{ }
return new Person(this);
}
} public static class StringExtension
{
public static string CloneSecured(this string original)
{
return string.IsNullOrEmpty(original) ? string.Empty : (string)original.Clone();
}
}
- 13. Separation of Concerns (SoC)
probably by Edsger W. Dijkstra in 1974
• “In computer science,
separation of concerns (SoC) is
the process of separating a
computer program into distinct
features that overlap in
functionality as little as possible.
•A concern is any piece of
interest or focus in a program.
Typically, concerns are
synonymous with features or
behaviors. “
http://en.wikipedia.org/wiki/Separati
on_of_Concerns
- 14. Single Responsibility Principle (SRP)
by Robert C Martin
“Every object should have a single responsibility, and that
responsibility should be entirely encapsulated by the class.”
http://en.wikipedia.org/wiki/Single_responsibility_principle
public class Logger : ILogger
{
public Logger(ILoggingSink loggingSink)
{}
public void Log(string message)
{}
}
http://www.ericalbrecht.com
- 15. .NET Tools and their Impact
Tool name Positive Impact Negative Impact
Resharper compiling ++++ VS responsiveness --
FxCop code quality ++ compiling time -
StyleCop code consistency +++ compiling time -
StyleCop plugin compiling time +++ VS responsiveness --
for Resharper
Ghost Doc automated docs potentially worse doc
Spell Checker fewer spelling errors ++ performance --
Code Contracts testability, quality ++ compiling time --
Pex & Moles automated test ++ compiling time --
- 16. • Design-by-Contract programming
• Improved testability
• Static verification
• API documentation integration with
Sandcastle
http://msdn.microsoft.com/en-us/devlabs/dd491992
- 17. The Basic Idea
public class Logger : ILogger{
public void Log(string message) {
. Validation
Input
1.) Parameter Assignment
2.) Execute method logics
. Optional State Validation/Invariants
3.) Possible Return Statement
. Result Validation
}}
- 23. How is your Code Coverage?
• Writing enough Unit Tests takes Time
• Writing basic Unit Tests is not Fun
- 24. Microsoft Pex & Moles
• Pex automatically generates test suites with
high code coverage.
• Moles allows to replace any .NET method with
a delegate.
http://research.microsoft.com/en-us/projects/pex/
- 25. Microsoft Sandcastle
“Sandcastle produces accurate, MSDN style,
comprehensive documentation by reflecting over
the source assemblies and optionally integrating
XML Documentation Comments. Sandcastle has the
following key features:
• Works with or without authored comments
• Supports Generics and .NET”
http://sandcastle.codeplex.com/
- 27. Summary Code Contracts
• Code Contracts:
– Better readable source code (SoC, SRP, DRY)
– Static Analysis for Code Contracts
– Impacts the compile time
• Pex & Mole:
– Generated paramized Unit tests
– Moles allows mocking also of static
• Conclusion ??
- 28. Q&A
Downloads,
Feedback & Comments:
theo@csharp-lighthouse.com
www.csharp-lightouse.com
www.speakerrate.com/theoj
Graphic by Nathan Sawaya courtesy of brickartist.com
- 29. References
Code Contracts
• See Dino Esposito’s MSM Magazine series on Code Contracts
• http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx
• http://research.microsoft.com/en-us/projects/contracts/
• http://www.codeproject.com/KB/cs/CodeContracts.aspx
• http://sachabarber.net/?p=811
• http://blogs.msdn.com/b/somasegar/archive/2009/02/23/devlabs-code-contracts-for-net.aspx
• http://designcoderelease.blogspot.com/2011/01/pex-moles.html
• http://www.agilitylux.com/practices/code-contracts-by-example/
Pex & Mole
• http://research.microsoft.com/en-us/projects/pex/
Sandcastle
• http://sandcastle.codeplex.com/
• http://stackoverflow.com/questions/3579655/does-sandcastle-support-code-contracts
- 31. Please fill out the
online feedback, and…
… thanks for you attention!
And visit and support the
Bay.net User Group
http://baynetug.org