Responsibility Driven Design with Mock Objects
Object oriented design is the art of assigning the right responsibilities to the right objects and arriving at a clean, loosely coupled, and highly cohesive design. Test Driven Development (TDD) will guide you in that direction, but not far enough. TDD helps to get loosely coupled objects, because coupling hinders the test-code-refactor rhythm.
Responsibility Driven Design is an approach that goes a step further. It shifts the focus from state to interactions and responsibilities. It helps to get a highly cohesive, loosely coupled object oriented design – an approach facilitated by test driven development with mock objects.
In this workshop, you will learn how to use the CRC card technique (Class-Responsibility-Collaborator) and mock objects to evolve a design in small steps, by looking at classes and their responsibilities, relations and interactions. We will also cover how to manage dependencies on existing components (in particular external, 3rd party, and legacy components).
Benefits
Responsibility Driven Design helps to make both new and existing software easier to understand, simpler, and more extensible. As a result, adding new functionality and accommodating for unanticipated changes will be faster, cheaper and more predictable. Responsibility Driven Design helps to embrace change in a cost-effective way.
If you participate in this workshop, you will:
- practise the CRC card technique as a way to get quick feedback on your design decisions;
- using mock objects with TDD to do evolve working software in small steps;
- learn about different ways to mock, fake, and stub collaborating objects;
- apply mocks to break ugly dependencies and to make it easier and faster to add unit tests;
- have fun! – we take pride in creating a fun and effective learning environment, mixing presentations with exercises and hands-on development.
Audience
Software developers, architects, technical team leads, Scrum masters, and agile coaches who seek to advance their OO design and development skills, so that they are able to create and adapt better, more flexible software faster. Prerequisite knowledge and experience:
- Object orientation
- Experience in a programming language with Object/Class features, for example Java, C#, C++, VB(.Net), Ruby, Python, Smalltalk
- Basic knowledge of automated unit testing
Programme
Topics covered:
- responsibility driven design
- Class-Responsiblity-Collaborator cards
- mock objects
- mocking styles
- mocks, fakes, stubs, dummies
- breaking dependencies with mocks
