Building Operable Software with TDD (but not the way you think) - Martin Thwaites - NDC London 2023

Discover a new approach to Test-Driven Development (TDD) that prioritizes operability, observability, and context to ensure your software thoroughly meets business requirements and behaves as expected.

Key takeaways
  • Building operable software means making sure it runs in production environments and meets business requirements.
  • TDD should be used to test the entire application, not just individual classes.
  • Observability is crucial for understanding the internal state of a system, and should be built into applications.
  • Context is important for understanding what code does, and should be provided in test names.
  • Tests should be written from the outside in, starting with the consumer’s perspective.
  • The goal of testing is to make sure the application behaves as expected, not to prove that it works.
  • Don’t test individual methods or classes in isolation; test the entire application as a whole.
  • Use business language in tests to make them more readable and understandable.
  • Don’t reuse code or classes in main assemblies; instead, create separate test assemblies.
  • Use in-memory exporters to speed up testing and make it more efficient.
  • TDD is not just about writing tests; it’s about writing tests that are readable, understandable, and provide context.
  • Tests should be written to provide a safety net for the application, not just to prove that it works.
  • Don’t use asserts to test individual conditions; instead, test the entire application as a whole.
  • Observability is not just about metrics or traces; it’s about understanding the internal state of a system.
  • Context is important for understanding what code does, and should be provided in test names.
  • Tests should be written to provide a safety net for the application, not just to prove that it works.