Software testing basics: What are the 7 different types of QA tests?

Picture of Brian Borg
Posted by Brian Borg

The world needs effective software testing. In fact, research shows that:

  • Ninety percent of users stop using an application if it performs poorly.

  • Eighty-six percent delete an app if they have problems with its functionality or design.

  • Eighty-eight percent of consumers are less likely to return to a site after a bad experience.

  • Unhappy users report application failures on social media. 

In this blog, we’ll run through some software testing basics, and describe how to use the top seven of the common QA tests available.

1. Unit testing

Unit testing is a series of tests written in the codebase to execute each component, method, and procedure and confirm they function as expected. Unit tests are typically executed every time code is checked in or built into a release. Frequent test execution at the code level guarantees that each section of a software/application in isolation meets coding design standards and behaves correctly.

Developers typically carry out this type of testing during the early stages of any software build because it is done a the code level. QA engineers are rarely involved at that point, so it’s not something one should expect from a QA team. 

Unit testing boosts testing productivity by eliminating defects within the code itself. Effective unit testing can save time and increase test coverage depth across the software development life cycle (SDLC). 

2. Functional Testing

Functional testing focuses on changes to code during the current development cycle. It validates software against functional requirements or acceptance criteria documented within Word docs, Confluence pages, Jira tickets, or user stories. 

Essentially, functional testing confirms that all software features and functions work as expected. Both functional and regression testing are a fundamental part of any platform of continuous improvement for software. All other testing builds on functional testing. 

3. Integration Testing

Integration testing verifies that individual modules or services in the application work well together by combining the individual units of the software code and testing them as a group. This reveals problems in the interfaces and interactions between them. 

Integration testing includes dependencies, back-end processes, messaging systems, databases, APIs, and third-party software. By testing systems and code together, testing ensures they work as expected. This is an exceptional way to identify missing requirements or components that are not compatible early in the development cycle. 

Testing teams add considerable business value by testing all integration points in an application before customers find them.

4. End to End Testing 

End-to-end testing verifies the software works correctly from the beginning to end of a particular user flow. For example, an e-commerce site might have an end-to-end scenario consisting of choosing a product, viewing the details, adding to cart, and checking out. End-to-end testing replicates expected user behavior or customer journeys to ensure the application works as a whole. This method  also touches on testing integrations the application has with external interfaces.  

Software development businesses rely on generating and building customer trust in an application. The best way to ensure a positive customer experience is by investing in thorough end-to-end testing.

5. Acceptance Testing

Acceptance testing or “User Acceptance Testing,” (UAT) comes after all prior testing in the software creation process. The purpose of acceptance testing is to verify that an application satisfies customer expectations.  Acceptance testing is the icing on the cake for development teams with a goal of releasing a quality product that customers adopt. 

Unlike most other types of testing, acceptance testing is carried out by end-users, typically under close observation. As users interact with the software, misunderstandings around the interface or confusion about features emerge and result in changes to design. 

Organizations take different approaches to UAT —  some gather customer volunteers to test new features while being observed by product managers or UAT professionals. Another method is for  QA testers to help customers with discovered issues, then log defects or change requests to address the problem. In some projects, when the application is an internal tool, QA testers may assist coworkers with UAT testing by providing a demo or walk-through and offering Q&A sessions.

6. Regression testing

Regression testing ensures that code additions or defect fixes don’t negatively affect existing software features that have already been tested and approved. This is especially important during the occasional  development cleanup activities since by its very nature, refactoring to reduce tech debt changes previously released code.

The regression test plan grows with every development sprint, eventually covering most or even all of the entire product feature set. Regression testing is essential for ensuring a quality release, however, because the test effort expands with each iteration, there comes a point when the execution effort has outgrown the available resources. 

Regression tests are the most viable candidates for test automation, using a common framework like Selenium or Cypress, or a more contemporary AI-based or low-code based automation tool. Many organizations outsource the automation of their regression testing in order to keep internal test teams focused on the functional testing of new development. 

Regression testing is critical for ensuring a release is solid and meets quality standards prior to release. Businesses that forgo regression testing take a significant risk in losing customers due to the inevitability of new defects appearing within previously bug-free code.

7. Functional Testing

Functional testing focuses on changes to the code occurring in the current development cycle. It validates software against functional requirements whether existing within Word docs, Confluence pages, or Jira tickets. Essentially, it checks to confirm all features and functions within the software work as expected. Both functional and regression testing are a fundamental part of any platform of continuous improvement for your software.

8. Performance testing

Performance testing measures your software’s speed, scalability and stability under both expected and unexpected workloads. Unlike the previous tests we’ve mentioned, performance testing isn’t about finding functional or UX defects but rather exposing performance bottlenecks, by running gradually increasing numbers of virtual users against the software system while monitoring various performance metrics.

Test software, not your patience

Software testing is necessary for releasing a good product, but it can be a challenge to meet all the skills and expertise with your existing team. Milestone deadlines, new feature development, tech debt corrections…all contribute to pressure on your existing resources. Depending on the size of a testing team, it may be impossible to consistently build and execute all the testing that is required for a feature-rich application.  

OnPath Testing can help to establish or improve any of these seven types of QA testing described above. Get in touch today and release quality applications that customers love with thorough and effective testing.