Functional testing at a glance
Functional testing is essentially testing to make sure that the application or system is behaving as expected.
There are different types of functional testing and the amount and type of functional testing that you would perform is largely dependent on the type of solution, complexity and scale of the project.
Testing a brochure site for example would not require the same level of testing as an enterprise wide workflow management system. Broadly speaking though, functional testing can include the following:
- Unit Testing – unit testing is usually performed by a developer and entails writing unit tests which call the methods in each unit and validates that when the required parameters are passed the value returned is as expected.
- Smoke Testing - Testing that is done after each build is released to ensure build stability.
- Sanity Testing - Testing that is done to ensure that all the major features of the application or system are working correctly.
- Regression Tests - Testing performed to ensure that adding new code, enhancements or the fixing of bugs does not break the existing functionality or destabilises the application or system.
- Integration Tests – Where a solution relies on any form of integration with another system to complete the feature set or pass data, it is important to test that this works perfectly together.
- Usability or User Acceptance Testing - The final solution is handed to the actual customer in a production-like environment so that they can test the product to make sure that it performs as expected.
When undertaking any form of functional testing, you would typically identify the different test scenarios that you would like to test and use this as the basis against which the correct-and-completeness of the solution is measured. These test scenarios are known as test cases and detail the following:
- Test summary
- Pre-requisites
- Test Steps and
- Expected results
The more detailed the test cases, the more comprehensive the testing will be. That being said it is worth noting that attempting to write a test case for every scenario is sometimes not possible as it can be a very time-consuming and expensive exercise. It is therefore important to identify the most important and relevant scenarios that need to be completed at a minimum for the solution to be deemed deployment ready.
Functional testing is an important part of the product lifecycle and should not be ignored or made light of. Testing the solution using one, two or a combination of the testing types listed above as well as documenting the test cases and the expected outcomes is essential to ensuring that you deliver a solution that meets your client’s expectations. Not only will you have a client who is willing to sign the solution off, but you would have proactively dealt with any issues that could have caused a system failure post launch, resulting in reputational damage for you and your client.
While functional testing is in itself a comprehensive test type it does not cover the entire scope of system testing which you can read about in our blog post related to software testing.