dsl-kielet aali alikoski avanade aali.alikoski@avanade

Post on 18-Jan-2016

48 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

DSL-kielet Aali Alikoski Avanade aali.alikoski@avanade.com. 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

DSL-kieletAali AlikoskiAvanade

aali.alikoski@avanade.com

SisältöSisältö

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

työkaluista

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!

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

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...

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!

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

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

DemoDemo

• Visual Studion valmiit mallinnuspiirteet

Factory Life CycleFactory Life Cycle

DomainKnowledgeDomainKnowledge

SolutionKnowledgeSolutionKnowledge

FactoryDevelopmentFactoryDevelopment

ProductDevelopmentProductDevelopment

Factory Schema Factory TemplateFactory Schema Factory Template

Work ProductsWork Products

Input

Produces

Feedback

ProducesInput

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

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

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

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

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

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

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

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

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

Designerit Visual Designerit Visual StudiossaStudiossa

ToolboxToolbox

PropertiesWindowPropertiesWindow

ModelExplorerModelExplorer

ValidationValidation

Drawing surface with domain- specific notation

Drawing surface with domain- specific notation

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...

DemoDemo

• Esimerkki-DSL ja sen käyttö

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

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

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)

LisätietojaLisätietoja

• Kirjoja– Software Factories– DSL Tools

• Domain-Specific Language Tools

Kysymyksiä?Kysymyksiä?

• aali.alikoski@avanade.com• blog.avanadeadvisor.com/blogs/aalialikoski

top related