Les volutions des techniques de dveloppement Pierre Couzy

  • Slides: 92
Download presentation
 « Les évolutions des techniques de développement » Pierre Couzy piercou@microsoft. com Architecte

« Les évolutions des techniques de développement » Pierre Couzy piercou@microsoft. com Architecte en systèmes d’information DPE – Division Plateforme & Ecosystème Microsoft France 1 Mercredis du développement – 4 avril 2007

Agenda Un petit regard en arrière Différenciation retardée dans les langages XAML Capturer le

Agenda Un petit regard en arrière Différenciation retardée dans les langages XAML Capturer le cadre de développement Les software factories Remonter d’un niveau d’abstraction Domain Specific Languages Penser pour la production SDM – SML 2 Mercredis du développement – 4 avril 2007

Back to the future … Un petit coup d’œil dans le rétro ? 1994

Back to the future … Un petit coup d’œil dans le rétro ? 1994 -2004 : le règne de COM/VB/ASP Des buts de conception Des promesses Quel résultat ? 2002 - ? ? : le règne de. Net Des buts de conception Des promesses Quel résultat ? 3 Mercredis du développement – 4 avril 2007

Un peu d’archéologie 1989 Le standard ANSI C est enfin adopté Fondation de l’OMG

Un peu d’archéologie 1989 Le standard ANSI C est enfin adopté Fondation de l’OMG (Object Management Group) 1990 Visual Basic Python 1991 Premiers travaux internes par Sun sur Java (JDK 1. 0 : 1996. RMI : 1997) 1992 CORBA 1. 1 1993 COM 1994 Premier draft ANSI C++ (finalisé en 1998) UML 4 Mercredis du développement – 4 avril 2007

Windows DNA - The Guiding Architecture Windows DNA is Distributed Computing Common object model

Windows DNA - The Guiding Architecture Windows DNA is Distributed Computing Common object model on all tiers Language neutral “Auto-everything” - services for scalable, reliable, interoperable, distributed applications Tools available today 5 Mercredis du développement – 4 avril 2007

Windows DNA 2000 Microsoft “Babylon” Commerce Server New or Enhanced: • Application Services •

Windows DNA 2000 Microsoft “Babylon” Commerce Server New or Enhanced: • Application Services • Legacy Interoperability • E-commerce (B 2 C) • Data Access/Storage • Development Tools • “Developer Success” • + E-commerce (B 2 B) • + Deployment and Management Microsoft SQLServer Microsoft Biz. Talk Server 6 Mercredis du développement – 4 avril 2007

1 st & 2 nd Generation Web Apps File DB File Web Server Browser

1 st & 2 nd Generation Web Apps File DB File Web Server Browser 1 -1 correspondence of page to file 7 In-house systems “Dynamic Pages” Mercredis du développement – 4 avril 2007

3 rd Generation Web service Web site Tomorrow, external Web sites become building blocks

3 rd Generation Web service Web site Tomorrow, external Web sites become building blocks using XML • Web Services • Megaservices 8 File Web service Web site DB Web Server “The Firewall” Accessing another site today = HTML “screen scraping” or “your architect calls my architect” In-house systems Browser “Dynamic Pages” Mercredis du développement – 4 avril 2007

Combining Web Services Calendar SOAP Mapping (Location) White Pages SOAP Traffic SOAP Alerting 9

Combining Web Services Calendar SOAP Mapping (Location) White Pages SOAP Traffic SOAP Alerting 9 Mercredis du développement – 4 avril 2007 Billing Authentication SOAP

Windows 2000 Windows DNA Application Services “Built-in” integrated applications server for building distributed Web

Windows 2000 Windows DNA Application Services “Built-in” integrated applications server for building distributed Web applications IIS 5. 0 - high performance web server Active Server Pages COM+ component services Transactions Message Queue and Queued Components Role-based security Network Load Balancing High performance XML support 10 Mercredis du développement – 4 avril 2007

Après ce flashback Qu’est-ce qui a changé dans la vision MS ? Quels impacts

Après ce flashback Qu’est-ce qui a changé dans la vision MS ? Quels impacts sur votre travail ? Quelles sont nos nouvelles promesses de campagne ? 11 Mercredis du développement – 4 avril 2007

Développer des logiciels, c’est complexe ! Comprendre les utilisateurs Définir, modéliser. . Planifier, organiser.

Développer des logiciels, c’est complexe ! Comprendre les utilisateurs Définir, modéliser. . Planifier, organiser. . Développer, tester. . Déployer et maintenir Maîtriser les délais, les coûts, les risques. . . … 12 Mercredis du développement – 4 avril 2007

Le développement “artisanal”, ça a du bon ! Du boulot ! Des outils standards

Le développement “artisanal”, ça a du bon ! Du boulot ! Des outils standards Des processus “simplifiés” Et la maintenance ? Pas de capitalisation Pas de réutilisation Pragmatique Dépassements, Défauts, Sécurité, Pannes… Mais, comme le dit la pub : « l’artisanat est la plus grande entreprise de France » 13 Mercredis du développement – 4 avril 2007

Productivité & améliorations continue Le modèle industriel Economie d’échelle Pour automatiser et améliorer la

Productivité & améliorations continue Le modèle industriel Economie d’échelle Pour automatiser et améliorer la production Le concept de “Boîtes noires” Produire des modèles et des dérivés Exemple : CD & DVD Mais mal adapté à l’industrie logicielle Eventuellement progiciel 14 Mercredis du développement – 4 avril 2007

Différenciation retardée Economie de “périmètre” ou de “surface” Réutilisation des principes de conception et

Différenciation retardée Economie de “périmètre” ou de “surface” Réutilisation des principes de conception et des composants Des processus génériques et connus, modélisables Personnalisation possible au final, paramétrable Il faut seulement définir ce qui est spécifique à chaque système 15 Mercredis du développement – 4 avril 2007

Un exemple : XAML Vous percevez sans doute XAML comme un langage de présentation

Un exemple : XAML Vous percevez sans doute XAML comme un langage de présentation graphique Explorons un peu son mode de fonctionnement 16 Mercredis du développement – 4 avril 2007

XAML pour les applications Console 17 Mercredis du développement – 4 avril 2007

XAML pour les applications Console 17 Mercredis du développement – 4 avril 2007

Les profils XAML XOML : pour le workflow WPF : pour les interfaces utilisateur

Les profils XAML XOML : pour le workflow WPF : pour les interfaces utilisateur XPS : pour les documents … On associe à chaque besoin Un tronc commun de développement Un ensemble de spécialisations 18 Mercredis du développement – 4 avril 2007

“Software Factories” Processus “domainspecific” Outils et langages “domain-specific” Contenu “domainspecific” Automatiser les tâches répétitives

“Software Factories” Processus “domainspecific” Outils et langages “domain-specific” Contenu “domainspecific” Automatiser les tâches répétitives et sans valeur ajoutée Amélioration continue 19 Mercredis du développement – 4 avril 2007

Présentation & Challenges Un ensemble de pratiques « éprouvées » , d’outils, de code

Présentation & Challenges Un ensemble de pratiques « éprouvées » , d’outils, de code source, et de guides d’architecture pour concevoir des applications distribuées Des challenges : Suivre l’évolution des technologies Migration WS, WSE vers. NET 3. 0 Supporter WCF / WF / Card. Space Pour les architectes & les développeurs Documentation écrite « guidance packages » pour dialoguer avec VS 2005 Une implémentation de référence (Global Bank) Bénéfices : Amélioration de la qualité Être prédictible Augmenter la productivité Flexibilité : paramétrage 20 Mercredis du développement – 4 avril 2007

Service Software Factory Une initiative du groupe Pattern & practises Des assistants dans Visual

Service Software Factory Une initiative du groupe Pattern & practises Des assistants dans Visual Studio 2005 pour définir les caractéristiques d’un service et son implémentation : Sécurité, déploiement, contexte Patterns de conception des services Des exemples d’implémentation Utilise le GAT (Guidance Automation Toolkit) Utilisation des tests unitaires Intégration avec Enterprise Library Patterns WCF La version finale du Service BAT 21 Mercredis du développement – 4 avril 2007

Prise en main Un guide complet de prise en mains Un tutorial complet (HOL)

Prise en main Un guide complet de prise en mains Un tutorial complet (HOL) en 10 étapes sur un scénario réaliste Création de la solution et de sa structure Conception des types de données Conception des types de messages Définition des opérations Création des entités métiers Passer des messages aux entités métiers Création des accès aux données (CRUD) Création d’un référentiel de classes d’accès aux données Invoquer la couche d’accès aux données Connecter un client et activer ses services Une vidéo (1 h 00) 22 Mercredis du développement – 4 avril 2007

Un guide interactif Un exemple de conception, en 17 itérations Modifiable Intégré à VS

Un guide interactif Un exemple de conception, en 17 itérations Modifiable Intégré à VS 2005 23 Mercredis du développement – 4 avril 2007

De l’architecture à l’implémentation 24 Mercredis du développement – 4 avril 2007

De l’architecture à l’implémentation 24 Mercredis du développement – 4 avril 2007

Prérequis. NET Frame. Work 2. 0 VS 2005 SQL Server 2005 / SQL Express

Prérequis. NET Frame. Work 2. 0 VS 2005 SQL Server 2005 / SQL Express GAT – Guidance Automation Toolkit LAB à part. OU ? : Sur gotdotnet Sur MSDN 25 Mercredis du développement – 4 avril 2007

Software Factories – WCF 26 Mercredis du développement – 4 avril 2007

Software Factories – WCF 26 Mercredis du développement – 4 avril 2007

Software Factories En développement intensif chez Microsoft. . ne mettez pas la charrue avant

Software Factories En développement intensif chez Microsoft. . ne mettez pas la charrue avant les bœufs D’abord une expérimentation Puis la collecte des bonnes pratiques Puis la documentation associée. . Et enfin la capitalisation Il nous reste un problème à régler … 27 Mercredis du développement – 4 avril 2007

Ou est la complexité ? 0. . 1 «entity» Credit Card + account. Number

Ou est la complexité ? 0. . 1 «entity» Credit Card + account. Number : String + card. Type : String + expiration. Date : Long + name. On. Card : String + uid : String + user. Uid : String 1. . * + set. Values ( ) + get. Values ( ) 1 1 «derived» «entity» User + address : String + city : String + country : String + email : String + group. Id : String + password : String + secret. Number : Integer + state : String + status : String + uid : String + user. Id : String + zip : String «entity» Seller 1 «entity» Auction «entity» Buyer 1. . . «entity» Bid + category. Uid : String + amount : Float + credit. Card. Account : String + auction. Uid : String 0. . 1 + credit. Card. Expiration : Long+ buyer. Uid : String + credit. Card. Name : String + cancel. Explanation : String + credit. Card. Type : String + date : Long + end. Time : Long + status : String + item. Uid : String + uid : String + minimum. Bid. Increment : Float + seller. Uid : String + starting. Price : Float + start. Time : Long + status : String + timezone. Uid : String + uid : String + set. Values ( ) + get. Values ( ) ? package com. microsoftpe arlcircle. aucti on. auctionmanag er. business. auc tionmanager ; import java. rmi. Remot e. Exception; 28 Concepts de haut niveau The “Business-IT Gap” Langages d’implémentation de bas niveau Mercredis du développement – 4 avril 2007

Abstraction pour réduire la complexité Abstractions “Domain Specific” C#, Java, etc Assembler, Pcode, CLR

Abstraction pour réduire la complexité Abstractions “Domain Specific” C#, Java, etc Assembler, Pcode, CLR IL 29 Abstractions de portée générale Bytecode ou langages machines Mercredis du développement – 4 avril 2007

Des frameworks pour réduire la complexité Frameworks Ex : ASP. Net Abstractions Frameworks “Domain

Des frameworks pour réduire la complexité Frameworks Ex : ASP. Net Abstractions Frameworks “Domain Specific” C#, Java, etc Abstractions de portée générale Assembler, Pcode, CLR IL 30 Bytecode ou langages machines Mercredis du développement – 4 avril 2007

Manipulations de concepts dans Visual Studio 2005 L’exemple des fichiers de settings et ressources

Manipulations de concepts dans Visual Studio 2005 L’exemple des fichiers de settings et ressources Persistance dans des fichiers XML (. settings, . resources) Resources. Designer. cs namespace Windows. Application 1. Properties { internal class Resources { internal static string Gagné { Res. XFile. Code. Generator get {return Resource. Manager. Get. String( "Gagné", resource. Culture); }} internal static string Perdu { get {return Resource. Manager. Get. String( "Perdu", resource. Culture); }} } private static global: : System. Resources. Resource. Manager resource. Man; private static global: : System. Globalization. Culture. Info resource. Culture; internal static global: : System. Globalization. Culture. Info Culture { get { return resource. Culture; } set {resource. Culture = value; } } Mercredis du développement – 4 avril 2007 31 31

32 Mercredis du développement – 4 avril 2007

32 Mercredis du développement – 4 avril 2007

Le mécanisme … Nous manipulons des ressources ou des paramètres de configuration de manière

Le mécanisme … Nous manipulons des ressources ou des paramètres de configuration de manière naturelle. Des Custom Tools génèrent du code basé sur un Framework (. NET 2. 0) pour y accéder en runtime (masquant l’utilisation du Framework) System. Resources et System. Globalization System. Configuration Ce mécanisme est unidirectionnel. 33 Mercredis du développement – 4 avril 2007

De la Manipulation bi-directionnelle de concepts Pour les Windows. Forms c’est comme pour les

De la Manipulation bi-directionnelle de concepts Pour les Windows. Forms c’est comme pour les ressources ou settings mais L’éditeur est graphique la sérialisation s’effectue dans le code c’est built-in (pas de Custom Tool) Même chose pour le Class diagram La notion de classe partial est très intéressante pour les générateurs de code 34 Mercredis du développement – 4 avril 2007

Et si nous. . . nous pouvions prendre un modèle (par exemple un automate

Et si nous. . . nous pouvions prendre un modèle (par exemple un automate d’états finis) et en déduire du code source? « Ajouter State. Machine » à un projet Visual Studio. C’est possible car Visual Studio 2005 est extensible Mais il nous faut d’abord formaliser nos solutions à nos problèmes répétitifs 35 Mercredis du développement – 4 avril 2007

Evolution du processus Fourniture d’outils pour aider les Fourniture d’élémentsutilisateurs stables du framework sous

Evolution du processus Fourniture d’outils pour aider les Fourniture d’élémentsutilisateurs stables du framework sous forme compilée Automatisation de l’application de patterns Formalisées issues de l’experience Designers Frameworks DSL SM Templates Designs. State. Machine Patterns Exemple de code solutions State-Pattern Clignottant éteint 36 Allumé Eteint Automates d’états-finis Mercredis du développement – 4 avril 2007

Les Roles et les Artefacts Les « architectes » sélectionnent des procédures et conseils

Les Roles et les Artefacts Les « architectes » sélectionnent des procédures et conseils et créent deux types d’artefacts : un Framework Une codification des conseils (assistant, designer graphique ou non. . . ) Les « développeurs » utilisent un modèle pour implémenter une solution plus vite, et de meilleure qualité 37 Mercredis du développement – 4 avril 2007

Un besoin très fort de langages visuels Shapes Links, ends, style Labels Nesting Layout,

Un besoin très fort de langages visuels Shapes Links, ends, style Labels Nesting Layout, routing Corona property label Shape members Corona Base Corona Group playing waiting pause begin running stop R 0. 1 R 0. 7 CR 38 +v 0. 1 R R C Mercredis du développement – 4 avril 2007 C 0 v

Des modèles unifiés ou spécifiques Nous avons besoin de langages pour décrire les points

Des modèles unifiés ou spécifiques Nous avons besoin de langages pour décrire les points d’extension de nos Frameworks Ces langages peuvent être : Textuels (XML, et autres : exemple ASPX, T 4) R ou 0. 1 R Graphiques () Horizontaux (techniques) 0. 7 CR C Designer de Windows. Form, Class Designer, Workflow State Machine Designer ou Verticaux (métier) DSL Architecture de composants de simulation 39 Mercredis du développement – 4 avril 2007 +v 0. 1 R R C 0 v

De quoi parlons nous DSL = Package de langage VS 2005 Nécessite le VS

De quoi parlons nous DSL = Package de langage VS 2005 Nécessite le VS 2005 SDK (VSIP) Editeurs, toolboxs, etc… Add-Ins Macros Personnalisation utilisateur VS. NET 40 Mercredis du développement – 4 avril 2007 C o u t d ’ i n t é g ra t i o n Niveau d’intégration Packages

Domain Specific Languages et les DSL Tools Langages visuels… Pour comprendre ou définir les

Domain Specific Languages et les DSL Tools Langages visuels… Pour comprendre ou définir les besoins Pour concevoir un designer spécialisé Pour générer une partie de la solution Pour implémenter des “design patterns” ciblant des frameworks et des architectures spécifiques Pour personnaliser vos composants et vos applications Pour visualiser les sytèmes existants 41 Mercredis du développement – 4 avril 2007

Non, nos designers actuels ne sont pas sur ce modèle ! DSL Tools for

Non, nos designers actuels ne sont pas sur ce modèle ! DSL Tools for Visual Studio 2005 Distributed Systems Designers Class Designer Your new Designer Microsoft Modeling Platform In Visual Studio 42 Mercredis du développement – 4 avril 2007

Architecture de la plate-forme de modélisation Intégration dans Visual Studio pour les composants (Toolbox,

Architecture de la plate-forme de modélisation Intégration dans Visual Studio pour les composants (Toolbox, Menus) Shell Framework Composition graphique avec gestion des connexions et Microsoft Modeling Platform paramètres In Visual Studio Validation Framework Gestion des contraintes et assistance à la résolution des conflits 43 Design Surface Framework Mécanisme de génération Template Engine Domain Model Framework Base graphique en mémoire et services associés (transactions, serialisation…) et requêtes Mercredis du développement – 4 avril 2007

DSL Tools DSLT permet de définir un langage comprenant : Un designer graphique Un

DSL Tools DSLT permet de définir un langage comprenant : Un designer graphique Un modèle persistable en Xml Un mécanisme de génération de code Il a été écrit avec… lui-même. Version 1 disponible depuis Septembre Fournit avec le Windows SDK Tout (en anglais) sur http: //msdn. microsoft. com/vstudio/DSLTools/ 44 Mercredis du développement – 4 avril 2007

DSL Tools La définition d’un langage consiste à définir : Les classes du modèle

DSL Tools La définition d’un langage consiste à définir : Les classes du modèle avec Leurs relations Leurs propriétés Leurs apparences graphiques Les règles d’intégrités et de validation du modèle La structure du document persisté Les templates de génération Le choix du langage est libre, vous pouvez : Utiliser un langage existant et le spécialiser Ex: diagramme de classes UML spécifique au C# Créer un nouveau langage spécifique à un besoin Ex: Modélisation d’un framework métier 45 Mercredis du développement – 4 avril 2007

DSL Tools - Concepts Les classes du modèle Model Domain. Property Relation. Ship (reference/embedded/Inheritance)

DSL Tools - Concepts Les classes du modèle Model Domain. Property Relation. Ship (reference/embedded/Inheritance) L’apparence graphique Geometry. Shape Compartment. Shape Image. Shape Port. Shape Swimlane (Container vertical) 46 Mercredis du développement – 4 avril 2007

DSL Tools - Concepts Les règles d’intégrités Rules : Déclenchées lors d’une modification du

DSL Tools - Concepts Les règles d’intégrités Rules : Déclenchées lors d’une modification du modèle Insert. Rule Delete. Rule Change. Rule … Evénements de notification Abonnements sur des propriétés Notion de transaction Toutes les modifications se font au sein d’une transaction permettant ainsi le mécanisme du undo/redo. 47 Mercredis du développement – 4 avril 2007

DSL Tools - Concepts Apparence graphique : Les ‘Shapes’ Contiennent des décorateurs ayant des

DSL Tools - Concepts Apparence graphique : Les ‘Shapes’ Contiennent des décorateurs ayant des comportements basés sur la valeur d’une propriété Sont associés à des classes du modèle (Domain. Class) Personnalisation de la toolbox de Visual Studio Permet de définir les items pour faire du drag’n drop Personnalisation de la fenêtre d’exploration du modèle permettant de naviguer à travers sa structure. 48 Mercredis du développement – 4 avril 2007

DSL Tools Les templates de génération Utilise le moteur de transformation de GAT (T

DSL Tools Les templates de génération Utilise le moteur de transformation de GAT (T 4) Contient des balises <# #> Manipule le modèle S’exécute via les « customs tools » par défaut Peut générer n’importe quoi Code Html XML … 49 Mercredis du développement – 4 avril 2007

Comment créer un DSL ? Un type de projet dans VS 2005 (choix d’un

Comment créer un DSL ? Un type de projet dans VS 2005 (choix d’un template) Modification du Domain Model (méta-modèle) Mise à jour de la Designer Definition (notation graphique) Ecriture de code personnalisé pour la validation … et les aspects graphiques avancés, l’interaction avec VS Code T 4 pour les générateurs de code Les détails seront vus dans une grosse démo ! 50 Mercredis du développement – 4 avril 2007

Anatomie d’un DSL 3. Correspondance entre les deux. 1. Domain Model 2. Designer Definition

Anatomie d’un DSL 3. Correspondance entre les deux. 1. Domain Model 2. Designer Definition 51 Mercredis du développement – 4 avril 2007 4. Code sur mesure (validation) (effets élaborés)

Création d’un Designer avec les DSL Tools Définition du méta. Modèle (Dm) Mapping Dm

Création d’un Designer avec les DSL Tools Définition du méta. Modèle (Dm) Mapping Dm <-> Dd Génération Code/ Artefact Sérialisation XML spécifique Validation/ Contraintes Notation Graphique (Dd) Comportement spécifique Code généré par les DSL Tools 52 Code personnalisé (Utiliser le VS SDK) Mercredis du développement – 4 avril 2007

Code sur mesure /// <summary> /// When the event / condition / action changes

Code sur mesure /// <summary> /// When the event / condition / action changes the label is recomputed and /// vice versa /// </summary> [Rule. On(typeof(Transition), Fire. Time = Time. To. Fire. Top. Level. Commit)] public sealed class Transition. Attributes. Changed : Change. Rule { /// <summary> /// This method is called whenever any attribute of a Transition changes. /// It processes the coherence Label = Event + "["+Condition+"] / "+Action /// </summary> /// <param name="e"></param> public override void Element. Attribute. Changed(Element. Attribute. Changed. Event. Args e) { Transition t = e. Model. Element as Transition; // Compute Label when Event changes if (e. Meta. Attribute. Id == Transition. Event. Meta. Attribute. Guid) t. Label = Compute. Summary(e. New. Value as string, t. Condition, t. Action); Compute Label. Enabled)] when Condition changes [Validation. State( Validation. State. Enabled)] Validation. State(// Validation. State else if (e. Meta. Attribute. Id == Transition. Condition. Meta. Attribute. Guid) public partial class State t. Label = Compute. Summary(t. Event, e. New. Value as string, t. Action); { // Compute Label when Action changes /// <summary> else if (e. Meta. Attribute. Id == Transition. Action. Meta. Attribute. Guid) /// A final state should not have outgoing transitions t. Label = Compute. Summary(t. Event, t. Condition, e. New. Value as string); /// </summary> // Compute Event, Condition, Action when Label changes /// <param name="context"></param> else if (e. Meta. Attribute. Id Transition. Label. Meta. Attribute. Guid) [Validation. Method (Validation. Category. Open | == Validation. Category. Save | Validation. Category. Menu)] [Validation. Method( Validation. Category. Menu)] { private void Validate. Final. State. Has. No. Outgoing. Transitions(Validation. Context context) System. Text. Regular. Expressions. Match match = event. Label. Reg. Ex. Match(e. New. Value as string); { if (match. Success) Transition[] transitions = Get. Outgoing. Transitions(); { if ((Kind == State. Kind. Final) && (transitions. Length > 0)) State. Kind t. Event = match. Groups["Event. Group" ]. Value. Trim(); match. Groups["Event. Group"]. Value. Trim(); { t. Condition = match. Groups["Condition" ]. Value. Trim(); match. Groups["Condition"]. Value. Trim(); string error = string. Format(System. Globalization. Culture. Info. Current. UICulture, string action. With. Slash = match. Groups["Action. Group"]. Value. Trim(); match. Groups[ Domain. Model_Resource. Final. Cannot. Have. Outgoing. Transitions, Name); Domain. Model_Resource if (action. With. Slash. Starts. With("/" "/")) )) (action. With. Slash. Starts. With( context. Log. Error(error, "State. Machines 42", transitions); t. Action = action. With. Slash. Substring(1). Trim. Start(); } else } t. Action = action. With. Slash; … } } } Mercredis du développement – 4 avril 2007 Règles de cohérence du modèle Règles de validation du modèle 53

Générateur de code écrit en T 4 (Text Templating Transformation) /// <summary> /// Method

Générateur de code écrit en T 4 (Text Templating Transformation) /// <summary> /// Method to clean up the resources(such as timers for example) allocated by the state. /// </summary> /// <param name="disposing">Is the state disposing</param> /// <param name="state. Machine">State machine owning this state</param> /// <param name="driven">Driven interface</param> public virtual void Dispose(bool disposing, <#=state. Machine. Name #> state. Machine, <#=driven. Interface #> driven) { } <#=state. Machine. Name#> <#=driven. Interface#> } <# /// <summary> /// Declaration of in the package providing the Simulation code generator foreach(State state State. Machine. All. States) foreach /// </summary> { [Provide. Code. Generator( (typeof( (State. Machines. Generator), Provide. Code. Generator typeof State. Machines. Generator "State. Machines. Generator", // Find base class (class implementing Parent. State) ), "State. Machines. Generator", "Custom tool that generates C# files based on. State. Machine files", true)] string base. Name; public sealed partial class State. Machines. Package {} if (state. Parent. State == State. Machine) base. Name = base. State. Name; [ Guid( )] Guid("9 DA 6 F 053 -E 5 B 9 -4955 -A 6 AE-89 FB 5505 E 8 E 6")] "9 DA 6 F 053 -E 5 B 9 -4955 -A 6 AE-89 FB 5505 E 8 E 6" else public class State. Machines. Generator : Templated. Code. Generator base. Name = state. Parent. State. Get. Full. Name(); { On peut en faire un Custom Tool ! protected override byte[] Generate. Code(string input. File. Name, string input. File. Content) //{ List of events Dictionary<string, List<Transition>> transitions. From. State. By. Event. Signature = state. Get. Outgoing. Transitions. Grouped. By. Event // Replace the supplied file contents with the template we want to run #> input. File. Content = ASCIIEncoding. UTF 8. Get. String(Properties. Resources. State. Machines. Report); ASCIIEncoding. UTF 8. Get. String(Properties. Resources /// <summary> // Substitute the name of the current model file into the template. /// <#=state. Comment#> #> File. Info(input. File. Name); <#= File. Info fi = new File. Info(input. File. Name); /// </summary> input. File. Content = input. File. Content. Replace(@"%MODELFILENAME% ", fi. Name); input. File. Content. Replace(@"%MODELFILENAME%" classinput. File. Content <#=state. Get. Full. Name() #> : <#=base. Name #> <#=state. Get. Full. Name()#> <#=base. Name#> = input. File. Content. Replace(@"File. Name. Space", , this. File. Name. Space); input. File. Content. Replace( this. File. Name. Space); { // Now just delegate the rest of the work to the base class <# byte[] data = base. Generate. Code(input. File. Name, input. File. Content); foreach( (string transition. Event. Signature transitions. From. State. By. Event. Signature. Keys) foreach byte[] [] ascii = new byte[data. Length - 3]; byte[data. Length in { Array. Copy(data, 3, ascii, 0, data. Length - 3); Transition t = transitions. By. Event. Signature[transition. Event. Signature][0]; return ascii; } } 54 Mercredis du développement – 4 avril 2007

Avec un DSL bien fait … Nous sommes guidés au fur et à mesure

Avec un DSL bien fait … Nous sommes guidés au fur et à mesure Le modèle est validé à tous moments Le modèle est cohérent (règles de cohérence) Le code est généré à partir du modèle Le code généré compile forcément ! Il y a des possibilités illimitées d’interactions avec Visual Studio : Editeurs spécialisés pour les propriétés Rétro-ingénierie Drag & Drop Debuggage au niveau du modèle Etc … Synchronisation modèle / code, refactoring, etc … 55 Mercredis du développement – 4 avril 2007

Mon 1 er DSL avec les DSL Tools 56 Mercredis du développement – 4

Mon 1 er DSL avec les DSL Tools 56 Mercredis du développement – 4 avril 2007

Passer à l’ère de l’industrialisation : une utopie ? Echecs des projets : encore

Passer à l’ère de l’industrialisation : une utopie ? Echecs des projets : encore et toujours la même histoire Spécifications incomplètes, mauvaise gestion des besoins Manque de communication, information disséminée Manque de réactivité face aux changements Outils trop complexes (chers) Pas de gestion du risque Ce qui ne marche pas La méthode pour la méthode La méthode sans outils et les outils sans méthode Les méthodes et les outils sans les hommes Toujours au même point 30 ans après 30 ans, c’est court pour industrialiser Le facteur humain L’artisanal, c’est pas si mal ! Maintenant il va falloir réussir L’alignement de l’IT sur les exigences business Mondialisation, pression plus forte, nature des projets… 57 Mercredis du développement – 4 avril 2007

Cycle de vie des applications - SDLC Définition des besoins, conception, développement, tests et

Cycle de vie des applications - SDLC Définition des besoins, conception, développement, tests et déploiement. On boucle… C’est bien ça ? La méthode en support du cycle Unified Process Les méthodes agiles (extreme programming) CMMI : un référentiel de bonnes pratiques La software factory, support de l’industrialisation Combiner méthodes et outils au services des projets et des hommes Automatiser le processus sur l’ensemble du cycle de vie S’adapter au rôle de chacun Fournir un workflow adaptable Piloter avec des tableaux de bord Le rôle clé du référentiel Est-ce possible ? 58 Mercredis du développement – 4 avril 2007

Comment Microsoft s’est attaqué au problème : outiller les processus, prendre en compte les

Comment Microsoft s’est attaqué au problème : outiller les processus, prendre en compte les besoins concrets de chaque acteur. Industrialisation pragmatique Démocratiser Améliorer la productivité Réduire le complexité Automatiser les tâches à faible valeur ajoutée Mise en œuvre de la SF par étapes Ne pas enfermer l’utilisateur dans une méthode : 2 socles méthodologiques MSF for agile Software Development MSF for CMMI Process Improvment Implémenter sa propre méthode Approche UML/UP vs DSL (Domain Specific Language) 59 Mercredis du développement – 4 avril 2007

Observations Les problèmes opérationnels viennent souvent de décision prise au moment du design. Gap

Observations Les problèmes opérationnels viennent souvent de décision prise au moment du design. Gap énorme entre le niveau de définition d’une tâche et sa réalisation. La réutilisation de meilleures pratiques et ou d’outils est inexistante. Spécialisation des opérateurs qui doivent connaitre parfaitement les applications. Les opérateurs sont souvent le point d’intégration. 60 Mercredis du développement – 4 avril 2007

Diagnostic Besoin d’adresser cette complexité le long du cycle de vie: développement, déploiement, administration

Diagnostic Besoin d’adresser cette complexité le long du cycle de vie: développement, déploiement, administration avec: Des outils de développement permettant de de décrire un système complet: topologie, configuration, administration, Qos, sécurité… Des systèmes d’exploitation manageant globalement des ressources du datacenter. Des outils de management élevant le niveau d’abstraction et d’automatisation. 61 Mercredis du développement – 4 avril 2007

Complexité le long du cycle de vie des systèmes Comment décrire et Comment décrire

Complexité le long du cycle de vie des systèmes Comment décrire et Comment décrire les besoins opérationnels? appliquer les politiques opérationnelles? System Definition Model Développement Opérations Comment déployer et gérer des systèmes distribués? 62 Mercredis du développement – 4 avril 2007

System Definition Model / SML SDM modélise un système décrivant sa structure et toutes

System Definition Model / SML SDM modélise un système décrivant sa structure et toutes les informations pertinentes à son déploiement et à son administration Plan/Design Development Testing Deployment Applications Structure: Composants et relations Contraintes Health model Application Hosts Network Topology & Operating Systems Tâches opérationnelles Settings 63 Hardware Mercredis du développement – 4 avril 2007 Operations

Cycle de vie des solutions Développer une application intégrant les standards IT de gestion

Cycle de vie des solutions Développer une application intégrant les standards IT de gestion des opérations Gérer le SI dynamiquement Job Merc. Stage SQL Cache Instrumentation HTTP Connaissance Opérations Stratégie datacenter System Definition Model 64 Shuttle Feed Store DSS FTP Déployer automatiquement les logiciels et les ressources SERVEURS STOCKAGE Mercredis du développement – 4 avril 2007 RESEAU

A quoi sert SDM / SML ? Manipule le modèle et pas les composants

A quoi sert SDM / SML ? Manipule le modèle et pas les composants réels. Modèle dynamique, actif sur le cycle de vie du système DSI simplifie le développement, déploiement et l’administration de systèmes Validation en phase de design Intégration du développement et des opérations. Permet de développer des composants administrables. Détecte les problèmes en amont Déploiement automatisé Allocation des ressources (matériel et logiciel) Configuration et Validation Administration des Systèmes Définition de l’état cible Monitoring amélioré Automatisation des opérations 65 Mercredis du développement – 4 avril 2007

SDM / SML : Exemple <component. Type name=”my. Web. App” base. Type=“Web Application”> <settings>

SDM / SML : Exemple <component. Type name=”my. Web. App” base. Type=“Web Application”> <settings> <setting name=“port. Number" type="xsd: int" /> </settings> <port name=”my. Web” type=”web. Server”> <value name=”url”>http: //$(host. server)/my. Web. App</value> </port> <port name=”my. SQL” type=”SQLServer. Client”> <value name=”encrypted”>false</value> </ports> <resource name=”myapp. dll” type=”file”> <value name=”name”>myapp. dll</value> <value name=”source. Path”>$(dir)myapp. dll</value> </resource> <resource name=”my. Web. Settings” type=”Web Settings”> <value name=”Security”>Certificate</value> </resources> </component. Type> 66 Mercredis du développement – 4 avril 2007

SDM / SML dans Visual Studio 2005 Développeurs App Architectes Contraintes de Déploiement et

SDM / SML dans Visual Studio 2005 Développeurs App Architectes Contraintes de Déploiement et besoins opérationnels Contraintes et Politiques du datacenter Validation du modèle Architectes IT Modèles SDM 67 Mercredis du développement – 4 avril 2007 Erreurs

Validation lors de la conception Décrit la configuration du Data center: topologie, configuration, et

Validation lors de la conception Décrit la configuration du Data center: topologie, configuration, et politiques Design du data center Architectes 68 SDM Architecture logique de l’application SDM Design de l’application Architectes / Développeurs Mercredis du développement – 4 avril 2007 Vérification de la configuration du data center en vue du déploiement de l’application Modèle de déploiement Développeurs/Opérations

Application Designer Concepteur SOA Definition d’un port 69 Mercredis du développement – 4 avril

Application Designer Concepteur SOA Definition d’un port 69 Mercredis du développement – 4 avril 2007

Logical Infrastructure Designer Associer les services à l’infrastructure logique Validation de l’architecture par rapport

Logical Infrastructure Designer Associer les services à l’infrastructure logique Validation de l’architecture par rapport aux contraintes opérationnelles 70 Mercredis du développement – 4 avril 2007

SDM / SML pour le déploiement SDM contient toutes les informations requises pour le

SDM / SML pour le déploiement SDM contient toutes les informations requises pour le déploiement Applications et Data Centers Différentes échelles Différents environments Dynamic Data Center SDM représente la configuration du data center Provision automatique des machines, des réseaux et du stockage Virtualisations des ressources 71 Mercredis du développement – 4 avril 2007

SDM / SML pour l’administration Elève le niveau d’abstraction Gère un service pas un

SDM / SML pour l’administration Elève le niveau d’abstraction Gère un service pas un ensemble de composants Vue transparente du système Incidents présentés dans le contexte d’un service Mais possibilité de descendre dans les couches Automatisation et réutilisation des processus opérationnels, meilleures pratiques, configuration… Language de base pour l’automatisation: context, invariant… Réutilisation: Occurrence, deploiement, application 72 Mercredis du développement – 4 avril 2007

Et nous dans tout ça ? Une spécialisation progressive Un rôle d’architecte technique Un

Et nous dans tout ça ? Une spécialisation progressive Un rôle d’architecte technique Un rôle d’intégrateur Une montée en compétence inévitable La modélisation rejoint les projets L’intégration recouvre plus de cibles Des outils pour nous aider À chaque catégorie 73 Mercredis du développement – 4 avril 2007

Entity Data Model 74 Mercredis du développement – 4 avril 2007

Entity Data Model 74 Mercredis du développement – 4 avril 2007

Buts de conception « Sauter » le modèle relationnel physique en base Travailler directement

Buts de conception « Sauter » le modèle relationnel physique en base Travailler directement sur des entités Via un modèle de domaine EDM : Entity Data Model Modèle relationnel étendu Un langage de requête associé Un moteur de mapping Des outils de conception 75 Mercredis du développement – 4 avril 2007

Entity Data Model Entity Framework / entity SQL Un nouveau niveau d’indirection ADO. Net

Entity Data Model Entity Framework / entity SQL Un nouveau niveau d’indirection ADO. Net Une passerelle légère vers. Net Linq Une représentation alternative dans. Net Outils Modeleur de domaine Mapper … 76 Mercredis du développement – 4 avril 2007

Aujourd’hui 77 Mercredis du développement – 4 avril 2007

Aujourd’hui 77 Mercredis du développement – 4 avril 2007

A terme 78 Mercredis du développement – 4 avril 2007

A terme 78 Mercredis du développement – 4 avril 2007

EDM – Entity Data (domain ? ) Model 81 Mercredis du développement – 4

EDM – Entity Data (domain ? ) Model 81 Mercredis du développement – 4 avril 2007

Mapping – EDM vers base 82 Mercredis du développement – 4 avril 2007

Mapping – EDM vers base 82 Mercredis du développement – 4 avril 2007

Mapping – EDM vers base La représentation en base suit les contraintes propres à

Mapping – EDM vers base La représentation en base suit les contraintes propres à la base, même si elles ne sont pas naturelles dans le domaine sous -jacent 83 Mercredis du développement – 4 avril 2007

Mapping – EDM vers code 84 Mercredis du développement – 4 avril 2007

Mapping – EDM vers code 84 Mercredis du développement – 4 avril 2007

Manipulation EDM : e. SQL Un dialecte manipulant le modèle de domaine et non

Manipulation EDM : e. SQL Un dialecte manipulant le modèle de domaine et non sa représentation en base Un moteur faisant le lien entre les deux Un provider pour ADO. Net 85 Mercredis du développement – 4 avril 2007

e. SQL – t. SQL ? 86 Mercredis du développement – 4 avril 2007

e. SQL – t. SQL ? 86 Mercredis du développement – 4 avril 2007

EDM – manipulation par Code 87 Mercredis du développement – 4 avril 2007

EDM – manipulation par Code 87 Mercredis du développement – 4 avril 2007

LINQ : s’abstraire de e. SQL ? Peut aussi s’écrire 88 Mercredis du développement

LINQ : s’abstraire de e. SQL ? Peut aussi s’écrire 88 Mercredis du développement – 4 avril 2007

Architecture générale d’Entity Framework 89 Mercredis du développement – 4 avril 2007

Architecture générale d’Entity Framework 89 Mercredis du développement – 4 avril 2007

La réponse est oui. Mais quelle était la question ? 90 Mercredis du développement

La réponse est oui. Mais quelle était la question ? 90 Mercredis du développement – 4 avril 2007

91 Mercredis du développement – 4 avril 2007

91 Mercredis du développement – 4 avril 2007

FAQ Combien couteront les DSLTools ? Ils seront gratuits, normalement dans le VS SDK.

FAQ Combien couteront les DSLTools ? Ils seront gratuits, normalement dans le VS SDK. Est-ce qu’on est obligé d’héberger nos DSL dans VS 2005 ? Oui, pour le moment (sauf version Express) A terme, on pourra se procurer un VS « vide » Puis, on pourra héberger les designers hors de VS (V 2 des DSLTools) Est-ce qu’on ne pourrait pas faire la même chose en UML ? C’était ce que nous faisions avant, mais : on a des compartiments spécifiques du métier pour le DSL « Simulation Architecture » et le DSL « State Machine » comporte la notion de « Délégation à une entité de simulation » Les deux connaissent le Framework et interagissent avec les assemblages de modèles. Tout est intégré et synchronisé dans le processus de production de code. 92 Mercredis du développement – 4 avril 2007

Pour en savoir plus … Sites Web http: //lab. msdn. microsoft. com/teamsystem/workshop/DSLTools Download des

Pour en savoir plus … Sites Web http: //lab. msdn. microsoft. com/teamsystem/workshop/DSLTools Download des DSLTools (15 mars 2005 pour le moment), et lien pour télécharger le VSIP Beta 1 (Disponibles pour les MSDN) Tutoriaux (Walkthroughs) Liens vers les blogs de l’équipe DSL Nouvelle version attendue rapidement pour VS. NET 2005 Beta 2 http: //www. modelisoft. com/dmd 2 dd. aspx MDM 2 DD helper tool permettant de créer des Shapes et Connectors par défaut dans le. dd, correspondant à des concepts et relationships du. dmd Forum http: //forums. microsoft. com/msdn/Show. Forum. aspx? Forum. ID=61 Vient d’ouvrir pour la Beta 2 Succède à un forum privé qui va être fermé. 93 Mercredis du développement – 4 avril 2007

94 Mercredis du développement – 4 avril 2007

94 Mercredis du développement – 4 avril 2007