Author(s): Jean-Philippe Retaillé, Olivier Salvatori, Thierry Templier, Michel Hue
Year: 2005
Language: French
Pages: 396
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