This is a very simple benchmark example illustrative of a non information preserving transformation.
A companion pfd document with more information about this benchmark example (including a complete mathematical formalization) will be added soon.
The left model is a set of persons, each with a name and age. The name is unique and the age is a positive integer. Using UML class diagrams and OCL constraints it can be defined as follows:
context Person
inv: Person.allInstances->forAll(x |
Person.allInstances->forAll(y | x <> y implies x.name <> y.name))
inv: self.age >= 0
This meta-model is available in the following formats:
The repository includes the following instances of this meta-model:
The right model is a set of persons, each with a name. The name is unique. Using UML class diagrams and OCL constraints it can be defined as follows:
context Person
inv: Person.allInstances->forAll(x |
Person.allInstances->forAll(y | x <> y implies x.name <> y.name))
This meta-model is available in the following formats:
The repository includes the following instances of this meta-model:
The two models are consistent if the name of every person in the left model appears in the right model and vice-versa.
This consistency relation can be expressed in terms of a consistency relation between elements of the models (traceability relation) that relates persons with the same name in both models.
Whenever new persons are created in the left model, their age should be set to the default value of 18.
An executable implementation of the consistency relation will be added soon.
This is an example of a consistency relation that is:
Here is a summary of the existing test cases for this benchmark:
| Test case | Status | Operational mode | Kind | Measured features |
|---|---|---|---|---|
| Person2Person.BCF | Draft | Batch forward propagation | Conformance | Correctness, Completeness |
| Person2Person.BCB | Draft | Batch backward propagation | Conformance | Correctness, Completeness |
| Person2Person.BSF | Draft | Batch forward propagation | Performance | Runtime (scalability), Memory (scalability) |
| Person2Person.BSB | Draft | Batch backward propagation | Performance | Runtime (scalability), Memory (scalability) |
| Person2Person.MCB | Draft | State-based backward propagation | Conformance | Correctness, Completeness, Hippocraticness |
Only test cases marked as final can be referenced in publications.
The goal of this test case is to assess the conformance of a batch forward propagation of type:
fwd :: Left -> Right
This test case shall be identified as Person2Person.B.CF, and benchmarked tools shall report the percentage of successful runs.
Each of the following runs is successful if the propagation always succeeds (completeness) and the produced right model is consistent with the input left model (correctness).
| Run | Propagation | Input left model |
|---|---|---|
| Person2Person.BCF.1 | fwd | Left 1 (.xmi) |
| Person2Person.BCF.2 | fwd | Left 2 (.xmi) |
| Person2Person.BCF.3 | fwd | Left 3 (.xmi) |
| Person2Person.BCF.4 | fwd | Left 4 (.xmi) |
The goal of this test suite is to assess the conformance of a batch backward transformation of type:
bwd :: Right -> Left
This test case shall be identified as Person2Person.B.CB, and benchmarked tools shall report the percentage of successful runs.
Each of the following runs is successful if the propagation always succeeds (completeness) and the produced left model is consistent with the input right model (correctness).
| Run | Propagation | Input right model |
|---|---|---|
| Person2Person.BCB.1 | bwd | Right 1 (.xmi) |
| Person2Person.BCB.2 | bwd | Right 2 (.xmi) |
| Person2Person.BCB.3 | bwd | Right 3 (.xmi) |
| Person2Person.BCB.4 | bwd | Right 4 (.xmi) |
The goal of this test case is to assess the performance of the forward propagation run in batch mode. This test case shall be identified as Person2Person.BSF, and benchmarked tools shall report runtime and memory scalability (O-notation) taking into account runs with increasing left-model sizes, starting from 100 and at least up to 1000.
The goal of this test case is to assess the performance of the backward propagation run in batch mode. This test case shall be identified as Person2Person.BSB, and benchmarked tools shall report runtime and memory scalability (O-notation) taking into account runs with increasing right-model sizes, starting from 100 and at least up to 1000.
The goal of this test case is to assess the conformance of a state based backward propagation. This test suite shall be identified as Person2Person.MCB, and benchmarked tools shall report the percentage of successful runs.
This test case can be applied to tools providing the following interface, allowing the propagation of updates from the right model to the left one in the the style of constraint maintainers (where only the result state of updating the right model is known). Since the right model contains strictly less information than the left one, the dual test case is equivalent to batch forward propagation and thus is omitted.
bwd :: Left -> Right -> Left
Each of the following runs is successful if the backward propagation succeeds in producing a model (completeness), the output (updated) left model is consistent with the input right model (correctness) and, when the input original left model is already consistent with the input right model, the output left model should be equal (or isomorphic) to the input one (hippocraticness). Creation of default ages cannot be checked in general for this scenario, since deletion and posterior creation of a person in the right model is indistinguishable from name modification.
| Run | Propagation | Input left model | Input right model |
|---|---|---|---|
| Person2Person.MCB.1 | bwd | Left 1 (.xmi) | Right 1 (.xmi) |
| Person2Person.MCB.2 | bwd | Left 1 (.xmi) | Right 2 (.xmi) |