What would you think if you saw the phrase “complex research automated black-box testing?”. Most likely, you would find it ludicrous. But if you break this phrase into pieces, you will get what it is about. To fully understand the meaning, you need a precise system of testing types and methodologies in your mind, but achieving this may be a problem.
There are a lot of articles about testing on the Internet, but most of them describe methodologies and types of software testing without solid classification.
For example, some articles describe the process of testing only from the management point of view, without diving into testing types. The problem is that these posts do not provide a single picture of testing methodologies, which can be confusing.
SENLA’s team is starting a series of articles in which we will discuss various types and methodologies of testing. We want to systematize all testing methodologies and types so that our articles give you a clear picture of the testing landscape.
The Difference Between Software Testing Methodologies and Types of Software Testing
The first thing you should know is that there are multiple testing methodologies (e.g., Agile, Scrum), and they describe the testing process with respect to project management.
The second thing is that there are many types of testing (e.g., smoke testing), which describe the technical side of the testing process.
The classification of these testing types can vary depending on your perspective. For example, if you want to define the types of testing with respect to execution time, you will get one set of testing approaches. If you want to define types of testing regarding levels of testing, you will get another.
In this article, we will discuss the main testing methodologies which are used by internal QA teams or software testing companies. We will also look at the main types of software testing from the point of view of testing objectives. These types all divide into two major groups: functional and non-functional testing.
The Main Software Testing Methodologies and Approaches
Here are the most popular and well-known testing methodologies, explained step by step.
Like some other methodologies on our list, the Agile model can cover not only the sphere of testing but also software development and even marketing.
Software testing methodologies based on the Agile approach usually consist of a sequence of short iterations called sprints.
They are conducted by small working groups that take into account new testing requirements. Each sprint includes stages such as planning, requirements analysis, and testing.
Experts use the Agile approach to reduce risks because with each new iteration a team can take into account the experience of the previous one.
For example, if you understand that some part of the product contained more bugs than predicted.
During the next iteration, you can devote more time to this part of the product and test it more thoroughly.
You may also hear about a popular working model called Scrum. Scrum is a part of the Agile methodology and is also based on sprints.
Each sprint in Scrum ends with a review meeting where team members discuss progress and plan future testing sprints.
This model is built on a team’s step-by-step progress during the testing process.
First, a whole project is documented and planned. Then, a team of testers makes small steps, one after another.
Each step can’t be taken until the previous one is completed.
One of the main advantages of this methodology is that it’s relatively simple.
The disadvantage is that the team is not able to make fast corrections to the testing process, because it is regimented.
Verification and Validation Methodology (V-Model)
This method is a step-by-step model of software testing.
The main distinguishing feature of this approach is that the development process happens in parallel with the testing process.
As soon as a particular stage of development finishes, the team immediately starts testing a ready-made part of the product.
This approach allows teams to make changes to the product at an early stage and save time and resources in the future.
The incremental testing process consists of multiple iterations. Each of these cycles includes several parts. Each iteration adds value to the product such as new useful features.
Usually, this model consists of three stages: design and development, testing, and final implementation.
The main advantage of this methodology is that it is rather flexible, so a testing team can quickly make edits into the testing process.
This approach can be considered a part of the incremental software testing methodology.
It also consists of cycles that follow one another. They are planning, risk analysis, engineering, and final evaluation.
Each cycle begins when the previous one ends. Also, after the last stage of each cycle, teams get immediate test feedback, so the quality of the product remains high.
This model allows testing teams to quickly find errors and, more importantly, their causes.
XP (Extreme Programming) Methodology
This methodology is based on close cooperation between two testers. One team member works with the code and the second team member immediately reviews it.
Each stage of this test method can be considered complete once a piece of code is written and tested.
This approach allows teams to create a high-quality code because every line of it is checked very carefully.
Now let’s discuss the types of testing regarding testing objectives.
Functional Software Testing
Functional testing helps teams check their products against business objectives and specifications. It does not deal with the technical side of the product, such as performance, security, etc.
This testing type (not methodology!) also helps check that each module of the ready-made solution behaves as planned. Often, functional testing is based on cases given by the business analyst or the design team.
Imagine that you developed a SaaS application to allow storing photos with a feature that permits connecting the cloud to TV sets. In this case, functional testing would help you make sure that the app allows the user to store photos and watch them on TV. You would also be able to understand in more detail whether the app meets the customer’s requirements and show the client’s team the test results.
We should also note that functional testing can be divided into three software testing levels.
Let’s now discuss each of them.
Software testing levels
Smoke testing (build verification testing, intake testing) is a test of your application’s most important functionality. The testing team needs to understand whether the system’s most vital features are working as planned and whether they perform the functions assigned to them.
In the example of the app for storing photos, this could be a check of modules responsible for uploading and storing user images.
Critical Path Testing
This methodology is aimed at the analysis of functionality employed by users during their typical daily actions.
Teams conduct extended tests to explore all the features that fall under the customer’s business requirements. On this testing level, experts should verify even low priority features.
If customer wishes or requirements are not met, you will have an opportunity to redo a specific part of the product.
Non-Functional Software Testing
Non-functional testing helps testing teams check their products, particularly in the areas of performance, reliability, security, and usability.
This doesn’t involve testing the system’s functions; it includes testing of system operation. Nevertheless, this testing type is no less significant than the functional one.
For clients, it is critical to know that products not only perform the assigned functions but also work stably and seamlessly.
For example, suppose you developed a tool that helps physicians provide medical services remotely. In this case, non-functional testing will help you make sure that the app is stable and does not lag under heavy user load.
Now let’s analyze the main non-functional software testing types, their characteristics, and goals.
Main non-functional software testing types
1. Performance Testing
You can probably guess what this type of testing is aimed at: checking the performance of the product (speed, scalability, and stability).
This type of testing can be divided into several subtypes:
- Load Testing
This testing type helps you analyze the app’s work under expected user load. In other words, it allows testing how the application runs with standard user demand.
For example, our team carries out load testing by changing hardware resources and the amount of load, then looking at the indicators and test results. First, we analyze the solution’s statistics and load profile, then we plan and develop the testing process. After preliminary work on the adjustment of hardware and software resources, we create and generate test data. Then we configure the monitoring and development tools and fine-tune multiple load scripts. Finally, we conduct testing and analyze the results.
- Stress Testing
This includes testing how the application works under high load or in other challenging circumstances.
Consider bending a stick to find its breaking point. During stress testing, you do the same thing with the product. Based on the results, you can optimize the product and make it more stable when dealing with extreme loads.
- Endurance Testing
This type of testing can help you see how long an application can run at average load, and whether it is stable over an extended period. Can the app work in a normal mode only for a few hours before lagging or crashing? Endurance testing will help you find out.
- Spike Testing
This is a test of how the product behaves when there is sudden and unexpected user load. Spike testing will show you whether the product withstands the demand or crashes, so you can make necessary adjustments.
2. UI Testing
This relates to the application design. It helps testing teams determine that all elements of the interface work as expected.
For example, teams can understand whether toolbars, icons, and buttons respond to user actions.
You can also understand whether fonts, sizes, and content are in a good shape and whether the app’s interface resembles an initial plan.
3. Security Testing
Running security tests lets you find out whether the app can withstand hacker attacks or discover if it contains any loopholes.
This is one of the most important types of software testing because user data is at stake.
Whether you developed a tool for processing credit payments or an app for shopping in an online store, the safety of the end product will always be a top concern for your clients.
4. Configuration Testing
Your team can apply various configuration options to check the behavior of the product with different parameter sets.
This is important because it is possible that while making adjustments to the default app setup, the user can cause the whole program to stop working.
5. Compatibility Testing
This type of software testing helps determine how systems behave with other software, network environments, or web servers.
For example, is the application compatible with Microsoft products? Is it possible to integrate the system with Salesforce solutions? You will be able to answer these questions through compatibility tests.
6. Localization Testing
This involves analyzing localized versions of your application to make sure that the system runs well with local settings for users from different regions.
What if your application doesn’t work correctly for users in China? What if users from Russia cannot access your service because of language issues?
Such problems can harm your clients, so it’s better to run localization tests thoroughly. Also, some problems can arise if a team has to test the localization of products for exotic regions.
For example, SENLA’s team once ran localization test for products compatible with the Thai, Vietnamese, and Khmer languages. In this case, we closely cooperated with the client and provided them with the necessary translation templates, which were checked element by element. It was a long and meticulous process, but it helped us achieve the testing goals successfully.
7. Usability Testing
Usability testing helps you understand whether your tool is user-friendly and convenient. It also allows seeing whether people quickly learn how to use the program or its modules. Based on the results of these tests, you can improve the interface of your app and make it more understandable for newbies.
The main software testing methodologies are the Agile model, the Waterfall model, V-Model, the Incremental model, and XЗ. Each has advantages and disadvantages.
The main types of software testing from the perspective of testing objectives are functional testing and non-functional testing.
The first type is responsible for the product’s compliance with business requirements, and the second for the product’s overall performance, security, and usability. Both types of testing can be divided into smaller types, depending on the needs of testing teams.
In the next articles, we’ll look at other types of software testing. We will talk about types based on different testing levels or types that diverse chronologically.