Best Practices for Each Testing Phase
Testing can be thought of as the backbone of every software development project. It’s not hard to see why testing has a place in each part of the System Development Life Cycle (SDLC). Employing a poor testing methodology will potentially lead to the production of an unstable system and most likely, one that will cost you more money and time to put right.
Whether you decide to go waterfall, agile or DevOps, it's essential to have a plan. Especially, a test plan in place to ensure that the software/system is delivered in a robust and stable state, to a predictable timeframe. There is usually a deadline and often this cannot be moved without upheaval.
It doesn’t matter which development methodology you use; a set of general testing techniques is useful to deploy. These start from testing very small pieces of code or to testing the whole applications functionality from end-to-end.
Just before you read on - nFocus is a leading testing service provider. For more information on how we can support you, please visit www.nfocus.co.uk.
There are many different types of software tests such as test scripts, exploratory testing, functional testing, manual testing, web application testing and automation tools but for this article, we will stick to five key components:
1) Requirements Testing
When testing your requirements, whether business, functional or technical; it is key to verify that not only can you write test cases against each requirement, but that the definitions are clear and without ambiguity. This will get you some way to delivering first class code and a critical defect free production environment. Get it wrong and you potentially face additional costs in rework, missed deadlines, possible system outages and damage to your company’s reputation.
Benefits - so now you’ll need to spend a little bit more upfront at the start of the project but trust us, it’s well worth it, starting off on the right foot and having everyone aligned and delivering against the same requirements will save you money, time and credibility.
2) Unit Testing
In this phase, a unit refers to a short program fragment written and maintained by the developers. Testing exercises some narrow part of the functionality and checks the results. One of the biggest benefits of automating these tests is that they can be run every time a piece of code is changed, allowing issues to be resolved as quickly as possible. It’s quite common for software developers to perform unit tests before delivering software to testers to perform other testing. Unit testing can be done manually but is often automated in agile and DevOps projects.
Benefits - unit testing verifies the accuracy of each unit. These building blocks are tested in isolation and integrated into an application.
3) System Testing/System Integration Testing
System testing and system integration testing is the stage of software testing in which individual software components have been combined and are tested as a whole. This is particularly important as it confirms that the functional areas work as expected and that individual systems are working together. No matter how well each unit was tested, if you do not check they have been correctly integrated the software may not work as required.
In order to execute these types of tests, both manual and automated testing can be exploited; with the appropriate method depending on the way in which the software is delivered.
Benefits – as the name suggests it verifies the system works as a whole and integrates with the other systems it needs to.
4) Regression Testing
Regression testing verifies that software which was previously developed and working still works correctly after it has been changed. Changes may include software enhancements, bug fixes or infrastructure updates. By re-running test scenarios, you can make sure that any new changes to an application haven’t resulted in regression issues and caused elements that originally worked to now fail.
Such tests can be performed manually but, in most cases, repeating a suite of tests each time an update is made is too time-consuming and complex to be cost effective, so an investment in automated testing is required.
Benefits - regression testing increases the chances of detecting bugs caused by changes to a software or application, either by enhancements or bug fixes. Automated testing is best suited to regression testing.
5) Acceptance Tests/User Acceptance Testing
Acceptance testing (or User Acceptance Testing - UAT), is conducted to determine whether the system is ready for release. UAT will try to verify business requirements and operating procedures. Requirements can sometimes be misinterpreted and implemented in a fashion that does not meet the needs of the users or business.
During this final phase, the end user will test the system to confirm that the application meets their business’ needs.
Once this process has been completed and the software has been signed off, it can be delivered to production subject to other readiness criteria being met (i.e. end user appropriately trained).
Benefits – UAT is the final stage of the implementation process which is conducted to ensure that system requirements meet business needs. The UAT process allows for any issues to be fixed before the system goes live.