dsl-kielet aali alikoski avanade aali.alikoski@avanade

27
DSL-kielet Aali Alikoski Avanade [email protected]

Upload: noah

Post on 18-Jan-2016

52 views

Category:

Documents


0 download

DESCRIPTION

DSL-kielet Aali Alikoski Avanade [email protected]. Sisältö. Mitä DSL tarkoittaa? Miksi ja milloin kannattaa harkita käyttöä? Microsoft DSL Tools Demo Avanaden kokemuksia DSL-pohjaisista työkaluista. Sovelluskehityksen tuottavuus. IT-teollisuuden maine on huono - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

DSL-kieletAali AlikoskiAvanade

[email protected]

Page 2: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

SisältöSisältö

• Mitä DSL tarkoittaa?• Miksi ja milloin kannattaa harkita käyttöä?• Microsoft DSL Tools• Demo• Avanaden kokemuksia DSL-pohjaisista

työkaluista

Page 3: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

Sovelluskehityksen Sovelluskehityksen tuottavuustuottavuus• IT-teollisuuden maine on huono

– Yli puolet projekteista epäonnistuu tavalla tai toisella

• Tuottavuutta, ennustettavuutta ja luotettavuutta parannettava

• Sovelluskehitysprojekteja tehdään aivan liikaa käsityönä– Virhealtista– Suuri riippuvuus yksilöistä

• Kehittäjän tuottavuus– Voi olla myös negatiivinen!

Page 4: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

Sovelluskehityksen Sovelluskehityksen vaikeusvaikeus• Useita eri tapoja ratkaista ongelma

– Kaikki yhtä hyviä – ei ainoaa oikeaa ratkaisua– On usein löydettävissä joukko ratkaisumalleja jotka toimivat ”hyvin

yhteen”

• Suunnitelmat ja toteutus ovat liian kaukana toisistaan– Suunnittelu yhdellä välineellä ja toteutus toisilla – hajaannus on

väistämätöntä

• Oleellista on että kehitystiimi on yhtenäinen– Ratkaisee samat asiat samalla tavalla → yhtenäinen arkkitehtuuri– Noudatetaan samaa kehitysprosessia

Page 5: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

YhtenäisyysYhtenäisyys

• Miten hyödyntää ”hyvien” kehittäjien potentiaali ja saada se muiden käyttöön?

• Asiantuntijat suunnittelevat ja toteuttavat arkkitehtuurin keskeiset osat– Muut rakentavat niiden pohjalta järjestelmän

• Eri lähestymistapoja– Framework, luokkakirjasto, yhteiset komponentit, DSL-kielet...

Page 6: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

Software FactorySoftware Factory

• Kattotermi teollistuneelle softatuotannolle– DSL-kielet ovat osa mutta ei koko käsite

• Tapa suunnitella ja toteuttaa (myös) DSL-pohjaisesti järjestelmiä

• Mallinnus perustuen DSL-käsitteisiin– Malli ilmaisee vaatimukset riittävän tarkalla tasolla jotta siitä

voidaan generoida toimiva sovellus tai sen osia– DSL-kielet/generaattorit rakentuvat tarvittaessa frameworkien

päälle

• Yleiskäyttöisestä välineestä tarvelähtöinen spesifi työkalu– Automatisoidaan toistuva ja rutiininomainen työvaihe– Nostetaan abstraktiotasoa!

Page 7: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

Domain Specific Domain Specific LanguageLanguage• Mikä?

– Kuvauskieli joka on tehty kuvaamaan yhden sovellusalueen problematiikkaa• Laajuudeltaan rajattu• Kuvaa sen yhden alueen hyvin• Menestyksellisiä esimerkkejä löytyy mm WinForms designer, SQL

– Sisältää sovellusalueen keskeiset käsitteet joiden varaan sovellukset rakentuvat– Käsitteiden varaan tehdystä kuvauksesta voidaan automaattisesti tuottaa

sovelluksen rakennuspalasia (koodia, konfigurointitietoja jne)

• Miksi?– DSL-toteutus määrittelee formaalit käsitteet, niiden väliset suhteet ja muut säännöt– Kehittäjät ”pakotetaan” noudattamaan DSL-toteutuksen sääntöjä ja työskentelemään

korkeamman tason käsitteillä → yhtenäisyys– Automatisoidaan rutiinityö → vähemmän inhimillisiä virheitä

• Miten?– Työkalut tukevat

Page 8: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

Mikä on DSL?Mikä on DSL?domain specific language

generalpurpose

specific

Horizontal GUI Web Business logic Database Deployment

Vertical Telephone bills Insurance Ticketing Hardware construction

GraphicalTextualForms-basedMixed

Page 9: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

DemoDemo

• Visual Studion valmiit mallinnuspiirteet

Page 10: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

Factory Life CycleFactory Life Cycle

DomainKnowledgeDomainKnowledge

SolutionKnowledgeSolutionKnowledge

FactoryDevelopmentFactoryDevelopment

ProductDevelopmentProductDevelopment

Factory Schema Factory TemplateFactory Schema Factory Template

Work ProductsWork Products

Input

Produces

Feedback

ProducesInput

Page 11: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

What is a Model?What is a Model?A representation of something, real or imagined, which hides some aspects of that thing, so that other aspects are easier to see and manipulate

A representation of something, real or imagined, which hides some aspects of that thing, so that other aspects are easier to see and manipulate

Page 12: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

Malli → toimivaa koodiaMalli → toimivaa koodia

CustomPartial ClassesCustomPartial Classes

FrameworkPartial ClassesFrameworkPartial Classes

Config. FilesConfig. Files

Other Resources

Other Resources

käyttää

käyttää

FrameworkTools

DSLEditorDSLEditor

DSLDefinitionDSLDefinition

tuottaa

OtherEditorsOtherEditors

tuottaa

Model Files(SDM) Model Files(SDM)

ASP.NETASP.NET

Page 13: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

GenerointivaihtoehdotGenerointivaihtoehdot

• XSLT-muunnos– Mallit ovat XML:ää

• Ohjelmallisesti DSL APIn avulla– DSL-määrityksestä syntyy tyypitetty API– CodeDOM apuna koodin generoinnissa

• Template-pohjaisesti– Ns T4 -templatekieli– Muistuttaa klassista ASPia

Page 14: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

DSL vs perinteiset kieletDSL vs perinteiset kielet

oliopohjaisuus• Olio-ohjelmointikielet nostivat

abstraktiotasoa C:hen tai assembleriin nähden

• Kääntäjä tuottaa C-koodista assembleria

• Ei ole järkevää mennä korjaamaan kääntäjän tuotoksia, vaan parantaa kääntäjää tai C-koodia

DSL• DSL-kieli nostaa

abstraktiotasoa olio-ohjelmointiin verrattuna

• Generointi tuottaa jotain jatkojalostettua sisältöä mallista

• Ei ole järkevää mennä korjaamaan generaattorin tuotoksia, vaan parantaa generaattoria tai mallia

Page 15: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

Mallit lähdekoodinaMallit lähdekoodina

• DSL-lähestymistavassa mallit ovat keskeinen toteutusväline– Malleista generoidaan muita jatkojalosteita– Mallit versioidaan versionhallintavälineillä (vs

malleista generoidut jatkojalosteet)

• Kaksisuuntainen generointi (round-tripping)– Jatkojalosteiden editointi suoraan ei

lähtökohtaisesti ole järkevää– Yleisenä mekanismina erittäin vaikea toteuttaa

Page 16: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

Mihin DSL-kielet Mihin DSL-kielet soveltuvat?soveltuvat?• Tuttu domain (käsitteistö, toimintaympäristö)• Tunnetaan ratkaisu• On varaa investoida työkalukehitykseen

monistettavuuden saavuttamiseksi– Vaatii usein vähintään n 5 toistokertaa

• Halutaan saada parempi kontrolli sovelluksen arkkitehtuuriin

• Halutaan yhtenäistää kehitystyötä• Halutaan mahdollistaa kokemattomampien

kehittäjien osallistuminen kehitystyöhön

Page 17: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

Microsoft DSL ToolsMicrosoft DSL Tools

• Visual Studio laajennosalusta• Työkalu DSL-määrityksen tekemiseen• Ajonaikainen alusta DSL-pohjaisille

työkaluille• Osa Visual Studio SDK:ta• Historia

–Ensimmäiset esiversiot 2006 keväällä VS 2005:lle

–Ensimmäinen tuotantoversio syksyllä 2006–Nykyversio Visual Studio 2008:lle

Page 18: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

SDK mallinnusvälineiden SDK mallinnusvälineiden tekoontekoon

VisualStudio Microsoft Modeling Platform

In Visual StudioMicrosoft Modeling PlatformIn Visual Studio

DistributedSystemsDesigners

DistributedSystemsDesigners

ClassDesignerClassDesigner

DSL Tools for Visual StudioDSL Tools for Visual Studio

Your newDesignerYour newDesigner

Page 19: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

Microsoft Modeling Platform in Visual StudioMicrosoft Modeling Platform in Visual Studio

MallinnusarkkitehtuuriMallinnusarkkitehtuuri

Domain ModelFrameworkDomain ModelFramework

Design SurfaceFrameworkDesign SurfaceFramework

TemplateEngineTemplateEngineShell

Frame-work

ShellFrame-work

ValidationFrame-work

ValidationFrame-work

In-memory graph database with rich services (e.g., transactions, serialization, rules, events, queries)

In-memory graph database with rich services (e.g., transactions, serialization, rules, events, queries)

Extensible drawing surface with support for routing and auto-layout

Extensible drawing surface with support for routing and auto-layout

Program controlled artifact generation

Program controlled artifact generation

Checks constraints and guides user to resolve issues

Checks constraints and guides user to resolve issues

Visual Studio UI integration for components like Toolbox & menus

Visual Studio UI integration for components like Toolbox & menus

Page 20: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

Designerit Visual Designerit Visual StudiossaStudiossa

ToolboxToolbox

PropertiesWindowPropertiesWindow

ModelExplorerModelExplorer

ValidationValidation

Drawing surface with domain- specific notation

Drawing surface with domain- specific notation

Page 21: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

HaasteitaHaasteita

Persistence Code generation

Partitioning

Parsing

Source controlPackaging

using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.Web;using System.Web.Services;

using XYZ.GapOrdering;using XYZ.GapOrdering.ClientLibrary;

namespace GapWebService{

/// <summary>/// Summary description for Service1./// </summary>public class GapService : System.Web.Services.WebService...

using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.Web;using System.Web.Services;

using XYZ.GapOrdering;using XYZ.GapOrdering.ClientLibrary;

namespace GapWebService{

/// <summary>/// Summary description for Service1./// </summary>public class GapService : System.Web.Services.WebService...

Page 22: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

DemoDemo

• Esimerkki-DSL ja sen käyttö

Page 23: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

Avanade ja DSLtAvanade ja DSLt

• Avandella useita DSL-pohjaisia työkaluja– Viimeisin versio Web Service Software Factoryn

kaltainen

• Käytetty projekteissa ympäri maailman• Hyödyt

– Käsityön automatisointi (koodin generointi)– Virheiden väheneminen– Arkkitehtuurin yhtenäistäminen

Page 24: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

DSL Tools tulevaisuusDSL Tools tulevaisuus(Stuart Kentin blogista)(Stuart Kentin blogista)• Yleislinjaukset

– Graafisen designer-ympäristön ja koodigenerointialustan jatkokehitys

– DSL Tools-projektissa syntyneiden kehitysmallien yleistäminen

• VS ”Rosario”– DSL laajennokset– Domain mallin databind-tuki– Parempi sisäkkäisten kaavioelementtien tuki– Koodigenerointi osaksi buildiä

• Rosarion jälkeen– WPF-pohjainen designer– Useiden mallien linkitys toisiinsa ja tuki eri

näkymille

Page 25: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

Yleistä pohdintaaYleistä pohdintaa

• Mikä on generoinnin rooli ja laajuus?–Koko sovellus?–Osa sovelluksesta?–Konfigurointi-informaatio?–Laajentuu ajan mittaan?

• Kuinka stabiili domain on kyseessä?–Paljonko aikaa ja vaivaa kannattaa automatisointiin uhrata?

• Useita DSL:iä per sovellus?–Eri näkökulmia (UI, sovelluslogiikka, hajautus, tietorakenteet jne)

Page 26: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

LisätietojaLisätietoja

• Kirjoja– Software Factories– DSL Tools

• Domain-Specific Language Tools

Page 27: DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade

Kysymyksiä?Kysymyksiä?

[email protected]• blog.avanadeadvisor.com/blogs/aalialikoski