Génie Logiciel Avancé Cours 4 — Conception Stefano Zacchiroli zack@pps.univ-par

Génie Logiciel Avancé Cours 4 — Conception Stefano Zacchiroli zack@pps.univ-paris-diderot.fr Laboratoire PPS, Université Paris Diderot - Paris 7 URL http://upsilon.cc/zack/teaching/1112/gla/ Copyright © 2011–2012 Stefano Zacchiroli © 2010 Yann Régis-Gianas License Creative Commons Attribution-ShareAlike 3.0 Unported License http://creativecommons.org/licenses/by-sa/3.0/ Stefano Zacchiroli (Paris 7) Conception 1 / 80 Sommaire 1 La conception La programmation structurée et ses procédés 2 Critères d’évaluation pour la conception Cohésion Interdépendance 3 Patron d’architecture Filtres et tuyaux Abstraction des données Événements implicites Stratification Repository Interprétation 4 Synthèse Stefano Zacchiroli (Paris 7) Conception 2 / 80 Sommaire 1 La conception La programmation structurée et ses procédés 2 Critères d’évaluation pour la conception Cohésion Interdépendance 3 Patron d’architecture Filtres et tuyaux Abstraction des données Événements implicites Stratification Repository Interprétation 4 Synthèse Stefano Zacchiroli (Paris 7) Conception 3 / 80 De la spécification à la conception Spécifier →c’est définir le quoi. Concevoir →c’est définir le comment. Stefano Zacchiroli (Paris 7) Conception 4 / 80 There are two ways of constructing a software design : One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. — C.A.R. Hoare Stefano Zacchiroli (Paris 7) Conception 5 / 80 Les difficultés de la conception La conception ne se contente pas d’identifier le problème. Elle tente d’y apporter une solution valide. La conception est un processus créatif et rigoureux. Stefano Zacchiroli (Paris 7) Conception 6 / 80 Conception vs implémentation Différences entre conception et implémentation ? L’implémentation est la mise en œuvre des choix issus de la conception. L’implémentation doit pouvoir répondre aux contraintes de réalisation sans mettre en cause les choix de conception. Stefano Zacchiroli (Paris 7) Conception 7 / 80 Conception vs implémentation : exemple typique On introduit, lors de l’implémentation, une optimisation qui brise une abstraction issue de la conception. Ceci témoigne d’une mauvaise conception : une spécification non fonctionnelle concernant l’efficacité n’a pas été prise en compte. Ceci témoigne d’une mauvaise implantation : les choix de conceptions doivent toujours être respectés par l’implémentation. Premature optimization is the root of all evil in programming. — Donald Knuth Stefano Zacchiroli (Paris 7) Conception 8 / 80 Le principes de génie logiciel récurrent 1 Pour bien concevoir un logiciel, il faut pouvoir raisonner sur ce logiciel. 2 Pour pouvoir raisonner, il faut travailler sur des objets de taille raisonnable. ⇒La programmation structurée, introduite par Hoare, Wirth et Dijkstra. Stefano Zacchiroli (Paris 7) Conception 9 / 80 Sommaire 1 La conception La programmation structurée et ses procédés 2 Critères d’évaluation pour la conception Cohésion Interdépendance 3 Patron d’architecture Filtres et tuyaux Abstraction des données Événements implicites Stratification Repository Interprétation 4 Synthèse Stefano Zacchiroli (Paris 7) Conception 10 / 80 Avant la programmation structurée 10 INPUT "What is your name: " , U$ 20 PRINT " Hello " ; U$ 30 INPUT "How many stars do you want : " , N 40 S$ = " " 50 FOR I = 1 TO N 60 S$ = S$ + " * " 70 NEXT I 80 PRINT S$ 90 INPUT "Do you want more stars ? " , A$ 100 IF LEN(A$) = 0 THEN GOTO 90 110 A$ = LEFT$ (A$, 1) 120 IF A$ = "Y" OR A$ = " y " THEN GOTO 30 130 PRINT "Goodbye " ; U$ 140 END Stefano Zacchiroli (Paris 7) Conception 11 / 80 Réduire la liberté pour mieux contrôler Le langage machine offrait une liberté totale : Grâce aux “jump”, toute instruction était un point d’entrée potentiel. ▶Les triplets de Hoare sont plus compliqués à calculer dans ce cadre. On pouvait modifier le code lui-même. ▶Le raisonnement sur les programmes auto-modifiants est très complexe. On s’est vite aperçu que tant de liberté était une épée à double tranchant : Certes, elle autorisait des optimisations. Néanmoins, la correction des programmes étaient trop difficiles à vérifier. Stefano Zacchiroli (Paris 7) Conception 12 / 80 La programmation structurée La programmation structurée a mis en avant les concepts suivants : 1 Les structures de contrôle restreintes 2 Les différents niveaux d’abstraction 3 Le raffinement 4 Les types abstraits de données 5 L’architecture d’un logiciel Edsger W. Dijkstra Letters to the editor : go to statement considered harmful. Communications of the ACM, 1968. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.132.875 Edsger W. Dijkstra Notes on structure programming. http://www.cs.utexas.edu/users/EWD/ewd02xx/EWD249.PDF Stefano Zacchiroli (Paris 7) Conception 13 / 80 1. Les structures de contrôle restreintes À l’aide d’un goto, on peut tout faire. . . mais le flot de contrôle est alors arbitrairement complexe. Pour raisonner sur un programme, il y a trois grands outils (Dijkstra) : 1 Le raisonnement par cas 2 L’induction 3 L’abstraction Use recursive procedures for recursively-defined data structures. — Brian W. Kernighan The Elements of Programming Style, 1978 Stefano Zacchiroli (Paris 7) Conception 14 / 80 1. Les structures de contrôle restreintes À l’aide d’un goto, on peut tout faire. . . mais le flot de contrôle est alors arbitrairement complexe. Pour raisonner sur un programme, il y a trois grands outils (Dijkstra) : 1 Le raisonnement par cas →Types algébriques, Pattern matching 2 L’induction →Fonctions récursives, itération 3 L’abstraction →Appels de fonctions Use recursive procedures for recursively-defined data structures. — Brian W. Kernighan The Elements of Programming Style, 1978 Stefano Zacchiroli (Paris 7) Conception 14 / 80 2. Les différents niveaux d’abstraction L’organisation de la complexité d’un système sous la forme de couches, chacune correspondant à un niveau d’abstraction donné, telle que : ▶Une couche de haut niveau s’appuie sur les primitives fournies par la couche(s) située sous elle. ▶Une couche de bas-niveau ne peut pas accéder aux primitives des couches de niveau plus élevé qu’elle. L’implémentation du système débute par les couches de plus bas niveau. Nous reviendrons plus en détails sur cette architecture. . . Stefano Zacchiroli (Paris 7) Conception 15 / 80 3. Le raffinement On conçoit un système par raffinements successifs. On raffine données et algorithmes en parallèle. Comment décider dans quel ordre raffiner la spécification ? Il faut maintenir le plus longtemps possible une “notation naturelle”. Chaque raffinement correspond à un choix de conception. Si on voit l’espace de conception comme un domaine de recherche, alors les choix de conceptions peuvent être structurés comme un arbre de décision dont les nœuds les plus discriminants sont placés près de la racine. ▶en autres termes, il faut commencer par raffiner les aspects qui ont les plus importantes conséquences : on définit ainsi des familles de programmes répondant à un problème particulier. Cette structuration explicite de la conception facilite le raisonnement sur les programmes ainsi que leur réutilisation et leur adaptation. Stefano Zacchiroli (Paris 7) Conception 16 / 80 Le raffinement — exemples Pour concevoir un algorithme de tri : 1 Fait-on des hypothèses sur la distribution des entrées ? 2 Veut-on un algorithme parallèle ou séquentiel ? 3 Utilise-t-on une structure de données qui trie par insertion d’éléments ? 4 . . . Problème des huit dames : Niklaus Wirth Program Development by Stepwise Refinement. Communications of the ACM, Vol. 14, No. 4, 1971. http://sunnyday.mit.edu/16.355/wirth-refinement.html Stefano Zacchiroli (Paris 7) Conception 17 / 80 4. Types abstraits Un type abstrait défini une classe de composants totalement caractérisés par un ensemble des opérations. L’utilisateur du type abstrait n’a pas connaissance de la représentation concrète des données. Le maintien des invariants est circonscrit aux définitions des opérations. Barbara Liskov Programming with abstract data types. ACM SIGPLAN symposium on Very high level languages, 1974. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.136.3043 Stefano Zacchiroli (Paris 7) Conception 18 / 80 5. L’architecture d’un logiciel “Architecturer” n’est pas “Programmer” Programmation ▶Fixer les détails d’implémentation. ▶Implémenter / Déboguer / Prouver correcte un algorithme. Architecturer (i.e. modulariser) ▶Minimiser les interdépendances ; ▶Ordonner / Classifier / Organiser les composants ; ▶Rendre explicite les interactions. Frank DeRemer, Hans Kron Programming-in-the large versus programming-in-the-small. ACM SIGPLAN international conference on Reliable software, 1975. http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.92.603&rep= rep1&type=pdf Stefano Zacchiroli (Paris 7) Conception 19 / 80 Sommaire 1 La conception La programmation structurée et ses procédés 2 Critères d’évaluation pour la conception Cohésion Interdépendance 3 Patron d’architecture Filtres et tuyaux Abstraction des données Événements implicites Stratification Repository Interprétation 4 Synthèse Stefano Zacchiroli (Paris 7) Conception 20 / 80 La conception des composants Bien concevoir les composants d’un système est donc essentiel puisque : Leur interface fournit une barrière d’abstraction. La granularité d’un raffinement se situe généralement au niveau des modules. ▶Souvent, on a une correspondance “un module = un type abstrait”. De plus, la modularisation rend possible le développement parallèle. Stefano Zacchiroli (Paris 7) Conception 21 / 80 Principes de conception des composants Cacher les “secrets” comme : ▶la représentation des données (c.f. ADT). ▶les fonctions internes d’un composant qui ne sont pas nécessaires au client. ▶les détails d’implémentation. Trouver le lieu des potentielles évolutions : ▶Si deux composants peuvent évoluer de façon indépendante, ils devraient être cachés l’un à l’autre. ▶Seuls les services dont l’évolution est peu probable doivent figurer dans les interfaces. Les interfaces doivent être explicitées. Les interfaces doivent être en nombre restreint et petites. Un composant doit correspondre à uploads/Ingenierie_Lourd/ genie-logiciel-avance-cours-4-conception-stefano-zacchiroli-pdf.pdf

  • 23
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager