|
Software testing is a process used to identify the correctness, completeness and quality of developed computer software.
Actually, testing can never establish the correctness of computer software. It can only find defects, not prove that there are
none. There are a number of different testing approaches that are used to do this ranging from the most informal ad hoc
testing, to formally specified and controlled methods such as automated testing.
The quality of the application can and normally does vary widely from system to system but some of the common quality
attributes include reliability, stability, portability, maintainability and usability. For a more complete
listing of attributes it is suggested that the ISO standard ISO 9126 be consulted.
- "An effective way to test code is to exercise it at its natural boundaries"
- --Brian Kernighan
Introduction
In general, software engineers distinguish software
faults and software failures. In case of a failure, the software does not do what the user expects. A fault is a programming
error that does not actually manifest itself. A fault can turn into a failure when the software is ported to a different hardware
platform or a different compiler, or when the software gets extended.
Software testing may be viewed as a sub-field of software quality
assurance but typically exists independently (and there may be no SQA areas in some companies). In SQA, software process
specialists and auditors take a broader view on software and its development. They examine and change the software engineering
process itself to reduce the amount of faults that end up in the code or deliver faster.
Regardless of the methods used or level of formality involved the desired result of testing is a level of confidence in the software so that the developers are confident that the software has an acceptable defect rate. What constitutes an acceptable defect
rate depends on the nature of the software. An arcade video game designed to simulate flying an airplane would presumably have a
much higher tolerance for defects than software used to control an actual airliner.
A problem with software testing is that the number of defects in a software product
can be very large, and the number of configurations of the product larger
still. Bugs that occur infrequently are difficult to find in testing. A rule
of thumb is that a system that is expected to function without faults for a certain length of time must have already been
tested for at least that length of time. This has severe consequences for projects to write long-lived reliable software.
One of the common misunderstandings of software testing is, that it is performed by an independent group of testers after finishing the software product and
before it is shipped to the customer. But this approach leads to the common effect that the test team is used as project buffer
to compensate project delays. Additionally the earlier a defect is found the cheaper it
is to fix it. Software testing starts at the same moment the project starts and it is a continuous process until the project
finishes.
Alpha testing
In software development, testing is usually required before release to the general public. In-house developers often test the
software in what is known as 'alpha' testing which is often performed under a debugger or with hardware-assisted debugging to catch bugs quickly.
It can then be handed over to quality assurance staff for additional testing in an environment similar to how it was intended
to be used. This is often known as the second stage of alpha testing.
Beta testing
Following that, limited public tests known as beta-versions are often released to groups of people so that further testing can
ensure the product has few faults or bugs. Sometimes,
beta-versions are made available to the open public to inrease the feedback field
to a maximal number of future users.
Gamma testing
There are companies that introduced the so-called gamma tests, which means feature-completed, but the software did not run
through all the inhouse quality checks. Some cynics refer to software release as "gamma testing".
See also
Software Testing Activities
- System functional testing
- Unit testing
- Integration testing
- Regression testing
- Load testing
- Performance testing
- Stress testing
- Security testing
- Installation testing
- Usability testing
- Stability
testing
- Authorization
testing
- User acceptance testing
- Conformance testing
External links
|