Saturday, January 25, 2014

Types of Software Testing

Software testing is categorized into various types. This categorization is based on the focus, approach or method used. Let us see the software testing types.

White box testing - This testing needs the knowledge of the code and data structures of the software. It involves code coverage and testing interfaces. It is mostly performed at the unit level. Also known as clear box testing or glass box testing.

Black box testing - This testing does not require the knowledge of the internal code and data structures of the software. It is based on the inputs given by and outputs obtained by the user. It involves testing the requirements and exploratory testing.

Manual testing - This testing is done by human testers using their knowledge, creativity and intellect. The testers may use a few tools but the majority of the testing is done by hand.

Automated testing - The testing is executed by a computer running test automation code. The test automation is designed by a human tester. The test automation code is generated automatically by a tool (record and playback) or written by the tester by hand.

Unit testing - This is testing units of code like functions or procedures. Software developers perform this type of testing to test the code that they have written. It involves testing units with multiple test data, code coverage, code analysis and code review. Developers debug and refactor their code based on the bugs and findings of unit testing.

Integration testing - Once unit testing is complete, tested units are integrated. Integration testing involves testing calls between units and data passed from one unit to another. Software developers perform this type of testing to ensure that their unit works correctly with the units that it uses.

Sanity testing - Once the system build is available for testing, testers perform sanity testing before the detailed system testing. A system that is operational with the major functionality working passes the sanity test. If the system is not operational, the build is returned to the developers for fixes.

System testing - The entire system is tested against requirements. It also involves testing that all major parts of the system are working and exchanging commands and data correctly. Testers perform this type of testing.

System integration testing - It is common to have a system that has to work with other systems like applications or services. System integration testing involves testing the communication between the system under test and each of these systems.

Acceptance testing - This testing is done by users or their representatives. It involves testing that specified requirements and contract clauses are met completely and correctly.

Functional testing - It focuses on the functionality or features provided by the software. It involves using the feature to see if it works correctly and as expected. Functional testing also involves testing that each functional requirement is implemented correctly in the software.

Non-functional testing - It focuses on testing other aspects of the software like performance, security and usability. Non-functional testing also involves testing that each requirement, other than functional requirements, is implemented correctly in the software.

Regression testing - A code change in the software may cause regression or unwanted loss of requirement implementation. Regression testing involves finding any functional or non-functional regressions in the system.

Performance testing - This testing measures the performance of the system in terms of concurrent users, response times, throughput and so on. Performance testing also involves testing that each performance requirement is implemented. It is black box testing and done by performance testers using performance testing tools.

Load testing - This is the common type of performance testing. It measures the system performance under a fixed load (fixed number of concurrent users or fixed throughput).

Stress testing - This is a type of performance testing. It involves increasing the load on the system by increasing users, data, operation complexity or all until the system freezes or crashes. It measures the maximum load that the system can handle successfully.

Security testing - This testing focuses on the security of the system, the users and the data. The required functionality and data has to be available to the genuine users but not to hackers. It involves using multiple techniques for internal and external hacking of the system. It can be black box testing or white box testing or both.

Usability testing - It focuses on the intuitiveness and user-friendliness of the system. Especially for a new user. It finds out if it is easy and fast to complete basic tasks in the system with the user interface and system help. It is a black box testing.

Installation testing - This testing finds if it is possible to install or upgrade or repair or remove the software without a problem on each supported operating environment. This can be complex if the system has to run on many hardware devices, operating systems and network connections.

Internationalization and localization testing - This testing is done for systems that are available in multiple languages or cultures. It finds out that the system shows the correctly translated strings and a non-offensive user interface for every support language and region.

Alpha testing - This is the final testing and is done by internal staff. It involves testing all aspects of the software before providing the software to selected external users.

Beta testing - This is the final testing and is done by selected users. It involves free form testing to get final feedback before the public release.