270 likes | 410 Vues
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
E N D
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 • 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 vaikeus • 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ä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 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 Language • 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
Horizontal GUI Web Business logic Database Deployment Vertical Telephone bills Insurance Ticketing Hardware construction generalpurpose specific Mikä on DSL? domain specific language Graphical Textual Forms-based Mixed
Demo • Visual Studion valmiit mallinnuspiirteet
Factory Life Cycle DomainKnowledge SolutionKnowledge Input FactoryDevelopment ProductDevelopment Feedback Produces Produces Input Work Products Factory Schema Factory Template
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
Malli → toimivaa koodia Tools Framework Other Editors Other Resources Custom Partial Classes käyttää DSL Editor ASP.NET Framework Partial Classes tuottaa Model Files(SDM) käyttää tuottaa DSL Definition Config. Files
Generointivaihtoehdot • 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 kielet oliopohjaisuus 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 • 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
Mallit 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 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 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älineidentekoon DSL Tools for Visual Studio Distributed Systems Designers Class Designer Your new Designer VisualStudio Microsoft Modeling Platform In Visual Studio
Mallinnusarkkitehtuuri Visual Studio UI integration for components like Toolbox & menus Extensible drawing surface with support for routing and auto-layout Program controlled artifact generation Microsoft Modeling Platform in Visual Studio Shell Frame- work Validation Frame- work Design Surface Framework Template Engine Domain Model Framework In-memory graph database with rich services (e.g., transactions, serialization, rules, events, queries) Checks constraints and guides user to resolve issues
Designerit Visual Studiossa Model Explorer Toolbox Properties Window Drawing surface with domain- specific notation Validation
Haasteita Persistence Code generation Parsing Packaging Source control Partitioning
Demo • Esimerkki-DSL ja sen käyttö
Avanade 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 tulevaisuus(Stuart Kentin blogista) • Yleislinjaukset • Graafisen designer-ympäristönjakoodigenerointialustanjatkokehitys • 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ä 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ätietoja • Kirjoja • Software Factories • DSL Tools • Domain-Specific Language Tools
Kysymyksiä? • aali.alikoski@avanade.com • blog.avanadeadvisor.com/blogs/aalialikoski