Learn what is Dynamic Testing in this tutorial to validate the output results for provided inputs with Dynamic Testing techniques:
As you know, Software Testing is performed to improve the quality of the product by finding errors at every stage of the development cycle.
V-Model of SDLC explains that testing usually begins at the very early stage of the development lifecycle. V-Model describes the 2 V’s of Testing, 1) Verification and 2) Validation. These two V’s pretty much cover the testing types and phases in the SDLC.
Verification: It is also known as static testing and does not require the execution of source code.
Validation: It is also known as dynamic testing and requires the execution of source code to validate the output results for provided inputs.
In this tutorial, we’ll learn about Validation i.e. Dynamic Testing.
What You Will Learn:
What Is Dynamic Testing
- It is the kind of testing that uses the dynamic behavior of the code to test the quality of the software. Source code should be compiled and executed for performing dynamic testing.
- The main aim is to make sure that the software works as per the requirements for different sets of inputs and gives the required outputs.
- This testing helps in achieving a stable application without any major flaws and also ensures consistency throughout the software.
- It checks the software for functional and non-functional behavior and determines its quality.
- With reference to the V-Model, this testing is done after the coding phase of the development cycle, as shown below.
What Can Be Tested
Dynamic testing is about executing the code for different inputs and getting the outputs. Before the testing phase starts, the test cases with inputs and expected outputs are already prepared during the early stages of the life cycle. These test cases are then executed as part of this testing.
Dynamic testing includes:
- Unit Test Cases
- Integration Test Cases
- System Test Cases
- User Acceptance Test Cases
- Memory-related Test Cases
- Performance Test Cases
- Platform-based Test Cases
Dynamic Testing Techniques
Since this testing type deals with the execution of the code, there are mainly two techniques of dynamic testing based on whether the tester has knowledge of the source or not.
These two techniques are:
- Black Box Technique
- White box technique
The Black Box technique can be further divided into functional and non-functional testing, as shown in the below image.
#1) Black Box Testing
It is the type of dynamic testing where the tester does not have any knowledge of the codebase. This testing is completely based on the software requirements and design specifications.
As part of Black Box Testing, initial requirements are analyzed and test cases are created for different sets of input with expected outputs based on the requirements. These test cases are then executed and if the expected output for a particular input does not match the actual output, a bug/error is reported in the software.
Black box testing can be further divided as follows:
a) Functional Testing
Functional testing describes “what” the system does and “how” it functions. It checks the functionality of the system for inputs and examines the outputs.
Functional testing ensures that the Software has all the required functionalities that are specified within the functional requirements. It also examines that actual output matches the expected output for the specific input. This type of testing involves evaluating and comparing each function of the software with business requirements.
Functional Testing of the software has different levels as shown below:
- Unit testing: The unit is the smallest testable piece of code. This testing is usually done by developers to test their methods, functions, or classes in the code.
- Integration Testing: This testing is performed when multiple units of the code are integrated together to perform a bigger function.
- System Testing: It is end-to-end testing after all the modules are combined. It is performed to ensure that the system works as per the requirements. This is performed when a complete system is ready.
- User Acceptance Testing: This is performed to check if the system meets all the business requirements and is ready to use for the end-users.
b) Non-Functional Testing
Validating the application based on non-functional aspects like performance, load, usability, accessibility, reliability, memory usage, etc. is known as non-functional testing. This type of testing helps in identifying the risks of space, performance, and multiple user logins in the system even before the production release, thus, it is cost-effective.
Non-Functional testing also ensures the efficiency, security, and reliability of the application. Hence, it is as important as functional testing to make the application as a whole a quality application.
Non-Functional testing has different levels to check the software. These levels are as below:
- Performance Testing: This testing is to check whether the application under test responds within the expected time limits when a user action is performed.
- Recovery Testing: This testing is to check how the system behaves in case of crashes, shutdowns, or system failures.
- Compatibility Testing: This testing is to ensure that the quality of the application is not compromised across different platforms and it works as expected for different hardware and software configurations.
- Security Testing: In this testing, the software is tested for any unauthorized access, to make sure that only legit users can use the application.
- Usability Testing: This type of testing checks the user’s comfort to use the application. So that users don’t struggle when trying to use the application.
#2) White Box Testing
White box testing is the dynamic testing type where the tester has knowledge of the source code and tests it by executing the code. This type of testing is also known as clear-box or glass-box testing. This testing is based on the inner working of the application and revolves around internal testing. White-box testing helps in testing each statement, object, or function in the source code.
White box testing is pretty much covered by the data flow or control flow testing as explained below.
Data/Control flow testing:
It is the testing type that decides the strategies based on the program’s execution paths and how the control flows within the program. This testing focuses on the points in the source code, where a variable is initialized and used.
The source code uses the variables to pass the data within the program. The variables and their values decide the control flow within the program. Thus, this type of testing focuses mainly on the variables in the program and targets the following issues in the source code:
- A variable that is declared but not used
- A variable that is used but not declared or initialized
- A variable that is defined multiple times before it is used
- A variable that is not de-allocated at the end of its use.
Data flow testing helps in identifying if an execution path is broken and data is not flowing to the next component. It also helps in identifying infinite loops where the program keeps on executing and also the dead code where the program cannot reach.
Recommended Reading =>> Black Box Testing Vs White Box Testing
Advantages Of Dynamic Testing
Some of the advantages include:
- Reveals the defects not covered by static testing.
- Tests the actual working software end to end.
- Helps in identifying weak links in the runtime environment.
- Data/control flow analysis checks the code functionality.
- Helps in increasing the reliability, security, and usability of the application.
Disadvantages Of Dynamic Testing
Some of the disadvantages include:
- It is time and resource-consuming as the execution of the software needs lots of resources.
- It is done in the later stages of the development life cycle; hence, fixing the defects identified by this testing is costly.
- It is difficult to trace the vulnerability in the code.
Suggested Reading =>> Static Testing VS Dynamic Testing
Two V’s of testing, Verification, and Validation are the quality checks of the software. Dynamic testing or validation helps in detecting the defects, whereas static or verification testing is inclined towards the prevention of them. These two types of testing are complementary to each other and thus lead to better quality software when combined.
We hope you liked this tutorial. Don’t forget to read our tutorial on Static testing too.