Small is Beautiful Building a flexible software factory using small DSLs and Small Models

Similar documents
How to build successful DSL s

BIG MODELS AN ALTERNATIVE APPROACH

All you need are models Anneke Kleppe, Klasse Objecten

Computation Independent Model (CIM): Platform Independent Model (PIM): Platform Specific Model (PSM): Implementation Specific Model (ISM):

Introduction to Dependable Systems: Meta-modeling and modeldriven

MDD with OMG Standards MOF, OCL, QVT & Graph Transformations

Introduction to MDE and Model Transformation

Model Driven Engineering (MDE)

Model Abstraction versus Model to Text Transformation

Raising the Level of Development: Models, Architectures, Programs

BLU AGE 2009 Edition Agile Model Transformation

A (Very) Short Introduction to Model-Driven Development (MDD)

Model Driven Development. Building Automated Code Generation Methods with Eclipse and DSL Tools. Vicente Pelechano

Defining Domain-Specific Modeling Languages

This paper is more intended to set up a basis for a constructive discussion than to offer definitive answers and closed solutions.

Comparing graphical DSL editors

Model driven Engineering & Model driven Architecture

The Model Driven (R)evolution. Richard Mark Soley, Ph.D. Chairman and CEO Object Management Group, Inc.

innoq Deutschland GmbH innoq Schweiz GmbH D Ratingen CH-6330 Cham Tel Tel

Compositional Model Based Software Development

Developing Web-Based Applications Using Model Driven Architecture and Domain Specific Languages

Software Architecture

Modelling in Enterprise Architecture. MSc Business Information Systems

An Introduction to MDE

Object Security. Model Driven Security. Ulrich Lang, Rudolf Schreiner. Protection of Resources in Complex Distributed Systems

The Eclipse Modeling Framework and MDA Status and Opportunities

A Comparison of Ecore and GOPPRR through an Information System Meta Modeling Approach

Knowledge Discovery: How to Reverse-Engineer Legacy Systems

Index. business modeling syntax 181 business process modeling 57 business rule 40

developer.* The Independent Magazine for Software Professionals

Modellierung operationaler Aspekte von Systemarchitekturen. Master Thesis presentation. October 2005 March Mirko Bleyh - Medieninformatik

DEV427 MODEL-DRIVEN DEVELOPMENT USING PowerDesigner. Xiao-Yun WANG PowerDesigner Chief Architect

Introduction to OpenArchitectureWare

Plan. Language engineering and Domain Specific Languages. Language designer defines syntax. How to define language

Dominique Blouin Etienne Borde

02291: System Integration

ECLIPSE MODELING PROJECT

The Unified Modelling Language. Example Diagrams. Notation vs. Methodology. UML and Meta Modelling

A universal PNML Tool. Lukasz Zoglowek

Reusable Object-Oriented Model

Language engineering and Domain Specific Languages

Implementing Model Driven Architecture

MDA Driven xuml Plug-in for JAVA

ADT: Eclipse development tools for ATL

Object Management Group Model Driven Architecture (MDA) MDA Guide rev. 2.0 OMG Document ormsc/

University of Mannheim

An Introduction to Model Driven Engineering (MDE) Bahman Zamani, Ph.D. bahmanzamani.com

GMF Tooling 3.0 Vision, Architecture, Roadmap

CODAGEN TECHNOLOGIES AND MODEL-DRIVEN ARCHITECTURE (MDA)

Model Driven Development of Component Centric Applications

OMG Workshop MDA. Tool Chains for MDA? Let's consider leaving our tool chains behind us.

The Write Once, Deploy N MDA Case Study

challenges in domain-specific modeling raphaël mannadiar august 27, 2009

IBM Rational Software Architect

On the link between Architectural Description Models and Modelica Analyses Models

Domain Models for Laboratory Integration

FREQUENTLY ASKED QUESTIONS

Executive Summary. Round Trip Engineering of Space Systems. Change Log. Executive Summary. Visas

Comparative analysis of MDA tools

3rd Lecture Languages for information modeling

MORPHEUS: a supporting tool for MDD

Second OMG Workshop on Web Services Modeling. Easy Development of Scalable Web Services Based on Model-Driven Process Management

Model Transformation Techniques

Model Transformations for Embedded System Design and Virtual Platforms

Ontology-based Model Transformation

Sequence Diagram Generation with Model Transformation Technology

Model Driven Architecture and Rhapsody

Roles in Software Development using Domain Specific Modelling Languages

An Open Source Domain-Specific Tools Framework to Support Model Driven Development of OSS

Applying UML Modeling and MDA to Real-Time Software Development

!MDA$based*Teaching*and* Research*in*Software*Engineering*!

Model Driven Architecture - The Vision

The UML Extension Mechanisms

Domain Specific Languages. Requirements (Engineering)

ATHABASCA UNIVERSITY RULE ENHANCED BUSINESS PROCESS MODELING OF SERVICE ORIENTED ARCHITECTURES LUIS ROCHA. A project submitted in partial fulfillment

Version 4.5 The S60 Phone Example

MDA and Integration of Legacy Systems: An Industrial Case Study

Towards 2D Traceability

Dominique Blouin Etienne Borde

Model Driven Engineering (MDE) and Diagrammatic Predicate Logic (DPL)

QoS-aware model-driven SOA using SoaML

Coral: A Metamodel Kernel for Transformation Engines

Model-Driven Development of Simulation-Based System Design Tools

16 Evaluation Framework for Model-Driven Product Line Engineering Tools

Bachelor of Engineering, IT Thesis

Metamodeling. Janos Sztipanovits ISIS, Vanderbilt University

1. I NEED TO HAVE MULTIPLE VERSIONS OF VISUAL STUDIO INSTALLED IF I M MAINTAINING APPLICATIONS THAT RUN ON MORE THAN ONE VERSION OF THE.

TOWARDS MODEL TRANSFORMATION DESIGN PATTERNS

Acceleo Galileo Simultaneous Release

Definition of Visual Language Editors Using Declarative Languages

The PISA Project A Model Driven Development case study

Christian Doppler Laboratory

Comparison of different Model Driven Development approaches. Master thesis. Gøran Klepp Olsen. A mobile Meal Ordering System for the healthcare sector

Open Source egovernment Reference Architecture. Cory Casanave, President. Data Access Technologies, Inc.

The TTC 2011 Reengineering Challenge Using MOLA and Higher-Order Transformations

Model-Driven Architecture/ Development

Science of Computer Programming. GREAT: UML transformation tool for porting middleware applications

A Metamodel independent approach for Conflict Detection to support distributed development in MDE. Mostafa Pordel A THESIS

DRAFT. Consolidation of the Generator Infrastructure MDGEN Model Driven Generation

Automation of Semantic Web based Digital Library using Unified Modeling Language Minal Bhise 1 1

Transcription:

Small is Beautiful Building a flexible software factory using small DSLs and Small Models Jos Warmer Partner, Ordina jos.warmer@ordina.nl 1

Modeling Maturity Levels MML 0: No specification MML 1: Textual Specification MML 2: Text with Models MML 3: Models with Text MML 4: Precise Models MML 5: Models only 2

MDA Overview Platform Independent Model PSM SQL SQL-Business PSM Business EJB - ASP PSM ASP SQL Code Business Code ASP Code

Core MDA Concepts Abstraction Automation

Model Driven Architecture MDA is a trademark of the OMG Main model types: PIM: Platform Independent Model PSM: Platform Specific Model Code: well, just code Uses OMG standards MOF: Meta Object facility UML: Unified Modeling Language OCL: Object Constraint Language QVT: Queries, Views, Transformations 5

MDA Experience All (acclaimed) MDA tools are disappointing Lack of flexibility (All or nothing / not adaptable) Cumbersome support for re-generation Not enough code generated Lack of integration in IDE Standards appear too slow (e.g. QVT) And might not even work very well 6

UML As a Basis For MDA? UML is not suitable for large scale use Multi user modeling support is horrifying Version control of UML models is complex UML is not suitable for code generation Its too big Its too complex It often does almost what you need, but never quite UML assumes one huge monolithic Main Model And history has shown monolythic solutions do not scale up 7

Model Driven Development Because MDA is a trademark of the OMG I rather speak of Model Driven Development or Model Driven Software Development or Model Driven Software Engineering or Model Driven Engineering 8

Domain Specific Languages 9

A DSL Contains special concepts from the domain and is very powerful within the domain (and useless outside) Can be defined on the fly Is executable Often through code generation Sometimes through interpretation Sometimes a hybrid of both A DSL often comes with a Domain Specific Framework or a Domain Specific Engine

Why Domain Specific Modeling Tailor the modeling language to the goal Much more powerful than general purpose language Users work with their concepts they understand Users only get what they need, no more, no less less complex for users Less complex for language designers Less complex for language support tool developers Less complex for code generators Diversity in the IT and business world Flexibility to follow the speed of changes 11

Why not DSL s earlier? Domain Specific Languages have been around before Building a language isn t that hard Building tool support is very hard Much work for textual DSLs Even more work for visual DSLs 12

DSLs based on UML Use UML as platform for creating Domain Specific Languages Define a UML profile Find the concepts in your DSL Find UML elements that are close to your concepts Define stereotypes for those UML elements Add tagged values for additional properties Define OCL constraints to define what a correct model is Almost all UML based MDA tools work like this!!! Generating code from UML is a fairy tale Why? Because building visual editors is (was!!!) time-consuming I.e. reuse of UML visual modeling tools 13

UML is a Complex Language Creating UML profiles is complex i.e. needs to understand the UML2 metamodel Defining the constraints on a profile is even more complex i.e. needs to understand the UML2 metamodel Configuring UML tools to validate the profiles is complex Most tools do not support it Some tools support it by their own proprietary scripting language Some tools support OCL Code generation is complex i.e. needs to understand the UML2 metamodel 14

DSL Workbenches DSL Designer: Definition of meta (or domain) model Definitions of visual appearance (e.g. boxes and lines) Definition of validation constraints Definition of code generation templates DSL Workbench automatically generates Generation of visual editor Execution of code generation Storage of DSM s in files Integrates into development environment E.g. Eclipse GMF, Microsoft DSL Tools, MetaEdit, GME 15

DSL Workbench DSL Developer Domain Model Designer Templates DSL Setup Installation In IDE of application developer Manual code Application Models In DSL Generated code Application developers Working Application Domain Specific Framework

UML versus DSL s UML is a general purpose language UML always has one big interconnected model for the complete application (The socalled Main Model ) UML is closed A DSL is a special purpose language DSLs uses multiple loosely coupled models for one application In one application multiple DSLs may be used DSLs are open

MDA versus DSL s MDA abstraction MDA code generation MDA assumes that not everything can be generated MDA you can define your own language MDA is owned by the OMG DSL abstraction DSL code generation DSL assumes that not everything can be generated DSL you define your own language DSL is owned by no-one MDA is most often associated with UML DSL is flexible

How to build DSLs Experience from building SMART-Microsoft 19

Choose your environment Microsoft's answer to MDA and UML is their own flexible (meta- ) modeling environment: Domain Specific Language Tools Solves the problems with UML Available as tools Create your own modeling languages Generation of visual editor within Visual Studio Part of the Microsoft Software Factory initiative

A Well Defined Process Process What Refine and divide Define Build Test Use Best Practices Summary 21

What Goals of using DSLs? Generate code that runs Code always conform a reference architecture Being able to always re-generate Modeling must be less work than coding 22

What does it need to generate Step 0: define your domain Step 1: decide on the target architecture Step 2: write the code that needs to be generated by hand using a reference application Step 3: test and review the reference application 23

SMART-Microsoft DSLs Users Utilities Presentation layer User Interface components Communication Operational Management Security Ordina Core Framework Ordina DSL Specific Frameworks User Processes Business layer Service Interfaces Business Processes Business Workflows Business Classes Service Agents DTO View DTO Shared Data Access Logic Components Data layer Data Service Agents Data sources Services 24

Refine and Divide 2 Reference application is divided it into: Part of code is static put into framework Part of code is dynamic generate code from a DSL or keep writing the code by hand Tradeoffs to be made: Complex framework needs less generated code What we are used to when writing code by hand Case distinction inside the framework Less complex framework needs more generated code Case distinction by the code generator 25

SMART-Microsoft DSLs Users Utilities Communication Operational Management Security Ordina Core Framework Ordina DSL Specific Frameworks User Interface components Service DSL Business Processes Business Classes Web-Scenario DSL User Processes Service Interfaces Business Class DSL Presentation layer Business layer Business Workflows Service Agents Data layer DTO View DTO Shared Data Contract DSL Data Access Logic Components Data Service Agents Data sources Services 26

Define Define the concepts that you need in your DSL to generate the required code Focus on concepts above programming language level Storyboard the models Keep a DSL small and simple Keep models for a DSL small Allow separate models to have references Allow validation of references For each concept in your DSL: Identify the code that needs to be generated Adjust the concept (and its properties) to ensure you can generate this code 27

SMART-Microsoft DSL <@Page /> <HTML> <BODY> Hello World </BODY> </HTML> Class MyClass { public string Hello() { return Hello world ; } } DSL Specific Framework Class MyClass { public string Hello() { return Hello world ; } } DSL Specific Framework Generic Framework Class MyClass { public string Hello() { return Hello world ; } } <Mapping> <Class> <Table> </Mapping> DSL Specific Framework CREATE TABLE MyTable FIELD1 int FIELD2 varchar(50) 28

Build Develop the domain model Develop the presentation and tool model Write the code generation templates Identify Code generation patterns Never change generated code, only extend it Design extension points in generated code Use patterns like abstract base class + partial concrete subclass Develop iteratively Adjust DSL concepts, generated code and framework based on the understanding you get 29

SMART-Microsoft DSL Extensibility <@Page /> <HTML> <BODY> Hello World </BODY> </HTML> Class MyClass { public string Hello() { return Hello world ; } } Partial Class MyClass { public string YourTurn() { return Your world ; } } DSL Specifiek Framework Base Classes Interfaces Events Plug-in Plug-in Plug-in Class MyClass { public string Hello() { return Hello world ; } } Partial Class MyClass { public string YourTurn() { return Your world ; } } DSL Specifiek Framework Base Classes Generiek Framework Class MyClass { public string Hello() { return Hello world ; } } <Mapping> <Class> <Table> </Mapping> Partial Class MyClass { public string YourTurn() { return Your world ; } } Base Classes Interfaces Events DSL Specifiek Framework CREATE TABLE MyTable FIELD1 int FIELD2 varchar(50) 30

Build We found that the DSL Tools were not enough we added: NDIP = Non persistent Dsl Information Provider To allow references between DSMs Validation Intellisense / picklists Refactoring Change propagation Automatic code generation DSL Tools only has a run all templates action We incrementally generate code (per DSM) when the model is saved One template per model type (not per model!) 31

SMART-Microsoft DSL <@Page /> <HTML> <BODY> Hello World </BODY> </HTML> Class MyClass { public string Hello() { return Hello world ; } } DSL Specific Framework Class MyClass { public string Hello() { return Hello world ; } } DSL Specific Framework Generic Framework Class MyClass { public string Hello() { return Hello world ; } } <Mapping> <Class> <Table> </Mapping> DSL Specific Framework CREATE TABLE MyTable FIELD1 int FIELD2 varchar(50) 32

Test Rebuild the reference application with the DSL and test it Do this iteratively for each DSL 33

Use DSLs are developed to be used by other developers Develop training material / workshops / walkthroughs For the architecture For the components used in the architecture For the DSLs Fpr the extension points in the generated code Organize project support First project needs it preferably by the DSL developers Life Wiki for Q&A during the project Evaluate Find good points Find bad spots 34

Domain Specific Languages Lessons Learned 35

Small DSLs && Small Models Multiple independent DSL s Multiple independent models per DSL Web Scenario DSL Data Contract DSL Service DSL Web Scenario Model Web Scenario Model Web Scenario Model Data Contract Model Data Contract Model Data Contract Model Service Model Service Model Service Model Typlical development situation: multiple models for each DSL. 36

References Between Models References always by name Web Scenario Model 1 Web Scenario Model 2 <<web scenarion>> Order Product <<web scenario>> Select Product <<action>> User gives name and address <<action>> Show List of products <<web scenario reference>> Select Product <<action>> Select a product <<action>> Finalize order 37

Model Interface Model 1 Model 2 NDIP Model 3 Support for Cross model validation Intellisense in DSL Code generation Refactoring Propagation of model changes 38

Model Interface Web Scenario Model 1 request export Info 1 read Info 1 Info 2 Info 3 Web Scenario Model 2 export Info 2 read NDIP Business Class Model 3 export Info 3 read 39

Rules of Thumb Keep a DSL small I.e., the number of concepts must all fit on one toolbar Assume references are needed A DSL doesn t live standalone, it is part of a more complex world, Define what information the DSL needs from other components Define what information from the DSL Model should be shared A DSL is a component, use information hiding One DSL does not solve all problems (it s small!) Assume that you will end up with multiple DSL s Model is the unit of version control, multiuser access, etc. Reuse your source code control system for Models 40

Rules of Thumb Everything in a model is used for code generation Not just documentation, same status as source code Modeling must be less work than coding You will need manual coding as well Models are leading: never touch the generated code Handwritten extensions through defined extension points Design the generated code to support extension Perform code generation per model No long waiting times for Generate All Ensures DSL remains standalone unit 41

DSL Model Source Code File View DSM (Domain Specific Model) as Source Code File A DSM is the unit of multi-user access A DSM is the unit of version control Use familiar and proven version control systems for code References by name only Refactoring like source code DSM is unit of reuse DSM is source for nightly builds The DSM is always leading Code generation per DSM Project tasks per model Higher developer acceptance Etc. etc. 42

Domain Specific Languages Future 43

How many levels are useful? Extension both horizontal and vertical Higher level DSL model Higher level DSL model Higher level DSL model Higher level DSL model Higher level DSL model Low level DSL model Low level DSL model Low level DSL model Low level DSL model Code Code Code Code Code Code Code Code Code Code Code 44

Generation of Models from Models Business Domain DSL Business Domain Model Business Domain Model Business Domain Model Web Scenario DSL Data Contract DSL Service DSL Web Scenario Model Web Scenario Model Web Scenario Model Data Contract Model Data Contract Model Data Contract Model Service Model Generated Generated Generated Service Model Service Model ASP.NET Pages C# Code Config files Other artefactys XSD C# Code Generated Generated Generated Generated Generated Generated Manual ASP.NET pages Manual C# Code Manual Config files Manual Artefacts 45 Generated artefacts in grey, handwritten in yellow

Domain Specific Languages Advantages 46

Consistency and Quality in Architecture DSL Code transformation is guided by the underlying architecture patterns Architecture is consistent & follows the architectural rules DSL Code transformation is consistent Code is always100% architecturally consistent and correct Manual additions in the code Must always fit within the generated structure Never change any generated code Working under architecture becomes reality for the first time

Fast time-to-market Direct transformations of DSL Code First version can be created quickly: jump start of project Continuous code generation Agile and iterative methods are facilitated. New versions can be delivered fast And this all while keeping quality and guaranteed architectural consistency!

Higher productivity Changes at business level can be implemented easily through models and code generation. Regenerate code from DSL model All manual coding remains when regenerating Models keep their value Model driven agile and iterative methods are facilitated while quality and architectural consistency is guaranteed!

Surviving Technology Changes Model is technology independent Transformation to Code introduces technology Each technology change means Model remains completely useable Write new transformation from DSL to new technology Write new transformation for bridge between new and old technology... that s all Flexibility change is the only constant factor in the IT world 50

Productivity of DSL s 45000 40000 35000 30000 25000 20000 15000 10000 5000 0 27 % 73 % Custom Gegenereerd 51

Release Management for the DSLs DSLs will evolve New versions of components used in the framework New features Changes in code generation To allow for more flexible extension points To use new framework components Changes in the DSM domain model New concept discovered Define a release strategy How often will new releases be done Backwards compatible or not When to update running projects to new releases or not? 52