The various test levels in the software testing are as follows
1. Component testing
2. Integration Testing
3. System testing
4. Acceptance testing
The major advantage of this test level testing is to ensure that the various product (Software) defects are rightly identified and fixed at a quicker time during the development phase itself. The test levels make the testing activity more efficient and effective one.
1. Component Testing
Component testing is also called as Unit/Module testing. It identifies the defects and verifies the functioning of the software for the components that are separately testable. Typically a Component can be defined as a smallest of the Software, like a User name field for e-Mail system. The component testing can be done separately from the software that is being developed depending on the system.
Component testing is usually carried out in the development environment by using appropriate tools for the test. Most often the programmer will be involved in the component testing, but depending on the risk factor an independent programmer may be involved to carry the testing of the code. Here incidents are not reported formally but the code will be fixed as soon as possible.
2. Integration Testing
As the name defines, Integration tests are usually carried to check the integration or interface between the components of the software and interactions between hardware and software components. There may be one level of integration testing and it may be carried out on test objects of varying size. For example, Component integration testing tests the interactions between software components and is done after component testing.
System integration testing tests the interactions between different systems and may be done after system testing. So integration test can be carried out after any other tests, not necessarily in an order.
There are two possibilities that there is increased risk in integration test, first is when the Components or the systems are integrated simultaneously as a result, testing needs to be carried at the end of the integration. Second if the system or components are being integrated one by one which result in the exhaustive testing and increasing the project completion time.
The integration test is carried out in following methods depending on the architecture and the structure of the software being developed; this will vary from time to time based on the testing module.
Top-down: testing takes place from top to bottom, following the control flow or architectural structure (e.g. starting from the GUI or main menu). Components or systems are substituted by stubs. Stubs are used when the lower level unit or component is not coded and not ready for testing. The stubs are nothing but dummy programs which act like the actual component.
Bottom-up: testing takes place from the bottom of the control flow upwards. Components or systems are substituted by drivers. A driver is nothing but a dummy software component which is used to replace the high level modules in case if they are not ready for testing.
Functional incremental: integration and testing takes place on the basis of the functions or functionality, as documented in the functional specification.
The best way is to start integration test with those interfaces that are likely to cause major problems. By following this way it will prevent major defects at the end of the integration stage. Integration test can be carried out by developers also but to done as a separate team of specialist integration testers. It can also be done by group of integrators/developers including non functional specialists.
3. System Testing
System testing is concerned with the behavior of the whole system/product as defined in the expected or required specifications. System testing is most often the final test on behalf of development to verify that the system is meeting its requirements or specifications and its purpose may be to find as many defects as possible. It is carried out by specialist tester that forms a dedicated and sometimes independent, test team within development, reporting to the development or project manager.
System testing should investigate both functional and non-functional aspects of the software being developed. The non-functional testing should include performance test and reliability tests. In other hand the functional testing includes the testing aspects of functionality of the software, the appropriate testing techniques Specification based testing/Structural based technique can be selected based on the software under test.
System testing requires a controlled test environment. A system test is executed by development organization under a controlled environment. The environment will be similar to that of live environment.
4. Acceptance testing
Acceptance test is often called as last level of test. Once the software is confirmed defect free or defects are rectified then acceptance test should be carried out. The main aim of the test is to ensure that the user requirements are met and should address the level of confidence about the system to the users. The acceptance tests should give answers to the following questions,
Is the system fit to use?
Is the system designed to meet the requirements?
Is the system risk free in operation from the customers end?
Acceptance testing can occur in multiple levels, it will be carried out when integration modifications are done, also during component testing to find the usability of the component. Usually the acceptance test is done by end user or the customer representatives.
Other types of acceptance testing that exist are contract acceptance testing and compliance acceptance testing. Contract acceptance testing is performed against a contract's acceptance criteria for producing custom-developed software. Acceptance should be formally defined when the contract is agreed. Compliance acceptance testing or regulation acceptance testing is performed against the regulations which must be adhered to, such as governmental, legal or safety regulations.
As discussed the acceptance test is usually a satisfactory test from the customer point of view, in some types of acceptance testing feedback from the end users will gathered before the system is launched i.e. the system will be tested from the customer end in live environment. Such types of testing include Alpha and Beta testing.
Alpha test takes place at the developer's site. A cross-section of potential users and members of the developer's organization are invited to use the system. Developers observe the users and note problems. Alpha testing may also be carried out by an independent test team. Beta testing, or field testing, sends the system to a cross-section of users who install it and use it under real-world working conditions. The users send records of incidents with the system to the development organization where the defects are repaired.