SlideShare a Scribd company logo
Silicon Valley
                          Code Camp

 Contract-First Development with
                     >


Microsoft Code Contracts
    and Microsoft Pex

     Foothill College, October 8nd 2011
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
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
Does writing Clean Code
make us more efficient?
Contract First Development with Microsoft Code Contracts and Microsoft Pex at Silicon Valley Code Camp 2011 (2011-10-08)
Clean Code???

  We are here for
Code Contracts, Pex
   and Mole!!
Clean Code is maintainable

     Source code must be:
     • readable & well structured
     • extensible
     • testable
Clean Code is maintainable

     Source code must be:
     • readable & well structured
     • extensible
     • testable
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
Don’t repeat yourself
        (DRY)
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();
                                             }
                                          }
Separation of Concerns
         (SoC)

 Single Responsibility
       Principle
         (SRP)
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
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
.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 --
•   Design-by-Contract programming
•   Improved testability
•   Static verification
•   API documentation integration with
    Sandcastle
    http://msdn.microsoft.com/en-us/devlabs/dd491992
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
  }}
Method Overview




Code Contracts User Manual, 5.3 Contract Ordering, page 22
Runtime Checking Levels




Code Contracts User Manual, 6.2.1 Runtime Checking Level, page 24
Argument Validation




Code Contracts User Manual,
5.1 Argument Validation and
Contracts, page 18
Contract First Development with Microsoft Code Contracts and Microsoft Pex at Silicon Valley Code Camp 2011 (2011-10-08)
How is your Code Coverage?
How is your Code Coverage?


• Writing enough Unit Tests takes Time

• Writing basic Unit Tests is not Fun
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/
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/
Time for Visual Studio
as well all love code,
       right !?
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 ??
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
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
Clean Code
Why Clean Code matters

    Foothill College, October 9nd 2011
Please fill out the
online feedback, and…


… thanks for you attention!

        And visit and support the
             Bay.net User Group
                    http://baynetug.org

More Related Content

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
  • 4. Does writing Clean Code make us more efficient?
  • 6. Clean Code??? We are here for Code Contracts, Pex and Mole!!
  • 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(); } }
  • 12. Separation of Concerns (SoC) Single Responsibility Principle (SRP)
  • 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 }}
  • 18. Method Overview Code Contracts User Manual, 5.3 Contract Ordering, page 22
  • 19. Runtime Checking Levels Code Contracts User Manual, 6.2.1 Runtime Checking Level, page 24
  • 20. Argument Validation Code Contracts User Manual, 5.1 Argument Validation and Contracts, page 18
  • 22. How is your Code Coverage?
  • 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/
  • 26. Time for Visual Studio as well all love code, right !?
  • 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
  • 30. Clean Code Why Clean Code matters Foothill College, October 9nd 2011
  • 31. Please fill out the online feedback, and… … thanks for you attention! And visit and support the Bay.net User Group http://baynetug.org