80 punten
10 maart 2010
 
Artikel: 13 september 2010

VS2010 Modeling Feature Pack

 1959 views - Download: PDF 


VISUALIZATION, MODELING, EN FEATURE BUILDER POWER TOOL

Edward Bakker en Clemens Reijnen

Bij de ontwikkeling van Visual Studio 2010 heeft Microsoft veel aandacht ­besteed aan Extensibility. Om het mogelijk te maken zelf nieuwe features toe te voegen aan Visual Studio 2010 en om het voor de gebruiker eenvoudiger te maken zelf uitbreidingen te ontwikkelen. Een introductie van het ‘Visualization and Modeling Feature Pack’ en de ‘Feature Builder Power Tool’. Voorbeelden van wat met het Extensibility platform van VS 2010 kan worden bereikt.


Het ‘Visualization and Modeling Feature Pack’ is een ‘Add On’ voor Visual Studio 2010 dat een aantal ­nieuwe functionaliteiten toevoegt aan het product. Kijken we ­onder de motorkap dan zien we dat het Feature Pack eigenlijk een gewone Visual Extension is, gebaseerd op het nieuwe VSIX deployment model voor Visual Studio Extensions. Dit betekent dat we het Feature Pack, net als alle andere Visual Studio Extensions, eenvoudig kunnen beheren (Install, Uninstall en Update) vanuit de Extension Manager in Visual Studio 2010. 


Gebruikers van eerdere versies Visual Studio kennen ongetwijfeld de zogenaamde Power Tools voor Visual Studio die ook een aantal handige en/of ‘coole’ toevoegingen doen aan het ‘core’ Visual Studio product. Toch verschillen Feature Packs op een aantal punten van Power Tools. Zo bevatten Feature Packs bijvoorbeeld zeer nauwkeurig uitgekozen nieuwe functionaliteiten waarvan het zeker is dat deze onderdeel worden van de volgende officiële versie van Visual Studio. Daarnaast worden Feature Packs volledig getest volgens het standaard test proces dat gebruikt wordt voor Visual Studio. ­Feature Packs worden daarnaast volledig ondersteund en worden geleverd met localization support en documentatie. Visualization and Modeling Feature PackZoals de naam wellicht al doet vermoeden, richt het ‘Visualization and Modeling Feature Pack’ zich voornamelijk op functionaliteiten van de Architecture Tools en het Modeling platform zoals die beschikbaar zijn in Visual Studio 2010 Ultimate.


De nieuwe capaciteiten van Visual Studio in het Feature Pack zijn onder te verdellen in drie categorieen: 


De eerste is een ‘taal’ toevoeging op bestaande functionaliteit. Zo wordt in dit geval de bestaande functionaliteit van Dependency Graph en Layer diagram uitgebreid zodat de talen C en C++ ook ondersteund worden. Het Dependency Graph ondersteunt nu ook web applicaties. 


De tweede catergorie is een uitbreiding op de al beschikbare functionaliteiten. Het Feature Pack voegt XMI import, het genereren van class diagrams uit code en het terug linken van workitems naar modellen toe. 


De derde categorie biedt nieuwe technische capaciteiten en nieuwe mogelijkheden. 


Dit zijn, code generatie vanuit het class diagram en zelfgemaak-
 te validaties voor het layer diagram.


 

 

‘Taal’ uitbreiding van bestaande functionaliteit


Het ondersteunen van andere talen dan VB en C# is een logische toevoeging op de analyse mogelijkheden van de Direct Graphs. De uitbreidingsmogelijkheden van deze analyse tool zijn dan ook zeer uitgebreid en het is te verwachten dat er meerdere talen bij gaan komen, al dan niet gerealiseerd door Microsoft. Iedere taal heeft zijn eigen eigenaardigheden;, zo praat je binnen C++ niet over assemblies maar over binaries, en heb je afhankelijkheden met include files, dingen waar de analyse mee rekening moet houden. Na de installatie van het Feature Pack zal dit dan ook gebeuren en zien we dat het ‘Generate Dependency Graph’ menu er een nieuw item bij heeft, namelijk ‘By Include File’ [zie figuur 1.]


Figuur 1. Uitbreiding op Dependency Graph voor de ondersteuning 
van C/C++.

Voor de ASP.NET website is de uitbreiding op de standaard functionaliteit eigenlijk niet een taal uitbreiding maar meer een soort technology uitbreiding, Direct Graphs kunnen nu ook afhankelijkheden tussen webpagina’s onderling en tussen webpagina’s en code visualiseren. 


Als we kijken naar de DGML graph in figuur 2 van een MVC2 applicatie, zien we dat de website nu ook als ‘node’ beschikbaar is. Hierdoor kan de afhankelijkheid met de Views voortaan ook gevisualiseerd worden, waardoor we ook daadwerkelijk een visualisatie kunnen realiseren als een echte MVC, (zie inzet). Iets dat zonder het Feature Pack niet mogelijk was.


Figuur 2. DGML Graph van een MVC2 applicatie.

De functionaliteit van dubbelklikken op een ‘node’ waardoor je naar de code gaat is ook gebruikt binnen de webapplicatie technologie. Wanneer een Direct Graph gegenereerd is van een web applicatie kan er middels dubbel klikken op een aspx-node gesprongen worden naar de html welke de afhankelijkheid veroorzaakt. In de afbeelding hieronder is van de MVC2 applicatie de afhankelijkheid tussen de ASPX contact view en het model weergegeven.


Figuur 3. Gegenereerd class diagram van Tailspin model.


Opmerking: Waar de bestaande functionaliteit van het layer diagram nu wel werkt met de nieuw toegevoegde talen C en C++, zo werkt deze niet met web applicaties. Bijvoorbeeld een layer diagram zal niet de validatie controleren van de bovenstaande afhankelijkheid. 


Standaard binnen Visual Studio 2010 is het mogelijk om de dynamische flow van code te visualiseren middels sequence diagrams. We doen dit door binnen een methode op het menu item ‘generate sequence diagram’ te klikken. Een nuttig hulpmiddel om bestaande code te begrijpen!


Een uitbreiding van het Feature Pack hierop, is het genereren van een statische visualisatie van code d.m.v. class diagrams. 


Het grote verschil met de ‘generate sequence diagram’ functionaliteit is dat het class diagram gegenereerd dient te worden vanuit de Architecture Explorer. Figuur 3 toont een gegenereerd class diagram van het Tailspin model. In de Architecture Explorer is gefilterd op Order en classes en deze worden op het design surface gesleept van een al bestaand class diagram. Dependencies, associaties en overervingen worden automatisch meegenomen.


Figuur 4. Gegenereerd class diagram van Tailspin model.


 

Uitbreiding bestaande functionaliteit


Een andere nuttige functionaliteit van het Feature Pack is de ‘XMI import’ die ons in staat stelt UML elementen uit andere UML tools te importeren in een Visual Studio UML Model. Met behulp van het Feature Pack kunnen files die voldoen aan de XMI 2.1 standaard nu in Visual Studio worden geladen. Hierbij geldt dat het Feature Pack op dit moment alleen UML elementen uit het Sequence, Class en Use Case diagram ondersteunt. Na de installatie van het Feature Pack krijgen we een nieuw menu ‘Import XMI’ in het Architecture menu. Vanuit daar kunnen we een .xmi file selecteren waarvan de UML elementen vervolgens worden geïmporteerd in het eerste Modeling Project in de geopende Solution in Visual Studio. 


Figuur 5. Import XML functionaliteit uit het Feature Pack.


Figuur 6. Use case diagram met ‘linked work item’ en work item met diagram link.

Geimporteerde XMI bestanden worden eerst aan de UML Explorer toegevoegd, waarna deze naar het design surface van een diagram kan worden gesleept.


De andere functionaliteit in de categorie ‘toevoeging aan bestaande functionaliteit’ is het teruglinken vanuit een workitem naar het model. Hierdoor wordt het mogelijk om heen en weer tussen model/modelelement en gelinkt workitem te springen. Handige functionaliteit die de traceerbaarheid ten goed komt! (Figuur 6)


De toevoeging van bovenstaande functionaliteit vereist aanpassingen op de TFS server. Lees hiervoor eerst de readme van het Feature Pack!


 

Technische functionaliteiten


Eén van de meest gevraagde features voor de UML diagrammen in Visual Studio 2010 Ultimate is code generatie vanuit het UML Class diagram. Het Feature Pack voegt een nieuw command ‘Generate Code’ toe aan het UML Class diagram. Met behulp van dit command kunnen we voor iedere selectie uit het diagram de bijbehorende C# code genereren. 


Code generatie binnen het Feature Pack werkt d.m.v. de transformatie van elementen in het UML Class diagram op basis van een set T4 text templates. Er wordt standaard een zogenaamde text template binding gemaakt tussen het diagram en de T4 templates die gebruikt worden voor code generatie. We kunnen deze standaard binding ook aanpassen en er op deze manier voor zorgen dat onze eigen T4 templates gebruikt worden gebruikt tijdens het code generatie proces. Zo kunnen we er bijvoorbeeld voor zorgen dat de gegenereerde code voldoet aan onze eigen specifieke naamgevingsconventies of kunnen we templates gebruiken die ook VB.NET code genereren i.p.v. de standaard C# code. 


Figuur 7. Code generatie vanuit het Class Diagram.


Het is wellicht goed te weten dat er geen automatische updates plaatsvinden in source code en/of UML Class diagram in het geval één van beide aangepast wordt. Hierdoor wordt het bijvoorbeeld mogelijk het UML Class diagram te gebruiken om technische wijzigingen aan de code te bediscussiëren zonder dat de onderliggende source code gelijk wordt aangepast. 


Naast code generatie is het realiseren van aanpassingen voor het layer diagram een van de nieuwe technische functionaliteiten die het Feature Pack biedt voor de gebruiker van Visual Studio. Met behulp van het layer diagram kunnen we een bepaalde gewenste architectuur definiëren om vervolgens alle source code binnen een solution te valideren tegen deze architectuur. Standaard komt het Layer Diagram met een aantal validaties en functionaliteiten maar m.b.v. het Feature Pack zijn we in staat extensions te schrijven voor het Layer Diagram. Zo kunnen we nieuwe menu items toevoegen aan de Layer shapes in het diagram waardoor we in staat zijn een stuk custom code uit te voeren. Ook kunnen we bijvoorbeeld het dubbel click gedrag van een Layer in het diagram aanpassen of een bepaalde validatie uitvoeren als er een referentie wordt getrokken tussen twee Layers. 


Een andere interessante mogelijkheid van het Feature Pack is het toevoegen van eigen validaties voor het Layer Diagram. Hierdoor kunnen we zelf bepalen aan welke (architectuur) regels de source code die we opleveren moet voldoen. Eigen validatie regels integreren volledig met de standaard validatie regels en worden dus ook uitgevoerd bij het ‘Validate Architecture’ menu command of de automatische build.


Ook biedt het Feature Pack de mogelijkheid om eigen properties toe te voegen aan het Layer Diagram. Standaard wordt vaak de ‘Name’ property van het Layer shape gebruikt om aan te geven met wat voor soort Layer we te maken hebben. Op basis van deze naam wordt er dan bepaald welke functie deze layer heeft in de architectuur en welke validaties er dus gelden. 


Het zou misschien veel beter zijn om een extra property ‘Responsibilty’ toe te voegen aan het Layer shape dat gevuld kan worden met een aantal vooraf omschrevengedineerde waarden (Service Interface, Business Layer, etc.). Hierdoor zijn we bij het valideren van de architectuur niet meer afhankelijk van de naam die de architect heeft gekozen voor de layers in het diagram maar kunnen we validaties uitvoeren op basis van verantwoordelijkheden van een layer.


 

Feature Builder Power Tool


Het komt regelmatig voor dat wij als ontwikkelaar en/of architect de behoefte hebben om zelf een uitbreiding te schrijven voor Visual Studio. Hoewel het ontwikkelen van Extensions in Visual Studio 2010 aanzienlijk vereenvoudigd is, blijft dit toch een relatief lastige taak. Om deze reden heeft Microsoft de ‘Feature Builder Power Tool’ ontwikkeld. Een tool die ontwikkelaars helpt bij het bouwen van Visual Studio 2010 Extensions! Visual Studio Extensions die ontwikkeld worden m.b.v. Feature Builder worden ook wel Feature Extensions genoemd en kunnen bestaan uit zowel Visual Studio Automation als wel uit zogenaamde Process Guidance onderdelen. 


 

Visual Studio Automation


Met behulp van Visual Studio Automation kunnen we de volledige Visual Studio IDE besturen. Zo kunnen we bijvoorbeeld veel voorkomende taken van ontwikkelaars vereenvoudigen en/of versnellen. Bijna alle functies van Visual Studio 2010 zijn vanuit code uit te voeren. In het (nabije) verleden hebben we al gezien hoe we met we met behulp van GAT/GAX en de Visual Studio SDK in staat waren om geavanceerde Software Factories te ontwikkelen. Het probleem was dat het ontwikkelen van dergelijke factories relatief ingewikkeld was. Feature Builder maakt Visual Studio Automation een stuk eenvoudiger. 


Met Feature Builder wordt bijvoorbeeld het toevoegen van een nieuw menu item aan de Visual Studio 2010 IDE, die een eigen ontwikkelde actie uitvoert, ondersteund door een Domain Specific Language (DSL). We kunnen binnen deze DSL zogenaamde ‘LaunchPoints’ definiëren en daarvan kunnen we specificeren aan welk bestaand Visual Studio menu deze moeten worden toegevoegd.


Figuur 8. Definiëren van LaunchPoints m.b.v. een DSL. 


Aan een LaunchPoint koppelen we vervolgens een ‘Command’ dat de representatie is van de actie die uitgevoerd dient te worden. Bij het opslaan van de DSL wordt automatisch de code gegenereerd die noodzakelijk is om het nieuwe menu item toe te voegen aan de Visual Studio IDE en de actie uit te voeren. Feature Builder kent verschillende soorten ‘LaunchPoints’. Zo kunnen we niet alleen menu items toevoegen aan de IDE maar kunnen we bijvoorbeeld ook menu items toevoegen aan alle elementen in de UML diagrammen van Visual Studio 2010. Standaard komt Feature Builder met een beperkt aantal Commands. Het is echter relatief eenvoudig zelf nieuwe Commands te schrijven. 


 

Process Guidance


Naast Visual Studio Automation biedt Feature Builder ook de mogelijkheid om ‘Process Guidance’ toe te voegen aan een Visual Studio Extension. Met behulp van deze Process Guidance kunnen we bijvoorbeeld standaarden en richtlijnen, best practices maar ook workflow binnen uit te voeren taken beschikbaar maken voor het ontwikkelteam. Feature Builder maakt hierbij gebruik van twee nieuwe tool windows. De ‘Guidance Workflow Explorer’ toont de activiteiten die een ontwikkelaar kan/moet uitvoeren om tot een bepaald resultaat te komen. Deze activiteiten kunnen een volgordelijkheid hebben en het is mogelijk om voor iedere activiteit pre- en post condities te specificeren. Hiermee wordt het dus mogelijk een workflow te creëren die een ontwikkelaar ondersteund bij het uitvoeren van een bepaalde ontwikkeltaak. Bij iedere activiteit in de workflow kunnen we documentatie opgeven in de vorm van Word documenten en/of webpagina’s. Zodra de ontwikkelaar op een activiteit in de Guidance Explorer klikt, wordt de bijbehorende informatie getoond in het Guidance Browser tool window. Vanuit deze documentatie kunnen vervolgens ook weer Commands worden uitgevoerd die ondersteuning bieden bij de uit te voeren activiteiten. Denk hierbij aan het toevoegen van projecten aan de Visual Studio Solution en het genereren van source code. 


Figuur 9. Guidance Workflow Explorer en Guidance Browser.

 

Conclusie


In dit artikel hebben we twee voorbeeld besproken van ‘tools’ die gebaseerd zijn op Visual Studio Extensibility en/of ons in staat stellen zelf uitbreidingen te schrijven op de feature set van Visual Studio 2010. Bovenstaande is slechts een topje van de ijsberg en beide tools bieden enorme mogelijkheden om onze softwareontwikkelingsactiviteiten verder te standaardiseren en te optimaliseren. Zowel Feature Pack als Feature Builder zijn dus zeker de moeite waard om eens goed te bestuderen!


 

Links:


Visualization and Modeling Feature Pack documentatie: http://msdn.microsoft.com/en-us/library/dd460723.aspx

Feature Builder Power Tool: http://visualstudiogallery.msdn.microsoft.com/en-us/396c5990-6356-41c0-aa20-af4c3e58c7ae

Feature Builder Contrib: http://fbcontrib.codeplex.com/

Blog Clemens Reijnen: www.clemensreijnen.nl


Blog Edward Bakker: www.edwardbakker.nl