Testing Type

Description

Benefits

Testing Phase

Ad hoc

Informal software testing that is outside a formal test plan. It can be used for the purpose of learning the system. A common use is for functional subject matter experts to “beat” on the system with odd scenarios that may hit in the real world (such as user errors and exceptional conditions) with the intent to try to “break the system.”

Ad hoc testing is a useful training tool for learning how to use the system. It also is a great tool for uncovering bugs or system problems with random input that is outside the normal path. Most testing staff do ad hoc testing as they think of new scenarios or possibilities during the formal testing process.

All phases of testing code

Black box

Testing based on business requirements and functionality without regard to internal design or code.

Same as functional testing. Focuses on WHAT the system must do. Test cases are written from business requirements before system is created, so testing verifies whether code accomplishes function described in requirements.

System

User Acceptance

Boundary

Testing to determine if the system handles values that are outside set boundaries, for example:

  - Maximum negative, maximum positive,    and “0” inputs or outputs;

  - Input or output strings at size limits or one

    character beyond size limits;

  - Empty input files and files with only one

    character in them.

History shows that bugs sometimes are concentrated around the boundary values. Focusing on the boundaries can uncover problems quickly and reduce testing time by attacking the high risk areas first.

All phases of testing code

Capacity

Testing to determine capacity of hardware, servers

Assists system owners to reduce costs by planning for future reductions or expansions on the front end.

Integration

System

User Acceptance

Dynamic

Testing involving execution of code

Verifies whether code performs as intended.

All phases of testing code

End-to-end

Testing a complete application environment from beginning to end with all programming, interfaces, network communications, hardware and applications operating to mimic a real world environment.

Testing is closest to real world conditions and may uncover problems that would not be discovered otherwise.

System

User Acceptance

Functional

Black box type testing based on business requirements and functionality, without regard to internal design or code.

See black box testing

Integration

System

User Acceptance

Load

Testing the system by feeding it large tasks, such as: executing code that would cause generation of a large volume of forms; feeding an unusually large document to a word processor; sending empty tasks through (i.e. a report creation when no data can be found to populate it); executing a search that would require the system to read a high number of records.

See Performance

Integration

System

User Acceptance

Performance

Testing to eliminate bottlenecks and establish a baseline for future regression testing, such as testing for acceptable response times and ability to handle concurrent users.

Prevents system performance problems that, under normal testing conditions, would not be discovered until after implementation. Risk is far less if problem is discovered before implementation.

Integration

System

User Acceptance

Recovery or Failover

Testing how well the system recovers from crashes, hardware failures or other catastrophic events.

Prevents major real world losses if problems are corrected prior to implementation.

Integration

System

User Acceptance

Regression

Retesting the system after programming modifications to ensure that no new “bugs” have been introduced.

Helps ensure that new code versions have not introduced new bugs.

All phases of testing code

Sanity or Smoke

Initial testing to determine whether a new software version is performing well enough to accept for a major testing effort.

Prevents losses caused by wasting resources on doomed testing efforts.

Prior to System or User Acceptance

Scalability

Testing whether the application can be scaled easily for increases or reductions in workload.

Scalability usually is a major factor in choosing application options. Ensuring that your system can grow or decrease with the business will enable a long term cost benefit.

Integration

System

User Acceptance

Security

Testing how well the system protects against unauthorized internal or external access and attempts made to compromise data, software or hardware.

Particularly in government programs, systems store very personal confidential data and issue monetary benefits. Security breaches could be catastrophic.

All phases of testing code

Static 

Walkthroughs and Inspections: 

 

Manual examination of project documentation such as requirements, use cases, design documents, program specifications, dataflow diagrams, architectural diagrams, etc. Most effective if completed by independent reviewer who was not involved in creation of deliverable.

Discovers gaps and errors in requirements before coding begins. Reduces costs of rework if found early in the process.

 

Cost effective testing

 

 

As documents are created – prior to coding

Stress

Testing to check system performance in response to a failure – does it fail and recover gracefully? Test conditions could include: doubling the baseline number for concurrent users/HTTP connections; randomly shutting down and restarting ports on the network switches/routers that connect the servers; taking the database offline, then restarting it.

See Performance

Integration

System

User Acceptance

Usability

Testing to determine if the system is user friendly and easy to navigate. Should be completed by functional staff.

If performed by true system users (customer), it may identify problems that would appear insignificant to a developer but would have significant negative impact for users.

Integration

System

User Acceptance

White box

Testing based on knowledge of the internal logic of the application code. Also called structural testing or glass box testing.

Focuses on HOW the system performs its functions. Test cases are created after system is created. Helpful in identifying errors that were introduced by the current version. Ensures that technology selected to implement requirement is correct.

Unit

Integration