Non-functional testing is defined as a type of software testing to check non-functional aspects (performance, usability, reliability, etc) of a software application. It is designed to test the readiness of a system as per nonfunctional parameters which are never addressed by functional testing.

Non-functional testing is equally important as functional testing and affects client satisfaction.

Objectives

  • Non-functional testing should increase usability, efficiency, maintainability, and portability of the product.
  • Helps to reduce production risk and cost associated with non-functional aspects of the product.
  • Optimize the way product is installed, setup, executes, managed and monitored.
  • Collect and produce measurements, and metrics for internal research and development.
  • Improve and enhance knowledge of the product behavior and technologies in use.

Characteristics

  • Non-functional testing should be measurable, so there is no place for subjective characterization like good, better, best, etc.
  • Exact numbers are unlikely to be known at the start of the requirement process
  • Important to prioritize the requirements
  • Ensure that quality attributes are identified correctly in Software Engineering.

Security:

The parameter defines how a system is safeguarded against deliberate and sudden attacks from internal and external sources.

Reliability:

The extent to which any software system continuously performs the specified functions without failure.

Survivability:

The parameter checks that the software system continues to function and recovers itself in case of system failure.

Availability:

The parameter determines the degree to which user can depend on the system during its operation.

Usability:

The ease with which the user can learn, operate, prepare inputs and outputs through interaction with a system.

Scalability:

The term refers to the degree in which any software application can expand its processing capacity to meet an increase in demand.

Interoperability:

This non-functional parameter checks a software system interfaces with other software systems.

Efficiency:

The extent to which any software system can handles capacity, quantity and response time.

Flexibility:

The term refers to the ease with which the application can work in different hardware and software configurations. Like minimum RAM, CPU requirements.

Portability:

The flexibility of software to transfer from its current hardware or software environment.

Reusability:

It refers to a portion of the software system that can be converted for use in another application.