presentación: “loosely coupled traceability for atl” frederic jouault 2005

75
Presentación: Presentación: “Loosely Coupled “Loosely Coupled Traceability for ATL” Traceability for ATL” Frederic Jouault 2005 Profesoras: Roxana Giandini y Claudia Pons. Alumnos: Liliana Redruello, Viviana Esterkin, Laura Riva, Esteban Calabria. SEMINARIO DE ACTUALIZACION TECNOLOGICA

Upload: todd

Post on 05-Feb-2016

30 views

Category:

Documents


0 download

DESCRIPTION

Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005. SEMINARIO DE ACTUALIZACION TECNOLOGICA. Profesoras: Roxana Giandini y Claudia Pons. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Presentación:Presentación:“Loosely Coupled “Loosely Coupled

Traceability for ATL”Traceability for ATL”Frederic Jouault

2005

Profesoras: Roxana Giandini y Claudia Pons.

Alumnos: Liliana Redruello, Viviana Esterkin,

Laura Riva, Esteban Calabria.

SEMINARIO DE ACTUALIZACION TECNOLOGICA

Page 2: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

ATL

Page 3: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

ATL Transformation Approach

Page 4: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Arquitectura ATL Arquitectura de tres

niveles:

AMW

ATL

ATL VM

ATL compiler

AMW to ATLtransformations

Page 5: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Componentes ATL

AMW (ATLAS Model Weaver): Metamodelo genérico para establecer links entre

los elementos del modelo (metamodel for model weaving) - precompilador

ATL: Lenguaje de transformación híbrido

ATL VM: Máquina virtual para ejecutar las

transformaciones de modelos

Page 6: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

El AMW visto por otros autores

En su artículo “Towards Rigorously Defined Model-To-Model Traceability”, Nicholas Drivalos et al de la University of New York dicen:

“AMW, Atlas Model Weaver, es una herramienta creada por INRIA como

parte del Atlas Model Mangement Arquitecture. Su objetivo principal es la captura y alamcenamiento de los links

entre modelos”

Page 7: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Trazabilidad

Page 8: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Trazabilidad

Definición de la IEEE, del glosario de terminología de Ingeniería de Software:

“ The degree to which a relationship can be established between two or more products of the development process, especially products having a predecessor-sucessor or master-subordinate relationship to one another; for example the degree to which the requirements and design of a given component match.”

Conceptos extractados del artículo “Building Model Driven Engineering Traceability Classifications”, Richard Paige et al, University of New York, 2008

Page 9: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Trazabilidad (cont)

En la ingeniería del software trazabilidad tiene dos semánticas principales dependiendo del contexto: Trazabilidad en ingeniería de requerimientos es

el “tracking” de un requerimiento desde su expresión a su implementación.

Trazabilidad en MDD :Trazabilidad de modelos durante una transformación

“A Traceability Engine Dedicated to Model Transformation for Software Engineering”, Bastien Amar

et al, IRIT, Universite Paul Sabatier

Page 10: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Cómo se aplica el concepto

Trazabilidad se refiere a la capacidad de rastrear artefactos a lo largo de operaciones encadenadas.

Las operaciones pueden ser: Manuales :realizar un diseño de software para un

conjunto de requerimientos. Automatizadas :generando código a partir de un

conjunto de definiciones abstractas.

Page 11: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

TraceLinks

Page 12: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Trace Links

Se utiliza el término “trace links” para referirse a la relación de trazabilidad:

Las relaciones entre los modelos se llaman Trace Links:

Artefactos no-modelo, “traced” a modelos

Artefactos modelo “traced” a modelos

Conceptos extractados del artículo “Building Model Driven Engineering Traceability

Classifications”, Richard Paige et al, University of New York, 2008

Page 13: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Trace Links (2)

Por ejemplo:

Lenguaje de descripción informal de requerimientos a Modelo de casos de uso.

Modelo de casos de uso a Diagrama de clase.

Conceptos extractados del artículo “Building Model Driven Engineering Traceability

Classifications”, Richard Paige et al, University of New York, 2008

Page 14: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Loosely Coupled Traceability for ATL

Frederic Jouault

Atlas Group, INRIA and LINA

University of Nantes, France

Page 15: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

ABSTRACT

En el contexto de la transformación de modelos, la información de trazabilidad

puede utilizarse en una variedad de escenarios. Cada uno de ellos, requiere

potencialmente un formato o nivel de complejidad diferente. Por otra parte, un

único programa de transformación puede utilizarse en diferentes contextos.

Consecuentemente, puede ser necesario que ese programa genere

diferentes tipos de información de trazabilidad.

Page 16: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

ABSTRACT (2)

Este trabajo tiene por objeto mostrar como la trazabilidad puede

agregarse a programas escritos en ATLAS Transformation Language

limitando dependencias con la lógica del programa. Para

implementar este enfoque se utiliza la transformación de modelos.

Page 17: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Introducción

Page 18: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

IntroducciónCuestiones generales

La transformación de modelos como ingrediente central en la ingeniería de modelos.

QVT y ATL son dos ejemplos de lenguajes de transformación de modelos entre muchos otros.

Page 19: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Introducción Los lenguajes de transformación

Los lenguajes de transformación de modelos se enfocan en la especificación y ejecución de la transformación.

Pero también hacen uso de trazabilidad.

Page 20: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Introducción Trazabilidad

Definición de trazabilidad en la transformación de modelos (utilizado en el artículo):

“Un lenguaje o motor que es capaz de mantener un conjunto de relaciones entre los correspondientes elementos fuente (source) y destino (target), se dice que soporta trazabilidad.”

Page 21: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Introducción Links

También pueden guardarse en la traza, los elementos de programa responsables de estas relaciones, por ejemplo una regla que especifica como se transforma un conjunto de elementos origen en otro conjunto destino.

Page 22: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Introducción Requerimientos de información de la

trazabilidad

Variarán en al menos dos dimensiones:

Rango

y

Formato

Page 23: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Introducción Rango y Formato

Rango: el rango del uso de la trazabilidad corresponde a la cantidad de

elementos para los cuales se mantienen links

Formato La información de trazabilidad corresponde a la forma en que se

codifican los links.

En tanto algunas aplicaciones necesitan links sencillos para modelar los elementos, otros requerirán codificación mas compleja.

Page 24: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

IntroducciónLos distintos tipos de trazabilidad

En muchos casos un programa de transformación puede requerir el soporte de distintos tipos de trazabilidad, por lo que pueden incluirse distintos tipos de rango y formato y esto muchas veces no se conoce en tiempo de diseño del programa ni en en tiempo de desarrollo.

Page 25: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

IntroducciónSolución propuesta

Attachear código de generación de trazabilidad a programas ATL pre-existentes.

Page 26: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

IntroducciónBases de la solución

La solución propuesta se basa en dos consideraciones esenciales:

• Los programas de transformación se consideran modelos.

• La información de trazabilidad se considera un modelo.

“Everything is a model”

Page 27: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Enfoque utilizado

Se presenta un caso de estudio sencillo que se utiliza a lo largo del trabajo.

Se muestra como el considerar la información de trazabilidad como modelo permite una codificación simple para generarla.

Se muestra como, considerar los programas de transformación como modelos permite insertar código de generación de trazabilidad en programas ATL pre-existentes.

Page 28: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Caso de Estudio

Metamodelos Src y Dst

Src Dst

+name: String +name:String

A B

Page 29: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Explicación de la figura anterior

Consideremos dos metamodelos simples Src (source) y Dst (destination).

El metamodelo Src contiene una sola clase llamada A, que tiene un único atributo name.

El metamodelo Dst es idéntico excepto el nombre de la clase que es B.

Page 30: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Transformación de Src a Dst

Consideramos la transformación de de Src a Dst que traduce cada A en un B que tiene el mismo atributo name.

El código de la transformación es el siguiente:

Page 31: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Transformación de Src a Dst (Cont)

Page 32: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Código ATL de la transformación A a B

1. Module Src2Dst;

2. Create Out: Dst from IN : Src;

3. -----

4. rule A2B {

5. from

6. s : Src!A

7. to

8. t : Dst! B (

9. name s.name

10. )

11. }

Page 33: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Desarrollo : Trazabilidad como Modelo

Page 34: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

“Todo es un modelo”

Traceability como modelo.

Programas de Transformación como modelos.

Page 35: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Transformaciones de modelos

META META MODELO

TRANSFORMACION A-BMODELO A MODELO B

MDE: “Todo es un modelo” Jean Bézivin

META MODELO B

META MODELO TANSFORMACION

META MODELO A

Page 36: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Traceability como Modelo

Page 37: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

EMF = Eclipse Modeling Framework

Es un framework de Eclipse para definición de lenguajes de modelado y generación de código a partir de los modelos.

Permite generar código fuente, sin perder las modificaciones hechas por los usuarios.

Page 38: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

EMF = Eclipse Modeling Framework

Básicamente Eclipse define a partir de un modelo eCore. El código para manipular ese modelo. Un plugin edit para poder visualizar las

propiedades de los componentes del modelo en Eclipse.

Un editor para crear instancias de ese modelo

http://www.eclipse.org/modeling/emf/

Page 39: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

ATL Con trazabilidad

Page 40: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

.atl como modelo1. module Src2DstPlusTrace;2. create OUT : Dst, trace : Trace from IN : Src;3.4. rule A2BPlusTrace {5. from6. s : Src!A7. to8. t : Dst!B (9. name <- s.name10. ),11. traceLink : Trace!TraceLink (12. ruleName <- 'A2BPlusTrace',13. targetElements <- Sequence {t}14. )15. do {

Page 41: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

.atl como modelo (cont.)

16. traceLink.refSetValue('sourceElements',

17. Sequence {s});

18. }

19. }

Page 42: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

TracerAdder

Page 43: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Programa de transformación como modelos

Transforma un programa ATL en otro programa ATL por transformación de modelos.

TracerAdder es una transformación que inserta automáticamente el código para generación de trazas a una transformación preexistente.

Opera en modo refinamiento: los elementos de origen que no se correspondieron son automáticamente copiados en el modelo de salida.

TracerAdder

Page 44: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Programa de transformación como modelo

Debe utilizarse antes de la compilación de ATL (por lo tanto se incluye dentro del programa ATL pre-existente en una etapa de precompilación).

Opera directamente sobre la sintaxis abstracta.

TracerAdder (cont.)

Page 45: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

DEBATE

Page 46: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

TRAZABILIDAD ACOPLADA

Código de Generación de Trazabilidad esta débilmente acoplado a la transformación lógica.

• La transformación lógica no depende de este. Se puede agregar el código de generación de trazabilidad a otros programas que no fueron diseñados para ello.

• Varias clases de trazabilidad se pueden agregar a una transformación dada dependiendo de los requerimientos de rango y formato.

Se pueden desarrollar Librerías de trazabilidad como TracerAdder.

Page 47: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

ADAPTABILIDAD DE RANGO

El código de generación de trazabilidad puede ser agregado condicionalmente.• Trace Links son generados en algunas reglas

(rules).• Otras reglas permanecen sin modificar.

RANGO: corresponde a la proporción de elementos para los que se mantienen los links.

Page 48: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

ADAPTABILIDAD DE RANGO (cont.)

El código de generación de trazabilidad cubre sólo partes de una regla.

Es mejor para escalar o tener una buena performance la:

• Generación de trazabilidad completa.• Eliminación (filter out) de los links no deseados.

Page 49: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

ADAPTABILIDAD DE FORMATO

La trazabilidad de información se generará como un modelo.

• Las transformaciones modelo-a-modelo se aplican conforme un metamodelo específico.

• Los modelos pueden ser procesados en cualquier formato.

TracerAdder puede modificarse para no agregar código de generación de trazabilidad a reglas específicas y reducir el tamaño del modelo de traza.

FORMATO: corresponde a la forma en que se codifican los links.

Page 50: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

ALMACENAMIENTO DE LINKS DE TRAZABILIDAD

La información de trazabilidad esta almacenada dentro del artefacto.

“Modelo sucio”.

En modelos UML se usan asociaciones “Refines” que conectan los elementos que participan.

INTERNA:

Source Target

Page 51: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

ALMACENAMIENTO DE LINKS DE TRAZABILIDAD

La información de trazabilidad es almacenada en forma separada de los modelos que hacen referencia. (En un modelo separado).Los modelos de origen-destino permanecen “Limpios”.Cada elemento del modelo debe tener una única y persistente identificación para que links externos se puedan resolver sin ambigüedad.

EXTERNA:Source Target

Trace

Page 52: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Creación de los Tracelinks

Page 53: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

COMO SE CREAN LOS TRACE LINKS

Usando EMF (Eclipse Modeling Framework)• Uso Eobject en lugar de AnyModel Element, entonces

SourceElements y TargetElements pueden apuntar a cualquier elemento del modelo.

• Esta es la opción elegida por los autores del paper

Usando Model Weaving (AMW – Atlas Model Weaver)• Los links de trazabilidad son visualizados en AMW.• Los links Cross-Model son manejados por la herramienta.

Page 54: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Atlas Model Weaver (AMW)

Generating an ATL Execution Trace as a Traceability Weaving Model

http://apps.eclipse.org/gmt/amw/examples/ATL2WTracer/Traceability_example[1.0].pdf

Page 55: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

OTRAS OPCIONES DE IMPLEMENTACION

Trazabilidad podría se implementada usando otras soluciones:

• Los motores de ATL mantienen links de trazabilidad interna que podrían ser serializados.

• Podrían especificar lenguajes constructores para soportar trazabilidad.

• Podrían usar reglas de herencia para adjuntar débilmente el código de traza a las reglas existentes.

• Desarrollando código PLUG-IN de trazas dinámicamente donde sea necesario.

Page 56: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Conclusiones

Page 57: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

CONCLUSIONES

Provee débil acoplamiento entre transformación lógica y código de generación de trazabilidad.

Se adapta fácilmente a varios rangos y formatos.

Se inserta código de generación de trazabilidad fácilmente al código ATL. Este proceso puede ser completamente automatizado.

Se propuso un enfoque para trazabilidad en ATL que:

Page 58: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

CONCLUSIONES (cont.)

Utiliza el código TracerAdder en forma transparente por el compilador ATL.

No requiere ningún lenguaje de soporte o modificador de motor.

Se propuso un enfoque para trazabilidad en ATL que:

Page 59: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

CONCLUSIONES (cont.)

Cualquier parte del modelo de ATL puede ser extendido o transformado.

Trazabilidad puede ser considerado como un cross-cutting que requiere de la inserción de código.

Puede ser adaptado por otros lenguajes de transformación.

Page 60: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Resumen

Page 61: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Aplicado al Paper

Page 62: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Sin Trazabilidad

act S/Info Trace

Source Model Destination ModelATL Transformation sin informacion trazability

Page 63: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Con trazabilidad fuertemente acoplada

act c/trace acoplada

Source Model Destination ModelATL Transformation con Informacion Trazability

Trazability Model

Page 64: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Con trazabilidad debilmente acoplada

act c/trazabilidad debilmente acoplada

ATL Transformation sin informacion trazability

Trace Adder (ATL)

ATL Transformation con Informacion

TrazabilitySource Model Destination Model

Trazability Model

Page 65: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Metamodelo del Modelo de trazabilidad

class Trace Model

TraceLink

- ruleName: string

AnyModelElement

+targetElements

*

+sourceElements

*

Page 66: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

ANEXO A

Page 67: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

ATL Metamodel

Fuente:

http://www.eclipse.org/m2m/atl/atlTransformations/

ATL2Problem/ExampleATL2Problem%5Bv00.01%

5D.pdf

Page 68: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

class ATL-Model-1

Element

- commentsAfter: string- commentsBefore: string- location: string

Unit

- name: string

Module

- isRefining: boolean

Library Query

LibraryRef

- name: string

+libraries

*

+unit

1

Page 69: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

class ATL-Model-2

Unit

Module

- isRefining: boolean

ModuleElement

OclModel

Rule

- name: string

Helper

*1

*

1

Page 70: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

class ATL-Model-3

ModuleElement

Rule

- name: string

MatchedRule

- isAbstract: boolean- isRefining: boolean

OutPattern

InPattern

RuleVariableDeclaration

PatternElement

VariableDeclaration

- ID: string- varName: string

+outpattern

0..*1

+inPattern

0..*1

Page 71: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

class ATL-Model-4

VariableDeclaration

PatternElement

InPattern OutPattern

SimplePatternElement IterateInPatternElement OCLExpression

Binding

Page 72: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Comentarios

Page 73: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Comentarios de otros autores sobre la propuesta de Jouault

En el artículo“A Traceability Engine Dedicated to Model Transformation for Software Engineering”, Bastien Amar et al, (IRIT, Universite Paul Sabatier), dicen:

“Jouault (2005)propone generar links de trazabilidad en ATL, aplicando una transformación de segundo orden para insertar reglas de trazabilidad en la transformación original. Esta transformación de un programa puede ser visualizada como una precompilación o como una meta-transformación. Sin embargo este enfoque puede aplicarse únicamente a un lenguaje declarativo”

Page 74: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Comentarios de otros autores sobre la propuesta de Jouault (cont)

En su artículo “Fine Grained Traceability for an MDE Aproach of Embedded Systems Conception”, Flori Glitia et al de LIFL, University of Sciences and Technologies of Lille, France, dicen:

“Muchas soluciones de trazabilidad se han propuesto en la literatura, cada una de ellas respondiendo a necesidades específicas de proyectos. MDE tiene el principio everything is a model, o sea que parecería una buena solución almacenar la información de trazabilidad como modelos. Se han propuesto soluciones para guardar la información de la traza en los modelos iniciales fuente y destino. El mayor problema que genera esta solución es que poluciona los modelos con información adicional y requiere adaptación de los metamodelos para que tengan en cuenta la trazabilidad. Utilizar un modelo de Trazabilidad separado con una semántica específica tiene la ventaja de guardar información de trazabilidad independiente de los modelos iniciales. Por esta razón, la generación de trazabilidad puede ser implementada manualmente en las transformaciones para producir un modelo destino de traza en forma adicional o puede ser soportado por el motor de transformación.”

Page 75: Presentación: “Loosely Coupled Traceability for ATL” Frederic Jouault 2005

Referencias

Bézivin, J., On the unification power of models, Software and Systems Modeling, Volume 4, Issue 2, May 2005, pages 171 – 188.

Budinsky, F., Steinberg, D., Raymond Ellersick, R., Ed Merks, E., Brodsky, S. A. and Grose, T. J., Eclipse Modeling Framework, Addison Wesley, 2003.

Jouault, F. and Kurtev, I., Transforming Models with ATL, in proceedings of the Model Transformation in Practice Workshop, October 3rd 2005, part of the MoDELS 2005 conference.

Dimitrios S. Kolovos, Richard F. Paige and Fiona A.C. Polack On-Demand Merging of Traceability Links with Models.