Software Testing – Introduction
Software testing is any activity aimed at evaluating an attribute or capability of a program or system and determining that it meets its required results.Software testing is both a discipline and a process. Though software testing is part of the software development process, it should not be considered part of software development. It is a separate discipline from software development. Software development is the process of coding functionality to meet defined end-user needs.
Software testing is an iterative process of both validating functionality, and, even more important, attempting to break the software. The iterative process of software testing consists of:
- Designing tests
- Executing tests
- Identifying problems
- Getting problems fixed
The objective of software testing is to find problems and fix them to improve quality. Software testing typically represents 40% of a software development budget.
Types of Software Testing
- Software testing consists of several subcategories, each of which is done for different purposes, and often using different techniques. Software testing categories include:
- Functionality testing to verify the proper functionality of the software, including validation of system and business requirements, validation of formulas and calculations, as well as testing of user interface functionality.
- Forced error testing, or attempting to break and fix the software during testing so that customers do not break it in production.
- Compatibility testing to ensure that software is compatible with various hardware platforms, operating systems, other software packages, and even previous releases of the same software.
- Performance testing to see how well software performs in terms of the speed of computations and responsiveness to the end-user.
- Scalability testing to ensure that the software will function well as the number of users and size of databases increase.
- Stress testing to see how the system performs under extreme conditions, such as a very large number of simultaneous users.
- Usability testing to ensure that the software is easy and intuitive to use.
- Application security testing to make sure that valuable and sensitive data cannot be accessed inappropriately or compromised under concerted attack.
Methods of Software Testing
There are two basic methods of performing software testing:
- Manual testing
- Automated testing
Manual Software Testing
As the name would imply, manual software testing is the process of an individual or individuals manually testing software. This can take the form of navigating user interfaces, submitting information, or even trying to hack the software or underlying database. As one might presume, manual software testing is labor-intensive and slow. There are some things for which manual software testing is appropriate, including:
- User interface or usability testing
- Exploratory/ ad hoc testing (where testers do not follow a `script’, but rather testers `explore’ the application and use their instincts to find bugs)
- Testing areas of the application which experience a lot of change.
- User acceptance testing (often, this can also be automated)
The time commitment involved with manual software testing is one of its most significant drawbacks. The time needed to fully test the system will typically range from weeks to months. Variability of results depending on who is performing the tests can also be a problem. For these reasons, many companies look to automation as a means of accelerating the software testing process while minimizing the variability of results.
Automated Software Testing
Automated software testing is the process of creating test scripts that can then be run automatically, repetitively, and through many iterations. Done properly, automated software testing can help to minimize the variability of results, speed up the testing process, increase test coverage (the number of different things tested), and ultimately provide greater confidence in the quality of the software being tested.
There are, however, some things for which automated software testing is not appropriate. These include:
- End user usability testing is not typically a good candidate for automated testing.
- Tests which will not be run more than a couple of times are typically not a good candidate for automated tasting, since the payoff of in test automation comes after many test executions.
- Tests for areas of the application which experience a lot of change are also not a good candidate for automation since this can lead to substantial maintenance of test automation scripts. Such areas of the application may be more effectively tested manually.
It is important to note that test automation is software, and just like the software you are building for internal or external customers, it must be well-architected. A good test automation architecture, such as a keyword-driven testing framework, will reduce the overall cost of ownership of your test automation by minimizing maintenance expense and increasing the number of automated tests, allowing your organization to run more tests (and achieve higher quality) for the same investment of time and money.
Benefits of Testing
- By focusing attention on the issues of software quality, programmers as well as program testers are made conscious of the need for error-free software.
- The processes involved in analyzing computer programs from the perspective of a program tester almost automatically ensure that the more flagrant kinds of errors will be detected.
- The systematic testing process, even if it does not identify significant errors, still acts as a backup to other techniques such as design reviews, structured walkthroughs, and so on.
- Instituting a systematic testing activity provides a framework in which new quality assurance technologies can be applied as soon as they become available