Types of Testing

TL;DR

We spent a great deal of time testing software at various stages over the years. While the fine art of testing has evolved a great deal over time many of the types remain similar or have evolved to keep up and are explained below.

These days nearly all type of testing can and should be automated which makes testing more efficient and reliable. That said not everything can or should be automated and better left to humans that are equipped with brains and eyes and creativity to sneak around where automation cannot go.

While our testing days are behind us, NRM could still assist with bringing any type of testing to your situation. So, if you need to improve your delivery flow with greater confidence in the quality of what you are doing contact us for a quick consultation and we will see what we can do.


Test Categories

These broad categories will likely resonate with test categories that you may have heard of. Chances are good though that there are some additional types of testing that you may not be aware of.

CategoryExamples
FunctionalUnit, Integration, System, Regression, Acceptance, End-to-End
Non-Functional & ExperientialPerformance, Load, Security, Usability, Compatibility (user configuration), Accessibility, Last Mile
ResilienceFail-over, Chaos Monkey, Stress (surges, Denial of Service (DoS)), Session Affinity, Load Balance, Cache Mechanisms
Specialized/OtherExploratory, API, Mobile, Alpha, Beta, A/B, Localization, Mutation, Fuzz

Test Types

The various types of testing that exist are explained below along with where they are typically applied.

Testing TypeDescriptionApplies to
Ad-hocManual unscripted testing to discover defects by exploring the application without specific direction.A quick sanity test often associated with the last step before release. All other tests have been run, and results are understood but there could still be gaps in testing that this might reveal.
Exploratory
(Ad-Hoc+)
Tour driven manual ad-hoc made popular by James Whitaker with his book Exploratory Software Testing. Similar to Ad-Hoc but more fun because effort is influenced by a theme or persona.
APIValidates application programming interfaces for correctness and reliability.Code
Mobile App Testing Focuses on mobile device-specific functionality and user experience.Broad range of device configurations typically spotty connectivity and small screen sizes.
Alpha TestingInternal testing before public release, often by developers or QA.A form of Ad-hoc
Beta TestingReal-world testing by a select group of end users before general release.Real world ad-hoc customer experience or acceptance. Might leverage telemetry and/or feedback loops to capture details.
A/B TestingCompares two versions to determine which performs better.
Localization and Globalization TestingEnsures proper functionality across languages and regions.Typically, global apps or those that need to support multiple languages.
Mutation TestingAlters code to check if tests detect the changes.Code robustness
Fuzz TestingAlters parameters applied to APIs and services to check for error handling and robustness. Typically pass/fail based on number of cycles survived without incident.API robustness
Back-end TestingInputs random or unexpected data to test robustness.
Destructive TestingIntentionally tries to break the software to find failure points.Ideal for anything where a break could wreak havoc or has serious consequences.
Dynamic Configuration TestingValidates use of feature switches, default states as well as supporting infrastructure and architecture.Validates capabilities to alter product behaviors without re-releasing. Handy for A/B testing, Beta testing or geopolitical change.
Pre-Deployment TestingLeverages Infrastructure as code concepts to set proper base state configuration often from an image or container then validates it is correct. Confirms that your base operating environment is what it should be. Could block downstream testing saving time and effort working with a tainted system.
Unit TestingCode level testing designed to defend a unit of code against changes elsewhere. Often used in concert with Pair Programming & Test Drive Development to build more reliable code.Reveals breaking changes as close as possible to the source. Often required to run all unit tests prior to final check-in.
Last mileA form of configuration testing for online services outside of lab-controlled situations. An external configuration test designed to capture network performance as it relates to local customer experience.Validates customer experience related to network performance beyond our control.
Sanity testingAnother way to confirm basic functionality. Often targeted to specific area of concern.One final look-see to make sure everything as it should be. Aka preserve sanity by eliminating doubt.
Smoke TestingOften down stream of Pre-Deployment where system connections and basics are confirmed. Usually used as a precursor to deeper testing where a “Fail” might block additional test effort on an incorrect or suspicious installation.
Halo TestingA focused effort to test the surrounding area of a feature or change. Helps to ensure there are no unintended consequences of a change.Ideal for risky changes that could have side effects.
Integration TestingAims to validate that distinctly different components can work together as part of a larger system.
Regression TestingOften associated with a specific functionality change like a fixed defect. Aims the ensure that change solved the problem and that there are no deleterious side effects.Validating fixed defects.
Black BoxThis type of testing is conducted with no knowledge of the internal workings of a system or the code involved.
White BoxUnlike Black Box this type of testing is performed with access to the code so that how you conduct this testing is influenced by what you can see in the code.