Types Of Testing In Software
So far we have looked into Test Driven Development and the benefits of testing in general, now lets have a look at the different ways of covering our system with tests, we will split them into functional and non-functional tests.
Functional testing types include:
- Unit Tests
- Integration / Feature Tests
- Functional Testing
- Regression Testing
- Acceptance Testing
- Graphic User Interface (GUI) Testing
Non-functional testing types include:
- Security Testing
- Performance Testing
- Load Testing
- Stress Testing
- Compatibility testing
- Install Testing
- Recovery Testing
- Usability Testing
- Localization Testing
This refers to testing individual methods/component of software, It is typically performed by a programmer as detailed knowledge of what that particular method is supposed to do is required. Unit test focuses only on testing a single method.
Unlike Unit tests, Integration test focuses on making sure that multiple methods, modules and services all work together as expected. This could be testing that after user registration an email with a coupon was sent out by a different module/service within your software.
Functional testing is similar to Integration testing with an exception, integration testing will check that an email was sent out after user registration, functional testing will check that the email that was sent out had a specific content as specified by the business requirement.
This is re-running functional and non-functional tests after a change such as a bug fix to ensure that previously developed and tested software still performs after the change. Changes that may require regression testing include bug fixes, feature introduction, configuration change.
Graphic User Interface (GUI) Testing
The objective is to validate that the GUI meets the business requirement, this could involve checking icon sizes, text alignments, making sure that the sizes remain proportional when resized, this could check that the menu items display properly on different devices.
This is also known as user acceptance testing (UAT) the testing is performed by the client to ensure that the software behaves as per the business requirements, the client will accept/approve the software if all the features work as expected, this is the last phase before deployment to production.
This is performed by a team of security experts, the aim is to secure the software from malicious programs, viruses and generally check that obvious steps are taken to prevent hackers attack, this also includes checking that any third party software used is being maintained and up to date.
Performance testing generally cover 'stress' and 'load' testing, stress testing puts a system under higher than expected traffic to see how the system works above its capacity, load testing allows testers to check concurrent users over a duration verify expected response time
The objective of load testing is the check the maximum load a system can handle without performance degradation. Load testing is performed using tools such as LoadRunner, WebLoad, JMeter or Silk.
This is a form of deliberate intense testing that goes beyond normal operational capacity to a breaking point to observe the results. This is achieved by putting large numbers beyond storage capacity, or complex database queries, continuous input to the database.
Compatibility Testing is a type of Software testing to check if your software is capable of running on a different environment, web server, hardware, network environment, different browsers.
Install testing will check that the software can be installed on a different platform and still function as expected, this check will be done by following support documentation and read me files with any other configuration documentation.
It is a type of test which determines whether operations can be resumed after the integrity of the system has been lost. It checks that the software reverts back to the point where the integrity compromise occurred. The purpose of recovery testing is to verify the system's ability to recover from different points of failure.
Usability testing is a method to evaluate how easy a system is to use by testing it on real users, users would typically be asked to complete tasks and notes will then be taken at points when a user gets stuck or confused. System navigation and flow are also covered in this test.
Localization testing checks that software behaves according to the chosen local culture, for example, it checks Time, Date, Language, Currency and any special characters are all in the format of the target region. This test will also cover typography errors, linguistic errors, cultural appropriateness of UI etc.