The Gotten Framework

Generic MDE framework fOr meTamorphic TEstiNg

View project on GitHub

Welcome to the Gotten Framework Page

The Gotten environment

We propose a model-driven engineering approach to automate the construction of Metamorphic Testing (MT) environments. Starting from a meta-model capturing the domain concepts, and a description of the domain execution environment, our approach produces an MT environment featuring comprehensive support for the MT process. This includes the definition of domain-specific Metamorphic Relations (MRs), their evaluation, detailed reporting of the testing results, and the automated search-based generation of follow-up test cases.

The mrDSL language for the definition and execution of MRs

With that purpose, the Gotten environment provides a DSL called mrDSL to define and execute MRs. There you can declare the domain meta-models and the instance names used, the input features, that are defined by means of an OCL expression, the output features, the processors’ attributes and the MRs.

metamodel datacentre "/sample.gotten/model/datac.ecore" with m1, m2
models "/sample.gotten/model/dcmodels"
metamodel workload "/sample.gotten/model/workload.ecore" with w1, w2
models "/sample.gotten/model/workloads"

datacentre input Features {
	context DataCentre def: NNodes: Int = racks->collect(numBoards*board.nodesPerBoard)->sum()
	context DataCentre def: CPU: Int = racks->collect(
output Features {
	Time : Long
	Energy : Long
Processor {
	Name: String
	Version: String
MetamorphicRelations {
	MR1 = [(( NNodes(m1) > NNodes(m2) ) and ((w1) == (w2)) ) implies ((Time(m1) <= Time(m2)))]
	MR2 = [(( CPU(m1) > CPU(m2) ) and ((w1) == (w2)) ) implies ((Energy(m1) <= Energy(m2)))]

The fowDSL language for the follow-up test cases generation

Gotten provides a DSL for the follow-up test cases generation called fowDSL. The followup-test cases generation method is based on MOMoT. There you can define the conditions of the followup-test cases generation for each MR. You can define for the corresponding feature the desired operations to increase/decrease numeric attributes or to create/delete objects, also setting the operation limits.

followups for datacentre using MR1
with source folder = "/sample.gotten/model/dcmodels"
and output folder = "/sample.gotten/model/dcmodels"

NNodes ->  decrease [1..4] Rack.numBoards keeping {Rack.numBoards > 0};
           decrease [1..4] Board.nodesPerBoard keeping {Board.nodesPerBoard > 0}

maximize ( NNodes(m2) - NNodes(m1) )

maxSolutions 10
iterations 2                               
algorithms [Random, NSGAII, NSGAIII, eMOEA]

Gotten installation

Gotten installation

  • Before installing Gotten from the update-site, you need to have MOMoT installed in your environment:

MOMoT installation

Gotten for cloud projects

Gotten for video streaming APIs

The Gotten environment in action

  • This is the Gotten development environment in action (click on image to see YouTube demo):

Gotten environment in action

  • This is the Gotten wizard to execute the MT process:

Gotten wizard

Authors and contributors

Gotten has been developed by Pablo C. Cañizares, Pablo Gómez-Abajo, Alberto Núñez, Esther Guerra and Juan de Lara. At this point, we would like to thank the developers of the following frameworks, which we have used in order to develop Gotten:

  • Xtext: Xtext tailors the development of programming languages and domain-specific languages. With Xtext you define your language using a powerful grammar language.
  • Henshin: Henshin is used to formulate the transformation units to manipulate the model.
  • MOMoT: MOMoT is a framework that combines MDE techniques with search-based optimization (population-based search and local search) to solve highly complex problems on model level.


This work has been funded by the Spanish Ministry of Science (RTI2018-095255-B-I00, project “MASSIVE”) and the R&D programme of Madrid (P2018/TCS-4314, project “FORTE”).