Software testing is a process of verifying and validating that a software application or program
1. Meets the business and technical requirements that guides its design and development, and
2. Works as expected. Software testing also identifies important defects, flaws, or errors in the application code that must be fixed.
Software testing has three main purposes: verification, validation, and defect finding.
- The verification process confirms that the software meets its technical specifications.
- The validation process confirms that the software meets the business requirements.
- A defect is a variance between the expected and actual result. The defect’s ultimate source may be traced to a fault introduced in the specification, design, or development (coding) phases.
WHY DO WE TEST SOFTWARE?
Why test software? “To find the bugs!” is the instinctive response of many people and including developers think, software testing is focused on finding defects in the final product.
I have been involved in testing of software for more than 13 years; I feel surprised and worried at people including developers and project managers at times, do not take testing as a major phase in the software development life cycle. Also there is a misconception that the goal of testing is to eliminate all defects or bugs. In many a cases I have seen, requirements are not well defined. It will be just a general description and a complete flow will not be defined. If only a high level definition is given, it is impossible for a tester to know what exactly the low level function should exactly do.
The goal of a testing team is to find bugs/defects and reduce risk but cannot assure the development team or the management to eliminate all bugs/defects. It is tough to achieve 100% defect free application. Then why do we test software?
Software testing answers questions that development testing and code reviews can’t.
- Does the software really work as expected? Does it meet the users’ requirements?
- Is it what the users expected?
- How does it perform? How does it scale when more users are added?
What can we do with the answers to these questions?
- Save time and money by identifying defects early
- Avoid or reduce development downtime
- Provide better customer satisfaction by building a better application
- Build a list of desired modifications and enhancements for later versions
WHAT DO WE TEST?
Focus on the core functionality. Concentrate on the application’s capabilities in common usage situations before going on to unlikely situations. Good business requirements will tell you what’s important. The value of software testing is that it goes far beyond testing the underlying code. It also examines the functional behavior of the application. A comprehensive testing regime examines all components associated with the application. Even more, testing provides an opportunity to validate and verify things like the assumptions that went into the requirements, the appropriateness of the systems that the application is to run on, and the manuals and documentation that accompany the application.
Testing can involve some or all of the following factors.
- Business requirements
- Functional & Technical design requirements
- Programmer code
- Professional best practices
- Hardware configuration
TYPES OF SOFTWARE TESTS
There are four levels of software testing:
Unit testing is done by the programmer during development; “Unit” refers to “program” or “module. The emphasis is on the correct functioning of the individual program.
System testing emphasis is on the flow of data from one program to another within the system under test.
Integration testing is the testing of interacting systems. The emphasis is on the flow of data between systems or between modules.
User Acceptance testing is the formal acceptance of a finished product, ensuring that the product satisfies the original business requirements. UAT is also called Beta testing, application testing, and end-user testing. Whatever you choose to call it, it’s where testing moves from the hands of the IT department into those of the business users.
Regression testing is conducted in parallel with other tests and can be viewed as a measure to ensure that the newly modified code still complies with its specified requirements and that unmodified code has not been affected by the change.
WHEN TO STOP TESTING?
Testing is potentially endless. We can not test till all the defects are unearthed and removed — it is simply impossible. At some point, we have to stop testing and ship the software. The question is when?
Realistically, testing is a trade-off between budget, time and quality. It is driven by profit models. The pessimistic and most often used approach is to stop testing whenever some or any of the allocated resources — time, budget, or test cases — are exhausted.
CONCLUSION
Software testing is a critical phase in the software development life cycle and helps the organization to save time and money by identifying problems early and to improve customer satisfaction by delivering a more defect-free product.
Unfortunately, it is often given less importance than it should, and a primary reason for that is because the project staff and the management is unfamiliar with software testing methodologies and approaches. To partially reduce this situation, every organization should be made familiar with basic software testing concepts consider it as a part of SDLC.