![]() |
|
|||
La démarche de développement Sys_P_OMarie-Agnès QuarèsRésuméIl existe plusieurs catégories de projet, et par conséquent plusieurs approches du développement:
Toutes ces particularités et bien d'autres, nous amènent à penser qu'il ne doit pas y avoir une méthodologie de développement avec de nombreuses exceptions pour tenir compte des différents cas de figure, mais une méthodologie à géométrie variable, où, le cycle de vie du projet et celui du système pourront être configurables. La méthodologie Sys_P_O propose une telle démarche à travers cinq principes fondamentaux :
Mise en oeuvre de la spirale productiviste Sys_P_OCertes il n'existe pas, comme l'affirment certains auteurs, de recette miracle pour développer en objet. Toutefois, avant d'acquérir l'expérience nous avons imaginé un cycle de développement incrémental en spirale comprenant 6 activités exécutées pendant n tours pour parcourir n niveaux d'abstraction ou couches. Avec Sys_P_O, le système est donc construit par couches successives. Naturellement, l'ordre des activités de la spirale n'a pas été défini au hasard. Il résulte de nombreuses expériences menées dans des environnements différents. Vous observerez par exemple, que la réutilisation est omniprésente dans la démarche de conception en Sys_P_O, et que les relations statiques (héritage, référence, agrégation) sont réalisées après avoir identifié les attributs des entités, mais avant de s'intéresser à leurs services, afin de concevoir une architecture qui repose sur ce qui nous semble être le plus important: les attributs. Remarques:
Premier tour de spiraleLe principal objectif de ce premier tour de spirale est de situer le système à modéliser dans son environnement. Les différents agents extérieurs que composent l'environnement précisent en Sys_P_O les différents points de vue du système à représenter. Par exemple, si un distributeur de boissons a pour agents extérieurs les clients et les exploitants, le système devra être représenté selon ces deux points de vue "au minimum", puisque chacun de ces agents considère une partie du système, sous un angle qui lui est propre. La démarche consiste donc à créer, pendant les deux premiers tours autant de représentations statiques et dynamiques qu'il y a de points de vue, et de les superposer au début du 4e tour de spirale juste avant l'implémentation, afin de constituer les vues globales de ces représentations. Identifier les entités du système: les domaines et les agentsCette activité a pour objectif de représenter les différents points de vue du système à l'aide d'entités appelées domaines, et son environnement à l'aide d'agents ou acteurs. Un domaine qui illustre le système ou une fraction du système selon le point de vue considéré, a pour objectif de satisfaire une ou plusieurs fonctions issues du tableau d'analyse fonctionnelle. Il s'agit bien ici de se demander qui fait la(les) fonction(s) du tableau d'analyse fonctionnelle. Deux techniques différentes peuvent être sollicitées pour identifier les entités de base du système: les domaines.
Identifier les entités à réutiliserAvec Sys_P_O, il existe principalement deux niveaux de réutilisation:
Avec Sys_P_O la réutilisation est au coeur du développement. Elle est organisée à partir de deux magasins d'entités réutilisables:
L'objectif de cette deuxième activité du cycle en spirale est double:
Identifier les attributs des entités du systèmeIl s'agit lors de cette activité d'identifier un maximum de 10 attributs par domaine, et 1 à 5 attributs par agent. Les attributs des domaines correspondent généralement aux entités de base du domaine. Les attributs des agents précisent leurs caractéristiques (attributs d'état, attributs démons). Identifier les relations entre les entités du systèmeAprès avoir identifié les attributs des domaines et des agents, nous devons maintenant établir les relations statiques existantes entre les domaines, et entre les domaines et les agents extérieurs. C'est ainsi que nous identifierons les liens de clientisme (référence statique) et d'héritage entre domaines via les entités de base du domaine. Par exemple, marquer qu'un domaine hérite d'un autre domaine signifie qu'une entité d'un domaine (classe, grappe) hérite d'une entité d'un autre domaine (classe, grappe). Identifier les services offerts par entitésC'est lors de cette activité que seront notées, dans le champ fonction des domaines, les exigences stipulées dans les tableaux d'analyse fonctionnelle. Les fonctions des domaines seront ensuite réparties lors des prochains tours de spirale dans les différentes entités que composeront le domaine. Définir la communication entre les entitésIl s'agit d'une certaine manière de "valider" le travail réalisé par les activités précédentes en "simulant" le premier délivrable: le système et son environnement. Par exemple, l'impossibilité de faire communiquer les différents domaines et agents entre-eux est symptomatique d'une erreur de découpage du système. Deuxième tour de spiraleL'objectif de ce deuxième tour de spirale, éventuellement parcouru plusieurs fois, est de représenter le système à l'aide d'une ou plusieurs images statiques et dynamiques de base appelées également études de cas statiques et dynamiques de base. Identifier les entités statiques de base de chaque domaine du système: les domaines, les charpentes, les grappes, les classes, les modulesIl existe plusieurs techniques pour identifier les "objets":
Etude de cas: Déplacer une personne en ascenseur
Comme vous pouvez en juger, cette dernière technique permet d'identifier les principaux objets de l'étude de cas "déplacer une personne", selon le point de vue du fonctionnement normal. De la même manière, nous aurions pu traiter l'étude de cas "déplacer une personne" selon le point de vue de la sûreté de fonctionnement (objets: bouton arrêt d'urgence, sonnerie,...). Identifier les études de cas à réutiliserComme lors du précédent tour de spirale, l'architecte doit d'abord faire "un petit tour" au magasin pour récupérer toutes les études de cas qui présentent un intérêt pour le système à modéliser. Identifier les attributs des entités statiques de base de chaque domaineSuivant la technique utilisée pour identifier les entités de base, cette activité sera plus ou moins importante puisqu'en partie déjà réalisée. Au cours de cette activité, l'architecte Sys_P_O s'efforce d'affecter 1 à 5 attributs aux entités de base préalablement identifiées. Il s'agit principalement d'attribut indiquant un lien de référence statique, dynamique ou un lien d'agrégation. Si un attribut appartient à plusieurs classes, il existe sans doute un lien d'héritage entre ces classes. Par contre, une classe de base qui ne possède pas d'attribut correspond fort probablement à un attribut d'une autre classe. Identifier les relations entre les entités statiques de base de chaque domaineNous identifierons en premier, les liens qui relient les différentes représentations d'un même domaine, si différents points de vue ont été sollicité. Par souci de cohérence également, nous noterons les liens entre domaines, à travers les entités de base. Nous devrions également marquer les liens qui relient les grappes entre elles, et, les grappes et les classes de base. Si l'une des classes du domaine créée, manipule, un objet nous noterons le lien de référence dynamique. Concernant l'héritage, nous ne devrions pas dépasser deux niveaux d'héritage ce qui prouverait que la spécialisation du système n'a pas encore débuté. Identifier les services offerts par les entités statiques de base de chaque domaineNous allons pouvoir appliquer l'un des principes énoncés en introduction: "Ne demande pas ce que fait le système, mais qui le fait". Plus précisément, il s'agit d'identifier quelle entité est capable de traiter la(les) fonction du domaine. Naturellement une fonction d'un domaine peut être répartie sur les entités du domaine. Une matrice permet de s'assurer que toutes les fonctions du domaine (fonctions issues du tableau d'analyse fonctionnelle) auront bien été implémentées. Ces cinq activités du deuxième tour de spirale ont permis de réaliser les images statiques de base de chaque domaine du système vue des différents agents extérieurs. Définir la communication entre les entités de base de chaque domaine et entre domainesIl s'agit ici de simuler le fonctionnement des différentes fonctions des domaines, implémentées dans les entités de base. Une fonction d'un domaine correspond à une (rarement à plusieurs) étude de cas de base, formalisée sur une page d'écran informatique ou sur une feuille de papier au format A4. Cependant, il n'est pas rare qu'une étude de cas implique, comme le montre l'exemple "déplacer une personne", plusieurs services répartis dans plusieurs entités différentes du domaine et qu'il faille plusieurs feuilles de papier. Les études de cas de base ou images dynamiques de base montrent, comme l'expose l'exemple ci-dessous, l'enchaînement des différentes fonctions du domaine préalablement réparties dans ses entités. Remarque:
En pratique on peut très bien imaginer que les deux premiers tours de spirale soient exécutées par le chef de projet, et les autres tours par les différentes équipes de réalisation. Troisième tour de spiraleL'objectif de ce troisième tour de spirale est double, il s'agit pour l'architecte Sys_P_O de:
La réalisation des ces objectifs aura naturellement pour conséquence d'aborder (si ce n'est déjà fait) le choix du langage d'implémentation (C++, Eiffel, Smalltalk, Ada95,...). Identifier les entités complémentaires à chaque domaine: les classes, les modulesAprès cette action, l'architectee(chef de projet ou développeur) doit d'une part, enrichir, spécialiser le domaine à l'aide de sous-classes et, d'autre part, indiquer les entités spécifiques (objets) de conception (structure de données, moniteur temps réel,...). Lors d'évolutions du système, seules ces entités spécifiques seront sujettes à modification, surtout si vous avez pris soin de concevoir une architecture en couches telle qu'elle a été présentée au deuxième tour de spirale. Identifier les entités à/pour réutiliserComme nous l'avons souligné précédemment, il s'agit du 2e niveau de réutilisation qui consiste à récupérer du magasin central des classes et leur comportement qu'il faudra éventuellement spécialiser. Identifier les attributs des entités complémentaires à chaque domaineIl s'agit d'identifier les attributs ajoutés aux classes de base du domaine, mais également les attributs des sous-classes spécialisées et des classes de conception. Il s'agira principalement d'attribut de type simple (entier, booléen,...). Nous pouvons également nous rendre compte que certains attributs sont inutiles, que d'autres doivent être déplacés d'une sous-classe à l'autre. Nous identifierons aussi les attributs "dynamiques" qui référencent un objet (persistant) créé, utilisé, détruit pendant l'exécution de certaines fonctions du système. Identifier les relations entre les entités de chaque domaineLa reconnaissance de classes de base complémentaires, de sous-classes spécialisées et de classes de conception ne devrait pas entraîner de modifications importantes dans l'architecture du domaine. Nous porterons une attention toute particulière aux nouvelles relations inter-domaine, en minimisant toujours celles-ci. Nous nous attarderons sur les classes qui ne possèdent pas de sous-classes et à celles qui se spécialisent excessivement. Enfin, les références dynamiques seront identifiées. Identifier les services des entités de chaque domaineIl s'agit d'identifier d'une part les services offerts par les sous-classes identifiées et ceux qui résolvent des problèmes d'implémentation et, d'autre part, l'éventuelle pré-condition à l'exécution d'un service suite à l'invocation de celui-ci par un message séquentiel ou un signal "masquable". Nous préciserons aussi la signature complète des services (paramètres, type). C'est naturellement lors de cette activité que seront traités certains problèmes spécifiques à l'objet (problèmes de nom lors d'héritage multiple,...) en sollicitant le renommage et la redéfinition de service. Toutefois, nous devrons limiter leur utilisation toujours pour des raisons de complexité de tests. C'est également pendant cette activité que le comportement de chaque classe est formalisé à l'aide de diagramme état-transition qui s'avère intéressant pour environ 5% des classes, de pseudo-code proche du langage d'implémentation sélectionné,...
Remarque:
Définir la communication entre les entités de chaque domaine et entre les domainesDeux possibilités sont offertes pour faire "tourner" les domaines:
Remarque:
Quatrième tour de spiraleLa première action, avant de commencer l'implémentation des classes et modules dans le langage de programmation préalablement sélectionné au plus tard au troisième tour de spirale, il est indispensable de superposer des différents points de vue d'un même domaine pour obtenir les classes globales. Retours d'expérienceLa méthodologie Sys_P_O a été utilisée dans plusieurs projets (GIAT, EDF, Aérospatiale, CEA, Métrologic Instruments,...) avec succès après formation des opérateurs. La véritable difficulté rencontrée fût sans aucun doute le syndrome de la "page blanche" d'où la mise en place d'un guide pour construire des applications objet. Marie-Agnès Quarès est ingénieur à ReUSE, responsable des développements objets. ReUSE S.A. Le Charlebourg A 14-30 rue de Montes 92711 Colombes Cedex Tel: (1) 47 80 17 99
|