Advanced Test Driven Development
A 2-3 day course in which students will extend their existing skills in Test Driven Development.
This course is not a simple lecture and exercise course. It may be better to think of it as a workshop and conference. Although the instructor is deeply experienced in the topic, and will offer lectures and lessons, much of the benefit of this course will derive from the discussions and testimonies of the students. The instructor will endeavor to get the students talking about the problems they have faced, and the solutions they have found to address those problems.
Audience:
- Programmers with at least 1 year experience with TDD._
Duration:
- The two day version is weighted towards lecture, discussion, and demonstration with a minimum of exercises.
- The three day version shifts the weight towards in-class practice and exercises, without diminishing the lectures and demonstrations.
Outcomes
After this class students will:
- ...Discuss, and find solutions to, fears, concerns, confounds, and blockages in the use of TDD.
- ...Understand the underlying professional motivation behind TDD.
- ...Gain a deeper understanding of the Three Laws of TDD.
- ...Learn why clean tests are important, what makes tests clean, and the principles for designing clean tests.
- ...Explore the topic of Mocking and Stubbing, and learn the subtleties of how and when to use apply them.
- ...Understand the differing strategies of state-ism and mock-ism.
- ...Explore best practices and conventions used in the naming and writing of tests.
- ...Understand the causes and solutions of "fragile" tests.
- ...Learn various metrics and tools for measuring and enhancing the benefits of TDD.
- ...Learn the difference between BDD and TDD.
- ...Understand the strategies for testing GUIs, Databases, and other difficult-to-test areas.
- ...Gain insight into the overall testing strategy of the project, the product, and the team.
- ...Be able to deal with Legacy Code.
- ...Learn how to teach and lead others to practice TDD.
Outline
- Fears, Confounds, and Blockages
- Organizational resistance.
- Schedule and Deadlines.
- Poor testing practice.
- Professionalism.
- Managers.
- Why TDD?
- The Three Laws in depth.
- The benefits.
- Clean Tests
- Single Assert Rule
- Arrange / Act / Assert.
- Accidental Complexity
- Test Performance
- Test Scope
- Test Content
- Stubbing and Mocking: Behavior vs. State
- The hierarchy of Test Doubles
- Testing State
- Testing Behavior
- The Chicago vs London Schools.
- F.I.R.S.T
- Fast
- Strategies for increasing test performance
- Isolated/Independent
- Repeatable
- Self Verifying
- Timely.
- Test Conventions
- Test names.
- Statistical Testing
- Private/Protected
- Inheritance
- Test per class.
- Splitting Tests
- TestNest / Hierarchical Tests.
- Maintaining Tests
- The Fragile Test Problem.
- Interface Sensitivity.
- Behavior Sensitivity.
- Data Sensitivity.
- Context Sensitivity.
- Over Specification.
- Test Sensitivity.
- Test Preservation.
- Coverage and Metrics
- Coverage goals
- Coverage Usages and Audience
- Mutation Tests
- C.R.A.P. Metric
- Braithwaite's Correlation
- SOLID metrics.
- TDD vs. BDD
- The Basics.
- Cucumber et. al.
- Testing GUIs, Databases, and other hard things.
- The Levels of Testing
- Functional and Performance Testing
- Legacy Code
- Convincing and Leading
- Exercises.
Several coding exercises and demonstrations as time permits.