What is Non Functional Testing?

What is Non-Functional Testing?

Testing is broadly classified into 2 types:

  • Functional Testing
  • Non Functional Testing

What is Functional testing?

Functional testing, as the name suggests, validates all the functionality of the system. It evaluates the application and validates whether the application is performing as per the requirements.

Types of functional testing include:

–  Unit testing
–  Smoke testing
–  Sanity testing
–  Interface testing
–  Integration testing
–  Systems testing
–  Regression testing
–  User acceptance testing

What is Non Functional testing?

Next type of testing is the Non Functional testing. As the name depicts, this testing concentrates on the non functional aspect of the application. So what are the non functional aspects? Or should I say what are the features which are not related to the functionality of the application? Well, here are those:

– How does the application perform under normal circumstances?
– How the application behave when too many user logs in concurrently?
– Can the application handle stress?
– How secure is the application?
– Can the application recover from any disaster?
– Can the application behave in the same way in different environment or OS?
– How easy is to port the application in different system?
– Are the documents / user manual provided with the application easy to understand?

The list can grow. But the point here is, are not these features contributed to the quality of the application? The answer is YES. These features are equally important. Imagine the application which meets all the user requirements perfectly, but some naughty user can easily go and crack the data entered by the user in the application, or application dies when more than 5BB of any file is uploaded. So would you say that the application is of good quality; of course not.

So here comes the non functional testing technique. Now let’s explore these techniques one by one.

#1. Performance Testing: Evaluates the overall performance of the system. Key elements are as follows:

–  Validate that the system meets the expected response time.
–  Evaluate that the significant elements of the application meets the desired response time.
–  It can also be conducted as a pert of integration testing.
–  It can also be conducted as a part of systems testing.

#2. Load Testing: Evaluates whether the system’s performance is as expected under normal and expected conditions. Key points are

–  Validate that the system performs as expected when concurrent users access the application and gets the expected response time.

–  This test is repeated with multiple users to get the response time and throughput.
–  At the time of testing, the data base should be realistic.
–  The test should be conducted on a dedicated server which stimulates the actual environment.

#3. Stress Testing: Evaluates whether the system’s performance is as expected when it is low on resources. Key points are:

–  Test on low memory or low disc space on clients / servers that reveals the defects which cannot be found under normal conditions.


–  Multiple user performance the same transactions on the same data.
–  Multiple clients connected to servers with different workloads.
–  Reduce the Think Time to “Zero” to stress the servers to their maximum stress.

Think Time: like the time interval between typing your user and password.

#4. Volume Testing: Evaluates the behavior of the software when large volume of data is involved. Key points are:

–  Subject the software to large amounts of data and check the limit where the software fails.
–  Maximum database size is created and multiple client query the database or create larger report.
–  Example- If the application is processing database to create a report, a volume test would be to use a large result set and check that the report is printed correctly.

#5. Usability Testing: Evaluates the system for human use or fit for use. Key points are:

–  Are the output correct and meaningful and the same which was expected as per the business?
–  Are the errors diagnosed correctly?
–  Is the GUI correct and consistent with the standard?
–  Is the application easy for use?

#6. User Interface Testing: Evaluates the GUI. Key points are:

–  GUI should provide help and tool tips to make it easy for use.
–  Consistent for its look?
–  Data is traversed correctly from one page to another?
–  GUI should not annoy the user or gets difficult to understand.

#7. Compatibility Testing: Evaluates that the application is compatible with other hardware /software with minimum and maximum configuration. Key points are:

–   Test with each hardware with minimum and maximum configuration.
–   Test with different browsers.
–   Test cases are the same which were executed during functional testing.
–   In case the number of hardware and software are too many, we can use OATS techniques to arrive at the test cases to have maximum coverage.

#8. Recovery Testing: Evaluates that the application terminates gracefully in case of any failure and the data is recovered appropriately from any hardware and software failures.. The tests are not limited to the below points:

–   Power interruption, to the client while doing CURD activities.
–   Invalid database pointers and keys
–   Database process are aborted or prematurely terminated.
–   Database pointers, fields and keys are corrupted manually and directly within database.
–   Physically disconnect the communication wores, power turn off, turn down the routers and network servers.

#9. Instability Testing: Evaluates and confirms that software installs and uninstalls correctly. Key points are:

–   Validate that the system components are installed correctly on the designated hardware.
–   Validate that the navigation on the new machine, update the existing installation and older versions.
–   Validate that with insufficient disc space, there is no unacceptable behavior.

#10. Documentation Testing: Evaluates the documents and other user manuals.

–   Validate that the stated documents are available in the product.
–   Validate all that user guides, set up instruction, read me files, release notes and online help.

Conclusion:
Non functional testing is very important aspect of quality and like functional testing, non functional testing also requires a strategy and planning. We can include non functional testing details in the test plan or can create a separate strategy and plan for it. In either case, the goal is to have proper coverage of non functional aspects of the software.