
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.

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.

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?”.
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 help with Quality Assurance?
Let our professional QA team help you solve your software issues. Learn more about development and software testing services that we offer.