Debunking Seven Developer Testing Myths for Modern Software Engineering
Emily Bache, a prominent software developer and creator of Samman Coaching, has addressed critical misunderstandings surrounding developer testing, particularly within modern software engineering and continuous delivery pipelines. In a recent presentation, Bache systematically dismantled seven common myths, emphasizing that tests are essential for determining releaseability and are a collective team responsibility.
Bache first challenged the notion of an adversarial relationship between testers and developers, arguing that both roles are on the same team, working towards the same goal, with testers aiming to break illusions about the code rather than the code itself. She advocates for collaborative frameworks like Behavior-Driven Development (BDD) to integrate diverse perspectives. She then refuted the idea that developers are solely responsible for unit tests, while specialists handle all other test types, stressing that developers must engage with feedback from all tests in the pipeline. Furthermore, Bache critiqued the practice of singular business stakeholders dictating acceptance tests, asserting that acceptance criteria should be a collaborative effort involving various team members—including developers, testers, and UX designers—to ensure a comprehensive understanding of requirements and feasibility. Technically, Bache redefined ‘isolation’ in unit testing, moving beyond mocking every dependency of a code unit to focusing on isolating tests from each other and isolating small batches of changes for rapid feedback. She clarified that the ‘unit’ in unit testing refers to a ‘testable slice of behavior’ rather than a specific code structure, a crucial distinction for effective Test-Driven Development (TDD). While acknowledging the value of measuring test coverage, she cautioned against making 100% coverage a primary target (citing Goodhart’s Law), preferring to see high coverage as a consequence of good engineering practices rather than an enforced metric. Finally, despite being a staunch proponent of TDD, Bache noted that writing tests first isn’t always superior, acknowledging scenarios like prototyping, design exploration, or adding regression tests to stable legacy code where other approaches might be more suitable. Ultimately, Bache underscored that good testing is a hugely important, fundamental, and collective responsibility, with everyone on the team contributing to specifying, running, and leveraging tests to inform development decisions.