With so much software released every day, testing is a phase that cannot be left out. Here are only a few reasons why:
- it detects bugs and errors;
- it checks the adaptability of the product;
- it helps to avoid risks and extra costs;
- it earns customer loyalty.
In this light, application testing is like health insurance – you don’t think you need it until you receive a pretty hefty bill from the hospital.
Based on the World Quality Report and Software Testing Genius the universal recommendation for the budget spent on software testing is not less than 25% of development costs. However, it may depend on many factors like the size of the project, software development methodology, or types of software testing you plan to use, etc.
There is a vast deal of software testing types and classifications that may be quite confusing for business stakeholders and Product Owners.
That is why today you find out about the common types of software testing that we use on a daily basis that helped us get dozens of amazing products off the ground!
So, let’s dig deeper and find out more.
Main types of software testing and what you should know about them
The first and basic classification of software testing you should know about is based on the level of its automation and includes manual and automated testing.
The first difference between them is quite obvious – manual testing is performed by a real person without using any automated tool. In this case, the QA Engineer acts like an end-user and tests the product to identify any unexpected behavior or errors.
Automated testing, on the contrary, is performed by means of automated tools that allow Test Automation (TA) engineers to create scripts which simulate human actions.
It gives an opportunity to run a number of tests again and again without a need to execute them manually.
Both of these types of testing have their pros and cons. So, before you decide which of them to use to reach the top results, it’s worth knowing more about each of them.
Manual or Automated testing: which one you need?
Manual testing has proven itself for decades as an effective approach to testing software. The main benefit is the exact imitation of user behavior with the web or mobile application. In such a case the human tests the user-friendliness of the solution identifying drawbacks in user journey that can not be detected by automated tools.
It also allows handling custom-shaped use case situations and testing small changes on the go. Nevertheless, the manual approach has its weak points, namely:
- it requires more time for testing: Quality assurance teams have a lot of work to do including preparing data sets and test scenarios, executing all the steps, and verifying the actual results.
- it requires more people: most business owners think they save money with manual testing but forget about the costs of hiring a strong QA team able to execute the work similar to automation tools.
it does not exclude errors: testing doesn’t exclude human errors. One mistake during the testing process can force a restart of the testing scenario.
- it is not able to perform 360-degree testing of the solution: some testing types cannot be done manually. For example, stress testing, aimed at checking the system behavior under high load requires creating thousands of requests in a short period of time.
Automated testing, on the other hand, avoids human errors. Additionally, testing is done quicker and developers receive the feedback faster that positively influences the project productivity.
By the way, complicated scenarios are not a problem to test automation, as well as stress testing. The test suite (a number of test cases aimed to test the app) can imitate thousands of requests at the same moment that is impossible for manual testing.
Test automation presupposes writing tests programmatically by means of a testing framework that suits the application. There are plenty of frameworks for each language, so it requires some research. The best way is to discuss all the options with your QA team to determine the best framework for your project.
It might seem that test automation is a universal tool when this refers to software testing, but it also has its drawback. Some scenarios just cannot be automated. This includes visual or user experience errors. Finding errors in user experience requires a human eye.
So, what type of testing to choose?
The best choice is a happy medium.
If you need effective and in-depth test coverage you have to apply a combination of two. Test automation helps testers to test faster and better, but it can never replace a human eye.
Moreover, when you switch to automated tests only, you draw attention away from judgments and problem-solving that lay on the basis of the quality of the testing.
Here at MindK we believe that “quality is not an accident, it is always the result of high intention, sincere effort, intelligent direction and skillful execution”.
We take great care of software quality, all the products we build are guarded by our Quality Assurance Team at every step of development flow. We provide software testing services, both manual and automated testing, and ensure that the product functionality meets the client’s requirements and gives pleasure to end-users.
Besides classification by the level of automation, on a broader level, testing is also classified depending on its objectives into functional and non-functional.
Key pillars of software quality: Functional and non-functional testing types
Functional testing deals with functional specifications or business requirements. It tests whether the behavior of the system meets business specifications, including business processes, searches, APIs, user interface, data manipulations etc.
Here is an example.
You have an app that gives people access to a large number of online courses for a subscription fee. To pay a fee, you navigate to the billing page, enter all the required information and confirm the transaction. Your primary goal is to find out whether the bill payment functionality works correctly. Attention is not paid to the speed of application, how it is affected by the number of users, the security aspects, etc.
The main advantage of this type of testing is the fact that it imitates real system usage and is done in conditions close to the user’s ones.
Traditionally, functional testing goes before non-functional testing and may be either manual or automated.
The different types of functional testing involve:
Unit testing. It is almost the basic type of testing that refers to testing the smallest testable parts of the solution independently. The main idea of this type of testing is that if parts work correctly on their own, they most likely work together as expected.
Unit testing as a rule is automated and performed by developers because it requires deep knowledge of the internal design and code. However, sometimes it can be done manually. The reason why unit testing is important is the fact that the cost of fixing a bug revealed during unit testing is lesser than errors detected at further levels of testing.
Integration testing. If the unit testing deals with each part separately, integration testing checks how individual parts or units function as a group. It is aimed at revealing errors in the interaction between integrated units. It usually follows the unit testing when all the parts are tested and combined.
System testing. Here the entire system is tested as one single unit. It is crucial as it verifies the solution meets both technical, functional, and business requirements. We perform system testing when all the parts have been developed and successfully passed integration.
Smoke testing. It is performed to assure a new build of the software is ready or stable for further testing. It is one of the important functional testing types as it verifies whether the crucial features are working properly so that the QA team can keep on testing the solution. If the smoke testing fails then the build is returned to the development team.
Let’s review it better with an example.
Not long ago we built a platform for a leading consulting agency that advises top Norwegian companies and employees on pensions and insurance. Due to the fact that we follow continuous testing, we test each build after its development. When the developers finished the “My page” functionality (personal page of the user where he can get all the pension calculations) they passed it to QA for testing. The QA team examined that there are a great number of test cases to cover all the scenarios.
This where smoke testing comes into play.
Instead of testing all the features at once, we started with testing only crucial ones including user log in, entering data for personal calculations, etc. For example, if a user cannot input the data for calculation then there’s no sense of further testing. It saves time both for QA and the development team and enhances overall productivity.
Regression testing. It is an essential stage for any software product as it helps determine the stability of the system with the changing requirements. Its main aim is to verify that code changes did not influence the existing functionality of the app.
Sanity testing. It is a subset of regression testing. Sanity testing is quite similar to smoke testing and that is why it is often misunderstood. To understand the difference here is an intuitive diagram:
The key difference as you can see is that while smoke testing checks the critical features, sanity testing is aimed at verifying the new functionality like bug fixes.
User acceptance testing (UAT). It is almost the final phase of functional testing that is performed after functional, integration and system testing is completed.The main goal of this test is to check the compliance of the system with the business requirements and whether it is acceptable for delivery. As a rule it runs in a separate environment having data setup similar to production and done by clients and users. It is very important as developers create software based on requirements with their “own” understanding that might differ from the actual client needs.
Functional testing will assure you that all the functionality works as intended and the app will allow you to pay the bills, but that’s not all. The behavior of the product is as important as its functionality. It is exactly what non-functional testing is all about.
So, let’s move on to non-functional testing and its peculiarities.
Non-functional testing verifies non-functional aspects of a software product like performance, usability, security, flexibility, reliability, etc. (which were not covered by functional testing) are working well.
An effective non-functional testing is the key success factor in satisfying customer expectations.
When a product follows the client’s needs and works effectively under various circumstances, it is considered a reliable one.
Let’s review the major subtypes of non-functional testing.
Performance testing. Its aim is to check how the system is able to work under various workloads. The confidence of the end users in the application always depends on non-functional testing, so keep that in mind when deciding on testing types for your product. The performance testing falls into:
- load testing that examines the behavior of the app under maximum workload.
- stress testing that checks how the system works beyond the limits of its expected load.
- spike testing evaluates the reaction to sudden and substantial load increases. It also helps to find out the system recovery time.
endurance testing is designed to identify issues that may occur with prolonged execution of the system.
Security testing. Security testing is one of the most important parts of non-functional testing. It checks that the system is secure and not defenceless to any external threats, data loss or any other assets.
Usability testing. It is all about user-friendliness of the system. It studies how the users interact with the functionality of the system in order to complete tasks. The main objective is to uncover areas of confusion in order to sharpen the overall user experience. Usability testing is exceptionally important with new software products or design updates.
Compatibility testing. It is designed to make sure the system works as expected on different types of hardware, databases, operating systems, and screen sizes. The system might also be impacted by different versions, resolution, internet speed, configuration etc. That is why it’s crucial to check the solution in all possible manners to minimize failures, embarrassments and nerves.
Localization testing. The main goal is to verify the solution is customized and behaves according to the culture of the country where it is available. As a rule it is done for apps that are available in several languages. That is why it mostly deals with the content and the user interface.
For example, one of our long-term partners Reputation.com, who provides a platform to manage the reputation of various companies in the United States, has a multilingual web portal available in English, French, German or Spanish languages.
The localization testing in this case involves checking whether the default language, date and time formats, currency, etc. are displayed properly.
How to define which testing types should be used?
The above-mentioned types of software testing are just a part of the toolbox of an experienced Quality Assurance team. Remember that not all testing types are used in all types of projects. Here you have got acquainted with common types used in most testing life cycles.
Generally, the testing strategy is defined by your software partner, namely, development and QA team. It depends on the project itself, the type of the solution you are building, software development model, and project requirements (for instance, safety and security related solutions always require rigorous QA strategy).
We provide quality assurance services and QA outsourcing for around ten years now. In MindK, the testing strategy is developed by the Quality Assurance Lead (QA Lead ) for each project individually. It is included in the project proposal and estimation so you are aware what types of testing would be used for your product.
So, when building a product, don’t skip the testing phase. Life is already full of risks, but with good planning and a good testing strategy you can mitigate most of these risks. Risk mitigation is what quality assurance is all about.
If you need help in software testing or only plan to start developing a solution, don’t hesitate to contact us. We know how to help you.