Implementation of Test-driven Development

Challenge

The customer’s team is responsible for the maintenance of a software product established on markets. Its tasks include customer- driven product enhancements and features, plus a degree of bug fixing.

The product’s code base has been growing over many years and applies various technologies. Most of its architecture is monolithically structured and existing tests mainly consist of systems tests, which have to be conducted manually, while automated unit and integration testing virtually don’t exist.

It was hard for the customer’s team to estimate the effort of planned changes in the existing structure and unwanted side effects were difficult to predict. This led to regular regressions which were discovered late in the development process which in turn led to delays in product releases. 

In the medium term, the goal was to increase quality and maintainability of the product, to shorten release cycles and increase planning reliability. This required refactoring, which can only be effectively and efficiently conducted with an existing safety network of automated tests, on different levels. Another goal was to significantly decrease large efforts for manually conducted systems tests, by implementing automated unit and integration testing.

 

Project Duration/Volume (employee months)

Training concept: 3 months

Training delivery: 2 employees

Any Questions?

Any questions about our engineering service offers? Feel free to call us!

Contact card openContact card close

Solution

To reach these goals, the customer’s teams had to acquire relevant know-how in test-driven development (TTD). Manual testers and developers had to be re-trained as test developers. Based on experience, one training on this topic is not sufficient to induce sustainable change in development practices. Particularly in such Brownfield projects, the application of test-driven development requires team members to have not only a high set of skills, but also discipline and the ability to correctly assess complex situations. Following full assessment, Method Park and its customer chose the following approach:

1. Analysis
Method Park analyzed the as-is situation in interviews and reviews with the customer teams: How are the Scrum teams structured? Which skills do employees have? How is the development process progressed and documented? Which development practices - with particular focus on tests - are established? Which technologies, programming languages, frameworks and tools are in use or planned? How to evaluate the quality of architecture and source code?
 

2. Adjustment of Training Content
Based on the analysis results, Method Park planned training and workshop content for its customer. Content arrays and practical exercises were developed dependent on the prior knowledge of training participants and on programming languages, technologies and frameworks utilized. The goal was to cover the following topics within two days:

Solution

Introduction to testing and tools in use

TDD, BDD, ATDD

Test doubles and mocks

Legacy Code Tests

Test coverage

Clean Code

Dependency Injection

Refactoring

Golden Master

Finally, Method Park adjusted and refined the workshop agenda, together with its customer.

 

3. Conduction of Hand-on Workshops
One hands-on workshop was conducted in each Scrum team. To ensure high training benefit, two Method Park trainers conducted one training session with a maximum of twelve participants. The trainers were senior software engineers with deep practical experience in working with agile development teams and the relevant technologies. After short introductions into the topic’s theory, the trainers worked on specific tasks and problems, relevant for real projects with their participants.


4. Team Support during the Project
The workshops were followed by sprints, in which the teams were supposed to apply the training contents in real-life projects. Based on experience, this straight application is hard to achieve. To ensure the successful transition to test-driven development, a trainer supported a team for one week in their project routines. So the developers and testers had the chance to solve specific problems in pair programming or common reviews. 


5. Consulting Hours
During the sprints, trainers supported their teams within a reduced scope and for specific problems only. Team members were able to discuss questions or problems with Method Park experts via phone or online.


6. Conclusion
After approximately six months, a conclusive retrospective review was implemented in which Method Park and the customer discussed progress and effectiveness of the measures.

Benefit

After approximately six months, a conclusive retrospective review was implemented in which Method Park and the customer discussed progress and effectiveness of the measures. 

Benefit

Successful implementation of Test Driven Development in all teams

Measurable improvement in coverage of automated tests

Considerably reduced bug rate

Less dependencies and cleaner Interfaces

Basis for safe refactoring

More agile teams, by closer cooperation between development and testing