Software testing techniques

This page is under construction.
Coming Soon.
Software testing techniques.

under construction

we are moving from

Below are just some personal notes on the topic: Software testing techniques. Information is not complete, verified and systematised. Some references will be provided in future.

Software testing techniques

Software testing techniques. I will try to give an overview and describe all new/well known software testing techniques with accents on white, grey and black box techniques. I will attempt to introduce guidelines for choosing correct techniques for the project. All definitions will be taken from accepted and identified sources.

As a software tester you need run hard to stay where you are!

Testing Techniques: Classification of testing techniques with descriptions of what types of testing needs to be done. This classification will include descriptions of all techniques for white box, black box and grey box testing.

How to create good test case template. Necessary fields for the TC template for manual and automation testing. Create excellent test case. Guidance for creating text in a template.

Specific testing techniques are applicable for any single project. They will change from project to project. Usually required for the current project testing techniques are described in the test plan. (what types of testing ,needs to be done during testing cycle: load testing, extreme testing, regression testing etc.)

Below are types of software testing techniques that can be applied to both Functional and Structural types of software testing.
  • Verification testing techniques are performed on interim products by applying mostly static analysis techniques, such as inspection, walkthrough, and reviews, and using standards and checklists.
  • Partition testing – Testing technique based on an assumption that all elements in any no overlapping subdomain have the same behaviour and test inputs can be selected accordingly to this assumption.
  • Pairwise testing - Integration testing technique for verification that two elements can function together as expected.

    White-box testing techniques are also called structural testing techniques, whereas black-box testing techniques are called functional testing techniques.

    Functional Technique and Structural Technique
    Functional Testing Techniques
    1.The first functional testing technique testers should learn to master is equivalence class partitioning (ECP).
    2. Boundary value analysis (BVA) is perhaps the best-known functional test technique
  • In-parameter-order (IPO) testing - Combinatorial testing technique for the generation of test cases that for any pair of input parameters of the system under test at least one test case must be created for minimum coverage.
  • Category Partition testing: testing methodology that requires to divide the functional specification into independent functional units that can be tested separately.
  • Scenario-based testing
    Structural Testing Techniques also referred to as white-box testing 
    and best suited for unit testing
    Unlike functional testing techniques that can be applied to design tests from both a black 
    box and a white box perspective, structural testing techniques are one of several 
    white box test design approaches. Structural logic-based testing is mandatory for use in 
    safety critical software.
    a. You can test the software’s structure logic
    b. You test code that may be you wouldn’t test if you performed only functional testing
    three Structural test generation techniques, namely random test selection, test selection based on control flow, and test selection based on data flow. What is structural testing? Structural testing defined Strengths of structural testing Focus of structural testing Benefit of structural testing Weaknesses of structural testing Structural testing techniques: Condition/decision testing Types of condition/decision testing Statement coverage Decision coverage Condition coverage Condition/decision coverage Multiple condition coverage Data flow testing Common data flow defects Loop testing Classes of loops Testing simple loops Testing nested loops Testing concatenated loops Testing unstructured loops Common loop defects — Start value Common loop defects — Control value Common loop defects — Ending criterion Common loop defects — Improper nesting Basis path testing Independent path coverage Step 1: Draw a control flow graph Step 2: Calculate cyclomatic complexity Uses of cyclomatic complexity Step 3: Choose a basis set of paths Step 4: Generate test cases Testing exception handling literature: Boris Beizer – Software Testing Techniques 2nd Edition 1978 Basis Path Testing: 1. Block Testing 2. Decision Testing 3. Condition Testing requires that each condition has been tested independently. 4. Basis Path Testing 5. Control-flow testing 6. Loop testing 7. Data-flow testing
    Data flow testing can be performed at two conceptual levels: static data flow testing and dynamic data flow testing. 8.Testing to maximize statement and branch coverage 9. Mutation testing Single Step Testing: Single step testing is performed by stepping through new or modified statements of code with a debugger. Single step testing is normally manual and informal. transaction-flow testing, syntax testing, finite-state testing logic-driven testing design-based testing testing techniques: equivalence class testing, cause-effect graphing, basis path/flow graph, state and event testing, notation/cyclomatic complexity, boundary testing and syntax testing. Cohesion Module cohesion concepts Types of module cohesion: Coincidental cohesion, Logical cohesion, Temporal cohesion, Procedural cohesion, Communication cohesion, Informational cohesion, Functional cohesion The baseline method, described in this section, is a technique for identifying a set of control paths to satisfy the structured testing criterion.

    In the perturbation technique, the programmer injects faults in the data state of an executing program and traces the injected faults on the program’s output. [Software Fault Injection—Inoculating Programs Against Errors, by J. M. Voas and G. McGraw, New York, 1998.]
    Test Techniques generally are three types:
    1.white box box
    3.grey box
    Test Methodology means which type of testing are use in a particular project.
    Test techniques are the various factors based on which we do the testing. they are 
    boundary value analysis
    Equivalence partitioning
    Error Guessing
    Decision table
    Error class
    Cause effect diagram (Fish-Bone diagram)
    Various coverage types (Statement coverage. path coverage. loop coverage. condition coverage etc.)
    cyclomatic complexity.

    Pairwise testing is a practical way of testing large software systems that have many different parameters with distinct functioning expected for different values.

    classification tree testing technique
    The classification-tree method is an approach to (black-box) partition testing which uses a descriptive tree-like notation and which is especially suited for automation. (using and improving ideas from the category-partition method defined by Ostrand and Balcer) [Matthias Grochtmann STAR’94, May 1994]

    Questions to be answered regarding software testing techniques Scope: Which techniques are more valuable and not? Which are easy to apply, which are not? Which find genuine faults, which are not? Manual (knowledge based tests) vs automatically generated tests? Which are effective? Knowledge acquisition; which are easy to comprehend, which are not. Another approach could be to view the techniques in a different light, where the following could be used:
  • Data dependent: e.g. boundary value, equivalence class, Random, FAR, dataflow, GUI/interface parameters
  • Event dependent: e.g. state chart, state transition diagrams and tables, cause-effect graphing, Functional, End-to-End, Use cases.
    Classification of random software testing techniques with short description.

    While using state transition diagrams and tables you should verify that all abandoned paths release system (business) resources like money, inventory items and other database resources. Abandoned paths occur when the system does not reach the next expected state for example, when a browser closed unexpectedly.

  • Structure dependent; e.g. Control-flow, GUI, Functional, model driven

    Structural Testing (white-box) These tests delve inside the code of the system and test the logic of individual pieces. It may be necessary to organize the code in a way to make structural testing possible. Almost all of these techniques are automatic, using a variety of tools. These tests are NOT exhaustive, i.e. if they were to check for all valid inputs, the number of tests would be astronomical. In real-life, experienced programmers check for bounds, limits, nulls, zeros and other such inputs into "units" of code. Commonly employed techniques include: - Unit testing: dynamic: programmatically tests portions of the code against a set of conditions specified by the programmer that developed the software or another programmer. This is further augmented by unit test coverage testing -- testing t hat tests the extent of the code that is "covered" by unit testing! Code walk-through: static : the programmer walks through the logic and branching of the code by him/herself or with the development team - looking for obvious flaws that are detectable by a 'second pair of eyes'. It is also helpful for junior programmers to learn best practices in coding. Branch-condition testing: dynamic: using tools and pre-compilers, the execution of code is tested in conjunction with unit testing (see above) to determine if all the branch conditions in the code have been "covered". Thread testing: static dynamic: this tests the code for concurrent or "race conditions". Such tests are notoriously hard to design due to the unpredictability of such conditions and good design is always a must, and as such, I classify them as 'static' also.
    specification-based testing appeared in 1990 Model-Based Testing Paper Research Paradigm
    Software Testing Techniques
    Technology Maturation and Research Strategy
    Class Report for 17-939A
    by Lu Luo
    Phase I. Before 1956: The Debugging-Oriented Period
    – Testing was not separated from debugging.(Turing)
    Phase II. 1957~78: The Demonstration-Oriented Period
    – Testing to make sure that the software satisfies its specification(Charles Baker)
    Phase III. 1979~82: The Destruction-Oriented Period
    – Testing to detect implementation faults(Myers)
    Phase IV. 1983~87: The Evaluation-Oriented Period
    – Testing to detect faults in requirements and design as well as in implementation
    Phase V. Since 1988: The Prevention-Oriented Period
    – Testing to prevent faults in requirements, design, and implementation
    1950 – 1970: Ad Hoc
    1971 – 1985: Emphasize on Implementation and Single Program
    1986 – current: Emphasize on Specification and System
    Year  Idea Question Result Validation
    1975  Fundamental theorem Evaluation Analytic Model Analysis
    1975  Edge approach, probe insertion Method/Means Technique Analysis
    1976  Path approach and its reliability Characterization Technique Analysis
    1980  Domain testing strategy Method/Means Technique Analysis
    1980  Functional design abstraction Method/Means Technique Persuasion
    1985  Data flow strategy Method/Means Technique Analysis
    1989  Integrate specification and impl. testing Method/Means Technique Analysis
    1994  Coverage reliability estimation Method/Means Technique Analysis
    1997  Probabilistic functional testing Method/Means Technique Analysis
    1997  Testing based on architectural Method/Means Technique Persuasion
    2000  UML based testing Method/Means Technique Experience
    2001  Component based testing Method/Means Technique Analysis

    3. Operational Testing These types of testing test the software under operational conditions. Examples include: Stress testing: dynamic : testing the software under operational loads that exceed the maximum expected loads on the system. Security breach testing: static and dynamic: testing the software under a combination of real-world security risks.
    static techniques exploratory testing techniques
    On this site you can find information about software testing and  automated software testing tools, recommendations forsoftware testing training course, list of books about softwaretesting with recommendations and books suggested for softwaretesting certification, online software testing quiz, interviewquestions for software testers, software testing dictionary,samples of software testing documentation including test casetemplate, jokes about software testing and testers, software 
    testing techniques and more ...

    One of the main selection criterions of a test design technique that will be used for the current application is coverage result for the system under test. Different testing techniques can find different types of defects.

    A lot of different ways of working can be effective
    Use a technique so long as it is doing some good.
    Test your Testing Techniques knowledge by answering the following questions:
  • How can you explain boundary value analysis?
  • What are a boundary values in software testing?
  • How can you explain equivalence partitioning?
  • How can you explain how the state transition diagrams can be helpful during software testing?
  • How can you explain random testing?
  • How can you explain monkey testing?
  • What is negative and positive testing?
  • How can you explain exploratory testing?
  • What are semi-random test cases?
  • What is an orthogonal array testing?
  • How can you explain a pair-wise defect?
  • How can you explain decision tables?
  • How did you define severity ratings during your testing? See answers on this site.
    Dictionary Bibliography:
  • Reliability of the Path Analysis Testing Strategy by W. E. Howden, IEEE Transactions on Software Engineering, September 1976, p. 208
  • A Domain Strategy for Computer Program Testing by L. J. White and E. I. Cohen. IEEE Workshop on Software Testing and Documentation, 1978, p.335
  • Adaptive Random Testing by T. Y. Chen, H. Leung, and I. K. Mak. Advances in Computer Science—ASIAN 2004
  • Data Flow Analysis in Software Reliability by L. D. Fosdick and L. J. Osterweil, Computing Surveys, September 1976, p. 305
  • Software Fault Injection—Inoculating Programs Against Errors by J. M. Voas and G. McGraw, Wiley, New York, 1998.]
  • Provable Improvements on Branch Testing by P. G. Frankl and E. J. Weyuker, IEEE Transactions on Software Engineering, October 1993, p. 962
  • Software Testing and Quality Assurance: Theory and Practice, by Kshirasagar Naik and Priyadarshi Tripathy., 2008

    Software testing methodologies    Main Page

    Copyright © 2009  All Rights Reserved.