Talks
Speakers
Events
Topics
Sign in
Home
Talks
Speakers
Events
Topics
Leaderboard
Use
Analytics
Sign in
Suggest modification to this talk
Title
Description
Good tests are isolatable, repeatable and deterministic. Good tests don't touch the network and are flexible when it comes to change. Bad tests are all of the above. Bad tests are no tests at all - which is where I found myself with a 5 year legacy codebase running in production and touching millions of customers with minimal use-case documentation. We'll cover this experience and several like it while digging into how to go from zero to total test coverage as painlessly as possible. You will learn how to stay sane in the face of insane testing conditions and how to use these tests to deconstruct a monolith app. When life gives you a big ball of mud, write a big ball of tests. Help us caption & translate this video! http://amara.org/v/FG3m/
Date
Summarized using AI?
If this talk's summary was generated by AI, please check this box. A "Summarized using AI" badge will be displayed in the summary tab to indicate that the summary was generated using AI.
Show "Summarized using AI" badge on summary page
Summary
Markdown supported
In the talk titled **Testing The Untestable**, Richard Schneeman shares insights into testing practices, especially within the context of legacy codebases in software development. He emphasizes the importance of good testing—isolatable, repeatable, and deterministic. Key points include: - **Testing Background**: Richard shares his experience transitioning from mechanical engineering to software development, highlighting the parallels between verifying fridge designs and software testing. - **Defining Good vs. Bad Tests**: He asserts that good tests do not depend on external systems, while bad tests produced in the context of a legacy codebase can be detrimental. - **Legacy Challenges**: He discusses the struggles with a five-year-old legacy codebase at Heroku that had initially zero tests. He outlines the potential chaos caused by minimum viable patches (MVPs) that lead to unmaintainable code over time. - **Testing Framework Development**: To tackle these challenges, he created 'Hatchet', a testing framework designed for deploying and testing Ruby applications on Heroku, which emphasizes real scenario testing over local simulations. - **Integration Tests**: Richard discusses the concept of testing components using integration tests, likening it to launching rockets into space to ensure that all individual parts work harmoniously in real-world conditions. - **Retrying Tests**: He shares insights into managing network-related failures during testing through automated retries, which helped alleviate issues stemming from external services. - **Importance of Non-Deterministic Testing**: He explains how his strategies lead to both efficient testing processes and the handling of non-deterministic outcomes caused by external dependencies. - **Modular Testing**: Schneeman emphasizes moving towards smaller, isolated tests as a means of enhancing speed and reliability. He advocates for using mocking tools like VCR to simulate network requests, reducing randomness during tests. In conclusion, Richard asserts that nothing is untestable. With a structured approach to testing—starting from integration tests to modular unit tests—one can confidently ensure the reliability of a system. He encourages prioritizing robust tests to develop maintainable code and has urged against the pitfalls of relying on MVPs. He wraps up the talk by highlighting that comprehensive testing creates confidence for future deployments, ultimately advocating for flexible, efficient, and consistent testing practices in software development.
Suggest modifications
Cancel