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
Description textuelle
Extraction Défauts
des concepts clefs de patrons
1 Analyse
2 Taxonomie
Anti-patrons
Mauvaises
Définir Terminologie et odeurs
Fiches de et classifier
Classification RootElement
règles
Entity Element
Intégrer
(a
)I Class Interface Method
nt
fier (d é gr
)A e
f fi r Métamodèle PADL
Véri
ne
r
3 Métamodèlisation
r
et g re
Inté
(c )
co
rr
ig
5 Validation er
(b) Instancier
Modèles de défauts Métamodèle SADDL SAD
Détection SwissArmyKnife Controllerconception
de Class
AntiPatternsRepository
Inférer 4 Modélisation
Algorithmes
Interface AntiPattern Pattern DesignPatternDefect
Method Abstraction
RootElement
Signature Cohesion
-low BadSmell
Entity Element
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
Description textuelle
Extraction Défauts
des concepts clefs de patrons
1 Analyse
2 Taxonomie
Anti-patrons
Mauvaises
Définir Terminologie et odeurs
Fiches de et classifier
Classification RootElement
règles
Entity Element
Intégrer
(a
)I Class Interface Method
nt
fier (d é gr
)A e
f fi r Métamodèle PADL
Véri
ne
r
3 Métamodèlisation
r
et g re
Inté
(c )
co
rr
ig
5 Validation er
(b) Instancier
Modèles de défauts Métamodèle SADDL SAD
Détection SwissArmyKnife Controllerconception
de Class
AntiPatternsRepository
Inférer 4 Modélisation
Algorithmes
Interface AntiPattern Pattern DesignPatternDefect
Method Abstraction
RootElement
Signature Cohesion
-low BadSmell
Entity Element
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
Description textuelle
Extraction Défauts
des concepts clefs de patrons
1 Analyse
2 Taxonomie
Anti-patrons
Mauvaises
Définir Terminologie et odeurs
Fiches de et classifier
Classification RootElement
règles
Entity Element
Intégrer
(a
)I Class Interface Method
nt
fier (d é gr
)A e
f fi r Métamodèle PADL
Véri
ne
r
3 Métamodèlisation
r
et g re
Inté
(c )
co
rr
ig
5 Validation er
(b) Instancier
Modèles de défauts Métamodèle SADDL SAD
Détection SwissArmyKnife Controllerconception
de Class
AntiPatternsRepository
Inférer 4 Modélisation
Algorithmes
Interface AntiPattern Pattern DesignPatternDefect
Method Abstraction
RootElement
Signature Cohesion
-low BadSmell
Entity Element
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
Description textuelle
Extraction Défauts
des concepts clefs de patrons
1 Analyse
2 Taxonomie
Anti-patrons
Mauvaises
Définir Terminologie et odeurs
Fiches de et classifier
Classification RootElement
règles
Entity Element
Intégrer
(a
)I Class Interface Method
nt
fier (d é gr
)A e
f fi r Métamodèle PADL
Véri
ne
r
3 Métamodèlisation
r
et g re
Inté
(c )
co
rr
ig
5 Validation er
(b) Instancier
Modèles de défauts Métamodèle SADDL SAD
Détection SwissArmyKnife Controllerconception
de Class
AntiPatternsRepository
Inférer 4 Modélisation
Algorithmes
Interface AntiPattern Pattern DesignPatternDefect
Method Abstraction
RootElement
Signature Cohesion
-low BadSmell
Entity Element
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
Blob
1
Data Class Controller Class
* 1
Method
* * many many
Accessor Field Field Method
-get ( )
-set ( )
Cohesion Cohesion
-high -low
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
Description textuelle
Extraction Défauts
des concepts clefs de patrons
1 Analyse
2 Taxonomie
Anti-patrons
Mauvaises
Définir Terminologie et odeurs
Fiches de et classifier
Classification RootElement
règles
Entity Element
Intégrer
(a
)I Class Interface Method
nt
fier (d é gr
)A e
f fi r Métamodèle PADL
Véri
ne
r
3 Métamodèlisation
r
et g re
Inté
(c )
co
rr
ig
5 Validation er
(b) Instancier
Modèles de défauts Métamodèle SADDL SAD
Détection SwissArmyKnife Controllerconception
de Class
AntiPatternsRepository
Inférer 4 Modélisation
Algorithmes
Interface AntiPattern Pattern DesignPatternDefect
Method Abstraction
RootElement
Signature Cohesion
-low BadSmell
Entity Element
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.
Degraded
DesignPatternDefect
Distorted Singleton
Builder
Creational FactoryMethod
AbstractFactory
Pattern Structural
Prototype
Behavioral
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é
Blob
Structural
Inter-Class Behavioral Poltergeist
Semantic
Stovepipe
DataVision
AntiPattern LavaFlow
TooMuchCode
SpaghettiCode
Structural SwissArmyKnife
Functional Decomposition
TinyService
Intra-Class Behavioral Cut&Paste Programming
MultiService
Semantic
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
Message Chain
Structural ShotgunSurgery
Duplicated Code
Inter-Class Behavioral Transient Associations
Semantic
BadSmell Comments
Semantic
Intra-Class Behavioral ShortDuration
Dead Code
Stateless
Structural LongMethod
Unjustified Code
Divergent Change
LargeClass
Moha et al. DataClass 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
No Polymorphism
Low Cohesion
has
have has No Inheritance
Abstraction has
LargeClass
Signatures
relates is
Spaghetti
is is Code Process
Oriented
has
has Class & Global
LargeInterface has Variables
DeadCode
is Blob
LavaFlow
SwissArmy linked SingleAction {TODO, To be
Knife has replaced, In Flux}
ShortDuration
DataClass
Complex
Lack of Comments
documentation
is
is
does has
Message
Chain UnjustifiedCode
Poltergeist
has
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 Légende
AntiPatternsRepository ElemSADDL Élément du métamodèle SADDL
ElemPADL Élément du métamodèle PADL
0..*
related
AntiPattern DesignPatternDefect
0..*
BadSmell
0..*
0..*
resemble 0..* Role contains 0..* Relationship
1..*
0..* targets
Pattern declares
related
+compare(Pattern)() RootElement Abstraction
-name
-visibility 0..* 0..* related
Observer Composite 0..*
Cohesion
0..*
Coupling 0..* Element
0..*
Entity
+attachTo(Element)() 0..1
inherit
0..* targetEntity
0..*
Assoc Method 0..* Comment Field Parameter
Class shouldimplement Interface has same
0..* name
targetAssoc
DelegatingMethod Accessor ClassVariable GlobalVariable
0..1
Signature
Composition Agregation
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
Subject ConcreteSubject
observers Observer
-subjectState observers Observer
+Attach(Observer)() +GetState()
+Detach(Observer)() +SetState()
+Notify()() +Attach(Observer)()
+Detach(Observer)()
+Notify()()
ConcreteSubject subject ConcreteObserver su
b je
ct ConcreteObserver
-subjectState -observerState
+GetState() -observerState
+Update()
+SetState() +Update()
(a) Patron Observer (b) Patron déformé
F IG .: 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
SwissArmyKnife Controller Class
implements RULE_CARD : SwissArmyKnife {
1 RULE : SwissArmyKnife {AGGREG: associated FROM: Interface ONE TO: Signature MANY} ;
many
Interface RULE : Interface {IMPL: ControllerClass } ;
Method
RULE : ControllerClass {INTER LargeClassLowCohesion ClassName } ;
RULE : LargeClassLowCohesion {INTER (METRIC: NM, HIGH) (METRIC: LCOM, HIGH)} ;
implements RULE : ClassName {(SEMANTIC: CLASSNAME, {System, Subsystem, Manager, Driver,
Cohesion Controller}) } ;
many
-low RULE : Signature {(METRIC: NM, HIGH) } ;
Signature
} ;
(a) Modèle (b) Fiche de règles
F IG .: 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
Shotgun Surgery Divergent Change
1 1
Class 1 Class Method 1
1..*
1..* 1..*
Coupling Cohesion
-high -low
(a) Shotgun Surgery (b) Divergent Change
F IG .: 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
Description textuelle
Extraction Défauts
des concepts clefs de patrons
1 Analyse
2 Taxonomie
Anti-patrons
Mauvaises
Définir Terminologie et odeurs
Fiches de et classifier
Classification RootElement
règles
Entity Element
Intégrer
(a
)I Class Interface Method
nt
fier (d é gr
)A e
f fi r Métamodèle PADL
Véri
ne
r
3 Métamodèlisation
r
et g re
Inté
(c )
co
rr
ig
5 Validation er
(b) Instancier
Modèles de défauts Métamodèle SADDL SAD
Détection SwissArmyKnife Controllerconception
de Class
AntiPatternsRepository
Inférer 4 Modélisation
Algorithmes
Interface AntiPattern Pattern DesignPatternDefect
Method Abstraction
RootElement
Signature Cohesion
-low BadSmell
Entity Element
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. 296U 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