Types of Functional Testing and their Applications You Must Know

Types of Functional Testing and their Applications
Functional testing traces what the system does. It is a type of black box testing tracking the quality of the product in conformity with the requirement specifications. These tests are conducted by feeding input and examining the output, rarely considering the internal programming. Buzzle explains the types of functional testing with their applications.
Steps to do Functional Testing
#1. Understand the requirements
#2. Identify test input
#3. Compute expected output
#4. Execute test cases
#5. Compare actual and expected outputs
Functional testing tests whether each function is working in conformity with the requirement specifications. It mainly involves black box testing that is related to testing of functional requirements of a system, and is not concerned about the source code (internal working) of the product.

This testing usually begins as a part of the requirement specification process, proceeding through each level of design. Thus, validating a software application in accordance with its specifications and testing if the application is correctly executing all the required functions, comes under functional testing.

Functional testing can involve a series of tests. These tests characterize validation of behavior, conducted by inputting a wide range of data. This can include checking for the software's user interface, installation and networking, etc. Though broadly being a part a black box testing, some of the tests are performed using white box methodologies too. These tests can be automated or manual. Let's look at the general types of functional testing.
Types of Functional Testing
Smoke Testing
❑ Smoke testing is the preliminary testing done to test the basic functionalities of the software, before actually getting into testing. It checks the stability of the software, and hence, it is executed before getting into its detailed functionality.

❑ It can be called an intake test as it squares up if the program (or the application) has to be further submitted for fine-grained testing, or has to be reverted to the development team.
❑ The term 'smoke testing' has been adapted from hardware testing where it has been checked if the hardware 'smokes' on switching it on for the initial time. Likewise, in software testing and computer programming, it's done to detect the fundamental flaws in a software.

❑ The tester touches all the areas of the program without digging deeper into its coding.
❑ Smoke testing is scripted, i.e., either the test cases are being executed manually where they have written test sets, or there are automated scripts to run the basic functionality of the application.

❑ Though smoke tests are executed at the very beginning, just after the software build, but they form a consistent part of the testing process. The characteristic feature of smoke testing is that it runs quickly, giving a faster output.
❑ Some instances for smoke testing: Is the software application accessible to a tester? Does the program run? Does it navigate smoothly from one window to the other? Is the GUI responsive? Do the buttons work?
Sanity Testing
❑ A sanity test is a subset of regression test. It offers a quick, broad, and shallow approach to testing.

❑ Whenever a new software build is obtained after performing minor changes and fixing the issues in the previous build, a sanity check is performed instead of conducting a complete regression test.

❑ The objective of doing sanity tests is to eliminate classes that are sure to give false results.
❑ Basically, this testing is done to save the time and costs incurred in performing a more rigorous testing, checking if the proposed functionality is working as expected. So, if sanity fails, there is no point in sending a build to further levels of testing.

❑ Sanity testing is always confused with smoke testing. The latter one is scripted, while sanity tests are mostly unscripted. Some companies have inbuilt sanity tests that are run as a debugging tool.
❑ It should be clear that this test is not conducted to verify thorough functionality of the application, but just to determine if the developing team has applied some rationality (or sanity, in Testing terms) while developing the software. For instance, if a calculator gives 20 + 30 = 60, there is no use checking for (sin 20 + cos 30).

❑ The banking systems use these tests for verifying all the transactions.
Regression Testing
❑ Regression testing is checking if changes done to one part of the software affect other modules in it, because minor fixes, enhancements, etc., made in one part can introduce new faults in another (previously sane) part.

❑ Thus, this testing is carried out after modification of a component or system, to ensure that the alteration doesn't produce unexpected results.
❑ This testing is also carried out for tracking the quality of the outcome. Like for instance, checking if the design has a legit code size.

❑ Therefore, it aids two tasks: fixing a bug that failed, and dealing with the introduction of a new bug on fixing an old one.

❑ So its applications include places where validation of software takes place after modifications.

❑ Some common regression testing tools include QTP, Selenium, WinRunner, Regression Tester, etc.
Usability Testing
❑ Usability testing checks if the designed product is meeting its intended purpose. This is usually done by testing the product on users.

❑ Test cases or scenarios linked to usability testing demand for creation of situations wherein a person is made to test the product, while the testers observe and take notes. Then, the person's feedback is considered, and if it doesn't fit in the required set, changes are made accordingly.
❑ They have pre-built test scenarios, questionnaire sets, and scripted instruction sets for taking feedback from users against the software being tested.

❑ So, usability testing checks the user-friendliness of the software, if it is meeting the requirements, if it would be easy for the client to learn and work on it, etc., spanning a broad range of applications.

❑ This is usually performed towards the end of the functional testing phase.
Unit testing and integration testing are also involved in the phases of functional testing. However, these should not be perplexed to be its types. Unit testing is testing the functionality of the units or components separately, checking if the code maps the design requirement, on the lines of white box testing, and hence, it is usually done by developers, not software testers. Integration testing involves testing of these unit modules combined and checking for the functionality and reliability of the design.