Fundamentals of Software Testing - Part II

September 16, 2022

In the last post, we covered an overview of different types of software testing. Let us now look at functional and non-functional testing.

Functional Testing: Functional testing, as the name suggests, is used to test the features or functionality of the Software. Depending on the objective, the following functional tests may be performed.

  • Smoke Testing:  Smoke Testing is performed for verifying that the critical functionalities of a new software build are working fine. The testing team validates the build and ensures that it is stable and there are no concerning issues. 
  • Sanity Testing: Sanity Testing is performed after receiving a build, with minor changes in code or functionality. The aim is to ensure that it is bug-free and no new issues have emerged due to the changes done.
  • Regression Testing: Regression Testing is performed to confirm that a code change does not impact the existing functionality. In Regression Testing, Test cases are re-executed on the new code to ensure that the previous functionality is working fine, and the new changes have not led to any new bugs.
  • Re-testing: Re-testing is executing the previously failed test again on the same functionality to confirm that the issue is resolved.
  • Exploratory Testing: Exploratory testing means testing the software without any document by exploring the application and identifying its functionality in the exploration process. This type of testing is used when a clear documented requirement is missing or an early iteration is required.
  • End to End Testing: End-to-end testing is used to test whether the flow of an application is functioning as designed from beginning to end.

Non-Functional Testing: As the name suggests, non-functional testing is performed on non-functional aspects of the application such as user interface, usability, stress, load, etc.

Non-functional testing is performed in order to improve usability, efficiency, maintainability and portability of the application. It also helps to reduce the production risk and cost related to non-fictional aspects of the product. Finally, it helps in enhancing the knowledge of product behaviour.

  • User Interface Testing: UI testing also known as GUI Testing is used to test the visual elements and verify that they are functioning as per the requirement. 
  • Usability Testing: Usability Testing is performed to check the ease of use and ability of users to easily understand and operate the application.
  • Stress Testing: Stress testing is a part of performance testing. During stress testing, the system is monitored under extremely heavy load conditions to ensure that software remains stable under stress.
  • Load Testing: Load testing is analysing the functional and performance behaviour of the application under various conditions. The load testing is performed for normal and peak load conditions. Load testing identifies the maximum operating capacity of an application as well as the sustainability of application under peak user load.

In a nutshell, a piece of software that we all use undergoes or is at least supposed to undergo such a rigorous journey of testing, debugging and re-testing. So next time your business team is complaining about delayed releases, you can pacify them by saying that they are likely to get a better tested product!

The good news is that there are a host of test automation tools now available that can really help companies to conduct rigorous testing and yet squeeze their timelines of final delivery. We would love to have a conversation with you if this is something that interests you.

Let’s build something amazing together