< Back to blog
PUBLISH DATE:
UPD:
OlegOleg RomanyukHead of Inbound Marketing

How to Find Your Way Around Different Types of Software Testing?

Let’s identify automated and manual, scripted and exploratory, functional and non-functional testing types and all their subtypes

Ignoring Quality Assurance is so easy. Why would you spend time and money making sure that you did everything right? You could just click through the app, make sure that everything works well, and push the app forward to the market.

Types of QA

When a chef works on a new menu, he tastes each new recipe to make sure that it is impeccable. When a crew prepares a plane for the takeoff, the airport maintenance team conducts a walk-around, while the pilots conduct pre-flight checks in the cockpit. When a surgeon prepares a patient for the operation, he assigns blood tests, CT scans, allergy tests, and other medical checks. Each business process highly relies on Quality Assurance and Control. Why should the software industry be an exception? 

Alright, why to conduct software testing seems like an obvious question with an obvious answer. What is more difficult is which types of QA testing methodologies to employ

In this article, I will look through different types of software testing, different software testing methodologies, where they should be used, and which benefits do they bring.

Types of QA


Automated Testing vs Manual Testing

There are two types of testing: automated and manual. Manual software testing is conducted manually by a QA specialist, while automated software testing is performed with the help of written code scripts – a code that tests code. Manual testing is considerably cheaper than the automated one but usually takes longer and leaves more room for errors. Manual testing is more suitable when test cases need to be checked only once or twice, not repeatedly. Also, unlike automated tests, manual testers can identify nonfunctional issues that affect user experience.

For you as for a business owner, the best decision is to consult an expert PM for them to tell you which types of Quality Assurance testing – manual or automated – suits your business needs better.


Scripted Testing vs Exploratory Testing vs Ad-hoc Testing

Usually, software testing is performed with predetermined test cases. This is called scripted testing. The exploratory type of QA, however, does not require test cases. Here, a QA specialist investigates the system, randomly goes through each page, and estimates the overall feeling of the app. This testing type relies on cognitive thinking and can be conducted only manually.

Ad-hoc testing is the most informal and random among all the types of software quality assurance. Also called monkey testing, it aims to break the software system. It follows no documented procedures – instead, it prioritizes the result. It can be conducted by anyone on the project, and the goal of it is to find errors and bugs that are not covered by test cases.

The concepts of exploratory and ad-hoc testing seem similar. However, the former one is a mandatory step conducted while the app is being developed according to the described workflow, while the latter one is not mandatory, is conducted after the app is complete, and disregards the workflow.


Functional Testing vs Non-Functional Testing

Functional testing types check whether all the functions and features of a software product are present and operate properly. Non-functional testing types check other, non-functional aspects of the software, such as performance, reliability, and security.

Functional testing types include smoke testing, unit testing, integration testing, system testing, regression testing, and acceptance testing. Non-functional testing types include UI/UX testing, compatibility testing, API testing, performance and load testing, accessibility testing, and security testing.


Unit Testing, Integration Testing, and System Testing

Unit testing 

Type: Functional

Who conducts: Development team

When conducted: Before submitting a build for full-scale testing

The outcome: Allows finding and fixing major bugs instantly

It addresses not the entire software product but a single component of it. Here, a unit is the smallest testable part of the software with a single output. Unit testing checks whether a unit performs as it should. It is conducted by developers before the app is sent to the Quality Assurance team. Unit tests are performed only automatically. They bring more confidence in code maintenance: if proper unit tests are written after each major change in a code, bugs and defects can be promptly caught and solved. Also, unit testing increases the reusability of code. For unit tests to be conducted, the code has to be modular, and therefore, it becomes reusable.

Integration testing 

Type: Functional

Who conducts: Testing or development team

When conducted: During development or testing

The outcome: Makes sure that components interact properly

Integration testing is the opposite of unit testing. While the latter checks each component individually, integration testing checks how they interact with each other. It is conducted after unit testing but prior to system testing, during the development stage by developers or during the Quality Assurance stage by testers. Integration testing belongs to QA types that can be conducted both manually and automatically. There are different approaches to integration testing: Bing Bang, Top Down, Bottom Up, Sandwich.

System testing

Type: Functional

Who conducts: Testing team

When conducted: Before the product is delivered

The outcome: Makes sure that the entire system functions properly

It checks if all the components perform well altogether as a system. If to compare a software product to a tree, unit testing would be checking each particular leaf, integration testing would check each branch, and system testing would check the entire tree.

Unit and integration testing approaches are performed throughout development, while system testing is conducted when the app is already ready to deploy. Conducted by testers manually or automatically, this type of tests helps to understand if the app can be delivered. If successful, the app is sent to a client for acceptance testing.


Smoke Testing

Type: Functional

Who conducts: Testing team

When conducted: Between development and full-scale testing

The outcome: Allows optimizing QA process

Smoke testing is one of the most superficial types of Quality Assurance. It is also known as build verification testing. Once the development team sends the project build to the testing team, the latter checks if the build is stable and does not crash. They look through the most basic functions and decide, whether the build is suitable for further, more detailed testing or it should be returned to the development team. This testing helps to reduce efforts and expenses spent on the QA process and to identify problems timely. Similarly to unit testing, if conducted after each change in the build, smoke testing can ensure the stability of code.


Regression Testing

Type: Functional

Who conducts: Testing team

When conducted: When a new change is implemented

The outcome: Makes sure that changes do not affect existing code

Software regression testing belongs to functional types of testing, which is conducted after a minor or major change in the code to check if this change did not affect the software somehow. Here, a QA specialist selects a certain portion of test cases and re-executes them fully or partially. When conducting regression testing, one should not necessarily retest all test cases. It would be more rational to recheck test cases that concern the core software functionality and test cases of features that underwent the most changes. Also, those test cases with the most frequent defects and those most visible to the users deserve attention.


Acceptance Testing

Type: Functional

Who conducts: PM, client

When conducted: When the product is being delivered

The outcome: Makes sure that the software meets expectations

This type of testing is performed neither by a developer nor by a QA specialist. Acceptance testing is a functional testing type, which is performed by a client and should involve all the stakeholders. Here, the client checks the software presented to him by the development team in order to find out if it fully meets project requirements. The outcome of this testing is the client’s decision to accept or not to accept the software product.


UI/UX Testing

Type: Non-functional

Who conducts: UI/UX designer

When conducted: When the product is designed

The outcome: Helps to optimize the app usability and user experience

As the name itself suggests, UI/UX testing checks the efficiency of UI and UX design. It is one of the non-functional types of testing, which looks for the optimal way of interaction between a software product and the target audience. UI/UX testing is quite different from any other type of testing, with its own procedures, methodologies, objectives, and concepts. In fact, this type of QA is an essential part of the Business Analysis process. UI/UX testing conducted prior to the launch of development can help to greatly improve the project idea before implementing it, which would boost the outcome brought by a product, minimize the probability of logical mistakes, and increase the efficiency of development.

Do you want to learn more about UX testing?

Check my recent article “The Value of User Testing: How to Find the Hidden Opportunity?”.

Oksana PletenOksana PletenUI / UX Designer

Compatibility Testing

Type: Non-functional

Who conducts: Testing team

When conducted: During full-scale testing

The outcome: Makes sure that the app works on any software and hardware

The idea of compatibility testing, a non-functional testing type, is to make sure that a software product can function properly on any device, any OS, and any browser. QA specialists run and test the product on different operating systems of different versions, different hardware, networks, and browsers. This type of testing is of crucial importance for user engagement and retention. If a person launched the app on their device and it did not work properly, they would give your software product no second chance.


API Testing

Type: Non-functional

Who conducts: Developers or testing team

When conducted: During development 

The outcome: Makes sure that the API of the app functions properly.

API testing is one of the non-functional types of testing, and it checks how the application interacts with API (application programming interface). Performed at the message layer, API testing can identify such errors as unused flags, performance issues, security issues, or reliability issues. This type of testing determines if the API returns responses for different requests correctly and timely, if it reacts properly to failures or improper inputs, and if it responds securely to possible system data attacks.


Performance Testing

Type: Non-functional

Who conducts: Testing team

When conducted: During full-scale testing 

The outcome: Makes sure that the app is fast and reliable

Software performance testing is non-functional. It makes sure that the app is stable, responsive, and fast. This type of testing identifies errors that cause lagging or failures of the software. It finds bottlenecks and defines what is the heaviest data load that the system may handle. Testing data load can be also conducted separately with the help of load testing. It is carried out with such tools as JMeter, LoadRunner, or WebLoad. The most recent marketing research conducted by Google claims that 53 percent of users are likely to leave a web page if it does not load in three seconds. If you do not want to lose users, performance testing is a must.


Accessibility Testing

Type: Non-functional

Who conducts: Testing team, UI/UX designer, or BA

When conducted: Before the product is delivered 

The outcome: Makes sure that the app is accessible to everyone

The idea of accessibility software testing is to make sure that the program can be used by the elderly and people with disabilities, such as vision impairments, hearing impairments, or mental disorders. The most basic software accessibility checklist is provided by the United States Department of Justice here. In fact, an American company whose web page does not meet accessibility requirements can be subject to a legal liability and a huge fine. Accessibility testing helps to ensure not only the best experience for all users but also the legal security of your business.


Security Testing

Type: Non-functional

Who conducts: Testing team

When conducted: During full-scale testing 

The outcome: Makes sure that the app is secure

The aim of security testing, also known as vulnerability testing, is to identify potential loopholes, which wrongdoers can use to break the system. It tests the ability of the system to withstand cyberattacks and malicious software. Also, security testing checks the reliability of authorization and authentication processes. In general, data safety is the number one global technological concern. If the private information of your users was leaked, destroyed, or stolen, you could face serious legal consequences.


To Wrap Up

Different software testing methodologies are easier to understand than they seem. However, most of them are far from easy to conduct.

Yes, Quality Assurance takes time and requires some additional expenses and efforts. However, do not neglect it. Proper testing will help you avoid critical technical and business logic mistakes. To carry out software testing properly, keep record of the process according to the rules of QA documentation.

Finally, look for trusted QA specialists, who will work hand-in-hand with your development team. After all, testing your software is making sure that it is performant, reliable, and enjoyed by your users.

Do you need Quality Assurance services?

Let our professional QA team help you solve your software issues. Learn more about development and software testing services that we offer.