Test Template Framework
The Test Template Framework is a model-based testing framework proposed by Phil Stocks and David Carrington for the purpose of software testing. Although the TTF was meant to be notation-independent, the original presentation was made using the Z formal notation. It is one of the few MBT frameworks approaching unit testing.
Introduction
The TTF is a specific proposal of model-based testing. It considers models to be Z specifications. Each operation within the specification is analyzed to derive or generate [|abstract test cases]. This analysis consists of the following steps:- Define the input space of each operation.
- Derive the valid input space from the [|IS] of each operation.
- Apply one or more testing tactics, starting from each [|VIS], to build a [|testing tree] for each operation. Testing trees are populated with nodes called test classes, test specifications or test conditions.
- Prune each of the resulting [|testing trees].
- Find one or more abstract test cases from each leaf in each testing tree.
Important concepts
In this section the main concepts defined by the TTF are described.Input space
Let be a Z operation. Let be all the input and state variables referenced in, and their corresponding types. The Input Space of, written, is the Z schema box defined by.Valid input space
Let be a Z operation. Let be the precondition of. The Valid Input Space of, written, is the Z schema box defined by.Test class
Let be a Z operation and let be any a conjunction of atomic predicates depending on one or more of the variables defined in. Then, the Z schema box is a [|test class] of. Note that this schema is equivalent to. This observation can be generalized by saying that if is a test class of, then the Z schema box defined by is also a test class of. According to this definition the VIS is also a test class.If is a test class of, then the predicate in is said to be the characteristic predicate of or is characterized by.
Test classes are also called test objectives, test templates, test specifications and test conditions.
Testing tactic
In the context of the TTF a testing tactic is a means to partition any test class of any operation. However, some of the testing tactics used in practice actually do not always generate a partition of some test classes.Some testing tactics originally proposed for the TTF are the following:
- Disjunctive Normal Form. By applying this tactic the operation is written in Disjunctive Normal Form and the test class is divided in as many test classes as terms are in the resulting operation's predicate. The predicate added to each new test class is the precondition of one of the terms in the operation's predicate.
- Standard Partitions. This tactic uses a predefined partition of some mathematical operator. For example, the following is a good partition for expressions of the form where is one of, and .
- :
- :As can be noticed, standard partitions might change according to how much testing the engineer wants to perform.
- Sub-domain Propagation. This tactic is applied to expressions containing:
- # Two or more mathematical operators for which there are already defined standard partitions, or
- # Mathematical operators which are defined in terms of other mathematical operators.
- :In any of these cases, the standard partitions of the operators appearing in the expression or in the definition of a complex one, are combined to produce a partition for the expression. If the tactic is applied to the second case, then the resulting partition can be considered as the standard partition for that operator. Stocks and Carrington illustrate this situation with, where means domain anti-restriction, by giving standard partitions for and and propagating them to calculate a partition for.
- Specification Mutation. The first step of this tactic consists in generating a mutant of the Z operation. A mutant of a Z operation is similar in concept to a mutant of a program, i.e. it is a modified version of the operation. The modification is introduced by the engineer with the intention of uncovering an error in the implementation. The mutant should be the specification that the engineer guesses the programmer has implemented. Then, the engineer has to calculate the subset of the VIS that yields different results in both specifications. The predicate of this set is used to derive a new test class.
- In Set Extension. It applies to predicates of the form. In this case, it generates test classes such that a predicate of the form is added to each of them.
- Mandatory Test Set. This tactic associates a set of constant values to a VIS' variable and generates as many test classes as elements are in the set. Each test class is characterized by a predicate of the form where is the name of the variable and is one of the values of the set.
- Integer Intervals. This tactic applies only to VIS' variables of type . It consists in associating a range to a variable and deriving test classes by comparing the variable with the limits of the range in some ways. More formally, let be a variable of type and let be the associated range. Then, the tactic generates the test classes characterized by the following predicates:,,,,. The tactic is easy generalized to a list of integers.
- Sum Type. This tactic generates as many test classes as elements a sum type can be constructed by applying all the type's constructor. In other words, if a model defines type and some operation uses of type, then by applying this tactic each test class will by divided into three new test classes: one in which equals, the other in which equals, and the third where equals.
- Proper Subset of Set Extension. This tactic uses the same concept of ISE but applied to set inclusions. PSSE helps to test operations including predicates like. When PSSE is applied it generates test classes where a predicate of the form with and, is added to each class. is excluded from because is a proper subset of.
- Set Cardinality. This tactic applies to variables of a set type. The user selects one such variable and a positive integer number. The tactic generates a test specification characterized by for each.