Tuesday, October 17, 2006

Different Types of Software Testing

I think I am the trillionth person on this planet to post a blog on this topic! But still I am writing because this is the most fundamental thing, a would-be ‘Software Tester’ must know. There can be many more types of Software Testing that can be appended to this list. But these are the most widely used and most widely accepted types of Software Testing.

Unit testing: This type of testing tests individual application objects or methods in an isolated environment before being integrated into the system. It verifies the smallest unit of the application to ensure the correct structure and the defined operations. Unit testing is the most efficient and effective means to detect defects or bugs at the most basic level. The testing tools available in the market today are capable of creating unit test scripts. This type of testing is mostly done by the developers.

Integration testing: This testing is to evaluate proper functioning of the integrated modules (objects, methods) that make up a subsystem. The focus of integration testing is on cross-functional tests rather than on unit tests within one module. Available testing tools usually provide gateways to create stubs and mock objects for this test.

System testing: System testing should be executed as soon as an integrated set of modules has been assembled to form the application. System testing verifies the product by testing the application in the integrated system environment.
Regression testing: Regression testing ensures that code modification, bug correction, and any postproduction activities have not introduced any additional bugs into the previously tested code. This test often reuses the test scripts created for unit and integration testing. Software testing tools offer harnesses to manage these test scripts and schedule the regression testing.

Usability testing: Usability testing ensures that the presentation, data flow, and general ergonomics of the application meet the requirements of the intended users. This testing phase is critical to attract and keep customers. Usually, manual testing methods are inevitable for this purpose.

Stress testing: Stress testing makes sure that the features of the software and hardware continue to function correctly under a pre-designed set and volume of test scenarios. The purpose of stress testing is to ensure that the system can hold and operate efficiently under different load conditions. Thus, the possible hardware platforms, operating systems, and other applications used by the customers should be considered for this testing phase. Test conditions are bare minimum resources.

Load testing: This test involves giving the system more than what it can handle. In this sort, this test is the opposite of stress testing.

Performance testing: Performance testing measures the response times of the systems to complete a task and the efficiency of the algorithms under varied conditions. Therefore, performance testing also takes into consideration the possible hardware platforms, operating systems, and other applications used by the customers.

Repetitive testing: This test involves repeating the same test again and again till it eventually exposes a bug. This testing can help discover memory leaks in the software.

The following tests are done to determine if an application is world-ready.

Globalization Testing: The goal of globalization testing is to detect potential problems in application design that could inhibit globalization. It makes sure that the code can handle all international support without breaking functionality that would cause either data loss or display problems. Globalization testing checks proper functionality of the product with any of the culture/locale settings using every type of international input possible.

Localization Testing: Localization translates the product UI and occasionally changes some initial settings to make it suitable for another region. Localization testing checks the quality of a product's localization for a particular target culture/locale. This test is based on the results of globalization testing, which verifies the functional support for that particular culture/locale. Localization testing can be executed only on the localized version of a product. Localizability testing does not test for localization quality.

Localizability Testing: Localizability testing verifies that you can easily translate the user interface of the program to any target language without re-engineering or modifying code. Localizability testing catches bugs normally found during product localization, so localization of the program is required to complete this test. As such, localizability testing is essentially a hybrid of globalization testing and localization testing.

Compatibility Testing: Compatibility testing verifies that the application or software is compatible with all the platforms and other end user settings.
Accessibility Testing: Accessibility testing verifies that the application is well designed for all kinds of users and works even without the available audio-visual technology.

1 comment:

Tania said...

I did find some post in this topic, but none so informative and organized as yours. Thanks for posting such article & hope to see something more like this in near future as well.