Agile Portugal 2011. June 20-22

T3. Emergent Software Design in Practice

Tutorial, by Eduardo Guerra
Monday, June 20, 9:30 – 12:30; 13:30 – 17:00

Classical software development methodologies usually adopt an approach for software design based on traditional engineering processes, in which initially it is created a complete design using diagrams and representations, and only later it is actually implemented in source code. Due to the dynamic nature of software, many design problems simply are not predicted, and some that are predicted, and motivate the creation of complex software structures, never actually happens. Thus, the team is not able to see a return on the time invested in a complete and large design phase.

Some agile methods propose a different approach, in which the software design emerge and evolve through the development process. They uses techniques such as Test Driven Development, in which unit tests are created before the source code, and Refactoring, in which the application design is evolved in small steps without changing the external behavior. By using these techniques, it is possible to create and keep the source code clean, enabling it to be more easily changed and evolved. Such result is responsible for a reduced cost of change in later project phases, which is one of the most important premisses of agile software development.

The goal of this tutorial is to present the main concepts of emergent software design using Test Driven Development and Refactoring, in order for the participants to be able to design and evolve an application continuously.

This tutorial will combine presentations with dynamic activities, enabling the participants to be active in its own learning. Using the Dojo format, the participants will collaborate in pairs developing software using the proposed techniques to learn how they work in practice. The examples and practices are going to use the Java language.


  • Software Design using Agile Values
  • Test Driven Development – Creating tests before your code
  • TDD Dojo – Hands on
  • Continuously Improving your Code with Refactoring
  • Refactoring Practice – Demonstration
  • Unit Test with Dependencies – Knowing the Mock Objects
  • Mock Objects Dojo – Hands On
  • Discussion – How to make emergent design work on my company?

Attendee Background

Level: Beginners
Prerequisites: Basic knowledge on Computer Programming is required. It’s helpful to have basic knowledge on the Java Language and basic knowledge on Software Design.