Download Modelos
Document related concepts
no text concepts found
Transcript
Sobre la adopción industrial de MDE Jesús J. García Molina Grupo Modelum Universidad de Murcia [email protected] DFD, Statecharts, Petri nets, E/R, etc. 80's Domain Specific Languages (DSL) 1997 UML 1.1 2000 MDA Mediados 00's 2016 MDE (MDA, Domain Specific Development, Software Factories, Modernization, ...) ¿Estado en la Adopción Industrial de MDE? ¿Cómo mejorar la productividad (y calidad)? + Abstracción + Automatización + Abstracción + Automatización Lenguajes de Programación tipos de datos, clases, métodos etc. Compiladores / Intérpretes Lenguajes Ensambladores registros CPU, direcciones MC, etc. Dominio del Problema accion bono Salto Semantico cuenta Dominio de la Solución objeto clase tipo fondo inversión modulo Generación de código (o interpretación) Modelado Representación con alto nivel de abstracción Lenguajes Específicos del Dominio (DSL) / Lenguajes de Modelado Conceptos del Dominio + Abstraction + Automation Compilador / Intérprete Lenguajes de Programación tipos de datos, clases, métodos etc. Compilador / Intérprete Lenguajes Ensambladores registros CPU, direcciones MC, etc. DSL to generate apps for smartphones Nokia S60 (http://dsmforum.org/phone.html ) SCULPTOR (Generation of Java code) Windows Workflows Foundation (WF) DOT/Graphviz (graph visualization) http://www.graphviz.org/Gallery.php WindowBuilder (GUI builder) (https://eclipse.org/windowbuilder/ ) DSL Definition ̶ ̶ ̶ ̶ ̶ ̶ ̶ ̶ ̶ ̶ ̶ ̶ ̶ Un Lenguaje Específico del Dominio (DSL) ofrece construcciones y notation que es apropiada para resolver problemas en un particular dominio. SQL GUI builder HTML make YACC Matlab Mathematica Excel OCL GraphViz Csound WebUML etc. Activity area: Business, Domotic, Banking, Financial,.. Knowledge area: Graphs, Biomedical, Statistics… Software area: Web, Mobile, Editors, Parsers,.. Beneficios de uso de DSL vs. GPL: – Mayor expresividad y facilidad de uso. • A menudo son lenguajes declarativos. – Programas (Modelos) más cortos y legibles. – Se incrementa la productividad. • Generación automática de código – Se reducen costes de mantenimiento. – Se facilita comunicación con expertos del dominio. – Posible mayor número de programadores. +Abstracción + Automatización ¿Cómo conseguir mayor abstracción y automatización? Entornos CASE (90’s) ¡No tuvieron el éxito esperado! Lenguajes de programación No estándares, muchos vendedores Muchos lenguajes de modelado Generación de código poco útil Orientación a objetos contribuyó a la pérdida de interés “De los objetos a los modelos” MDE Valor Abstracción, Reutilización y Automatización limitada OO Tiempo (Jack Greenfield y Keith Short, “Software Factories”, 2004) Modelo “Un modelo es una representación de la realidad que es obtenida por medio de un proceso de abstracción con el propósito de ayudar a comprender y razonar sobre esa realidad". Un modelo es expresado en un lenguaje. Modelo “Un modelo es una representación de la realidad que es obtenida por medio de un proceso de abstracción con el propósito de ayudar a comprender y razonar sobre esa realidad". Un modelo es expresado en un lenguaje. Modelos del Software Una descripción abstracta de algún aspecto de los sistemas software, por ejemplo: requisitos, estructura, comportamiento,.. Diagramas de clase UML Diagramas de Secuencia UML Otros Diagramas UML Responsable Se rv ici o PE Alumno Diagrama de actividades Sistema Registrar Curso Aprobar Curso Preinscripción Avisar Admitidos Mat riculación Hay alumnos? no Cambiar admitidos Hay alumnos? no Cancelar Curso Diagrama de Despliegue Crear Proyecto Cerrar Curso introducirProducto Espera Venta introducirProducto Introduccion Productos Terminar Venta manejarRespuesta efectuar Pago Efectivo Máquinas de estado Autorizacion Pago efectuar Pago Tarjeta Espera Pago ¿Cuál es la utilidad de los modelos? Documentación Comunicación con modelos Razonar con modelos UML y MDE “I have witnessed many thousands of projects extract value from the use of the UML. That being said, there appear to be three common modes of failure among those (vastly fewer number of) projects that have failed to derive value from the UML…. some projects use the UML only as a means of documenting their design decisions. " Precision is especially important for the next phase in the growth of the UML, namely, as a language for Model-Driven Development. MDD represents an approach to delivering software intensive systems through the transformation of models –primarily expressed in the UML – into executable components and applications. Grady Booch, “Growing the UML”, ICSE, 2002 De modelos para documentar … public interface Cuenta extends EJBObject {...} public interface CuentaHome extends EJBHome {...} public abstract class CuentaBean implements EntityBean{...} ... <<BusinessEntity>> Cuenta <<UniqueID>> codigo : Integer 0..n saldo : Float 1 <<BusinessEntity>> Cliente <<UniqueId>> id : String nombre : St ring apelli do : St ring <<Query>> fi ndByLast Name() .. a modelos para generar código <<BusinessEntity>> Cuenta <<UniqueID>> codigo : Integer 0..n saldo : Float 1 <<BusinessEntity>> Cliente <<UniqueId>> id : String nombre : St ring apelli do : St ring <<Query>> fi ndByLast Name() Automatización public interface Cuenta extends EJBObject {...} public interface CuentaHome extends EJBHome {...} public abstract class CuentaBean implements EntityBean{...} ... MDA m2m PIM Modelo independiente de la plataforma m2t PSM Código Modelo específico de la plataforma MDA = MDE (Primera etapa) MDA Iniciativa de OMG (2000) DSL eran Perfiles UML OCL QVT Estándares Mof2Text Model-Driven Software Engineering (MDE) Abstracción MDE Automatización Estándares Model-Driven Software Engineering (MDE) Uso sistemático de modelos en las etapas del ciclo de vida del desarrollo de software para incrementar los niveles de abstracción y automatización. Intención Código Modelo Solución MDE Principios básicos de MDE Modelos se expresan con DSLs (lenguajes de modelado) DSLs definidos con metamodelos La automatización se consigue con transformaciones de modelos Solución MDE (Generación de código) Metamodel 2 Metamodel 1 <<conforms>> m2m <<conforms>> <<conforms>> Model 2 Model 1 DSL Grammar/ XMLSchema/ … Code … m2m m2t Cadena de transformaciones de modelos - Esfuerzo + Legibilidad + Comunicación -Errores -Mantenimiento DSL Nokia 1 o más transformaciones Generación automática de código <<conforms>> Código C++ Metamodelo DSL Nokia Solución MDE Framework aplicaciones móviles Plataforma Metamodelo vs. Gramática Meta-metamodelo (e.g. Ecore) Conforma a Metamodelo UML Conforma a Modelo UML EBNF Conforma a Gramática Java Conforma a Programa Java Ejemplo: Modelos Entidades Negocio Ejemplo: Entity metamodel Transformación modelo a modelo Entity metamodel m2m Simple Relational metamodel Schema name: String * Table 0..1 tbls name: String refs 1 pkey cols * * FKey fkeys Column name: String type: String * cols Ejemplo de transformación m2m phase 'entity2table' do top_rule 'class2table' do from ClassM::Entity to TableM::Table mapping do |entity, table| table.name = entity.name table.cols = entity.props end end rule 'property2column' do from ClassM::Property to TableM::Column mapping do |prop, column| column.name = prop.name column.type = prop.type end end end ATL, QVT, ETL, RubyTL.. Java+API EMF Transformación modelo a texto props Entity Property * name:String name:String type: DataType Metamodelo instance-of m2t Account code: String owner: String Modelo public class Account{ //Atributos private String code; private String owner; //Constructor public Account() { } //Métodos public void setCode(String code){ this.code= code; } public String getCode() { return this. code; } public void setOwner(String s){ this.owner= s; } public String getOwner() { return this.owner; } 44 Ejemplo de definición de transformación m2t [template public Entity2JavaClass(c : Entity) ] class [c.name/] { // Atributos [for (a : Property| c.props)] [a.type.name/] [a.name/]; [/for] class Account { // Atributos String code; String owner; //Constructores Account() { } } // Constructores [c.name/] () { } } [/template] Acceleo, MofScript Xtend, Java,.., + API EMF Solución MDE (Generación de código) Metamodel 2 Metamodel 1 <<conforms>> m2m <<conforms>> <<conforms>> Model 2 Model 1 DSL Grammar/ XMLSchema/ … Code … m2m m2t Cadena de transformaciones de modelos MDE para Evolución de Software Código - Migración - Ingeniería inversa - Obtener métricas … Modelo Solución MDE Cadena de transformaciones de modelos Código PL/SQL (Oracle Forms) Solución MDE (Migración) Aplicación Java MDE Use Cases MDA MDD Domain-Specific Modeling MDE Software evolution Reverse Engineering ADM Model@ Runtime MDE MDA = MDE DSL eran Perfiles UML MDE Perfiles UML NO son recomendados MDA Desarrollo con DSLs Modernización Models@Runtime Escenarios de automatización MDE Tareas “receta” de codificación – Ejemplo: Generar wrappers Java para PL/SQL Generar código para frameworks Generar GUIs, tests, DDL scripts, … Automatizar proceso de despliegue Migración Automatizar procesos basados en workflows ... Tipos de herramientas Herramientas de modelado Basadas en UML u otros lenguajes de modelado Facilitan el desarrollo de aplicaciones Pueden soportar todo el ciclo de vida Generadores de aplicaciones Integran varios DSL y componentes Herramientas de definición de DSL Generan editor, parser, inyector de modelos Pueden integrar lenguajes de transformación de modelos Frameworks basados en modelos Construidos alrededor de un lenguaje de metamodelado Creación de DSLs Lenguajes de transformación de modelos Validación, Comparación, Almacenamiento Herramientas de modelado Desarrollo de software Bases de datos Simulación Sistemas de tiempo real Ciclo de vida completo Generadores de aplicaciones Herramientas de creación de DSLs Framework MDE Ejemplos de uso de MDE PL/SQL Wrapper Java Xtext Inyección m2t MofScript (discontinued) Modelo PL-SQL - Esfuerzo + Legibilidad + Comunicación -Errores -Mantenimiento DSL Nokia 1 o más transformaciones Generación automática de código <<conforms>> Código C++ Metamodelo DSL Nokia Solución MDE Framework aplicaciones móviles Plataforma «m2m» circe2relational package facturaDemo; entity Factura { ref cliente[1] : Cliente; ref partes [_] container : Item; attr fecha[1] : Date; -- Se obtendría de forma manual -- modificando el código generado attr total [1] : Float; } entity Item { attr descripcion [1] : String ; attr cantidad [1] : Integer; attr precio [1] : Float; } entity Cliente { attr name[1] : String ; } «model» Circe_Relacional «m2t» relational2sql Scripts SQL «m2m» circe2hibernate «model» Circe_Hibernate «m2t» hibernatel2mappings <<model>> Circe <<conforma>> «m2m» circe2tapestry «model» Circe_Tapestry CRUD forms Metamodel Circe MDE Solution Hibernate mappings «m2t» Tapestry2Code Componentes Específicos de la app Cadena de transformaciones de modelos Código PL/SQL (Oracle Forms) Solución MDE (Migración) Aplicación Java Perhaps surprisingly, the majority of MDE examples in our study followed domain-specific modeling paradigms: the companies who successfully applied MDE largely did so by creating or using languages specifically developed for their domain, rather than using UML. It’s common to develop small domain-specific languages (DSLs) for narrow, well-understood domains. In contrast to perceived wisdom practical application of domain modeling is “quick and dirty,” where DSLs (and accompanying generators) can be developed sometimes in as little as two weeks. There’s also widespread use of mini-DSLs, even within a single project. A clear challenge, then, is how to integrate multiple DSLs. Our participants tended to use them in combination with UML—in some cases, the DSL was a UML profile. Whatever the context, however, modeling languages requires significant customization before the languages can be applied in practice. Jack Greenfield (2004) “We think that the latitude afforded by GPLs is needed only for a small part of the typical business application. Most of the work can be made faster, cheaper, and less risky by using constrained configurarion mechanisms like setting properties, wizards, features models, MDE, and patterns” “Just as moving from assemby language to GPLs yields significant benefits for … there is much more benefit to be gained by moving to even higher levels of abstractions (DSLs)” Sergey Dmitriev (2004) “Any general-purpose language, like Java or C++, gives us the ability to do anything we want with a computer. This is true, at least in theory anyway, but GPLs tend to be unproductive as I will explore later. Alternatively, we could use DSL, which are tailored to be highly productive in a specific problem domain, such as SQL for writing database queries. " Sergey Dmitriev (2004) "It's not a question of general-purpose versus domain-specific. I want all freedoms. I want to be able to do anything, and also be highly productive at the same time. There aren't any good ways to do this yet. Ideally, I would be able to use different languages for each specialized part of the program, all working together coherently. And the environment would fully support these languages with refactoring, code completion, navigation, and all the other productivity tools that are available for mainstream languages." Martin Fowler (2010) The interest is increasing due to the framework and XMLintensive software development. Metamodeling-based DSL definition tools will play an important role in the near future. MDE ¿Por qué la adopción de MDE es lenta? Factores sociales y culturales – Inadecuada o errónea comprensión de MDE – Escasa formación de los programadores – Solución: Enseñar MDE en las universidades Factores económicos – Inercia al cambio en las empresas – Costes en herramientas y formación – Solución: Publicación de casos de éxito, tooling open-source financiado por la industria. Factores técnicos – Inmadurez de técnicas y herramientas MDE – Faltan fundamentos teóricos (lenguajes transformaciones, sincronización, validación) – Pobre usabilidad de herramientas de modelado, A. Moreira et al. (Eds.): MODELS 2013, LNCS 8107, pp. 1–17, 2013. Springer-Verlag Berlin Heidelberg 2013. Match tools to people, not the other way around. Our interviewees emphasized tool immaturity, complexity and lack of usability as major barriers. Finding the right problem is crucial. However, there is very little data about which parts of projects are good for MDE and which are not. Nor is there data about which tools are right for which jobs. Open MDE Communities. There is a distinct lack of open MDE developer forums. The big conclusion of our studies is that MDE can work, but it is a struggle. We need simpler tools and more focus on the underlying processes. As with any new method, MDE is highly dependent on a range of technical, social and organizational factors. Rather than assuming a perfect configuration of such factors, MDE methods and tools should be resilient to imperfections. • The experience of WebRatio, a company focusing on Model-Driven Engineering (MDE) tools and services since 2001. • The experience of using Booster in the development of a number of information systems, all of which were successfully deployed in real world situations. • The CancerGrid experience: Metadata-based model-driven engineering for clinical trials • Model-driven standardization of public authority data interchange • Description of two MDE projects carried out in two small companies. PL/SQL Wrapper Java Xtext Inyección m2t MofScript (discontinued) Modelo PL-SQL PL/SQL Wrapper Java MofScript Xtext m2t Inyección Modelo PL-SQL Etapa intermedia Modelo Wrappers RubyTL m2m «m2m» circe2relational package facturaDemo; entity Factura { ref cliente[1] : Cliente; ref partes [_] container : Item; attr fecha[1] : Date; -- Se obtendría de forma manual -- modificando el código generado attr total [1] : Float; } entity Item { attr descripcion [1] : String ; attr cantidad [1] : Integer; attr precio [1] : Float; } entity Cliente { attr name[1] : String ; } «model» Circe_Relacional «m2t» relational2sql Scripts SQL «m2m» circe2hibernate «model» Circe_Hibernate «m2t» hibernatel2mappings <<model>> Circe <<conforma>> «m2m» circe2tapestry «model» Circe_Tapestry Hibernate mappings CRUD forms Metamodel Circe «m2t» Tapestry2Code Componentes Específicos de la app Conclusion I described five situations in which MDD didn’t help us out. Do these five points lead us to the conclusion that there is no future for Model Driven Development? I don’t think so… It means that if we do MDD in a proper way we will get new challenges. Model Driven Development is necessary, but not sufficient! We need to focus on the full application lifecycle. We need to support the requirements gathering process. We need to translate requirements into models and deploy these models in an easy way. Once an application is deployed we need to gather feedback from users and translate this feedback into new requirements, create a new model version, and deploy a new version of the application. What we need is Agile Application Lifecycle Management. MDE. Gran interés en los últimos años “My cat is Model Driven” Some times ago, there was an excellent paper by Roger King entitled : "My cat is Object-Oriented" [1]. Today we could easily take the arguments expressed in this paper and repeat all of it again. Here is my cat named Caml. As Trash, Roger King's cat he has a lot of qualities that I would summarize today by stating how much model driven my cat is. (blog “Models Everywhere”, de Jean Bézìvin) [1] Roger King My Cat Is Object-Oriented. Object-Oriented Concepts, Databases, and Applications 1989: 23-30 Algunas conclusiones ¿Necesidad de un framework MDE open source a seguir con Eclipse MDE? Entornos de desarrollo MDE similares a los IDE actuales Mejorar usabilidad e interoperabilidad. Integración de varios DSL y de DSL con GPLs Repositorio MDE con información sobre proyectos y heramientas, casos de éxito, buenas prácticas, herramientas, foro de discusión,… Cuándo y cómo aplicar técnicas MDE Enseñanza de MDE en las universidades Proyectos de transferencia de tecnología a las empresas