A brief look at why test automation is so important to me.
I have been developing software for 20 years now. Early in my career, I worked in a small software company where in our team we had a single dedicated tester. He enjoyed a great amount of freedom and liked to start work in the afternoon, spending most of his time alone in the office after everyone else had gone home. He would often interrupt his work to go to the cinema (he was to go-to person if you wanted to know which movies are worth watching). And then put in another few hours before going home maybe around 1 or 2am.
Every morning, I would arrive at my desk and if he had found any missing feature or bug in his tests, I would have on my desk the relevant screen printed out with his notes scribbled all over it. No printouts on desk, no bugs found. These printouts were the main mode of communication, although I did have the chance to catch up with him when he arrived in the afternoon.
While his tests were very thorough (he did have a PhD in theoretical physics), they were manual. And the feedback loop was rather large.
In other companies or at clients, I have also seen the dedicated testing team. Both working alongside the developers in the same office as well as outsourced to another service provider. There was a mentality that development and testing are different tasks, meant to be performed by different teams.
In any case, these tests were manual and came with the following downsides:
- They are slow as it takes a human to click through dialogues, enter data, click again, read and interpret output and results.
- The quality of the tests (i.e. how good are they at catching bugs), heavily depended on the individual performing them. How well do they know the system? How do they interpret test plans? Are they only testing happy paths?
- The reliability of manual tests is low. Is the tester taking short cuts when it comes to retesting etc.? Measures can be taken to influence/control the work of the testing team, but this increases effort again.
- Every test cycle accrues the same cost, both in time and money.
Gradually, I have seen a shift towards automating tests. With better tooling and movements like Agile and DevOps, test automation has become easier to achieve as well as more readily accepted as a core part of software development. I embraced that and have been a vocal advocate of test automation ever since.
I want to briefly touch on a few advantages of automated vs. manual tests. Automated tests (when implemented correctly) are:
- Fast. There is no human interaction, so executing a test runs at the speed of executing a program rather than being dependent on the speed your tester can type and click.
- Repeatable. They are performing the exact same tests every time they are run.
- Reliable. No tests are skipped.
- Concurrent, if you so desire. Not something a single human tester can reasonably perform.
In this series, I want to tie together two of my main interests, Asset Control and Test Automation, and demonstrate how the Basic Java API together with JUnit and Cucumber can be used to implement various types of automated tests for typical areas of change in Asset Control.
Thank you for reading.
You may want to read the next article to learn about Integration Tests.