Program Overview: TDD Training and Coaching – Hands-on workshop
This hands-on Advanced Test Driven Development will explain the principles and practices of Test Driven Development as described in “Agile Software Development, Principles, Patterns, and Practices” book by Uncle Bob.
This is an intense, hands-on and exercise driven Advanced TDD course which focuses on the design of clean, robust, and maintainable unit and acceptance tests. You will learn the principles of test design, and the practices of keeping tests clean. More importantly, you will learn the principles of designing applications for testability. Exercises include the refactoring of bad tests, the writing of clean tests, and the design and refactoring of applications to make them testable.
Exercises are in Java, but are applicable to C#, C++, and other object oriented languages.
Format of Workshop:
Participants get to understand behavior driven development in the form of sessions and hands-on exercises and discussions.
- Understand the thought process and steps involved during a typical test-driven session.
- Drive the development (design and implementation) of a User Story using automated tests.
- Discover improved confidence and increase in development speed by writing automated tests first!
- Identify poorly designed code by using our elaborate code smell vocabulary.
- Learn various automated refactoring techniques and strategies to carefully clean the identified code smells.
- Practice key techniques to break coupling between classes and micro-test each component independently.
- Incrementally transform complex and difficult classes into readable, well-structured, and well-designed code, while keeping them running at all times
Following topics in detail will be addressed in workshop:
- Unit Testing
- What is unit testing?
- Different types of tests: unit, integration, functional
- Philosophy of Developer Unit Testing
- Anatomy of Unit Testing Framework
- Automated Tests
- Overview of XUnit
- Testing Pyramid
- Test Driven Development
- Introduction to TDD
- Test First Vs Test Last
- TDD Rhythm: Red, Green, Refactor
- Crucial Design Principles
- SOLID – How the principles of OO are used to design good tests
- Clean Tests
- Test Smells
- Multiple Logical Asserts
- Accidental Complexity
- Too Slow
- Scope Too Wide
- Cleaning Tests
- Composed Asserts
- Composed Results
- Testing Behaviour vs. State – Mocking and Stubbing
- Test Conventions and Heuristics
- Naming Conventions
- Statistical Testing
- Principles of Test Encapsulation: Testing Private Methods
- Testing Inheritance Hierarchies
- Test Per Class
- Splitting Test Files
- Writing Maintainable Tests
- The Fragile Test ”Problem”
- Interface Sensitivity
- Abstract API’s
- Behaviour Sensitivity
- Data Sensitivity
- Context Sensitivity
- Sensitive Comparison and Equality
- Test Sensitivity
- TDD and Design
- Executable Specification
- Crafting acceptance criteria for user stories
- Writing executable examples for each criteria
- Demo of BDD frameworks (Cucumber, FitNesse, SpecFlow, Jasmine)
- Beyond Basics
- Test Doubles/Fakes – Stubs, Mocks, Spy, Simulators…
- TDD in Legacy Code
When conducting these workshops, we focus on an organization’s specific needs, challenges and expertise level in Agile as TDD implementation has lot to do with Agile maturity of a team/organization.
Facilitator will address all the questions from participants about applying TDD practices on real life projects.
Basic Java knowledge is recommended so the participants can actively contribute with questions and shared experiences.