The Importance of Knowing What to Automate and When

Tags: qa, agile, testing, devops
Published: 2020-03-06 11:37:58

Modern enterprises no longer toy with the ‘to automate or not’ dilemma. As the adoption of test automation steadily rises, it is not the why but the what to automate, that begs answers.

Consider the rather well-known benefits of test automation. Speed, efficiency, better coverage, shorter feedback loops, accuracy, higher ROI, reusability, reliability. Perhaps, the most important of all : Automation is your key to continuous delivery.

The instinctive response is to automate everything, right? Tempting as it maybe it is neither a feasible nor an effective test management strategy.

Not only, will automating everything drive up your costs, you will realize that it is not the most efficient way to go about it. Not everything that can be automated, should be.

By automating just the right tests at the right time, you can significantly improve test coverage, catch bugs early, and improve the quality to enable the product for a faster release.

When Should You Ideally Opt for Automated Testing?
Automated Testing is an excellent idea for complex, time-consuming, static and/or repetitive tests, regression testing, and smoke testing. Tests that are data-driven, that is those that require multiple data-values for the same steps, are also ideal candidates for automation. But also tests that require a high degree of precision, creation of data and test beds would benefit.

What Should You Automate?
As mentioned earlier, certain processes are more conducive to automation than the others. The following types of testing scenarios are ideal candidates for automation:

Regression Testing
Software regression is basically unwarranted changes that occur from code changes. Every fix is at the risk of breaking something that was previously functional. Regression testing ensures that older programming still works with new changes. The aim is to catch bugs that have inadvertently released to the system because of upgrades or patches.

Regression tests are conducted very frequently during the cycle to ensure that even the smallest tweaks in the application code haven’t broken the application functionality.

Since the ideal contenders for test automation comprise test cases that are repeated frequently, stable, simple and maintainable, it makes perfect sense to automate regression testing.

This allows for checks into a variety of changes and frees up QA time to conduct exploration into more unusual cases in the production environment.

Functional Testing

Functional Test Automation
The goal of functional tests is to validate the core functions of a product. Functional Testing is concerned about what the application does and its relation to the users.

Automating functional testing enhances the performance of your Agile teams. It is easier for testers to automate tests by setting performance benchmarks that are developer-independent.

However, not all functional tests are ideal for automation. If the functionality you need to test is highly dynamic, the automation scripts will not be valid. Automating functional testing doesn’t make sense if the volume of test cases is very high and those test cases are regressed repeatedly.

Functional testing can benefit by having a perfect balance between automated and manual testing to achieve the desired outcomes.

Smoke or Build Verification Testing

Smoke testing
Smoke testing is also known as build verification testing, sanity testing or confidence testing.

It is one of the quickest tests to ensure that the most important functions work and that the build is stable to go through further testing. The purpose here is to find and fix the most obvious defects. In scenarios where builds are frequent, automating smoke tests helps because it finds bugs and defects with the code early.

Performance Testing

Performance Testing
Performance testing is an intensive exercise that ensures that products withstand the expected and sometimes unexpected workload. Parameters like speed, stability, responsiveness and scalability under varying load conditions decide the performance of an application.

Performance issues can be tricky because the application may meet all the functional test criteria. And still fail to deliver the desired output in terms of user experience. For instance, an application may check all boxes on paper, but can it handle varying degrees of transactions, sustain a large volume of simultaneous users without crashing?

Fixing performance issues involves addressing many hardware and software bottlenecks. It may include architectural restructuring, changes in memory, power and usage. However, relegating these fixes towards the end of the cycle adds up to the project timelines and costs, considerably.

Addressing performance testing earlier in the quality lifecycle and help anticipate and mitigate the issues much earlier.

Automation can considerably accelerate load testing, stress testing and performance testing in Agile environments. This helps you address it at a code level in tandem with development both for newly developed features in sprints, and larger system integration testing.

Unit Testing

Unit testing
Unit testing is testing smaller chunks of code to attain a deeper and granular view of code performance. These code fragments are checked in isolation to verify and validate their behaviour. The idea is to prevent regression defects and provide developers confidence in the code. Code fragments are checked in isolation to verify and validate their behaviour.

Doing so manually is time, resource and cost intensive and potentially error-ridden. Automating unit-tests is a fairly common practice and a key component of the Continuous Delivery paradigm. Since unit tests are designed for code without external dependencies and are focused on testing specific code behaviour they are relatively easier to automate. the testing of small code fragments to gain a deeper and more granular view of how the code is performing. The identified pieces of code are checked independently and in isolation to ensure that they are behaving correctly. Manual unit testing is time and resource intensive and can be error prone. Automating unit tests ensures that the source code remains error free, identifies errors early in the development phase and ensures that the code developed works then and in the future.

To optimize the benefits of unit testing, you should ideally run the test suite as part of the build process. Schedule the build and the unit tests to run automatically every day, to make the most of the ‘test early and often’ Agile QA directive. This ensures that the source code always remains healthy and developers are confident to make changes to existing code.

Integration Testing

Integration testing
Integration testing ensures that the application works as desired, when various pieces of the puzzle are put together. It is usually performed when two or more systems work together and there is coupling required.

Integration testing requires testing across several layers and thus it is a rather complex exercise to be performed manually. Manual testing of integration tests is extremely time-consuming and somewhat expensive.

Automated integration testing is used especially for complex applications. It helps identify defects faster and ensures that there are no ugly surprises when all the elements are put together.

When Test Automation May Not Be Ideal
Some scenarios are perfect for automation, but others simply require manual output:

Subjective validation is required: For certain application functions, subjective validation is needed. For instance, look and feel, usability etc. and manual testing might be better suited.

Strategic development: Strategic app functions may require manual testing with specific attention and focus to certain areas.

Complex functionality: Complex applications and functionality will possibly require a combination of automated and manual testing to deliver the best outcomes.

Exploratory testing: This involves concurrent test case design and execution where the tester will create the test idea to explore the system and give direction to create practical and useful tests for app testing.

Ad-hoc or random tests: Sometimes ad-hoc tests are required based on domain expertise and these are best done manually. Same applies for tests that need to be run ASAP.

No predictable outcomes: Sometimes tests don’t have pre-defined or predictable set of results. Automation validation needs to have predictability in order to have pass/fail conditions and in such scenarios, manual testing is better.

Thus, it is evident that testing success is the result of right automation and test management strategy. High quality releases are not an accident. They require careful planning, strategy and a selection of the right tools to aid your process. If you are interested in learning more about how tools can aid your automation strategy,contact us now to get a detailed walkthrough of QMetry’s automation solutions.