You are on page 1of 16

Software Testing Strategies

Software Testing
Testing is the process of exercising a program with the specific intent of finding errors prior to delivery to the end user.

errors requirements conformance


an indication of quality

Who Tests the Software?

Understands the system

independent tester
Must learn about the system, but, will attempt to break it and, is driven by quality

but, will test "gently"

and, is driven by "delivery"

Levels of Testing

Unit testing
Unit testing is normally considered as an adjunct to the coding step.. After source code has been developed, reviewed, and verified for correct syntax, unit test case design begins Each test case should be coupled with a set of expected results Deriver / stub software must be developed for each unit test

Integration testing
Two strategies

Top - down Bottom up Integration

Some time Sandwich Integration Regression testing is needed

Validation testing Focus is on software requirements System testing Focus is on system integration

Levels of Testing Continued ..

Alpha/Beta testing Focus is on customer usage Recovery testing forces the software to fail in a variety of ways and verifies that recovery is properly performed Security testing verifies that protection mechanisms built into a system will, in fact, protect it from improper penetration Stress testing executes a system in a manner that demands resources in abnormal quantity, frequency, or volume Performance Testing test the run-time performance of software within the context of an integrated system

Unit Testing

Unit testing focuses verification effort on the smallest unit of software design the software component or module Using the component level design description as a guide, important control paths are tested to uncover errors within the boundary of the module The unit test focuses on the internal logic and data structures within the boundaries of a component The unit testing is illustrated schematically in the figure on the next slide

Unit Testing
module to be tested
results software engineer
interface local data structures boundary conditions independent paths

error handling paths

test cases

Unit Testing


The module interface is tested to ensure that information properly flows into and out of the program unit under test Local data structures are examined to ensure that, data maintains its integrity during all steps of execution All independent paths through the control structures are exercised to ensure that all statements in a module have been executed at least once Boundary conditions are tested to ensure that the module operates properly at boundaries established to restrict processing Finally all error handling paths are tested

Integration Testing Strategies

Integration testing is systematic technique for constructing the software architecture while at the same time conducting tests to uncover errors associated with interfacing

The objective is to take unit tested components and build a program structure that has been dictated by the design

Integration Testing Strategies

Options: the big bang approach an incremental construction strategy

Top Down, bottom-up, sandwich Integration

Integration Testing Strategies


down integration:

It is an incremental approach to construction of the software architecture. Modules are integrated by moving downward through the control hierarchy, beginning with the main program Subordinate modules are incorporated into the structure in either depth first or breadth first The integration process is performed in the series of five steps

The main module is used as a test deriver and stubs are substituted for all components Subordinate stubs are replaced one at a time with actual components Tests are conducted as each component is integrated On completion of each set of tests, another stub is replaced with the real component Regression testing may be conducted to ensure that new errors have not been introduced

Integration Testing Strategies


up integration:

Construction and testing begins with atomic modules Following steps are followed

level components are combined into clusters (Some time called builds) that perform a specific software sub-function A deriver is written to coordinate test case input and output The cluster is tested Derivers are removed and clusters are combined moving upward in the program structure

Regression Testing

In context of integration testing, regression testing is the re-examination of some subset of tests that have already been conducted to ensure that changes have not propagated unintended side effects The regression test suite contains three different classes of test cases
A representative sample of tests that will exercise all software functions Additional tests that focus on software functions that are likely to be affected by the change Tests that focus on the software components that have been changed

Bring a write up on

Smoke Testing

OOT Strategy

class testing is the equivalent of unit testing

operations within the class are tested the state behavior of the class is examined

if there is no nesting of classes

integration applied three different strategies/levels of abstraction

thread-based testingintegrates the set of classes required to respond to one input or event this of classes use-based testingintegrates the set is pushing required to respond to one use case cluster testingintegrates the set of classes required to demonstrate one collaboration

Debugging: A Diagnostic Process

test cases

regression tests

new test cases suspected causes


corrections identified causes