TDD and S.O.L.I.D.; Two Ingredients For High Quality Software
-
Upload
dennis-doomen -
Category
Technology
-
view
3.041 -
download
1
description
Transcript of TDD and S.O.L.I.D.; Two Ingredients For High Quality Software
TDD & S.O.L.I.D.Two ingredients for high-quality software
Dennis [email protected]
About Me Principal Consultant
at Aviva Solutions 35 years 6-month daughter 12 years of
experience C++ origins On .NET since 2001
Agenda About quality Test Driven Development & S.O.L.I.D Demos & examples Guidelines to get started
What is quality? Or, how do you measure it?
“I don't care how good you think your design is. If I can't walk in and write a test for an arbitrary method of yours in five minutes, its not as good as you think it is, and whether you know it or not, you're paying a price for it.”
Michael Feathers, ObjectMentor
How? Use coding guidelines Apply common design principles Test Driven Development Refactoring Use Design Patterns Pair Programming Socialize design & architecture
Test Driven Development Is a design process Tests are your first users Tests can be your documentation If TDD hurts then you're doing it wrong
S.O.L.I.D. Single Responsiblity Principle Open Closed Principle Liskov Substitution Principle Interface Seggregation Principle Dependency Inversion Principle
Demo
Attendee registration
TDDSingle Reponsibility Principle
Dependency Inversion Principle
What you have seen TDD
• Arrange-Act-Assert• Red-Green-Refactor• Mocking• Intention revealing tests
Single Responsibility Principle Dependency Inversion Principles
Phases of unit testing1. Refusing2. Getting too excited3. Testing everything!4. Integration testing5. Discover mocking6. Mocking everything7. Becoming effective
Example
Types of attendees
Open Closed PrincipleDependency Inversion Principle
Naive Solution
Better Solution
Best Solution
What you have seen Open Closed Principle Single Responsibility Principle Dependency Inversion Principle Chain of Responsibility Pattern Factory Method Pattern
ExampleBilling
Liskov Substitution Principle
Naive Solution
Better Solution
new EmployeeBuilder().Build() ??
Best Solution
What you have seen Liskov Substition Principle Single Responsibility Principle
Example
Event listening
Interface seggregation
Naive Solution
Better Solution
Best Solution
What you have seen Interface Seggregation
Getting started guidelines Test should be• Small and focused• Intention revealing• Repeatable• Have no side-effects• Independent
Test what you know now (and assemble the rest from those pieces)
Getting started guidelines Mocking• Don't mock chatty interfaces• Don't have more than 2-3 mocks per test• Only mock your nearest neigbors
Keep your tail short Isolate the ugly stuff Conform to SOLID (and other
principles)
Resources xUnit Patterns
http://xunitpatterns.com/ Applying Domain Driven Design and Design Patterns
http://www.amazon.com/Applying-Domain-Driven-Design-Patterns-Examples/dp/0321268202
Jeremy D. Millerhttp://codebetter.com/blogs/jeremy.miller/default.aspxhttp://msdn.microsoft.com/en-us/magazine/cc720886.aspx
InfoQ Recommended TDD Tutorialshttp://www.infoq.com/news/2009/05/recommended-tdd-tutorials
Los Techies S.O.L.I.D. Principles E-Bookhttp://www.lostechies.com/content/pablo_ebook.aspx
C# 3.0 Coding Guidelineshttp://blog.avivasolutions.nl/archive/2009/03/06/new-coding-guidelines-for-c-3-0.aspx