Testing? Who has time for that? Said most programmers in history.
Testing is actually one of the most important steps in the software development life cycle, software testing is the process of executing an application or program with the intent of
finding software bugs. It also can be used to see if the intentions of the software were made, validate or verify that the program works as expected.
Testing can be classified in two types, static and dynamic. Static is the examination of the program’s source code, is somewhat implicit because text editors automatically check source code and syntax, so the program is not needed to be running for this kind of testing. On the contrary, dynamic testing involves the examination of the software when is running, and is used to verify that the program works according to the functional requirements.
There are different software testing approaches and I’ll only cover a few here, these test are implemented in the order specified:
- Unit test
- The most basic testing mechanism at the developer level.
- Narrow and well defined scope.
- Isolate the code from outside interaction.
- Focuses on very small unit of functionality.
- Dependencies are hard coded while testing.
- We need to check further that when these units are combined they work in a cohesive manner which lead us to the next testing approach.
- Integration test
- Developer level.
- Mechanism to test the inter-operation of smaller units.
- Test modules which access network, databases and file systems
- Reveal the issues related to network modules or databases, and more importantly, in the connections between smaller units of code.
- Functional test
- Check for the correctness of the output with respect to the input defined in the specification.
- Smoke test
- A simple test is done from the start typically after a fresh installation and newer input values.
- Crashes are there to indicate trouble.
- Regression test
- TBugs that typically which affect the core areas of the system.
- Retest all the modules of the system.
- Acceptance test
- Every feature is checked from the user’s perspective by the testing team and the feature is marked accepted or rejected.
- Test the application from end user’s perspective like detecting crashes after going through a certain flow.
- The results of these tests are very subjective in nature and it takes a while to figure out the exact issue in the code.