Functional Testing refers to the type of testing which ensures that all functional requirements are met without any consideration to the final program structure. Functional Testing confirms that the application under development is capable to deliver as per user requirements. Functional Testing emulates the actions performed by the user and ensures that all execution paths are operating perfectly as desired in addition we are able to get the desired for the inputs supplied to the system.
Following Six types of functional testing can be deployed to ensure the good quality of the final product.
1) Perform Unit Testing & ensure proper execution of each & every line of the code:
The software developers tend to design the code in isolation. When there is absence of pair programming, full code reviews & highly experienced developers, there is bound to be the possibility of inclusion of defects in the new code. Such defects if not detected during early stages of SDLC are quite difficult as well as expensive to detect later on as the project moves.
Hence a strong unit testing process is the backbone of the testing process, upon which the entire reliability of the product depends. Unit testing refers to the process of testing each & every unit of the code going down to the single component level. The developer during the development of the component does the unit testing. It is the responsibility of the developer to ensure that each & every part of the code is logically correct. Unit tests usually provide following type of coverage:
Function coverage: Ensures that every function or method is getting executed by at least one test case.
Statement coverage: Ensures that every line of the code gets covered by a minimum of one test case.
Path coverage: Ensures that every possible path through code gets covered by a minimum of one test case. There can be more number of test cases if need be.
Unit testing helps the developers to regularly ensure that every unit of code performs as expected. Unit tests are modified on continuous basis as the evolution process of the software continues. This helps in maintaining an updated documentation as well.
2) Perform Functional Testing & ensure expected results from every function:
As a part of the testing strategy all expected outcomes must be confirmed by functional testing.
All the function points of various lines of code must yield expected outcome which must be in line with the functional specification described in the specification document.
Functional testing takes care of all concerns revolving around the proper implementation of functional requirements. Commonly known as black box testing, it requires no prior knowledge of the basic code.
Functional test cases are created from requirement use cases wherein every scenario becomes a functional test. As the individual software components get implemented, after successful unit testing the corresponding functional tests are employed on them.
For some software projects, it is not feasible to test every functional aspect. Instead of that appropriate functional testing goals are defined. Critical and commonly used functions are prioritized according to the limitations of resources & time.
3) Perform System Testing & ensure delivery of desired result from all the functions combined together:
Various functions combine to form systems responsible for the delivery of the ultimate results, as described in BRD (Business Requirements Document). Aim of the entire testing is to comply with the requirements described in BRD.
System testing performs functional tests end-to-end, which cover all software units. The primary goal of such activity is to ensure that all the components are clubbed together to deliver the expected business results. While defining system-testing goals for the project, special focus is made on all scenarios requiring integration of the critical units.
While system testing suitable decision is made as to whether to test all subsystems first or whether to test all items of a single subsystem before combining with another subsystem.
Generally abrupt moves to combine various components together are avoided. After testing every component independently they are integrated increment by increment.
4) Perform Regression Testing & ensure that the changes have not produced any adverse affect on any other portion of the system:
Every new change in an existing system has a high probability of adversely affecting other functions in it. After making the changes, defects are likely to get introduced even after testing & deployment. Compliance with business objectives always remains the primary goal of testing.
Regression testing ensures that the modifications made to the code have not inadvertently introduced the bugs into the system or changed its existing functionality. Primary goals of regression testing are to demonstrate that the existing functionality does not get altered & the system behaves as desired.
It is difficult to make a judgement on the extent of adequacy of regression testing. In fact it is not preferable to test the whole system again & again, however critical functions are tested irrespective of the place where changes had been done in the system. Regression testing is very important & must be repeated frequently to ensure that the baseline quality of the software is always maintained.
5) Perform System Integration Testing & ensure that it integrates properly with other parts of the system without any adverse effect:
Having satisfaction of proper function of the system independently, it should be demonstrated to function well & in synchronization with other associated systems as well. We must ensure that all the systems must properly integrate with each other so that each one of them is capable to meet the requirements of business objectives described in the BRD.
System integration testing process checks as to whether the software is interoperable and it cooperates with other applications. It involves defining the goals of testing, which will exercise the desired communication. There is no need to test the interaction between various systems, which are not expected to collaborate after the installation of the developed system. System integration testing process uses process flows, which are aimed at encapsulating the whole system.
It is essential to define testing goals to help enable coexistence of the developed system with existing applications with a view to detect faults in their integration.
However for new independent software having no issues of compatibility with any other system, there is no need of going in for system integration testing.
6) Perform Acceptance Testing & ensure total customer satisfaction with the system:
The goal of customer satisfaction is undoubtedly the most important one. Companies maintain Information Technology Wings to solve their day to day problems & to provide solution to meet their corporate objectives. The goal of testing to achieve customer satisfaction is aimed to ensure that all the requirements stand true to the customer’s expectations.
Acceptance testing process is aimed to test the ease with which the users can interact with the system, what the system does when the user expects something & how much the system is easy to use.
Although Acceptance testing is the final phase of software testing before its deployment, the Acceptance Tests must be defined during the early stages of the SDLC.
An early freezing of requirements of acceptance tests helps to ensure that customer expectations are understood properly & ensures that for the activities of all the designers are directed towards satisfying the end user’s requirements. Thus user requirements form the basis for the development of acceptance test cases, which are validated in tandem with the actual end users of the product. It is very crucial phase of testing, since here the end product gets accepted or rejected as a result of acceptance testing.