SlideShare une entreprise Scribd logo
1  sur  17
Télécharger pour lire hors ligne
1
Un méta-modèle pour coupler
application et détection
des design patterns
Hervé Albin-Amiot
Pierre Cointe
Yann-Gaël Guéhéneuc
{albin, cointe, guehene}@emn.fr
École des Mines
de Nantes, France
Soft-Maint S.A.,
France
Object Technology
International Inc., Canada
2
2/17
Plan
n Le contexte
n Notre objectif
n Nos besoins
n Travaux connexes
n Notre solution : le méta-modèle PDL
n PDL : principe & mise en œuvre
n Questions ouvertes
3
3/17
Le contexte
Améliorer la qualité des développements
par objets en favorisant l’utilisation des
design patterns pour aider à :
– Implémenter
– Comprendre
– Documenter
Notre but est d’améliorer…
Les design patterns sont bien connus et éprouvés dans la recherche académique
comme dans l’industrie.
Les design patterns se situent à mi-chemin entre le code source et la conception
(micro-architectures).
Dans le reste de cette présentation, le GoF (Gamma et al.) est notre référence.
4
4/17
Notre objectif
n Fournir un assistant logiciel aidant à :
– L’implémentation
• Sélection
• Paramétrage
• Génération
– La compréhension et la documentation :
détection de formes exactes
Application
Deux phases principales pour l’implémentation :
• la sélection… ;
• l’application… Qui se décompose elle-même en :
• paramétrage… ;
• génération…
Une formes exacte = un design pattern tel que décrit dans le GoF. Une forme exacte
suit à la fois la structure du design pattern et aussi son intention, ses
collaborations, … telles que décrites dans le GoF.
En opposition avec une forme dégradée dans laquelle certaines caractéristiques
(rôles, relations, …) ne sont pas vérifiées. Par exemple, dans le design pattern
Composite, peut-être la relation d’héritage entre Component et Composite
n’est-elle pas vitale pour satisfaire l’intention du design pattern.
5
5/17
Nos besoins
n Formaliser les design patterns
n Décrire les design patterns en tant que :
– Entités de « première classe »
• Elles savent comment produire du code
• Elles savent identifier leurs propres
occurrences dans du code
– Entités manipulables
• Sur lesquelles on peut raisonner
• Que l’on peut adapter à un contexte spécifique
Le GoF décrit 23 design patterns, mais ne les formalisent pas.
Nous devons formaliser pour pouvoir manipuler avec des outils ⇒ Décrire les
design patterns pour…
• comme des entités de première classes
• comme des entités manipulables
On veut obtenir des entités de premières classes : structure plus une touche de
comportement (commun à tous les design patterns et propre à un certain design
pattern). Il faut bien voir qu’un design pattern ce n’est pas seulement une structure,
c’est aussi un comportement.
On peut comparer cette approche avec la notion de classe dans un langage à
classes.
L’idée de modéliser les design patterns pour l’application et la détection permet
d’apporter une réponse au problème de la traçabilité…
6
6/17
Travaux connexes
n Formalisation :
– LePUS [Eden 2000]
– FAMIX [Ducasse 1999]
– Fragment Model [Florjin et al. 1997]
n Application
– [Budinsky et al. 1996]
n Détection
– [Wuyts 1998], [Antoniol et al. 1998]
Nos travaux sont à la frontière de différents travaux sur les design patterns :
positionnement difficile car on veut faire trois aspects…
Dans notre approche, nous cherchons à formaliser les design patterns pour
appliquer et détecter les design patterns.
La plupart des travaux connexes ne s’intéressent qu’à un seul aspect:
• formalisation :
• LePus : haut niveau d’abstraction de la formalisation, peu ou pas de
génération de code, pas de prise en comptes des idiomes de programmation
propre aux langages ;
• FAMIX : l’intersection avec notre méta-modèle n’est pas vide mais les
deux méta-modèles ne sont pas égaux ;
• Modèle à fragments : granularité très (voire trop) fine, axé sur les
caractéristique du langage de programmation Smalltalk ;
• application :
• Budinskypropose un catalogue interactif en HTML des design patterns en
vue de la génération de code d’exemple, mais il n’y a pas de possibilité de
paramétrer le code générer pour l’insérer directement dans le code de
l’utilisateur, de plus la détection n’est pas prise en compte ;
• détection :
• Wuyts et Antoniol ne représentent que les design patterns structuraux, ils
ne proposent pas de réelle formalisation, ni de détection.
7
7/17
Notre solution :
le méta-modèle PDL
On utilise un méta-modèle pour formaliser les design patterns.
La technique de méta-modélisation est bien connue pour…
Un méta-modèle pour formaliser/décrire les design patterns…
Ce méta-modèle est un compromis entre les constituants pour décrire les design
patterns et pour décrire les langages de programmation cible, car on veut faire à la
fois de la formalisation, de l’application, et de la détection.
Le méta-modèle est très simple pour décrire les design patterns et le langage Java,
il peut/doit être adapté pour la génération d’autres langages.
8
8/17
PDL : principe
build() … build() …
Modèle abstraitComposite
Modèle concretComposite1
Code Composite 1 Code Composite n
Modèle concretComposite n
Code Composite 2
Modèle concretComposite2
Paramétrage
Méta-entité
Composite
Méta-entité
Proxy
Méta-entité
Observer
Méta-entité
générique Pattern
Décrivent
Spécialisation
RaffinementConstituants
Méta-modèle de patterns
Instanciation
‚
•
ƒ
„
build() …
Sélection
Paramétrage
Application
Les différentes étapes d’utilisation de notre méta-modèle, depuis la définition des
constituants, jusqu’à l’application.
(Voir l’article dans les actes, ou www.yann-
gael.gueheneuc.net/Work/Publications/)
9
9/17
PDL : mise en œuvre
Description
Traduction en un
modèle de pattern
Descriptions
informelles du [GoF]
Instance de PInterface
Instance de PClass
Instance de PAssoc
Instance de PDelegation
name() Instance de PMethod
Instance de Pattern
Légende
Exemple…
Et on a un catalogue d’autres design patterns…
10
10/17
PDL : mise en œuvre
Application
Button
paint()
Label
paint( )
Window
paint( )
addComponent(Component)
removeComponent(Component)
listComponent( )
Component
paint( )
*
components
Code source
Java, Claire
Paramétrage
Génération
11
11/17
PDL : mise en œuvre
Détection
Code source Java
Design pattern
détecté ?
Reconstruction
Comparaison
(arc consistance + algorithmes dédiés)
Source ou code octal (byte-codes)…
Représentation du code source à l’aide des constituants du méta-modèle…
Chaque design pattern est une entité de première classe et donc on peut lui
demander de se comparer avec quelque chose et donc dire si ils sont équivalents…
L’algorithme utilisé est AC-x + des algorithmes ad-hoc qui permettent d’augmenter
l’efficacité et la pertinence pour prendre en compte les idiomes de programmation.
L’algorithme est implémenté au niveau de la classe Pattern, et chaque design
pattern peut être étendu…
12
12/17
Quelques résultats expérimentaux
n Application
– Ptidej
n Détection sur plusieurs frameworks :
– java.awt.*
– JHotDraw
– JUnit
– PatternsBox
– Ptidej
C’est difficile de présenter des exemples d’application, car il est plus facile
d’utiliser l’outil…
Pour la détection, c’est plus facile de donner des résultats concrets…
13
13/17
Détection
java.awt.* 121 1 1 1
JHotDraw 155 1 1 0,3
JUnit 34 1 1 0,4
JEdit 248 1,4
PatternsBox 52 0,3
java.awt.* 121 0,2
JHotDraw 155 1 3 2 0,4
JUnit 34 1 1 0,2
JEdit 248 0,4
PatternsBox 52 0,3
java.awt.* 121 3 1,1
JHotDraw 155 2 2 1 1 0,5
JUnit 34
JEdit 248 0,1
PatternsBox 52 0,2
java.awt.* 121
JHotDraw 155 3 3 0,1
JUnit 34
JEdit 248 1 1 0,1
PatternsBox 52
java.awt.* 121 3,4
JHotDraw 155 2 2 3,2
JUnit 34 4 4 2,5
JEdit 248 3 3 13
PatternsBox 52 1 1 2,8
java.awt.* 121 3 3 0,7
JHotDraw 155 2 2 0,5
JUnit 34 0,4
JEdit 248 1
PatternsBox 52 1 1 0,5
610 29 28 2 3 5,8
Iterator
NOC
Composite
Decorator
Factory
Method
Existing
Observer
Singleton
Détection dans PatternsBox
Hits Missed False hits
Time
(sec.)
Design
patterns
Frameworks
Nous avons appliqué six design patterns très utilisés (nous pensons) sur cinq
frameworks. Les résultats sont donnés sur la dernière ligne…
Nous avons aussi appliqué nos algorithmes à tout les paquetages de Java (java.*)
et les temps sont restés linéaires.
Mais certains design pattern sont difficilement détectables, comme le design pattern
Façade.
14
14/17
Réalisation de l’objectif
n Décrire, appliquer et détecter les design
patterns
– Entités de première classe manipulables
n Nous avons un assistant aidant :
– L’implémentation
– La détection et la documentation de formes
exactes de design patterns
(Cet assistant est « relativement » simple)
Par rapport à notre objectif de départ, notre méta-modèle apporte une solution
satisfaisante…
15
15/17
Questions ouvertes 1/3
n Par rapport au contexte :
Améliorer la qualité des
développements par objets en
favorisant l’utilisation des design
patterns
Mais au cours de nos recherches, nous avons rencontrés de nombreux problèmes
pour lesquels nous n’avons pas de réponse définitive, encore …
16
16/17
Questions ouvertes 2/3
n Formalisation :
– Un unique méta-modèle est-il suffisant ?
– Comment représenter les compromis ?
n Application :
– Comment bien décrire le code source ?
– Est-ce qu’elle est toujours possible et
intéressante ?
Un unique méta-modèle : Nous pensons que non, nous cherchons à modéliser
l’intention des design patterns…
Compromis : Pour l’instant, seulement des solutions ad-hoc…
Source code : FAMIX + définitions sémantiquement opérationnelles des relations
d’association, d’agrégation, et de composition…
Possible/intéressante : avec le design patterns Façade, l’utilisateur perd plus de
temps à paramétrer qu’à écrire le code lui-même… Mais c’est quand même utile
pour la validation, la détection, …
17
17/17
Questions ouvertes 3/3
n Compréhension :
– Est-il possible de détecter les formes
exactes de n’importe quel design pattern ?
– Est-il possible de détecter les formes
approchées de n’importe quel design
pattern ?
Formes exactes : Non, mais cela reste une question ouverte…
Formes dégradées : Difficile, quel est le seuil de tolérance entre une forme
dégradée et quelque chose qui n’est pas un design pattern ?…

Contenu connexe

Tendances

Cours Visual Basic.NET
Cours Visual Basic.NETCours Visual Basic.NET
Cours Visual Basic.NETAziz Darouichi
 
Cours algorithme
Cours algorithmeCours algorithme
Cours algorithmebadr zaimi
 
agileapplicationrequirementmythorreality
agileapplicationrequirementmythorrealityagileapplicationrequirementmythorreality
agileapplicationrequirementmythorrealityTen Systems
 
Introduction rapide à 'objet et à UML
Introduction rapide à 'objet et  à UML Introduction rapide à 'objet et  à UML
Introduction rapide à 'objet et à UML Mireille Blay-Fornarino
 
20100629 dsl-poitou-charentes-jug
20100629 dsl-poitou-charentes-jug20100629 dsl-poitou-charentes-jug
20100629 dsl-poitou-charentes-jugBENOIS Jérôme
 
Design Patterns
Design PatternsDesign Patterns
Design PatternsKoffi Sani
 
Algorithmique et methodes de programmation
Algorithmique et methodes de programmationAlgorithmique et methodes de programmation
Algorithmique et methodes de programmationSageKataliko1
 

Tendances (10)

Cours Visual Basic.NET
Cours Visual Basic.NETCours Visual Basic.NET
Cours Visual Basic.NET
 
Cours algorithme
Cours algorithmeCours algorithme
Cours algorithme
 
CM uml-diag-dynamiques-interaction
CM uml-diag-dynamiques-interactionCM uml-diag-dynamiques-interaction
CM uml-diag-dynamiques-interaction
 
agileapplicationrequirementmythorreality
agileapplicationrequirementmythorrealityagileapplicationrequirementmythorreality
agileapplicationrequirementmythorreality
 
Introduction rapide à 'objet et à UML
Introduction rapide à 'objet et  à UML Introduction rapide à 'objet et  à UML
Introduction rapide à 'objet et à UML
 
20100629 dsl-poitou-charentes-jug
20100629 dsl-poitou-charentes-jug20100629 dsl-poitou-charentes-jug
20100629 dsl-poitou-charentes-jug
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Fascicule tp programmation c
Fascicule tp programmation cFascicule tp programmation c
Fascicule tp programmation c
 
Introduction à Uml
Introduction à UmlIntroduction à Uml
Introduction à Uml
 
Algorithmique et methodes de programmation
Algorithmique et methodes de programmationAlgorithmique et methodes de programmation
Algorithmique et methodes de programmation
 

Similaire à Lmo02.ppt

Introduction of the most important design pattern
Introduction of the most important design patternIntroduction of the most important design pattern
Introduction of the most important design patternThierry Gayet
 
UML Part1-Introduction Mansouri
UML Part1-Introduction MansouriUML Part1-Introduction Mansouri
UML Part1-Introduction MansouriMansouri Khalifa
 
Introduction au Génie Logiciel
Introduction au Génie LogicielIntroduction au Génie Logiciel
Introduction au Génie Logicielguest0032c8
 
Cours Programmation Orientée Objet en C++
Cours Programmation Orientée Objet en C++Cours Programmation Orientée Objet en C++
Cours Programmation Orientée Objet en C++Amina HAMEURLAINE
 
Mockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilMockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilNormandy JUG
 
cours-01-intro.pdf
cours-01-intro.pdfcours-01-intro.pdf
cours-01-intro.pdfNihedBahria2
 
MEMO Pour débuter en formation à distance (FAD)
MEMO Pour débuter en formation à distance (FAD)MEMO Pour débuter en formation à distance (FAD)
MEMO Pour débuter en formation à distance (FAD)Cégep à distance
 
Réussir son analyse des besoins dans la conduite d'un projet informatique (2007)
Réussir son analyse des besoins dans la conduite d'un projet informatique (2007)Réussir son analyse des besoins dans la conduite d'un projet informatique (2007)
Réussir son analyse des besoins dans la conduite d'un projet informatique (2007)Ardesi Midi-Pyrénées
 
La Meta-programmation
La Meta-programmation La Meta-programmation
La Meta-programmation Microsoft
 
Programmation en technologie (C.Blin)
Programmation en technologie (C.Blin)Programmation en technologie (C.Blin)
Programmation en technologie (C.Blin)APMEPIledeFrance
 
Introduction à l'objet - Deuxième année ISIMA
Introduction à l'objet - Deuxième année ISIMAIntroduction à l'objet - Deuxième année ISIMA
Introduction à l'objet - Deuxième année ISIMALoic Yon
 
Programmation linéniaire
Programmation linéniaire Programmation linéniaire
Programmation linéniaire Mohammed Zaoui
 

Similaire à Lmo02.ppt (20)

Projet+com02.ppt
Projet+com02.pptProjet+com02.ppt
Projet+com02.ppt
 
Introduction of the most important design pattern
Introduction of the most important design patternIntroduction of the most important design pattern
Introduction of the most important design pattern
 
Jcom02.ppt
Jcom02.pptJcom02.ppt
Jcom02.ppt
 
UML Part1-Introduction Mansouri
UML Part1-Introduction MansouriUML Part1-Introduction Mansouri
UML Part1-Introduction Mansouri
 
Introduction au Génie Logiciel
Introduction au Génie LogicielIntroduction au Génie Logiciel
Introduction au Génie Logiciel
 
Cours Programmation Orientée Objet en C++
Cours Programmation Orientée Objet en C++Cours Programmation Orientée Objet en C++
Cours Programmation Orientée Objet en C++
 
Mockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice DuteilMockito - Design + tests par Brice Duteil
Mockito - Design + tests par Brice Duteil
 
Uml partie 1
Uml partie 1Uml partie 1
Uml partie 1
 
Plasticitérecherche2017
Plasticitérecherche2017Plasticitérecherche2017
Plasticitérecherche2017
 
cours-01-intro.pdf
cours-01-intro.pdfcours-01-intro.pdf
cours-01-intro.pdf
 
MEMO Pour débuter en formation à distance (FAD)
MEMO Pour débuter en formation à distance (FAD)MEMO Pour débuter en formation à distance (FAD)
MEMO Pour débuter en formation à distance (FAD)
 
Réussir son analyse des besoins dans la conduite d'un projet informatique (2007)
Réussir son analyse des besoins dans la conduite d'un projet informatique (2007)Réussir son analyse des besoins dans la conduite d'un projet informatique (2007)
Réussir son analyse des besoins dans la conduite d'un projet informatique (2007)
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Design patterns
Design patternsDesign patterns
Design patterns
 
La Meta-programmation
La Meta-programmation La Meta-programmation
La Meta-programmation
 
Projet+gdralp+ocm03.ppt
Projet+gdralp+ocm03.pptProjet+gdralp+ocm03.ppt
Projet+gdralp+ocm03.ppt
 
Programmation en technologie (C.Blin)
Programmation en technologie (C.Blin)Programmation en technologie (C.Blin)
Programmation en technologie (C.Blin)
 
Introduction à l'objet - Deuxième année ISIMA
Introduction à l'objet - Deuxième année ISIMAIntroduction à l'objet - Deuxième année ISIMA
Introduction à l'objet - Deuxième année ISIMA
 
CM uml-intro
CM uml-introCM uml-intro
CM uml-intro
 
Programmation linéniaire
Programmation linéniaire Programmation linéniaire
Programmation linéniaire
 

Plus de Yann-Gaël Guéhéneuc

Advice for writing a NSERC Discovery grant application v0.5
Advice for writing a NSERC Discovery grant application v0.5Advice for writing a NSERC Discovery grant application v0.5
Advice for writing a NSERC Discovery grant application v0.5Yann-Gaël Guéhéneuc
 
Ptidej Architecture, Design, and Implementation in Action v2.1
Ptidej Architecture, Design, and Implementation in Action v2.1Ptidej Architecture, Design, and Implementation in Action v2.1
Ptidej Architecture, Design, and Implementation in Action v2.1Yann-Gaël Guéhéneuc
 
Evolution and Examples of Java Features, from Java 1.7 to Java 22
Evolution and Examples of Java Features, from Java 1.7 to Java 22Evolution and Examples of Java Features, from Java 1.7 to Java 22
Evolution and Examples of Java Features, from Java 1.7 to Java 22Yann-Gaël Guéhéneuc
 
Consequences and Principles of Software Quality v0.3
Consequences and Principles of Software Quality v0.3Consequences and Principles of Software Quality v0.3
Consequences and Principles of Software Quality v0.3Yann-Gaël Guéhéneuc
 
Some Pitfalls with Python and Their Possible Solutions v0.9
Some Pitfalls with Python and Their Possible Solutions v0.9Some Pitfalls with Python and Their Possible Solutions v0.9
Some Pitfalls with Python and Their Possible Solutions v0.9Yann-Gaël Guéhéneuc
 
An Explanation of the Unicode, the Text Encoding Standard, Its Usages and Imp...
An Explanation of the Unicode, the Text Encoding Standard, Its Usages and Imp...An Explanation of the Unicode, the Text Encoding Standard, Its Usages and Imp...
An Explanation of the Unicode, the Text Encoding Standard, Its Usages and Imp...Yann-Gaël Guéhéneuc
 
An Explanation of the Halting Problem and Its Consequences
An Explanation of the Halting Problem and Its ConsequencesAn Explanation of the Halting Problem and Its Consequences
An Explanation of the Halting Problem and Its ConsequencesYann-Gaël Guéhéneuc
 
Informaticien(ne)s célèbres (v1.0.2, 19/02/20)
Informaticien(ne)s célèbres (v1.0.2, 19/02/20)Informaticien(ne)s célèbres (v1.0.2, 19/02/20)
Informaticien(ne)s célèbres (v1.0.2, 19/02/20)Yann-Gaël Guéhéneuc
 
On Java Generics, History, Use, Caveats v1.1
On Java Generics, History, Use, Caveats v1.1On Java Generics, History, Use, Caveats v1.1
On Java Generics, History, Use, Caveats v1.1Yann-Gaël Guéhéneuc
 
On Reflection in OO Programming Languages v1.6
On Reflection in OO Programming Languages v1.6On Reflection in OO Programming Languages v1.6
On Reflection in OO Programming Languages v1.6Yann-Gaël Guéhéneuc
 

Plus de Yann-Gaël Guéhéneuc (20)

Advice for writing a NSERC Discovery grant application v0.5
Advice for writing a NSERC Discovery grant application v0.5Advice for writing a NSERC Discovery grant application v0.5
Advice for writing a NSERC Discovery grant application v0.5
 
Ptidej Architecture, Design, and Implementation in Action v2.1
Ptidej Architecture, Design, and Implementation in Action v2.1Ptidej Architecture, Design, and Implementation in Action v2.1
Ptidej Architecture, Design, and Implementation in Action v2.1
 
Evolution and Examples of Java Features, from Java 1.7 to Java 22
Evolution and Examples of Java Features, from Java 1.7 to Java 22Evolution and Examples of Java Features, from Java 1.7 to Java 22
Evolution and Examples of Java Features, from Java 1.7 to Java 22
 
Consequences and Principles of Software Quality v0.3
Consequences and Principles of Software Quality v0.3Consequences and Principles of Software Quality v0.3
Consequences and Principles of Software Quality v0.3
 
Some Pitfalls with Python and Their Possible Solutions v0.9
Some Pitfalls with Python and Their Possible Solutions v0.9Some Pitfalls with Python and Their Possible Solutions v0.9
Some Pitfalls with Python and Their Possible Solutions v0.9
 
An Explanation of the Unicode, the Text Encoding Standard, Its Usages and Imp...
An Explanation of the Unicode, the Text Encoding Standard, Its Usages and Imp...An Explanation of the Unicode, the Text Encoding Standard, Its Usages and Imp...
An Explanation of the Unicode, the Text Encoding Standard, Its Usages and Imp...
 
An Explanation of the Halting Problem and Its Consequences
An Explanation of the Halting Problem and Its ConsequencesAn Explanation of the Halting Problem and Its Consequences
An Explanation of the Halting Problem and Its Consequences
 
Are CPUs VMs Like Any Others? v1.0
Are CPUs VMs Like Any Others? v1.0Are CPUs VMs Like Any Others? v1.0
Are CPUs VMs Like Any Others? v1.0
 
Informaticien(ne)s célèbres (v1.0.2, 19/02/20)
Informaticien(ne)s célèbres (v1.0.2, 19/02/20)Informaticien(ne)s célèbres (v1.0.2, 19/02/20)
Informaticien(ne)s célèbres (v1.0.2, 19/02/20)
 
Well-known Computer Scientists v1.0.2
Well-known Computer Scientists v1.0.2Well-known Computer Scientists v1.0.2
Well-known Computer Scientists v1.0.2
 
On Java Generics, History, Use, Caveats v1.1
On Java Generics, History, Use, Caveats v1.1On Java Generics, History, Use, Caveats v1.1
On Java Generics, History, Use, Caveats v1.1
 
On Reflection in OO Programming Languages v1.6
On Reflection in OO Programming Languages v1.6On Reflection in OO Programming Languages v1.6
On Reflection in OO Programming Languages v1.6
 
ICSOC'21
ICSOC'21ICSOC'21
ICSOC'21
 
Vissoft21.ppt
Vissoft21.pptVissoft21.ppt
Vissoft21.ppt
 
Service computation20.ppt
Service computation20.pptService computation20.ppt
Service computation20.ppt
 
Serp4 iot20.ppt
Serp4 iot20.pptSerp4 iot20.ppt
Serp4 iot20.ppt
 
Msr20.ppt
Msr20.pptMsr20.ppt
Msr20.ppt
 
Iwesep19.ppt
Iwesep19.pptIwesep19.ppt
Iwesep19.ppt
 
Icsoc20.ppt
Icsoc20.pptIcsoc20.ppt
Icsoc20.ppt
 
Icsoc18.ppt
Icsoc18.pptIcsoc18.ppt
Icsoc18.ppt
 

Lmo02.ppt

  • 1. 1 Un méta-modèle pour coupler application et détection des design patterns Hervé Albin-Amiot Pierre Cointe Yann-Gaël Guéhéneuc {albin, cointe, guehene}@emn.fr École des Mines de Nantes, France Soft-Maint S.A., France Object Technology International Inc., Canada
  • 2. 2 2/17 Plan n Le contexte n Notre objectif n Nos besoins n Travaux connexes n Notre solution : le méta-modèle PDL n PDL : principe & mise en œuvre n Questions ouvertes
  • 3. 3 3/17 Le contexte Améliorer la qualité des développements par objets en favorisant l’utilisation des design patterns pour aider à : – Implémenter – Comprendre – Documenter Notre but est d’améliorer… Les design patterns sont bien connus et éprouvés dans la recherche académique comme dans l’industrie. Les design patterns se situent à mi-chemin entre le code source et la conception (micro-architectures). Dans le reste de cette présentation, le GoF (Gamma et al.) est notre référence.
  • 4. 4 4/17 Notre objectif n Fournir un assistant logiciel aidant à : – L’implémentation • Sélection • Paramétrage • Génération – La compréhension et la documentation : détection de formes exactes Application Deux phases principales pour l’implémentation : • la sélection… ; • l’application… Qui se décompose elle-même en : • paramétrage… ; • génération… Une formes exacte = un design pattern tel que décrit dans le GoF. Une forme exacte suit à la fois la structure du design pattern et aussi son intention, ses collaborations, … telles que décrites dans le GoF. En opposition avec une forme dégradée dans laquelle certaines caractéristiques (rôles, relations, …) ne sont pas vérifiées. Par exemple, dans le design pattern Composite, peut-être la relation d’héritage entre Component et Composite n’est-elle pas vitale pour satisfaire l’intention du design pattern.
  • 5. 5 5/17 Nos besoins n Formaliser les design patterns n Décrire les design patterns en tant que : – Entités de « première classe » • Elles savent comment produire du code • Elles savent identifier leurs propres occurrences dans du code – Entités manipulables • Sur lesquelles on peut raisonner • Que l’on peut adapter à un contexte spécifique Le GoF décrit 23 design patterns, mais ne les formalisent pas. Nous devons formaliser pour pouvoir manipuler avec des outils ⇒ Décrire les design patterns pour… • comme des entités de première classes • comme des entités manipulables On veut obtenir des entités de premières classes : structure plus une touche de comportement (commun à tous les design patterns et propre à un certain design pattern). Il faut bien voir qu’un design pattern ce n’est pas seulement une structure, c’est aussi un comportement. On peut comparer cette approche avec la notion de classe dans un langage à classes. L’idée de modéliser les design patterns pour l’application et la détection permet d’apporter une réponse au problème de la traçabilité…
  • 6. 6 6/17 Travaux connexes n Formalisation : – LePUS [Eden 2000] – FAMIX [Ducasse 1999] – Fragment Model [Florjin et al. 1997] n Application – [Budinsky et al. 1996] n Détection – [Wuyts 1998], [Antoniol et al. 1998] Nos travaux sont à la frontière de différents travaux sur les design patterns : positionnement difficile car on veut faire trois aspects… Dans notre approche, nous cherchons à formaliser les design patterns pour appliquer et détecter les design patterns. La plupart des travaux connexes ne s’intéressent qu’à un seul aspect: • formalisation : • LePus : haut niveau d’abstraction de la formalisation, peu ou pas de génération de code, pas de prise en comptes des idiomes de programmation propre aux langages ; • FAMIX : l’intersection avec notre méta-modèle n’est pas vide mais les deux méta-modèles ne sont pas égaux ; • Modèle à fragments : granularité très (voire trop) fine, axé sur les caractéristique du langage de programmation Smalltalk ; • application : • Budinskypropose un catalogue interactif en HTML des design patterns en vue de la génération de code d’exemple, mais il n’y a pas de possibilité de paramétrer le code générer pour l’insérer directement dans le code de l’utilisateur, de plus la détection n’est pas prise en compte ; • détection : • Wuyts et Antoniol ne représentent que les design patterns structuraux, ils ne proposent pas de réelle formalisation, ni de détection.
  • 7. 7 7/17 Notre solution : le méta-modèle PDL On utilise un méta-modèle pour formaliser les design patterns. La technique de méta-modélisation est bien connue pour… Un méta-modèle pour formaliser/décrire les design patterns… Ce méta-modèle est un compromis entre les constituants pour décrire les design patterns et pour décrire les langages de programmation cible, car on veut faire à la fois de la formalisation, de l’application, et de la détection. Le méta-modèle est très simple pour décrire les design patterns et le langage Java, il peut/doit être adapté pour la génération d’autres langages.
  • 8. 8 8/17 PDL : principe build() … build() … Modèle abstraitComposite Modèle concretComposite1 Code Composite 1 Code Composite n Modèle concretComposite n Code Composite 2 Modèle concretComposite2 Paramétrage Méta-entité Composite Méta-entité Proxy Méta-entité Observer Méta-entité générique Pattern Décrivent Spécialisation RaffinementConstituants Méta-modèle de patterns Instanciation ‚ • ƒ „ build() … Sélection Paramétrage Application Les différentes étapes d’utilisation de notre méta-modèle, depuis la définition des constituants, jusqu’à l’application. (Voir l’article dans les actes, ou www.yann- gael.gueheneuc.net/Work/Publications/)
  • 9. 9 9/17 PDL : mise en œuvre Description Traduction en un modèle de pattern Descriptions informelles du [GoF] Instance de PInterface Instance de PClass Instance de PAssoc Instance de PDelegation name() Instance de PMethod Instance de Pattern Légende Exemple… Et on a un catalogue d’autres design patterns…
  • 10. 10 10/17 PDL : mise en œuvre Application Button paint() Label paint( ) Window paint( ) addComponent(Component) removeComponent(Component) listComponent( ) Component paint( ) * components Code source Java, Claire Paramétrage Génération
  • 11. 11 11/17 PDL : mise en œuvre Détection Code source Java Design pattern détecté ? Reconstruction Comparaison (arc consistance + algorithmes dédiés) Source ou code octal (byte-codes)… Représentation du code source à l’aide des constituants du méta-modèle… Chaque design pattern est une entité de première classe et donc on peut lui demander de se comparer avec quelque chose et donc dire si ils sont équivalents… L’algorithme utilisé est AC-x + des algorithmes ad-hoc qui permettent d’augmenter l’efficacité et la pertinence pour prendre en compte les idiomes de programmation. L’algorithme est implémenté au niveau de la classe Pattern, et chaque design pattern peut être étendu…
  • 12. 12 12/17 Quelques résultats expérimentaux n Application – Ptidej n Détection sur plusieurs frameworks : – java.awt.* – JHotDraw – JUnit – PatternsBox – Ptidej C’est difficile de présenter des exemples d’application, car il est plus facile d’utiliser l’outil… Pour la détection, c’est plus facile de donner des résultats concrets…
  • 13. 13 13/17 Détection java.awt.* 121 1 1 1 JHotDraw 155 1 1 0,3 JUnit 34 1 1 0,4 JEdit 248 1,4 PatternsBox 52 0,3 java.awt.* 121 0,2 JHotDraw 155 1 3 2 0,4 JUnit 34 1 1 0,2 JEdit 248 0,4 PatternsBox 52 0,3 java.awt.* 121 3 1,1 JHotDraw 155 2 2 1 1 0,5 JUnit 34 JEdit 248 0,1 PatternsBox 52 0,2 java.awt.* 121 JHotDraw 155 3 3 0,1 JUnit 34 JEdit 248 1 1 0,1 PatternsBox 52 java.awt.* 121 3,4 JHotDraw 155 2 2 3,2 JUnit 34 4 4 2,5 JEdit 248 3 3 13 PatternsBox 52 1 1 2,8 java.awt.* 121 3 3 0,7 JHotDraw 155 2 2 0,5 JUnit 34 0,4 JEdit 248 1 PatternsBox 52 1 1 0,5 610 29 28 2 3 5,8 Iterator NOC Composite Decorator Factory Method Existing Observer Singleton Détection dans PatternsBox Hits Missed False hits Time (sec.) Design patterns Frameworks Nous avons appliqué six design patterns très utilisés (nous pensons) sur cinq frameworks. Les résultats sont donnés sur la dernière ligne… Nous avons aussi appliqué nos algorithmes à tout les paquetages de Java (java.*) et les temps sont restés linéaires. Mais certains design pattern sont difficilement détectables, comme le design pattern Façade.
  • 14. 14 14/17 Réalisation de l’objectif n Décrire, appliquer et détecter les design patterns – Entités de première classe manipulables n Nous avons un assistant aidant : – L’implémentation – La détection et la documentation de formes exactes de design patterns (Cet assistant est « relativement » simple) Par rapport à notre objectif de départ, notre méta-modèle apporte une solution satisfaisante…
  • 15. 15 15/17 Questions ouvertes 1/3 n Par rapport au contexte : Améliorer la qualité des développements par objets en favorisant l’utilisation des design patterns Mais au cours de nos recherches, nous avons rencontrés de nombreux problèmes pour lesquels nous n’avons pas de réponse définitive, encore …
  • 16. 16 16/17 Questions ouvertes 2/3 n Formalisation : – Un unique méta-modèle est-il suffisant ? – Comment représenter les compromis ? n Application : – Comment bien décrire le code source ? – Est-ce qu’elle est toujours possible et intéressante ? Un unique méta-modèle : Nous pensons que non, nous cherchons à modéliser l’intention des design patterns… Compromis : Pour l’instant, seulement des solutions ad-hoc… Source code : FAMIX + définitions sémantiquement opérationnelles des relations d’association, d’agrégation, et de composition… Possible/intéressante : avec le design patterns Façade, l’utilisateur perd plus de temps à paramétrer qu’à écrire le code lui-même… Mais c’est quand même utile pour la validation, la détection, …
  • 17. 17 17/17 Questions ouvertes 3/3 n Compréhension : – Est-il possible de détecter les formes exactes de n’importe quel design pattern ? – Est-il possible de détecter les formes approchées de n’importe quel design pattern ? Formes exactes : Non, mais cela reste une question ouverte… Formes dégradées : Difficile, quel est le seuil de tolérance entre une forme dégradée et quelque chose qui n’est pas un design pattern ?…