What is Functional Testing?
FUNCTIONAL TESTING is a type of software testing that validates the software system against the functional requirements/specifications.
The purpose of Functional tests is to test each function of the software application, by providing appropriate input, verifying the output against the Functional requirements.
Functional testing involves both black box testing and white box testing, and it is not concerned about the source code of the application.
Refer: What is Functional Testing? Types & Examples (guru99.com)
What is Non-Functional Testing?
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.
- Accessibility testing
- Baseline testing
- Compliance testing
- Documentation testing
- Endurance testing or reliability testing
- Load testing
- Localization testing and Internationalization testing
- Performance testing
- Recovery testing
- Resilience testing
- Security testing
- Scalability testing
- Stress testing
- Usability testing
- Volume testing
- Testing Approaches
- Black box testing
Black box testing involves testing a system with no prior knowledge of its internal workings. A tester provides an input, and observes the output generated by the system under test. This makes it possible to identify how the system responds to expected and unexpected user actions, its response time, usability issues and reliability issues.
Black box testing is a powerful testing technique because it exercises a system end-to-end. Just like end-users “don’t care” how a system is coded or architected and expect to receive an appropriate response to their requests, a tester can simulate user activity and see if the system delivers on its promises.
White Box testing
White box testing involves looking at the structure of the code. When you know the internal structure of a product, tests can be conducted to ensure that the internal operations performed according to the specification.
Unit testing
White-box testing is done during unit testing to ensure that the code is working as intended, mostly it is done by developers.
Integration testing
White box testing at this level is written to test the interactions of interfaces with each other. Mostly it is tested after packing the application.
Regression testing
White-box testing during regression testing is the use of recycled white-box test cases at the unit and integration testing levels.
Grey Box testing
As Gray-box testing is combination of white-box and black-box testing, it serves advantages from both the testing’s
A test is designed based on the knowledge of algorithm, architectures, internal states, or other high -level descriptions of the program behavior.
Testing levels
Unit testing
These types of tests are usually written by developers as they work on code (white-box style), to ensure that the specific function is working as expected. One function might have multiple tests, to catch corner cases or other branches in the code. Unit testing alone cannot verify the functionality of a piece of software, but rather is used to ensure that the building blocks of the software work independently from each other.
Integration testing
Integration testing works to expose defects in the interfaces and interaction between integrated components (modules). Progressively larger groups of tested software components corresponding to elements of the architectural design are integrated and tested until the software works as a system
System testing
System testing will happen once after the Integration testing in way to identify the behavior of the system using Destructive, Nondestructive and Fault injection
Acceptance testing
Acceptance testing is done at the final stage before delivering it to client or deploying it by SME to identify the below conditions are met
User acceptance testing (UAT)
Operational acceptance testing (OAT)
Contractual and regulatory acceptance testing
Alpha and beta testing
Testing techniques
Equivalence Partitioning
Testers can divide possible inputs into groups or “partitions”, and test only one example input from each group.
Boundary Value Analysis
Testers can identify that a system has a special response around a specific boundary value.
Decision Table Testing
Many systems provide outputs based on a set of conditions. Testers can then identify “rules” which are a combination of conditions, identify the outcome of each rule, and design a test case for each rule.
State Transition Testing
In some systems, significant responses are generated when the system transitions from one state to another.
Error Guessing
This technique involves testing for common mistakes developers make when building similar systems.
Fool proof
This technique is to make sure the software is well designed, easy to understand, or easy to use that it cannot go wrong or be used wrongly by the end user. Any misuse should be handled to keep the system consistency.