Functional testing is concerned only with the functional requirements of a system or subsystem and covers how well (if at all) the system executes its functions. These include any user commands, data manipulation, searches and business processes, user screens, and integrations.
Functional testing is done using the functional specifications provided by the client or by using the design specifications like use cases provided by the design team.
And how about Non-Functional Testing?
Non-functional testing is concerned with the non-functional requirements and is designed specifically to evaluate the readiness of a system according to the various criteria which are not covered by functional testing.
For example, in functional testing it might be revealed that the function of inputting data into a set of cells in a database works, however, usability testing (a part of Non Functional Testing) reveals that saving a version of the document requires 2 minutes, which will (or should) be judged as too long to wait.
Essentially non-functional testing lets us measure and compare the results of testing the non-functional attributes of software systems, for example, by testing the application or system against the client’s requirement or a performance requirement.
So basically, non-functional testing demonstrates how well the product behaves as opposed to simply what the product does.
Of course, while functionality is important, remember that users’ affection and trust of a software or system is swayed and affected by non-functional qualities, so one must never forget that non-functional testing is indispensable in its own right.
A few examples of non-functional testing include the following kinds of tests –
- Performance Testing
- Security Testing
- Usability Testing
- Reliability and Dependability Testing
- Endurance testing
- Load testing
- Localization testing and Internationalization testing
- Ergonomics Testing
- Operational Readiness Testing
- Installation Testing
- Configuration Testing
- Compatibility Testing
- Interoperability Testing
- Maintainability Testing
- Availability Testing
- Recoverability Testing
- Miscellaneous Testing
Of course, not each and every one of the above kinds of testing is necessary for every system or application, as after all, testing is dictated by the requirements and foreseen usage of the software. Logically, for example, if an application is to be used only in a medium-sized office in the United Kingdom and there is no view to using it elsewhere, it might be wise to forgo Localization testing and Internationalization testing and place a heavier focus on Configuration Testing, using data about the office’s technical set up as your base.