430 likes | 533 Views
Praktický modelem řízený vývoj softwaru. Bc. Michal Jakubec MCSE, MCSD, MCDBA, MCTS http://www.jakubec.cz/. Obsah. Stručně o modelem řízeném vývoji Generativní infrastruktura na bázi XML Ukázka použití na skutečném projektu. Co nás nyní čeká ? (1/3). Stručně o modelem řízeném vývoji
E N D
Praktickýmodelem řízenývývoj softwaru Bc. Michal Jakubec MCSE, MCSD, MCDBA, MCTS http://www.jakubec.cz/
Obsah Stručně o modelem řízeném vývoji Generativní infrastruktura na bázi XML Ukázka použití na skutečném projektu
Co nás nyní čeká? (1/3) Stručně o modelem řízeném vývoji Generativní infrastruktura na bázi XML Ukázka použití na skutečném projektu
Problémy softwarových projektů Požadavky zákazníka ? Aplikační řešení Obrázky: http://www.projectcartoon.com
Možné řešení problémů?Modelem řízený přístup Požadavky zákazníka Transformace Transformace Transformace Transformace Transformace Aplikační řešení
Proč modelem řízený přístup? Je deterministický Ušetří mnoho rutinních činností Usnadňuje údržbu a rozvoj řešení Možnost opakovaného využití na více projektech => Software Factory
Porovnání MDA a MDSD MDA MDSD Model-Driven Software Development přístup „zdola nahoru“ obecný přístup k vývoji aplikací založený na doménovém modelování vstupem může být model i zdrojový kód výstupem zejména zdrojový kód k překladu míra nasazení záleží na potřebách projektu lze vyvíjet souběžně i konvenčním způsobem • Model-DrivenArchitecture • přístup „shora dolů“ • definováno sdružením OMG • základem UML • postupná transformace modelů různých úrovní abstrakce • vstupem formalizované požadavky v podobě modelu • výsledkem spustitelná aplikace • zásadní nedostatky • složitá infrastruktura • chybí nástrojová podpora • praktické potíže s nasazením
Hierarchie prostředků softwarového vývoje Doménově-specifické jazyky (DSL) Generování kódu Interpretace jazyka Návrhové vzory Objektově-orientovaný přístup
Generování kódu • Zajišťuje automatizovanou produkci zdrojového kódu odpovídajícího stanoveným pravidlům • jako řídících dat lze s výhodou použít informace zachycené pomocí DSL • Zachovává konzistenci kódu při výskytu duplicitních údajů v artefaktech • např. velikost textového sloupce v tabulce databáze oproti maximální délce v poli formuláře • V případě, že je nutné pozměnit implementaci, stačí upravit transformační mechanismus • dotčený kód bude následně re-generován či odstraněn
Doménově-specifické jazyky • Zjednodušují formální zachycení struktury a/nebo chování z problémové domény • Pomáhají překlenout „propast“ mezi abstrakcí problémové domény a její implementací • Zajišťují centralizaci klíčových údajů (obchodních pravidel) a jejich oddělení od implementace v kódu programovacích jazyků
Interpretace DSL jazyka • Umožňuje získat vysokou tvárnost aplikačního řešení bez nutnosti překladu • i uživatel může měnit chování aplikace • Efektivní implementace změn • není nutný zásah prostřednictvím vývojového prostředí a nová kompilace kódu • Vyšší nároky na architekturu aplikace • možná bezpečnostní rizika • nároky na výkonnost aplikačního prostředí
Mechanismus reflexe • Poskytuje možnost dynamické práci s datovými typy za běhu aplikace • např. práce s moduly plug-in, add-in • Umožňuje datové typy obohacovat o vlastní metadata (tzv. atributy či anotace), jež lze vyhodnocovat za běhu aplikace • V kombinaci s generováním kódu a interpretací DSL zvyšuje strukturální tvárnost aplikace
DSL v současné praxi • Širšímu uplatnění brání: • chybějící poznatky z praxe • vysoké nároky na znalosti a zkušenosti vývojářů • Použití vlastního DSL jazyka je většině projektů nedostupné • návrh gramatiky je náročný na abstrakci • složitá kontrola syntaxe • problémy s vlastní interpretací jazyka • Možné řešení: DSL založený na XML
Shrnutí Vývoj softwaru je rizikový byznys Modelem řízený vývoj může nabídnout pomocnou ruku a možná i východisko Potíže na projektech činí implementace vlastních DSL jazyků Jednou z dostupných alternativ může být DSL na bázi jazyka XML
Co nás nyní čeká? (2/3) Stručně o modelem řízeném vývoji Generativní infrastruktura na bázi XML Ukázka použití na skutečném projektu
Prvky generativní infrastruktury • Založena na strandardech • XML jako DSL jazyk doménového modelu • XSD schéma pro validaci modelu • XSLT pro prevod modelu na artefakty • Generátor artefaktů pro generování a distribuci výsledných souboru • využívá .NET Framework verze 3.5
XML jako základ DSL jazyka • Jazykové konstrukce jako prvky XML • snadno rozšiřitelné dle aktuálních potřeb • Gramatika definována XML schématem • validace zajišťuje kontrolu syntaxe • Interpretace DSL jazyka prostřednictvím transformačních šablon XSLT • generování kódu • překlad na jiné DSL
Terminologie • Artefakt – součást projektu (zdrojový kód, konfigurační soubor, záznamy dat) • Doménový model – zdroj informací o prvcích domény problému/řešení • Transformace– převod určitého prvku doménového modelu na sadu artefaktů • Distribuce – proces fyzického umístění vygenerovaných artefaktů ve složkové struktuře souborového systému
Doménový model (1/3) • Ukládán jako množina dokumentů XML • validace pomocí schémat XSD – podpora IntelliSense • transformace modelu pomocí XSLT • podporuje generické slučování dílčích definic • Umožňuje definovat strukturu doménových entit aplikační logiky • Možnost specifikace výchozích záznamůpro vybrané entity
Doménový model (2/3) <?xmlversion="1.0"encoding="utf-8"?> <domainModelxmlns="urn:AsBest-MetaToolkit-DomainModel-1.0"> <moduleid="System"title="Systém"namespace="AsBest.FlexiCrm„assembly="AsBest.FlexiCrm.Library.Domain"> <entityid="Choice"title="Číselníkovápoložka"abstract="true" implicit="true"supportsDisabled="true"> <attributename="Id"type="number"key="true"identifier="true" identity="true"generated="true"title="Identifikátor"/> <attributename="Code"type="guid"selector="true"unique="true" title="Kód"/> <attributename="Name"type="text"length="64"label="true" title="Název"entryMode="both"/> <attributename="Description"type="text"optional="true" position="tail"title="Popis"entryMode="both"/> <attributename="Rank"type="number"position="tail"title="Pořadí" entryMode="both"/> <attributename="Mark"type="text"length="64"optional="true" lookup="true"position="tail"title="Značka"entryMode="both"/> <attributename="Disabled"type="flag"position="tail" title="Zakázáno"/> </entity> </module> </domainModel>
Doménový model (3/3) <?xmlversion="1.0"encoding="utf-8"?> <domainModelxmlns="urn:AsBest-MetaToolkit-DomainModel-1.0"> <moduleid="System"title="Systém"namespace="AsBest.FlexiCrm" assembly="AsBest.FlexiCrm.Library.Domain"> <dataentity="ContactGender"> <item> <valuename="Id">1</value> <valuename="Name">Muž</value> <valuename="Mark">M</value> <valuename="Rank">100</value> <valuename="Disabled">False</value> </item> <item> <valuename="Id">2</value> <valuename="Name">Žena</value> <valuename="Mark">Z</value> <valuename="Rank">200</value> <valuename="Disabled">False</value> </item> </data> </module> </domainModel>
Transformační šablony • Transformují doménový model na: • tabulky, pohledy, referenční omezení, spouště, výchozí záznamy, aj. • mapovací soubory O/R vrstvy • aplikační třídy doménových entit • stránky uživatelského rozhraní typu seznam-detail • jednotkové testy pro doménové entity • Dosud vytvořeno celkem 30 šablon XSLT • některé šablony využívají jazyka JavaScript
DEMO (1/4) Definice entit a záznamů Transformační šablony
Generátor artefaktů (1/2) • Nástroj pro plně automatizované generování artefaktů dle doménového modelu • univerzálně použitelný díky konfiguračním profilům • Ukládání generovaných artefaktů přímo do struktury jednotlivých projektů • integrováno s MS Visual Studio 2008/2010 • podporuje systém pro správu zdrojového kódu • Udržuje aktuální sadu artefaktů • evidována v tzv. změnovém manifestu • nepotřebné artefakty jsou tak vždy odstraněny
DEMO (2/4) Konfigurační profil generátoru Změnový manifest
DEMO (3/4) Slučování dokumentů Expanze modelu
Generované artefakty Databázové schéma a výchozí záznamy Mapovací soubory O/R vrstvy Aplikační třídy doménových entit Uživatelské rozhraní „seznam-detail“ Jednotkové testy pro doménové entity
Shrnutí XML jako základ DSL jazyka Doménový model pro zachycení struktury i výchozích datových záznamů Transformační šablony pro převod prvků modelu do podoby artefaktů Generátor artefaktů načítá definice modelu, transformuje je a provádí distribuci artefaktů
Co nás nyní čeká? (3/3) Stručně o modelem řízeném vývoji Generativní infrastruktura na bázi XML Ukázka použití na skutečném projektu
Vlastnosti reálného řešení • Webová aplikace podnikového IS • celkem cca 70 entit, 550 atributů • nejprve konvenční zakázkový vývoj • Použité technologie • programovací jazyk C# .NET, platforma .NET Framework 3.5 • O/R mapovací vrstva NHibernate 2.0 • databáze MS SQL Server 2008 • Generativní infrastruktura nasazena během aktivní realizace projektu
Ukázka UI (1/2) • příklad pohledu typu seznam
Ukázka UI (2/2) • příklad pohledu typu detail
DEMO (4/4) Přidání a odebrání atributu Přidání nové entity Vytvoření výchozích záznamů Úprava existující šablony
Výsledky • Generováno přibližně 2300 artefaktů, z toho: • 110 webových stránek seznam-detail • 70 tříd doménových entit • 67 databázových tabulek • Jeden běh generování trvá ~30 sekund • Všechny artefakty mají produkční kvalitu • formátování souborů, platné jmenné konvence, aj. • Veškerý generovaný kód ukládán do SVN • snadný návrat ke starším revizím
Literatura Model-Driven Software Development: Technology, Engineering, Management (2006) Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools (2004) Praktické využití konceptů generativního programování pro efektivní vývoj podnikových aplikací (Bakalářská práce, 2010)
Shrnutí • Generativní infrastruktura se v praxi osvědčila • došlo ke zkrácení vývojových cyklů • Generovaný kód tvoří zhruba 80% kódu • minimalizace úsilí • Identifikovány nové podněty k dalšímu zkoumání • snaha o implementaci plně dynamického IS • Potenciál dalšího rozvoje • generátor artefaktů, vhodná metodologie, šablony… = spousta témat pro bakalářské a diplomové práce!
Závěr Stručně o modelem řízeném vývoji Generativní infrastruktura na bázi XML Ukázka použití na skutečném projektu Dotazy?