The Levels of Software Testing
There are many different levels of software testing. These levels can test something as small as one particular feature, to as large as an entire program. Many times the levels of testing will start at the minimal level and continue until the entire program is tested. The levels of testing also go hand in hand with the cycles of testing.
The first type of testing is unit testing, which may also be referred to as component testing. Unit testing tests the minimal component, usually through white-box testing. Each unit or basic component in the software design is tested to make sure the code is working and the detailed design has been correctly implemented. This type of testing is usually done by the developers and not by the software testers.
System Integration Testing
The next level of testing is system integration testing (SIT), and this type of testing ensures that one developed program works with all of the other systems that are already in place. The purpose of system integration testing is to detect any inconsistencies that may arise when all components or programs are put together. For example, a program might be developed by a company that breaks down the items within orders into style, color and size. Once this program has been fully tested itself, it must also undergo SIT to make sure that it functions when integrated with the other programs developed by the company. If the new program is breaking down ordered items for reporting at a future date, then it must work in conjunction with the order management system to make sure it is receiving the data that was ordered. Alternately, it must also work with the reporting program and feed the information it has sorted to this program to ensure that a company's reports are accurate.
If unit testing tests the smallest components of a program, and system integration testing makes sure that all programs within the entire system function hand in hand, then system testing tests the entire system. System testing is a more limited type of testing done against the software requirements specification (SRS), and it systematically takes all programs that have passed integration testing and submits them to testing as a whole. System testing can further be broken down into two main categories: Functional and Non-Functional. Functional System Testing verifies that a system is ready for release and all the integrated programs live up to their specifications and expectations. Functional tests are done from a user's perspective. For example, if you click on "File" in a program, then "New", you would expect it to open up a new document or file. If this action works, then functionally it has executed exactly what it was developed to do, and has therefore passed. Functional testing is done against the business requirements specification (BRS), making sure that the client-specific behaviors within a program work. Non-functional testing involves with the operation and performance of the system, verses any specific behaviors. It deals more with security, reliability, capacity, and data accuracy. Non-functional testing most often tests the quality attributes and not the functional requirements.
Regression testing occurs after system integration testing and system testing. This level of testing can best be described as a system of checks and balances. For instance, once a defect is corrected or a new change has been implemented, one must not assume that everything is still working properly. Regression testing protects against the risk that any corrections or enhancements have changed the way the system works, and therefore introduced new defects. Regression testing also makes sure that any future updates do not repeat known mistakes in the software, and secures the integrity of the data.
User Acceptance Testing
Finally, User Acceptance Testing (UAT) is a level of testing that is not destructive in nature such as system testing, where you were looking for mistakes and bugs. User Acceptance Testing is usually performed to make sure that the client is happy with the end-user environment. End-users of the system usually perform this level of testing, and act as a final verification of real-world use for the software.
The levels of software testing can be further broken down by more specific types of testing. All levels and types of testing have the same goal, which is to verify the software is working to specification and validate that the software product is meeting the needs of customers and end-users. End-user happiness is the true indicator of success for a project.