mobile menu icon
Testing Techniques for Developers

In this training we will learn different techniques for testing already-written code.

We will cover specification testing, structural testing, mutation testing, golden master, characterization testing, dependency-breaking techniques, the use of test doubles, and advice on achieving testable designs.

The training will combine theory and discussion sessions presenting the different concepts, techniques, patterns and strategies, with practical sessions in the form of katas in which we will apply the most important techniques.

teaching logo Information

20 hours
Remote (ask about in-person).
590€ / person
(V.A.T. not included)
For open dates 50% discount for underrepresented groups in technology
I'm interested!
// Contents
1. Introduction and testing strategy.
1.1. Why test?
1.2. Approaches to testing.
1.3. Testing strategy.
2. Specification testing.
2.1. Understanding the problem.
2.2. Identifying behaviours.
2.3. Equivalence classes or partitions.
2.4. Boundary value analysis.
2.5. Writing examples as test cases.
3. Structural testing.
3.1. Definition and role in new and legacy code.
3.2. Coverage tools: how to use them?
3.3. Coverage criteria.
3.4. Beyond coverage: boundaries and loops.
4. Mutation testing.
4.1. Concept.
4.2. Tools.
4.3. How to apply mutation testing?
4.4. Relevant mutants and how to distinguish them.
4.5. Considerations, problems and recommendations.
5. Using test doubles: how, when and why?
5.1. Motivation.
5.2. Detecting awkward collaborations.
5.3. Testable design by controlling awkward collaborations.
5.4. Types of test doubles.
5.5. How to test with test doubles?
6. Testing legacy code.
6.1. What is legacy code?
6.2. Why is it hard to evolve legacy code?
6.3. Evolving legacy code with confidence.
6.4. The realities of legacy code.
6.5. Changing legacy code: terraforming little by little.
6.6. Testing strategies in legacy code.
7. Dependency-breaking techniques in untestable code.
7.1. The legacy code dilemma.
7.2. Dependency-breaking techniques.
--- 7.2.1. Basic techniques.
--- 7.2.2. Statics and globals.
--- 7.2.3. Shortcuts.
8. Characterizing legacy code.
8.1. Guided by structural testing.
8.2. Improving our characterization with mutation testing.
9. Other ways of characterizing legacy code.
9.1. Golden Master + Sampling.
9.2. Approval Testing.
9.3. Combinatorics Approval Testing.
10. Finding where to test from.
10.1. Propagation of the effects of a change.
10.2. Interception points.
10.3. Pinch points.
10.4. Test scope.
11. Cohesion and testability.
11.1. Effects of the Divergent Change code smell.
11.2. Effects of the Shotgun Surgery code smell.
12. Testable design.
12.1. Controlling awkward collaborations.
12.2. Hexagonal Architecture.
12.3. Static methods, globals and singletons.
12.4. Constructors.
12.5. Complex conditionals.
12.6. Cohesion and coupling.
// Languages

The examples and katas are in Java and C#, but if you are interested in another language please contact us.

// Requirements

We will send you an email telling you everything you need to install before the course.

// Who is it intended for?

Primarily for programmers working with the object-oriented paradigm.

// For companies or open to the community

The course can be held for companies (closed for the hiring company) or open to the community. We try to run one open edition every term. Small companies often send people to our open courses. If you would like to be notified of upcoming open editions, please fill in this form.

Please note that courses for companies take place once we have been booked by the client. We will need to know the date at least one month in advance in order to be able to schedule them.

teaching logo Information

20 hours
Remote (ask about in-person).
590€ / person
(V.A.T. not included)
For open dates 50% discount for underrepresented groups in technology
I'm interested!
OK! I am interested in taking the Testing Techniques for Developers course

If you wish to apply or if you still have any questions about this course, please contact us at contact@codesai.com or fill out the contact form.

We will try to get back to you as soon as possible!

Send Message