Upload
stephanie-perrier
View
104
Download
1
Embed Size (px)
Citation preview
Détection et correction des défauts de conception
Démonstrateurs : Marouane Kessentini, Hassen grati
Cours ift3912, responsable du cours: Bruno Dufor
22/03/2010
Joueur de référence Détecter les défauts
de ce joueur?
Calcul de similarité
Tout être différent, sortant de la norme, est considéré
comme fou. [Eric Cantona]
Contexte• Défaut de conception
– des problèmes d'implémentation et de conception provenant de ''mauvais'' choix conceptuels [Brown et al., 1998]
4
Exemples de défaut de conception: Blob
• Blob : “Procedural-style design leads to one object with a lion’s share of the responsibilities while most other objects only hold data or execute simple
processes ” (Brown et al.’98)
5
Exemple du blob
6
Exemple du blob
7
Exemple du blob
8
Exemples de défaut de conception: Spaghetti code
• Spaghetti code : “Ad hoc software structure makes it difficult to extend and optimize code. ”
(Brown et al.’98)
9
Exemples de défaut de conception: Functionnal
Decomposition• Functionnal decomposition : “ Procedural
design in an OO language” (Brown et al.’98)
10
Contexte
Comment détecter les défauts de conception?
11
Détection des défauts
12
Détection des défauts• Plusieurs techniques utilisées
– Métriques (Moha et al. ’08, Marinescu et al. ’04)
– Visualisation (Dhambri et al. ’08, Langelier et. ’05)
– Méta-heuristiques (Harman et al. ’07, O’Keeffe et al. ’08)
• Limites– Listes exhaustives des défauts de
conception– Difficile de définir les défauts– Ordonner les défauts selon un degré de
risqueDeviance from Perfection is a Better Criterion than Closeness to Evil when Identifying Risky Code
13
Contexte
Refactoring
14
Refactoring
• JDT has actions for refactoring Java code
15
Refactoring• Refactoring actions rewrite source code
– Within a single Java source file
– Across multiple interrelated Java source files
• Refactoring actions preserve program semantics– Does not alter what program does
– Just affects the way it does it
• Encourages higher code quality– Makes it easier to rewrite poor code
16
Refactoring• Full preview of all ensuing code changes
– Programmer can veto individual changes
List of changes
“before” vs. “after”
17
Refactoring• Growing catalog of refactoring
actions– Rename {field, method, class, package}– Move {field, method, class}– Extract method– Extract local variable– Inline local variable– …
18
• Extract Method– Crée une nouvelle méthode encapsulant les éléments
sélectionnés, et remplace toutes les références à ces éléments (même ailleurs dans le code), par un appel vers cette méthode.cette fonction permet de rapidement nettoyer une
méthode trop longue en la découpant en éléments singuliers.
19
• Rename– Renomme l'élément sélectionné.
• Move– Déplace l'élément sélectionné, par
exemple enlever la classe du paquetage actuel, et la place dans un autre paquetage
20
• Change Method Signature– Modifie la signature de la méthode en cours, c'est-à-dire
ses droits d'accès (public / private / protected / default). Peuvent également être modifiés par cet assistant : le type du résultat, l'ordre, le nom et le type des paramètres
et les déclarations d'exceptions.
21
• Extract Local Variable... – De la même manière que Extract Method, cette fonction
crée une nouvelle variable assignée à l'expression sélectionnée.
• Convert Local Variable to Field– Transforme une variable locale, définie dans une
méthode, en champ de classe.
22
• Push Down, Pull Up – Ces deux fonctions marchent dans le
même sens, mais avec des directions différentes : elles déplacent la sélection respectivement vers la sous-classe ou la superclasse actuelle.