tdd and s.o.l.i.d.; two ingredients for high quality software

Post on 18-Dec-2014

3.041 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

TDD & S.O.L.I.D.Two ingredients for high-quality software

Dennis Doomendennis.doomen@avivasolutions.nl

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

Q&AEmail

dennis.doomen@avivasolutions.nl

Blogwww.dennisdoomen.net

Twitterwww.twitter.com/dennisdoomen

top related