5 Tips for Balancing Manual and Automated Software Testing
There’s a battle in the testing community between those who believe 100 percent test automation is in our future and those who think test automation isn’t even testing at all. As continuous deployment is becoming the goal of more and more organizations, manual testing is viewed as a blocker for those seeking to accelerate the delivery of features and changes into production. Others will argue that any testing performed without a human element is simply checking that the software meets a predetermined definition of quality and will likely miss critical bugs.
The reality is that both manual and automated testing are usually necessary to deliver a quality product. We must balance our manual and automated testing activities to achieve both the deployment speed and software quality our customers demand.
While there is no one answer for how to do this, here are some tips I have found to be helpful.
Tip #1: Automate as You Go
Instead of viewing automated tests as something you create after manual testing has been completed, automate your tests as you build and run them. Doing so not only supports a test-driven approach to software development, but assures you create a robust automated regression test suite that can be used to support fearless refactoring and continuous integration.
Tip #2: Use Exploratory Testing to Enhance Quality
Some areas of your product are naturally more critical to customer value. Use risk analysis to identify these areas and supplement other testing techniques, both manual and automated, with focused exploratory testing in those crucial areas. As these are areas where the product must work as advertised, additional critical thinking about quality will pay dividends.
Tip #3: Pair Developers and Testers
As long as testing is something that happens after software is implemented, it is always going to be a barrier to speed and something management is going to want to “fix.” Pair up your developers and testers during sprints to work together day to day to create effective tests at all levels (unit, component, story, and business case). Use pairing to also gain insights into risk that will support your focused exploratory testing.
Tip #4: Demand Unit Testing Is Done Right
Unit testing, by definition, must be automated. Testing small units (functions, methods, classes) in isolation means mocks, stubs, and drivers must be implemented, and therefore test cases are embedded directly into the software application. Effective unit testing by developers can greatly reduce the testing burden on your testers and free them up to automate more tests and perform more exploratory testing where needed.
Tip #5: Speed Up Manual Testing
Often, the most costly aspect of testing is test setup and teardown. Use automation to accelerate environment provisioning, software installation, database setup, and all cleanup activities after your testing is done. Automating these important (and costly!) steps can greatly accelerate your manual testing efforts.