Let’s be honest there are many types of testing in software engineering and it just might get a bit overwhelming too. Manual testing and automation testing are based on the types of tools you are using for testing so they don’t count here. When we speak about software testing, we primarily are talking about functional testing and non-functional testing. Now, non-functional testing also has many names of its own such as structural testing, implementation testing. Here, we will be referring to it as structural testing because this is the most apt name for it!
The first step in the software development process is requirement gathering. So, when we are developing software, every piece of component is there to serve a specified purpose. And testing that it solves that purpose for which that component is developed for comes in functional testing. When a tester is saying that it’s doing functional testing, it is going to design test cases to ensure that software is reliable enough. Also, to test the purpose one only looks at the output and not focus on how the code works, basically like a user. This means for functional testing, a QA is doing black-box testing.
Here, we are going to discuss the following types of functional testing: Boundary value analysis, Equivalence class or Equivalence partitioning testing, and Decision table testing.
Now, once you have tested that code is serving the purpose for which it was developed for then you look at other factors like performance and reliability that come under Structural Testing. Say you developed a login page. For functional testing, you entered the correct username and password and checked on all possible cases where it could fail as if the input is empty, or the password is empty, etc, etc. Now, to take your software at another level of security you would try to send 10 login request attempts from the different systems at the same time, you would do load testing, speed testing and everything else that is part of structural testing.
For basic functional testing, tester even not need to know how the code works and could complete his basic testing on just test cases using automation tools but for structural testing, because it’s about performance. QA must know how the code works, and dive deep into it because every code has a potential of improvement! So, that’s a white box testing we are looking at.
Here, we are going to discuss the following types of structural testing: Path testing, Data flow testing, and mutation testing. So, let’s begin with the part of different types of testing in software engineering.
Functional testing types:
1.Boundary Value Analysis
Boundary Value analysis black-box functional testing technique where the code must pass the test cases developed based on the range the code works in. Example: For a form, the validation of the input field for amount would work as if the input is negative, the input contains decimal more than 3 floating points the input would be incorrect.
2.Equivalence class Testing
Equivalence class or Equivalence Partition Testing, we divide the sample of test cases into similar cases. If one sort of input is giving correct results then similar too would.
For Example: To upload a file if the user is able to upload .jpg, .doc, .pdf then he would be able to upload .png, .docx and similarly.
3.Decision Table or Cause-Effect Testing
All the types of testing in software engineering, you are primarily focussing on developing test cases and the simplest way to test the functionality of a system is to make test cases based on all the possible yes and no combinations. If and else methodology or Cause-effect testing is one such black-box testing technique.
Test case output
If username is incorrect Error message
If username is empty Error message
If password is incorrect Error message
Both are correct Success message
Structural Testing types:
Path testing ensures the flow of code is working properly and all the possible way the code is handling the error. This is most used in exceptional handling say a code breaks at one point, then irrespective of that other modules should be robust to function properly. A Robust piece of code is the necessity nowadays and path testing ensures that.
Example: Say a user is uploading 10 documents in place of one and code keeps on getting an exception, the user should get an output of to resubmit the form and further processing of form for payment should not be done.
2. Data Flow testing:
If a tester is testing the flow of data, he focusses that correct data is being saved, stored and process and referred to as.
For example: on saving date but the user at the backend time also must be saved so that in future if a report needs to be generated we have a better understanding. Data flow is ensuring that correct data have been in the system, which improves the scalability of code and is among the efficient white box testing technique.
In mutation testing, a small piece of code is changed(mutant) to be able to identify the errors.
For Example: If say a user enters in a mandatory amount field as 0.00, and the entire processing is done on that is incorrect code and a bug hence, at backend tester tests all possible inputs that could be wrong and limiting bugs in the code itself. Mutation testing helps in identifying the possible bugs that can creep into the system.
Hope, this would have cleared your doubts regarding types of testing in software engineering. Do, check out similar blogs section.