As companies continue to look for opportunities to improve product quality, reduce overheads and speed up time-to-market for product releases, they are increasingly considering how automated software testing can help them achieve these goals. This blog looks at how automated software testing can be used throughout each major stage of a software project’s testing lifecycle, as well as suggesting some tools which might be considered at each stage to implement automation.
“Test automation is the use of special software (separate from the software being tested) to control the execution of tests and the comparison of actual outcomes with predicted outcomes. Test automation can automate some repetitive but necessary tasks in a formalised testing process already in place, or add additional testing that would be difficult to perform manually.” – Wikipedia article on test automation.
Automation and the software testing life cycle
Automated software testing can have a role in each of the typical functional test areas you would see in any software project:
Types of automated software testing:
Through the use of so-called ‘xUnit’ unit testing frameworks (JUnit, NUnit, PyUnit, etc) it is a simple process to write code which automatically unit tests low-level functionality which is part of the software under test. This can often fall within the developer’s area of responsibility where unit tests are delivered alongside the units themselves. Development approaches such as test-driven development (TDD) expand on this by enforcing the rule that tests are written before any development is done and development on a particular unit/component is complete when all the tests pass.
The purpose of integration testing is to verify that the design of the application has been implemented correctly. This is achieved via testing groups of units or components of the overall system. For example, verifying a database class within the system can invoke the correct stored procedures would fall under integration testing as both the class and the database are integrated components of the system.
xUnit technologies can be used to write automated integration tests in the same manner as unit tests, with the difference being the tests themselves will be testing interactions between components, rather than the components themselves.
System testing comprises many different areas but they all share one characteristic in that they can all be said to be black-box testing. This is because the aim of system testing is to verify that the software matches the requirements defined earlier in the software development life cycle. Many more areas could be added to the list below, such as performance testing, compatibility testing, end-to-end testing, etc, but the areas below are those commonly asked for.
- Functional Testing
- Functional testing is arguably the first phase of software testing for whom a testing consultant (be it a TA, SDET or otherwise) is responsible, with unit and integration testing falling under the developer’s responsibility. This is because, when dealing with functional testing, the system should be treated as a ‘black box’, meaning the internal workings of the system under test (SUT) are disregarded in favour of validating that the business requirements have been met.
- There is a plethora of tools available to enable automation of functional system tests and, typically, this is achieved by ‘driving’ the SUT’s GUI. For web applications, the mainstream tools available include Selenium IDE and Selenium WebDriver. For desktop applications, one would consider AutoIT, TestStack.White and many others. There are also a range of tools available which can automate both web and desktop applications, the main competitors being Smartbear’s TestComplete, HP’s UFT and Ranorex.
- System Integration Testing (SIT)
- SIT testing is an integral part of modern software testing where it is very common for a system to need to ‘talk to’ various other external and disparate systems. Systems communicate through the use of APIs and messaging layers (an additional software system used to facilitate communications between multiple systems). Governing the communications will be API contracts which determine the methods, arguments, and results of behaviours of each system which can be invoked by external systems.
- APIs over the web are commonly implemented using the SOAP protocol or the REST architecture, however, APIs internal to an organisation may rely on a single messaging interface (WebSphere MQ, ActiveMQ, etc) to handle the communications and so, as a result, one must ensure that the technologies being used to automate SIT tests are compatible with the interfaces being tested.
- In regards to RESTful interfaces, because these are implemented using the standard HTTP protocols, the majority of modern programming languages will have built-in facilities for communicating with these. This is also true for SOAP, however, because it is based upon sending data in XML format and there may be multiple SOAP extensions in use there can be a lot more considerations involved. WebSphere MQ, as an example of a proprietary messaging system, may require additional libraries from IBM to send and receive messages over that platform, depending on the implementation.
- Regression Testing
- Once a system has been implemented, it is very common that the development team will go on to implement additional functionality, fix defects and perform maintenance. This is especially true when the software project is being undertaken using the Agile methodology. As such, it is important to ensure that these further changes do not break the existing, or core, functionality of the SUT.
- A suite of regression tests will typically be a subset of the functional tests executed earlier in the application’s development. Test automation is highly useful for regression testing as defects need to be caught as quickly as possible after the change has been made so that issues can be investigated, hotfixes deployed, or a previous deployment rolled back.
Automated software testing services
Ten10 works with industry leading clients, providing a range of automated software testing services, from strategic test consultancy to fully-managed test services. We can help you leverage the opportunities that automated software testing can bring to improve your product quality, reduce overheads and speed up time-to-market for your product releases.
If you are thinking about automating your software testing then please request a call back from one of our technical sales consultants and we will be happy to chat through your requirements.
Please note, we endeavour to respond to all enquiries within 60 minutes during business hours.