Error Guessing

Error Guessing

"A test design technique where the experience of the tester is used to anticipate what defects might be present in the component or system under test as a result of errors made, and to design tests specifically to expose them", per ISTQB.

Error guessing technique involves the tester making guesses about mistakes (errors) that a developer might make and then designing tests for them. Error guessing requires the tester to have knowledge and experience of common programming errors and their impact on code produced, the nature of bugs that can be introduced and how those may be reproduced. The tester needs to have some experience with programming and the technologies used by development. This enables the tester to make guesses about potential errors that may be introduced and create tests to find bugs associated with those errors. Error guessing may be used as a standalone technique or to complement other techniques. Error guessing can be applied at any stage of testing and may be used to even identify potential risks.

The effectiveness of using the Error guessing technique lay on the creativity and ability of the tester to guess errors and find bugs. Each tester is unique in this case and likely to approach this technique distinctly. Error guessing may also be used as a means to perform a quick smoke test. Trying to lay down guidelines and documentation requirements for this technique may constrain the tester's freedom and creativity which are important for Error guessing to be effective.

Needless to state it, error guessing is normally used as an additional test technique and not the sole or primary testing technique. Error guessing can help find bugs that may be missed by other techniques. Once tests are executed, it is recommended to capture them and automate as much as possible.

As you may have realized by now, the success of this technique to a certain extent is dependent on both the developer making similar mistakes as in the past and the tester having some experience with finding bugs that are similar to the ones that are in the current system-under-test.

Software Testing Types - comprehensive list

Aggregating all of the different types of software testing in one place. We touched upon nearly 70 different test types and a brief description of each testing type during the course of the past 3 posts (#1, #2, #3).

Read them all here.

  1. Types of Software Testing - Part 1

  2. Types of Software Testing - Part 2

  3. Types of Software Testing - Part 3 

And, the original exhaustive list of software testing types is available here (no descriptions included) if you are interested.

Types of Software Testing (3)

This is a continuation from my previous posts ( post1 & post 2 ) on types of software testing.

Static testing

Static testing involves testing of an application without executing it. This is done either manually or using static analysis tools. Examples of static test types include - Desk checking, Code walk-through, Code reviews and inspection

Scenario Testing

Scenario testing is a type of testing involving use of scenarios or stories pertaining to application usage.

Scripted Testing

Scripted Testing is testing that follows a scripted path designed by the tester. Step by step instructions and expected outcomes are defined making it easy for testers to follow.

Security Testing

Security Testing is a type of testing intended to identify defects in an applications security mechanism(s). Tests span vulnerability assessments, data integrity checks, fuzzing, verifying - authentication, authorization, confidentiality, etc.

SME Testing

SME (Subject Matter Expert) Testing involves testing by a domain/subject matter expert. For example, when developing a HR application you would have a domain expert as in a HR practioner as the SME doing tests. Similarly, a finance professional testing a financial application and so on. SMEs can also be experienced technical experts who can guide the team on technical aspects.

Smoke Testing

Smoke Testing is a subset of regression tests that are normally run to verify if a drop/build is ready for further more extensive testing. Sometimes referred to as BVT (Build Verification Tests) or BAT (Build Acceptance Tests).

Soak Testing

Soak Testing is a type of performance test involving a specified load (often intended to mimic real world usage) over an extended duration of time to verify the system's ability to sustain the load.

Specification Testing

Specification Testing involves using the application's specifications as the reference for designing tests, selection of data and determining adequacy.

Standards / Compliance Testing

Standards / Compliance Testing is a type of testing to verify if the application meets the required/specified standards and can be viewed as an audit of the system for compliance.

Section 508 accessibility testing

Quoting directly from the US government site - 'Section 508 of the Rehabilitation Act, as amended by the Workforce Investment Act of 1998 (P.L. 105-220) requires federal agencies to develop, procure, maintain and use information and communications technology (ICT) that is accessible to people with disabilities - regardless of whether or not they work for the federal government.' In summary, this means products are accessible to all users irrespective of their disability status. This could mean that products are compatible with assistive technology, such as screen readers.

SOX testing

SOX testing involves verification of compliance to the Sarbanes-Oxley act. The Sarbanes-Oxley Act is legislation passed by the U.S. Congress to protect shareholders and the general public from accounting errors and fraudulent practices in the enterprise, as well as improve the accuracy of corporate disclosures.

State Testing

State Testing involves testing for state transitions which may be impacted by change in input conditions and/or sequencing of events.

Stress Testing

Stress Testing involves verifying a systems behavior under adverse situations such as excessive load beyond what it is designed for until the system's performance degrades significantly or fails.

System Testing

System Testing involves testing of the complete system or product with all its components/modules integrated. The system test looks at the system from the customer/client's perspective. System tests validate whether the software meets the requirements (functional and non-functional).

Testability Testing

Testability Testing involves testing the ability of each piece/functionality of the application to be tested. It tells us about the ease with which the application/its features can be tested.

Unit Testing

Unit Testing involves testing of each unit (smallest testable piece) of software to validate it performs correctly as expected.

Upgrade & Migration Testing

Upgrade testing involves testing of the move or upgrade of an existing system from one version to a higher version. Migration testing involves testing of the move from one system to another.

Usability Testing

Quoting directly from the usability site - "Usability testing refers to evaluating a product or service by testing it with representative users. Typically, during a test, participants will try to complete typical tasks while observers watch, listen and takes notes.  The goal is to identify any usability problems, collect qualitative and quantitative data and determine the participant's satisfaction with the product."

White box Testing

White box Testing (also known as glass box testing, clear box testing, open box testing, transparent box testing) is testing based on knowledge of the internals of the application. Tests are designed based on knowledge and examination of the application's internal architecture, design and code.    Types of white box testing include - Unit Testing, Code Coverage Testing, Statement/Path/Function/Condition testing, Complexity Testing / Cyclomatic complexity, Mutation Testing


Related posts

Types of Software Testing (2)

This is a continuation from my previous post on types of software testing.

Fault-Injection Testing

Is a test type involving injection of faults (compile or runtime) to test the error handling abilities of the system and its robustness.

Functional Testing

Is a test type used to verify that the software has all the required functionality specified in the requirements. Conformance to functional requirements is tested.

Fuzz Testing

Is a test technique used to discover security issues and errors in software by inputting large amounts of unexpected, invalid, random data. The aim is to make the system crash and reveal bugs. It is often executed in an automated manner.

Gray Box Testing

Is a test type involving use of white and black box techniques. Here, the tester has some knowledge of the internals of the system under test unlike in black box testing where the tester has no knowledge of internals.

Guerilla Testing

Is a type of usability testing involving quick capture of user feedback about specific areas of the product. Users are approached and asked to help quickly test/use the product and give feedback.

Install & Configuration Testing

Used to test the various installation scenarios and configurations.

Integration Testing

Involves integration of the different software modules and testing them as a group.

System Integration Testing

Tests the system's integration point with other systems. It could also mean the testing performed on a system in an environment where all the required hardware and software components are integrated.

Top-down Integration Testing

Testing is carried out from top down/from the main module to the sub. If the bottom level/sub modules are not yet developed, stubs are created to simulate them.

Bottom-up Integration Testing

Testing is carried out from bottom up/from the sub module to the main one. If the top level/main modules are not yet developed, Drivers are created to simulate the top level module.

Bi-directional Testing / Sandwich Testing

Involves simultaneously performing Top down and Bottom up integration tests.

Interface Testing

Testing of interfaces & communication between systems and components.

Internationalization Testing

Testing the product's capabilities to be localized. Testing is done across language settings.

Interoperability Testing

Testing the ability of a system to inter-operate & interact with other system(s).

Load Testing

Is a non-functional test type used to test the product under real life load conditions. It can be used to determine the maximum capacity of the system without suffering performance degradation.

Localization (l10n) Testing

l10n testing is performed to verify a product's localization/translation for a specific locale/language and is executed on the localized version of the product.

Logic Testing

Is a type of testing performed to validate the correctness of the software's processing logic. Also includes testing of predicates.

Manual Testing

Is a process of executing tests manually by a tester as opposed to an automated test which is scripted and executed by a tool/program.

Walk-through Testing

Is a type of testing involving peer reviews of software.

Performance Testing

Is a type of testing used to determine how a system will perform under a specific workload. Metrics such as responsiveness, throughput, etc. are collected and analyzed.

Pilot Testing

Normally involves a group of users trying out/testing the product prior to deploying it for wider user/customer access. E.g. pre-Beta

Protocol Testing

Involves testing of various protocols such as LDAP, XMPP, IMAP, SIP, etc.

Recovery Testing

Involves testing the ability of the system to recover post failure and the time taken to recover. Integrity checks are also run post recovery.

Regression Testing

Is a type of testing to verify existing functionality is not broken due to new enhancements/fixes.

Reliability Testing

Is performed to verify the software's ability to perform consistently in a fault-free manner within a specified environment for a specific time duration.

Requirements Testing

Is an approach to designing tests (functional & non-functional) based on objectives and conditions that are derived from requirements.

Risk-based Testing

Is a type of software testing wherein prioritization of tests is done based on risk assessment.

Sanity Testing

Is a subset of regression tests and designed to run quickly while performing a sanity check of the application to verify any bug fixes, run a set of prioritized regression tests and check any new feature changes at a high level. Any failure would result in the drop/build not proceeding forward to more extensive tests.

Scalability Testing

Is a type of testing done to measure the application's ability to scale up based on varying load profiles.


Related posts