1. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Une taxonomie et un métamodèle pour la détection des
défauts de conception
Naouel Moha – Duc-loc Huynh – Yann-Gaël Guéhéneuc
GEODES – Groupe de recherche sur les systèmes
ouverts et distribués et en génie logiciel expérimental
Université de Montréal
{mohanaou, huynhduc, guehene}@iro.umontreal.ca
LMO 2006
Moha et al. 1/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
2. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Plan
Objectifs de notre travail
Modéliser les défauts de conception afin de pouvoir les détecter automatiquement
dans le code.
1 Introduction
2 Méthodologie (5 phases)
3 Phases 1 et 2 : analyse et taxonomie
4 Phase 3 : métamodélisation
5 Phases 4 et 5 : modélisation et validation
6 Conclusion
Moha et al. 2/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
3. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Les défauts de conception
Défauts de conception vs. Patrons de conception
“Mauvaises” solutions à des problèmes récurrents dans les architectures à objets
Problèmes
Pas de représentation précise et structurée
Sous forme de descriptions textuelles sujettes à interprétation
Difficile de les détecter précisément et efficacement
Solution
Représentation précise et structurée des défauts de conception basée sur un
métamodèle à partir d’une taxonomie des défauts
Moha et al. 3/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
4. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Motivations
Pourquoi détecter les défauts de conception ?
Améliorer la qualité des architectures à objets
Faciliter l’évolution
Réduire les coûts de maintenance
Pourquoi une taxonomie ?
Confusion entre : défauts, anti-patrons, problèmes, mauvaises odeurs, anomalies, etc.
Définir, comparer et classer les défauts
Pourquoi un métamodèle ?
Limite les ambiguïtés en structurant les concepts
Facilite le développement d’algorithmes et d’outils
Pourquoi une méthodologie ?
Définir une démarche systématique à appliquer pour la représentation des défauts
Peut être appliquée à d’autres spécifications
Moha et al. 4/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
5. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Méthodologie en 5 phases
Extraction
des concepts clefs
Terminologie et
Classification
Entity
InterfaceClass Method
RootElement
Element
Anti-patrons
Défauts
de patrons
Mauvaises
odeurs
SAD
DesignPatternDefectAntiPattern
BadSmell
AntiPatternsRepository
Entity Element
Pattern
RootElement
Métamodèle PADL
Métamodèle SADDL
Controller Class
Interface
Method
-low
CohesionSignature
Abstraction
SwissArmyKnife
Modèles de défauts
de conception
Description textuelle
1 Analyse
2 Taxonomie
4
5
Modélisation
3 Métamodèlisation
(b) Instancier
Définir
et classifier
Intégrer
Intégrer
(a) Intégrer
(c)Vérifier
Fiches de
règles
(d) A
ffiner
et corrigerValidation
Détection
Inférer
Algorithmes
Moha et al. 5/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
7. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Méthodologie en 5 phases
RULE_CARD : Blob {
RULE : Blob {ASSOC: associated FROM: ControllerClass ONE TO: DataClass MANY } ;
RULE : ControllerClass {INTER LargeClassLowCohesion ClassName } ;
RULE : LargeClassLowCohesion {INTER LargeClass ClassLowCohesion } ;
RULE : LargeClass {INTER (METRIC: NM, HIGH) (METRIC: NA, HIGH) } ;
RULE : ClassLowCohesion {(METRIC: LCOM, HIGH) } ;
RULE : ClassName {(SEMANTIC: CLASSNAME, {System, Subsystem, Manager, Driver, Controller}) } ;
RULE : DataClass {INTER (STRUCT: METHOD, Accessor) (METRIC: LCOM, LOW) } ;
} ;
Phase 1 : analyse
Description littéraire → Synthétique
Moha et al. 7/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
8. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Méthodologie en 5 phases
Extraction
des concepts clefs
Terminologie et
Classification
Entity
InterfaceClass Method
RootElement
Element
Anti-patrons
Défauts
de patrons
Mauvaises
odeurs
SAD
DesignPatternDefectAntiPattern
BadSmell
AntiPatternsRepository
Entity Element
Pattern
RootElement
Métamodèle PADL
Métamodèle SADDL
Controller Class
Interface
Method
-low
CohesionSignature
Abstraction
SwissArmyKnife
Modèles de défauts
de conception
Description textuelle
1 Analyse
2 Taxonomie
4
5
Modélisation
3 Métamodèlisation
(b) Instancier
Définir
et classifier
Intégrer
Intégrer
(a) Intégrer
(c)Vérifier
Fiches de
règles
(d) A
ffiner
et corrigerValidation
Détection
Inférer
Algorithmes
Moha et al. 8/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
9. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Méthodologie en 5 phases
Extraction
des concepts clefs
Terminologie et
Classification
Entity
InterfaceClass Method
RootElement
Element
Anti-patrons
Défauts
de patrons
Mauvaises
odeurs
SAD
DesignPatternDefectAntiPattern
BadSmell
AntiPatternsRepository
Entity Element
Pattern
RootElement
Métamodèle PADL
Métamodèle SADDL
Controller Class
Interface
Method
-low
CohesionSignature
Abstraction
SwissArmyKnife
Modèles de défauts
de conception
Description textuelle
1 Analyse
2 Taxonomie
4
5
Modélisation
3 Métamodèlisation
(b) Instancier
Définir
et classifier
Intégrer
Intégrer
(a) Intégrer
(c)Vérifier
Fiches de
règles
(d) A
ffiner
et corrigerValidation
Détection
Inférer
Algorithmes
Moha et al. 9/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
10. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Méthodologie en 5 phases
Extraction
des concepts clefs
Terminologie et
Classification
Entity
InterfaceClass Method
RootElement
Element
Anti-patrons
Défauts
de patrons
Mauvaises
odeurs
SAD
DesignPatternDefectAntiPattern
BadSmell
AntiPatternsRepository
Entity Element
Pattern
RootElement
Métamodèle PADL
Métamodèle SADDL
Controller Class
Interface
Method
-low
CohesionSignature
Abstraction
SwissArmyKnife
Modèles de défauts
de conception
Description textuelle
1 Analyse
2 Taxonomie
4
5
Modélisation
3 Métamodèlisation
(b) Instancier
Définir
et classifier
Intégrer
Intégrer
(a) Intégrer
(c)Vérifier
Fiches de
règles
(d) A
ffiner
et corrigerValidation
Détection
Inférer
Algorithmes
Moha et al. 10/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
11. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Méthodologie en 5 phases
Phase 4 : modélisation
Modèle obtenu pour le Blob
-get ( )
-set ( )
Accessor Field MethodField
-high
Cohesion
Controller ClassData Class
Method
-low
Cohesion
Blob
**
* 1
many many
1
Moha et al. 11/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
12. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Méthodologie en 5 phases
Extraction
des concepts clefs
Terminologie et
Classification
Entity
InterfaceClass Method
RootElement
Element
Anti-patrons
Défauts
de patrons
Mauvaises
odeurs
SAD
DesignPatternDefectAntiPattern
BadSmell
AntiPatternsRepository
Entity Element
Pattern
RootElement
Métamodèle PADL
Métamodèle SADDL
Controller Class
Interface
Method
-low
CohesionSignature
Abstraction
SwissArmyKnife
Modèles de défauts
de conception
Description textuelle
1 Analyse
2 Taxonomie
4
5
Modélisation
3 Métamodèlisation
(b) Instancier
Définir
et classifier
Intégrer
Intégrer
(a) Intégrer
(c)Vérifier
Fiches de
règles
(d) A
ffiner
et corrigerValidation
Détection
Inférer
Algorithmes
Moha et al. 12/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
13. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Phases 1 et 2 : analyse et taxonomie
Phase 1 : Analyse
Extraction des concepts clefs
Spécification des fiches de règles
Phase 2 : Taxonomie
Terminologie et classification
Les défauts de patrons
Les anti-patrons
Les symptômes
Carte des défauts
Moha et al. 13/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
14. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Les défauts de patrons
Terminologie
Les défauts de patrons sont de mauvaises applications des solutions des patrons
de conception [MOH 05c]
Classification
2 types :
1 Les patrons déformés
2 Les patrons dégradés
Basée sur la classification de Gamma et al.
DesignPatternDefect
Degraded
Distorted
Pattern
Creational
Structural
Behavioral
Singleton
Builder
FactoryMethod
Prototype
AbstractFactory
Moha et al. 14/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
15. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Les anti-patrons [BRO 98]
Terminologie
“Mauvaises” solutions à des problèmes récurrents dans les architectures à objets,
dont l’utilisation a des effets négatifs sur la qualité
AntiPattern
Inter-Class
Intra-Class
Structural
Behavioral
Semantic
Blob
Poltergeist
DataVision
LavaFlow
SpaghettiCode
Cut&Paste Programming
Functional Decomposition
Structural
Behavioral
Semantic
MultiService
TinyService
TooMuchCode
SwissArmyKnife
Stovepipe
Moha et al. 15/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
16. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Les symptômes ou mauvaises odeurs
Terminologie
Indicateurs de la présence possible de défauts
Structures dans le code source qui suggèrent la possibilité d’une restructuration
du code [FOW 99]
Exemples : code dupliqué, larges classes & longues méthodes
BadSmell
Inter-Class
Intra-Class
Structural
Behavioral
Semantic
Semantic
Behavioral
Structural
Transient Associations
Stateless
Dead Code
Unjustified Code
ShortDuration
Comments
Duplicated Code
ShotgunSurgery
Message Chain
LongMethod
Divergent Change
LargeClass
DataClassMoha et al. 16/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
17. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Carte des défauts de conception
Relations entre les défauts de conception
Blob
linked
LavaFlow
DeadCode
has
has
CommentsLack of
documentation
{TODO, To be
replaced, In Flux}
Poltergeist
is
Message
Chain UnjustifiedCode
has
LargeClass
is
has
Spaghetti
Code
is
Process
Oriented
is
DataClass
ShortDuration
SingleAction
does
Complex
is
No Polymorphism
has No Inheritance
has
has
Low Cohesion
Class & Global
Variables
has
SwissArmy
Knife
LargeInterface
is
Signatures
has
have
Abstraction
relates
Moha et al. 17/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
18. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Phase 3 : Métamodélisation
PADL (Pattern and Abstract-level Description Language)
Décrit la structure des programmes OO et les patrons de conception [ALB 02]
SADDL étend PADL (Software Architectural Defects Description Language)
Décrit les défauts de conception
SAD
AntiPattern
BadSmell
AntiPatternsRepository
related
0..*
0..*
0..*
Entity
InterfaceClass
+attachTo(Element)()
Element
Assoc FieldMethod Comment
ClassVariable GlobalVariable
0..*
0..*
0..10..*
DelegatingMethod
0..1
targetAssoc
targetEntity
0..*
+compare(Pattern)()
Pattern
Observer Composite
0..*
related
Signature
0..*
-name
-visibility
RootElement
inherit
Role
Abstraction
related0..*
0..* 0..*
Composition Agregation
Accessor
has same
name
0..* Parameter
Coupling
0..*
Cohesion
shouldimplement
declares
0..* Relationshipcontains 0..*
targets
DesignPatternDefect
resemble
0..*
1..*
ElemSADDL
ElemPADL
Légende
Élément du métamodèle SADDL
Élément du métamodèle PADL
Moha et al. 18/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
19. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Phases 4-5 : Modélisation et validation
Modélisation
Instancier des défauts de conception à partir de SADDL sous forme de modèles
Quinzaine de défauts dont une dizaine d’anti-patrons
Validation
Modèles ↔ Fiches
Corriger et enrichir le métamodèle
Inférer les algorithmes de détection
Moha et al. 19/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
20. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Les défauts de patron
+Attach(Observer)()
+Detach(Observer)()
+Notify()()
Subject
+GetState()
+SetState()
-subjectState
ConcreteSubject
Observer
+Update()
-observerState
ConcreteObserver
observers
subject
(a) Patron Observer
+GetState()
+SetState()
+Attach(Observer)()
+Detach(Observer)()
+Notify()()
-subjectState
ConcreteSubject
Observer
+Update()
-observerState
ConcreteObserver
observers
subject
(b) Patron déformé
FIG.: Le patron Observer et son patron déformé
Moha et al. 20/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
21. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Les anti-patrons
Controller Class
Interface
Method
-low
Cohesion
Signature
SwissArmyKnife
many
implements
implements
many
1
(a) Modèle
RULE_CARD : SwissArmyKnife {
RULE : SwissArmyKnife {AGGREG: associated FROM: Interface ONE TO: Signature MANY} ;
RULE : Interface {IMPL: ControllerClass } ;
RULE : ControllerClass {INTER LargeClassLowCohesion ClassName } ;
RULE : LargeClassLowCohesion {INTER (METRIC: NM, HIGH) (METRIC: LCOM, HIGH)} ;
RULE : ClassName {(SEMANTIC: CLASSNAME, {System, Subsystem, Manager, Driver,
Controller}) } ;
RULE : Signature {(METRIC: NM, HIGH) } ;
} ;
(b) Fiche de règles
FIG.: Le couteau suisse
Moha et al. 21/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
22. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Les symptômes
Class
-high
Coupling1..*
1
Shotgun Surgery
1
(a) Shotgun Surgery
MethodClass
1..*
-low
Cohesion1..*
1
Divergent Change
1
(b) Divergent Change
FIG.: Les modèles du Shotgun Surgery et du Divergent Change
Moha et al. 22/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
23. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Méthodologie en 5 phases
Extraction
des concepts clefs
Terminologie et
Classification
Entity
InterfaceClass Method
RootElement
Element
Anti-patrons
Défauts
de patrons
Mauvaises
odeurs
SAD
DesignPatternDefectAntiPattern
BadSmell
AntiPatternsRepository
Entity Element
Pattern
RootElement
Métamodèle PADL
Métamodèle SADDL
Controller Class
Interface
Method
-low
CohesionSignature
Abstraction
SwissArmyKnife
Modèles de défauts
de conception
Description textuelle
1 Analyse
2 Taxonomie
4
5
Modélisation
3 Métamodèlisation
(b) Instancier
Définir
et classifier
Intégrer
Intégrer
(a) Intégrer
(c)Vérifier
Fiches de
règles
(d) A
ffiner
et corrigerValidation
Détection
Inférer
Algorithmes
Moha et al. 23/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
24. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Experimentations
Objectif
Montrer l’utilité de notre méthodologie et de son implémentation (métamodèle SADDL)
Hypothèses
Possibilité de spécifier un grand nombre de défauts de conception
La précision de nos algos est raisonnable
Objets
5 programmes open source entre 140 et 1200 classes.
Traitement
4 anti-patrons : Blob, Functional decomposition, Swiss Army Knife, Spaghetti
Code
Implémentation des algorithmes de détection
Validation manuelle : Précision vs. Rappel
Moha et al. 24/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
26. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Conclusion
Objectifs de notre travail
Modéliser les défauts de conception afin de pouvoir les détecter automatiquement
dans le code.
Objectifs atteints
Manque de travaux sur la spécification des défauts
Nécessiter de représentations précises et structurées
Une taxonomie et un métamodèle
Fournir un cadre de développement de techniques et d’outils pour la détection des
défauts
À faire...
Affiner la description des règles (règles comportementales)
Augmenter notre base de défauts
Améliorer la précision de nos algorithmes de détection
Développer des techniques de correction
Moha et al. 26/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception
27. Introduction Méthodologie Taxonomie (1-2) Métamodélisation (3) Modélisation et validation (4-5) Conclusion
Références
ALB 02 ALBIN-AMIOT H., COINTE P., GUÉHÉNEUC Y.-G., Un méta-modèle pour coupler application et détection des design patterns,
DAO M., HUCHARD M., Eds., actes du 8e colloque Langages et Modèles à Objets, vol. 8, numéro 1–2/2002 de RSTI L’objet,
Hermès Science Publications, janvier 2002, p. 41–58.
BRO 98 BROWN W. J., MALVEAU R. C., BROWN W. H., III H. W. M., MOWBRAY T. J., Anti Patterns : Refactoring Software, Architectures,
and Projects in Crisis, John Wiley and Sons, 1st édition, March 1998.
FOW 99 FOWLER M., Refactoring – Improving the Design of Existing Code, Addison- Wesley, 1st édition, June 1999.
GUÉ 01 GUÉHÉNEUC Y.-G., ALBIN-AMIOT H., Using Design Patterns and Constraints to Automate the Detection and Correction of
Inter-Class Design Defects, LI Q., RIEHLE R., POUR G., MEYER B., Eds., proceedings of the 39th conference on the Technology
of Object-Oriented Languages and Systems, IEEE Computer Society Press, July 2001, p. 296 ˝U 305.
GAM 94 GAMMA E., HELM R., JOHNSON R., VLISSIDES J., Design Patterns – Elements of Reusable Object-Oriented Software,
Addison-Wesley, 1st édition, 1994.
MOH 05c MOHA N., HUYNH D.-L., GUÉHÉNEUC Y.-G., A Taxonomy and a First Study of Design Pattern Defects, ANTONIOL G.,
GUÉHÉNEUC Y.-G., Eds., Proceedings of the STEP International Workshop on Design Pattern Theory and Practice (IWDPTP05),
September 2005.
Moha et al. 27/27
LMO 2006, Une taxonomie et un métamodèle pour la détection des défauts de conception