Détection et correction des défauts de conception Cours ift3912, responsable du cours: Bruno Dufor Démonstrateurs : Marouane Kessentini, Hassen grati 22/03/2010
Détecter les défauts de ce joueur? Joueur de référence Tout être différent, sortant de la norme, est considéré comme fou. [Eric Cantona] Calcul de similarité Détecter les défauts de ce joueur? Joueur de référence
Contexte Défaut de conception des problèmes d'implémentation et de conception provenant de ''mauvais'' choix conceptuels [Brown et al., 1998]
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)
Exemple du blob
Exemple du blob
Exemple du blob
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)
Exemples de défaut de conception: Functionnal Decomposition Functionnal decomposition : “ Procedural design in an OO language” (Brown et al.’98)
Contexte Comment détecter les défauts de conception?
Détection des défauts
Détection des défauts Plusieurs techniques utilisées Limites 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 risque Deviance from Perfection is a Better Criterion than Closeness to Evil when Identifying Risky Code
Contexte Refactoring
Refactoring JDT has actions for refactoring Java code
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
Refactoring Full preview of all ensuing code changes Programmer can veto individual changes List of changes Screen shot shows Extract Method applied to the print statement in HelloWorld.main method. “before” vs. “after”
Refactoring Growing catalog of refactoring actions Rename {field, method, class, package} Move {field, method, class} Extract method Extract local variable Inline local variable …
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.
Rename Move Renomme l'élément sélectionné. Déplace l'élément sélectionné, par exemple enlever la classe du paquetage actuel, et la place dans un autre paquetage
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.
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.
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.