Test automation mostly using unit testing is a key feature of extreme programming and agile software development, where it is known as test-driven development (TDD) or test-first development. Unit tests can be written to define the functionality before the code is written. However, these unit tests evolve and are extended as coding progresses, issues are discovered and the code is subjected to refactoring. Only when all the tests for all the demanded features pass is the code considered complete. Proponents argue that it produces software that is both more reliable and less costly than code that is tested by manual exploration. It is considered more reliable because the code coverage is better, and because it is run constantly during development rather than once at the end of a waterfall development cycle. The developer discovers defects immediately upon making a change, when it is least expensive to fix. Finally, code refactoring is safer when unit testing is used; transforming the code into a simpler form with less code duplication, but equivalent behavior, is much less likely to introduce new defects when the refactored code is covered by unit tests.
But if test automation is so limited, why do we do it in the first place? Because we have to, there is simply no other way. Because development adds up, testing doesn’t. Each iteration and release adds new features to the software (or so it should). And they need to be tested, manually. But new features also usually cause changes in the software that can break existing functionality. So existing functionality has to be tested, too. Ideally, you even want existing functionality to be tested continuously, so you recognise fast if changes break existing functionality and need some rework. But even if you only test before releases, in a team with a fixed number of developers and testers, over time, the testers are bound to fall behind. This is why at some point, testing has to be automated.
Eggplant Functional is a user-centric testing tool that enables mobile testers to test any application that can be controlled, such as mobile, desktop, or web. Part of the Digital Automation Intelligence Suite, Eggplant Functional is a visual testing tool that enables enterprise mobility teams to dynamically test from the user perspective, from the user experience (UI) standpoint, with advanced image search, image recognition and text recognition, instead of testing from the code.
IBM RFT is well suited for regression and functional testing. It is a data-driven testing platform that supports applications like .Net, Java, SAP, Flex, and Ajax. The scripting languages used by RFT are .Net and Java. One of the unique features of IBM RFT is Storyboard testing which simplifies test visualization by recording and visualizing user actions with the help of application screenshots in a storyboard format. It also allows editing using natural language. It also offers integration with IBM Jazz application lifecycle management like IBM Rotational Team Concert and Rational Quality Manager.
Every software project takes time before its requirements and design stabilize. A classic comparison is between the UI that can change at any time in an application's lifecycle and back-end services that may live untouched for generations. Agile projects behave differently from waterfall in this respect. If you're developing a SaaS product, you must use automation to support frequent deliveries, but you'll have to carefully consider the effort you invest in developing tests because your requirements may also change frequently. This a fine balance you'll have to learn to work with. For an on-premise solution, it may be easier to identify the stage in which automation tests can be safely developed and maintained. For all these cases, you have to carefully consider when it's cost-effective to develop automated tests. If you start from day one, you'll expend a lot of resources shooting at a moving target.
I think we can all agree that automation is a critical part of any organization's software delivery pipeline, especially if you call yourself "agile." It's pretty intuitive that if you automate testing, your release cycles are going to get shorter. "So, if that's the case," you might say, "why don't we just automate everything?" There's a good reason: automation comes with a price.