وبلاگ بلیان

Refactoring des applications Java J2EE

معرفی کتاب «Refactoring des applications Java J2EE» نوشتهٔ Jean-Philippe Retaille, Olivier Salvatori, Thierry Templier, Michel Hue، منتشرشده توسط نشر Eyrolles Group در سال 2005. این کتاب در فرمت pdf، زبان فرانسوی ارائه شده است. «Refactoring des applications Java J2EE» در دستهٔ بدون دسته‌بندی قرار دارد.

Améliorer la qualité et l'évolutivité des applications Java/J2EE Le refactoring consiste à refondre le code source d'une application existante ou en cours de développement pour en améliorer la qualité, avec pour objectif une réduction des coûts de maintenance et une meilleure évolutivité. L'ouvrage passe en revue les différentes techniques de refactoring utilisées en environnement Java/J2EE : extraction de méthodes, généralisation de type, introduction de design patterns, programmation orientée aspect, optimisation de l'accès aux données, etc. Un livre pratique illustré d'une étude de cas détaillée L'ouvrage décrit dans le détail le processus de refactoring d'une application Java/J2EE : mise en place de l'infrastructure et des outils, analyse de la conception et du code de l'application, mise en oeuvre des techniques de refonte, tests de non régression. Cette démarche est illustrée par une étude de cas complète : refactoring d'une application J2EE Open Source à l'aide d'outils tels que Eclipse, CVS, JUnit et PMD. Remerciements 6 Table des matières 8 Avant-propos 16 1 - L’évolution logicielle et le refactoring 20 La problématique de l’évolution logicielle 21 Le cycle de vie d’un logiciel 21 L’érosion du design 25 Le rôle de la maintenance dans l’évolution logicielle 27 Le périmètre d’intervention du refactoring 29 Les niveaux de refactoring 29 Le processus de refactoring 30 Bénéfices et challenges du refactoring 32 Anticipation du refactoring 33 Le refactoring au sein des méthodes agiles 34 Le manifeste du développement logiciel agile 34 Les méthodes agiles 36 Rôle du refactoring dans les méthodes agiles 38 Conclusion 39 I - Le processus de refactoring 40 2 - Préparation du refactoring 42 La gestion de configuration 42 Les principes 43 Gestion des modifications de ressources 44 Gestion des branches 47 Gestion des clichés 49 Gestion de configuration dans le cadre du refactoring 50 Gestion des tests et des anomalies 51 Les tests unitaires 52 Les tests fonctionnels 55 Les tests de charge 57 L’analyse de couverture 60 Conclusion 68 3 - L’analyse du logiciel 70 L’analyse quantitative du logiciel 70 La métrologie 71 Les mesures des dimensions du logiciel 75 Les mesures des risques 78 Les mesures de cohérence 83 Les mesures de la qualité du logiciel 87 Les mesures de performance 89 L’analyse qualitative du logiciel 90 Les revues d’architecture 90 Les revues de code 93 Sélection des candidats au refactoring 98 Conclusion 99 4 - Mise en oeuvre du refactoring 100 Support du refactoring de code dans Eclipse 101 Les assistants de refactoring 101 Le mode prévisualisation 103 Défaire et refaire une opération de refactoring 104 Les techniques de refactoring du code 105 Renommage 105 Extraction d’une méthode 110 Extraction de variable locale 116 Extraction de constante 120 Extraction d’interface 125 Changement de signature d’une méthode 129 Généralisation d’un type 135 Déplacement d’éléments 139 Déplacement d’éléments dans le graphe d’héritage 142 Remplacement d’une variable locale par une expression 145 Remplacement d’une méthode par son corps 147 Remplacement d’une constante par sa valeur littérale 151 Conclusion 154 5 - Les tests unitaires pour le refactoring 156 Les tests unitaires avec JUnit 156 Les cas de test 156 Les assertions et l’échec 160 Les suites de tests 161 Exécution des tests 163 Les simulacres d’objets avec EasyMock 168 Les simulacres bouchons 168 Les simulacres avec contraintes 173 Les simulacres de classes 177 Autres considérations sur les simulacres 177 Analyse de couverture avec EMMA 178 Mise en place de EMMA 178 Instrumentation du code 179 Génération du rapport 181 Utilisation des tests unitaires pour le refactoring 182 La démarche 182 Exemple d’application 183 Conclusion 187 II - Techniques avancées de refactoring 188 6 - Le refactoring avec les design patterns 190 Les design patterns 190 Mise en oeuvre des design patterns dans le cadre du refactoring 192 Utilisation des modèles comportementaux 193 Le pattern observateur 193 Le pattern état 199 Le pattern interpréteur 205 Le pattern stratégie 209 Amélioration de la structure des classes 214 Le pattern proxy 214 Le pattern façade 219 Le pattern adaptateur 224 Conclusion 229 7 - Refactoring avec la POA (programmation orientée aspect) 230 Principes de la programmation orientée aspect 231 Les problématiques adressées par la POA 231 Les notions introduites par la POA 232 Modularisation des traitements 237 Extraction d’appels 237 Implémentation par défaut pour les interfaces 241 Gestion des exceptions 246 Gestion des variantes 253 Optimisation des traitements 257 Gestion de cache 257 Remplacement de méthode 261 Analyse du logiciel et tests unitaires 264 Analyse d’impacts 265 Respect de contrat 267 Tests unitaires de méthodes non publiques 271 Conclusion 274 8 - Refactoring de base de données 276 La problématique du refactoring avec les bases de données 276 Refactoring de la structure de la base 277 Stockage séparé des données opérationnelles et historiques 277 Découplage de la structure de la base et du reste du logiciel 278 Utilisation des vues 279 Utilisation des index 279 Refactoring des requêtes SQL 280 Limitation des colonnes ramenées par un SELECT 280 Limitation des lignes ramenées par un SELECT 281 Limitation des colonnes modifiées par un UPDATE 281 Définition des colonnes d’un INSERT 282 Refactoring de l’utilisation de JDBC 283 Utilisation de StringBuffer 283 Utilisation d’un pool de connexions 284 Fermeture des ressources inutilisées 288 Réglage de la taille du tampon d’un resultset 289 Utilisation de noms de colonnes plutôt que de numéros 290 Utilisation de PreparedStatement au lieu de Statement 291 Mises à jour en mode batch 293 Gestion des transactions 294 Conclusion 296 III - Étude de cas 298 9 - Présentation de l’étude de cas 300 Cahier des charges du logiciel 300 JGenea, une solution Java pour la généalogie 301 Architecture de JGenea Web 301 Récupération de JGenea Web 308 Connexion avec le référentiel CVS 309 Récupération du code de JGenea Web 311 Paramétrage et validation 313 Fonctionnalités d’Eclipse utiles pour l’étude de cas 316 Fonctionnalités du client CVS 316 Fonctionnalités de recherche dans le code 317 Conclusion 318 10 - Analyse de JGenea Web 320 Analyse quantitative 321 Informations sur la documentation du code 321 Statistiques sur les bogues 321 Statistiques du référentiel CVS 323 Métriques logicielles 326 En résumé 330 Analyse qualitative 330 Revue de code 330 Revue de conception 338 En résumé 339 Conclusion 340 11 - Refactoring de JGenea Web 342 Réorganisation et mise à niveau 342 Réorganisation des imports 342 Mise à niveau du code 343 Test des modifications 346 Application des techniques de base 346 Réorganisation des packages et des classes 346 Réorganisation des variables et des constantes 349 Refonte des classes métier 350 Utilisation des design patterns dans la gestion des accès aux données 357 Implémentation du design pattern stratégie 357 Refonte des DAO 361 Refonte des actions Struts 362 Test des modifications et analyse postrefactoring 364 Modularisation avec un aspect 365 Pour aller plus loin 367 IV - Annexe 368 Installation d’Eclipse 370 Installation de PMD sous Eclipse 370 Installation de Checkstyle sous Eclipse 373 Installation de Metrics sous Eclipse 375 Téléchargement d’EMMA 376 Téléchargement du client CVS pour Windows 376 Téléchargement de StatCVS 377 Téléchargement de Tomcat 378 Installation et configuration du plug-in Tomcat de Sysdeo pour Eclipse 378 Installation du plug-in AJDT pour Eclipse 379 Script DDL de JGenea Web 381 Références 391 Index 392 Remerciements......Page 6 Table des matières......Page 8 Avant-propos......Page 16 1 - L’évolution logicielle et le refactoring......Page 20 Le cycle de vie d’un logiciel......Page 21 L’érosion du design......Page 25 Le rôle de la maintenance dans l’évolution logicielle......Page 27 Les niveaux de refactoring......Page 29 Le processus de refactoring......Page 30 Bénéfices et challenges du refactoring......Page 32 Anticipation du refactoring......Page 33 Le manifeste du développement logiciel agile......Page 34 Les méthodes agiles......Page 36 Rôle du refactoring dans les méthodes agiles......Page 38 Conclusion......Page 39 I - Le processus de refactoring......Page 40 La gestion de configuration......Page 42 Les principes......Page 43 Gestion des modifications de ressources......Page 44 Gestion des branches......Page 47 Gestion des clichés......Page 49 Gestion de configuration dans le cadre du refactoring......Page 50 Gestion des tests et des anomalies......Page 51 Les tests unitaires......Page 52 Les tests fonctionnels......Page 55 Les tests de charge......Page 57 L’analyse de couverture......Page 60 Conclusion......Page 68 L’analyse quantitative du logiciel......Page 70 La métrologie......Page 71 Les mesures des dimensions du logiciel......Page 75 Les mesures des risques......Page 78 Les mesures de cohérence......Page 83 Les mesures de la qualité du logiciel......Page 87 Les mesures de performance......Page 89 Les revues d’architecture......Page 90 Les revues de code......Page 93 Sélection des candidats au refactoring......Page 98 Conclusion......Page 99 4 - Mise en oeuvre du refactoring......Page 100 Les assistants de refactoring......Page 101 Le mode prévisualisation......Page 103 Défaire et refaire une opération de refactoring......Page 104 Renommage......Page 105 Extraction d’une méthode......Page 110 Extraction de variable locale......Page 116 Extraction de constante......Page 120 Extraction d’interface......Page 125 Changement de signature d’une méthode......Page 129 Généralisation d’un type......Page 135 Déplacement d’éléments......Page 139 Déplacement d’éléments dans le graphe d’héritage......Page 142 Remplacement d’une variable locale par une expression......Page 145 Remplacement d’une méthode par son corps......Page 147 Remplacement d’une constante par sa valeur littérale......Page 151 Conclusion......Page 154 Les cas de test......Page 156 Les assertions et l’échec......Page 160 Les suites de tests......Page 161 Exécution des tests......Page 163 Les simulacres bouchons......Page 168 Les simulacres avec contraintes......Page 173 Autres considérations sur les simulacres......Page 177 Mise en place de EMMA......Page 178 Instrumentation du code......Page 179 Génération du rapport......Page 181 La démarche......Page 182 Exemple d’application......Page 183 Conclusion......Page 187 II - Techniques avancées de refactoring......Page 188 Les design patterns......Page 190 Mise en oeuvre des design patterns dans le cadre du refactoring......Page 192 Le pattern observateur......Page 193 Le pattern état......Page 199 Le pattern interpréteur......Page 205 Le pattern stratégie......Page 209 Le pattern proxy......Page 214 Le pattern façade......Page 219 Le pattern adaptateur......Page 224 Conclusion......Page 229 7 - Refactoring avec la POA (programmation orientée aspect)......Page 230 Les problématiques adressées par la POA......Page 231 Les notions introduites par la POA......Page 232 Extraction d’appels......Page 237 Implémentation par défaut pour les interfaces......Page 241 Gestion des exceptions......Page 246 Gestion des variantes......Page 253 Gestion de cache......Page 257 Remplacement de méthode......Page 261 Analyse du logiciel et tests unitaires......Page 264 Analyse d’impacts......Page 265 Respect de contrat......Page 267 Tests unitaires de méthodes non publiques......Page 271 Conclusion......Page 274 La problématique du refactoring avec les bases de données......Page 276 Stockage séparé des données opérationnelles et historiques......Page 277 Découplage de la structure de la base et du reste du logiciel......Page 278 Utilisation des index......Page 279 Limitation des colonnes ramenées par un SELECT......Page 280 Limitation des colonnes modifiées par un UPDATE......Page 281 Définition des colonnes d’un INSERT......Page 282 Utilisation de StringBuffer......Page 283 Utilisation d’un pool de connexions......Page 284 Fermeture des ressources inutilisées......Page 288 Réglage de la taille du tampon d’un resultset......Page 289 Utilisation de noms de colonnes plutôt que de numéros......Page 290 Utilisation de PreparedStatement au lieu de Statement......Page 291 Mises à jour en mode batch......Page 293 Gestion des transactions......Page 294 Conclusion......Page 296 III - Étude de cas......Page 298 Cahier des charges du logiciel......Page 300 Architecture de JGenea Web......Page 301 Récupération de JGenea Web......Page 308 Connexion avec le référentiel CVS......Page 309 Récupération du code de JGenea Web......Page 311 Paramétrage et validation......Page 313 Fonctionnalités du client CVS......Page 316 Fonctionnalités de recherche dans le code......Page 317 Conclusion......Page 318 10 - Analyse de JGenea Web......Page 320 Statistiques sur les bogues......Page 321 Statistiques du référentiel CVS......Page 323 Métriques logicielles......Page 326 Revue de code......Page 330 Revue de conception......Page 338 En résumé......Page 339 Conclusion......Page 340 Réorganisation des imports......Page 342 Mise à niveau du code......Page 343 Réorganisation des packages et des classes......Page 346 Réorganisation des variables et des constantes......Page 349 Refonte des classes métier......Page 350 Implémentation du design pattern stratégie......Page 357 Refonte des DAO......Page 361 Refonte des actions Struts......Page 362 Test des modifications et analyse postrefactoring......Page 364 Modularisation avec un aspect......Page 365 Pour aller plus loin......Page 367 IV - Annexe......Page 368 Installation de PMD sous Eclipse......Page 370 Installation de Checkstyle sous Eclipse......Page 373 Installation de Metrics sous Eclipse......Page 375 Téléchargement du client CVS pour Windows......Page 376 Téléchargement de StatCVS......Page 377 Installation et configuration du plug-in Tomcat de Sysdeo pour Eclipse......Page 378 Installation du plug-in AJDT pour Eclipse......Page 379 Script DDL de JGenea Web......Page 381 Références......Page 391 Index......Page 392 Améliorer La Qualité Et L'évolutivité Des Applications Java/j2ee. Le Refactoring Consiste à Refondre Le Code Source D'une Application Existante Ou En Cours De Développement Pour En Améliorer La Qualité, Avec Pour Objectif Une Réduction Des Coûts De Maintenance Et Une Meilleure évolutivité. L'ouvrage Passe En Revue Les Différentes Techniques De Refactoring Utilisées En Environnement Java/j2ee : Extraction De Méthodes, Généralisation De Type, Introduction De Design Patterns, Programmation Orientée Aspect, Optimisation De L'accès Aux Données, Etc. Un Livre Pratique Illustré D'une étude De Cas Détaillée. L'ouvrage Décrit Dans Le Détail Le Processus De Refactoring D'une Application Java/j2ee : Mise En Place De L'infrastructure Et Des Outils, Analyse De La Conception Et Du Code De L'application, Mise En œuvre Des Techniques De Refonte, Tests De Non Régression. Cette Démarche Est Illustrée Par Une étude De Cas Complète : Refactoring D'une Application J2ee Open Source à L'aide D'outils Tels Que Eclipse, Cus, Junit Et Pmd.
دانلود کتاب Refactoring des applications Java J2EE