Software company reputations are forged on how good, reliable, and bug-free their applications are. As such, before product launch, it is imperative that companies ensure that when their product goes to market it has been robustly tested.
A good example of a product that didn’t make the cut was Windows Vista. The beleaguered operating system was flawed from the get-go and as it was mostly just a graphical change from its predecessor Microsoft Windows XP.
Throw in a bucket load of bugs and many were glad when Vista was retired. Luckily for Microsoft due to the lack of market competition, the company survived and thankfully upped its game with the development of Windows 10.
Few companies are in the monopoly position of Microsoft, so testing and releasing a quality product is essential.
The role of functional testing is to answer the question, does the app work? It is an involved process with each aspect of the software robustly tested. Several functional tests have been developed including:
Unit testing – Test each unit‘s functionality separately.
Black box testing – A QA team with little to no coding knowledge puts the app through its paces.
White box testing – Performed by the development team who put the app through a series of tests.
Smoke testing – Tests to determine the stability of the app.
Integration testing – This tests if the modules work together as planned.
End to end testing – Test the app in its entirety.
Like performance testing, some of the tests are sometimes handled by automated tools as well as manual tests.
Contrary to the title, non-functional testing does not test to see if the software fails to function but rather how well the software runs, performance if you will.
The idea is that once you’ve established the software works, you can now work on improving the overall performance of the software through tweaking aspects of the application.
The following aspects are often part of non-functional testing:
Reliability testing – Reliability testing involves a series of tests that explores whether software can run error-free.
Performance testing – How well an app run is determined by performance testing. Usually, tools throw up data to give development teams useful feedback.
Load testing – Here, the system is pushed to capacity to determine at what point the software degrades.
Disaster recovery testing – Determining data loss in the advent of a disaster is an important factor in the testing process.
Usability testing – This is where the app is used by its potential customer base and how easy it is to use and the intuitiveness of its design is assessed.
Scalability testing – How the app handles large users, data flows, and so on is assessed by scalability testing.
Generally, the tests are executed using tools. Not every test will be applied to every app as some simply are not applicable.
At the end of the tests, you should have a clear idea of ‘how good’ the product performs. Once fixes and tweaks are applied, the product should be in a much better place and quite possibly ready for launch.