TDD Course – Intermediate Level

If you already have a foundational knowledge of TDD, this course will help reinforce concepts and, most importantly, put them into practice. 
 
In this course, you will learn to:
 
Apply the TDD methodology to write software.  
Write good tests and create easily testable code.  
Apply TDD to the frontend: best practices for testing in the frontend.  
 
This is the second level, intended for individuals who already have some knowledge of TDD. For professionals who need to start from scratch, we offer the introductory course.
 
CORPORATE PROGRAM
Do you think this course might interest more members of your team? Fill out the form and request a proposal with special discounts.



Instructor: Benjamin Rae
  • English
  • Inglés, Español
  • 35–40h course (aprox)
  • Downloadable resources
  • Access during 1 year
  • Certification included
  • Instructor support
  • TDD Community

Intermediate Level: What are you going to learn?

  • SOLID Principles and Testability: Understand the principles and their impact.
  • How to Write Easily Testable Code: Learn how TDD affects design and manage coupling and cohesion.
  • How to Test Legacy Code: Implement strategies such as Golden Master and characterization tests to test legacy code. Find and create connections within the code.
  • How to Write Good Tests: Apply methodologies like FIRST and Test Desiderata to write better tests.
  • TDD in the Frontend: Introduction to testing tools in the frontend and how to do TDD from a user interface.
  • TDD and Teamwork: Teamwork techniques for applying TDD, such as pair and mob programming. How to use your version control system when doing TDD.

Course content

Modul 1: SOLID principles 3h
In this module we will revise the SOLID principles and how they relate to testability. We'll look at each principle individually and see how it can help us with both our tests and our code.
Modul 2: Writing code that is easy to test 3h
Here we will discuss some of the reasons many decide not to write tests and explore examples where small changes in our code can make our code much easier to test.
Modul 3: Coupling and Cohesion 4h
In this module we discuss coupling and cohesion to help us understand how to identify explicit dependencies in our code and continue to write better test code and better production code.
Modul 4: F.I.R.S.T 4h
In this module we explore the F.I.R.S.T principles to help up write better suites of tests and also better production code including techniques such as as running tests in parallel. 
Mdodul 5: Test Desiderata 4h
In this module we invite you to watch Kent Beck talk about his Test Desiderata, which very similarly to F.I.R.S.T encourage us to write better test and production code.
Modul 6: Sociable vs Solitary testing 4h
While we have been looking a lot at the advantages of isolated tests, here we will introduce sociable tests and compare and contrast them to solitary tests so that you can choose a style that fits you best.
Modul 7: Testing Legacy Code 4h
It's more likely that you will work on existing projects that don't have many tests. Here we will explore techniques to start testing legacy code such as Golden Master, Characterization tests and how to introduce seams.
Modul 8: TDD in frontend 4h
Until now, we have mostly used Java with Object Oriented Programming, it's time to switch paradigms and explore how we can apply TDD to the frontend and learn the value of putting the users first when we are writing tests.
Modul 9: TDD and Teamwork 3h

It's also more likely that you will be working on teams rather than individually, that why here we are going to look at techniques like pair programming and mob programming and how they can be used with TDD to develop software in a team.

This course gives you access to:


  • Theoretical and practical resources to learn the basic concepts.  
  • Quizzes to validate your learning progress.  
  • Detailed examples of each of the techniques explained.  
  • Katas to practice what you learn.  
  • Instructor support: Each level offers a direct communication channel with the course instructors to resolve doubts and share progress. All our instructors are daily practitioners of these methodologies.  
  • TDD Community: Additionally, you'll have access to a community channel where you can share your progress, doubts, support materials, and your overall experience with other course members. 

 

By the end of the course, you are expected to be able to:

  •  Apply SOLID and F.I.R.S.T principles  
  • Distinguish and work confidently with the different types of tests that exist
  • Work in a team applying TDD  
  • Write efficient tests in legacy code  
  • Confidently perform TDD in the frontend

Who is it addressed to?

This is a purely technical course, so it is assumed that you already know how to program in a given language.
 
A solid foundation in Object-Oriented Programming will allow you to get the most out of this course. We recommend using an IDE (Integrated Development Environment) and familiarizing yourself with keyboard shortcuts, as this will help you gain a lot of speed and ease in development.

 

It’s ideal for you if: You already have some experience with automated tests and a basic knowledge of TDD. It’s necessary to have a foundation in the topics covered in the introduction module.


Requirements

  • Be proficient in at least one programming language.  
  • Be familiar with the syntax of that language, data types, control flow, and other specific language features.  
  • Have a solid foundation in Object-Oriented Programming.  
  • We recommend using an IDE (Integrated Development Environment) and getting familiar with keyboard shortcuts.  
  • A GitHub or GitLab account.

What are the advantages of using TDD?

By applying TDD at the level this course provides, you will help create more reliable and flexible code, promoting scalable and high-quality solutions through automation.

Improved code quality: Ensures code quality, reduces errors, and makes it easier to add new features. You can verify that your code works as expected.  
Regression testing: Ensures that functionality remains intact after making changes. TDD makes this process more manageable by enabling fast and simple testing.  
Maintenance and scalability: TDD reduces risks related to software maintenance and scalability, as well-designed and tested code is easier to maintain and scale.  
Increased customer satisfaction: Developing a higher-quality product enhances customer satisfaction and loyalty.  
Long-term cost reduction: TDD helps lower long-term costs by reducing the time and resources needed to debug errors.  
Faster time to market: TDD facilitates continuous integration and delivery (CI/CD), speeding up the launch of new products and features. You'll receive quick feedback on the state of the code and can identify issues in the early stages.  
Team collaboration and productivity: It helps team members understand functionality and use cases, improves communication, and reduces misunderstandings, leading to smoother collaboration and higher productivity. It also boosts the technical level of the team and contributes to talent retention.  
Easier onboarding of new professionals: Writing tests acts as living documentation, lowering the entry barrier for new professionals joining a team.  


More info about How to effectively apply TDD in Software Development

We have already delivered this course to these clients

cazoo-logo roche-logo santander-logo

Do you have any questions?

If you're a company in need of a license package, we would be happy to prepare a custom proposal for you.