Monday, March 29, 2010

Types of Software Testing Techniques:

Broadly, software testing techniques can be broken into two types:
1. Functionality testing
2. Non-functionality testing
Functionality testing
This means testing the behaviour of the application to see if it is doing what it is expected to do. If one person was to use a Windows calculator application, he should expect to see that addition, subtraction, multiple and division work accurately.
Example: If he enters 2, presses + button, enters 2, presses = button, the result displayed should be 4.
Which means the programming logic of the application should follow the actual requirement. This is functionality testing.
Non-functionality testing
Non-functionality testing is not really about programming logic. It's about how the same application would behave when run under different circumstances.
Example: If the above Windows calendar application works perfectly well for a single user on a machine with 512KB RAM and 20GB hard disk, assuming that 500 users are going to login to that machine and use that application at the same time, what would happen to it?
It is possible that the application might crash. If that happens, either the resource of the machine needs to be improved, like increase RAM or increase CPU, etc or the application code has to be improved to handle 500 users.
So, unless we run such a test, we will be at risk of the application crashing in production on a customer site when it comes under heavy load.
It is thus important, during requirements gathering, that not only functional requirements are detailed but also non-functional requirements.
An example of non-functional requirement can be '500 users must be able to use the Windows calculator at the same time'. It cannot be something like 'Many users should be able to use the Windows calculator at the same time'. There should not be any place for ambiguity.
It is the responsibility of the tester to get clarity on these requirements.

No comments: