RMLL 2011
Maintenir du code historique
Qui suis-je ?
» Jean-Marc Fontaine
» Consultant pour Alter Way Consulting
» Président de l'AFUP
» Formateur / Professeur vacataire à l'université de Saint Quentin
» Auteur du blog Industrialisation-PHP.com
» Co-auteur du livre blanc « Industrialisation PHP »
Le problème
» Application existe depuis longtemps
» Application fonctionne (à peu près)
» La connaissance est diffuse voire inexistante
» Les évolutions prennent du temps
» Chaque modification est très dangereuse
Bien démarrer
» Ne pas se sentir noyer
» Être pragmatique et non idéaliste
» Privilégier le retour sur investissement
» Utiliser les outils avec un certain recul
Se familiariser avec l'applicationSe familiariser avec l'application
13/07/11 ALTER WAY – Maintenir du code historique
Utiliser l'application
» Échanger avec les gens du métier
» Les regarder manipuler l'application
» La manipuler soi-même
» Regarder les logs
13/07/11 ALTER WAY – Maintenir du code historique
Etudier tous les documents disponibles
» Documentations (fonctionnelle, technique, architecture)
» Schémas (architecture, base de données)
» Procédures de déploiement
» Cahier de recette
» Comptes-rendus de réunions
» Emails
» Gestionnaire de tickets
» Outil de planification
» Historique du gestionnaire de code
» Etc.
13/07/11 ALTER WAY – Maintenir du code historique
Soyez prudent
» Les documents sont obsolètes
» Les documents sont erronés
» Les documents ne sont pas exhaustifs
13/07/11 ALTER WAY – Maintenir du code historique
Lister les langages
» SLOCCount
13/07/11 ALTER WAY – Maintenir du code historique
Cartographier le code
» phploc
13/07/11 ALTER WAY – Maintenir du code historique
Générer la documentation de l'API
» PHP Documentor
» Doxygen
13/07/11 ALTER WAY – Maintenir du code historique
Cartographier la base de données
» MySQL Workbench
13/07/11 ALTER WAY – Maintenir du code historique
Déterminer les pré-requis
» Librairies tierces
» Version et extensions de PHP avec PHP_CompatInfo
13/07/11 ALTER WAY – Maintenir du code historique
Créer de la documentation
» Documenter au fur et à mesure
» Ne pas repartir des documentations existantes
13/07/11
Tests d'intégrationTests d'intégration
13/07/11 ALTER WAY – Maintenir du code historique
Filet de sécurité
» Encadre le comportement actuel
» Permet de repérer facilement les modifications de comportement
13/07/11 ALTER WAY – Maintenir du code historique
Efficacité
» Facile à mettre en œuvre sans connaître les détails internes
» Couvre plusieurs couches techniques
13/07/11 ALTER WAY – Maintenir du code historique
Outils
» Selenium
» Sikuli
13/07/11 ALTER WAY – Maintenir du code historique
Intégration continue
» Placer ces tests dans une intégration continue (Jenkins, PHPUnderControl)
» Début de l'usine de développement
13/07/11
Tests unitairesTests unitaires
13/07/11 ALTER WAY – Maintenir du code historique
•3 approches possibles
» Écrire des tests unitaires pour tout le code
» Écrire des tests pour le nouveau code uniquement
» Écrire des tests pour le nouveau code et le vieux code lié
13/07/11 ALTER WAY – Maintenir du code historique
Rendre le code testable
» Injection de dépendance
13/07/11 ALTER WAY – Maintenir du code historique
Couverture de code (1/3)
» PHP_ChangeCoverage
13/07/11 ALTER WAY – Maintenir du code historique
Couverture de code (2/3)
» Sans prise en compte des changements
13/07/11 ALTER WAY – Maintenir du code historique
Couverture de code (3/3)
» Avec prise en compte des changements
13/07/11
Modification du codeModification du code
13/07/11 ALTER WAY – Maintenir du code historique
Refactorisation / réécriture
» Refactorisation : Modification du code source sans modifier le comportement Les tests unitaires continuent de passer
» Réécriture : Modification du code source qui change son comportement Les tests unitaires doivent être adaptés
» Ne jamais mélanger les deux
13/07/11 ALTER WAY – Maintenir du code historique
Procéder avec précaution
» Une petite modification peut avoir beaucoup d'effet
» Procéder par petites touches
» Faire des commits fréquents et atomiques
13/07/11 ALTER WAY – Maintenir du code historique
Standard de codage
» En choisir un (PEAR, Zend Framework, Symfony) et s'y tenir
» Corriger uniquement le code touché par les modifications
» Vérifier avec PHP_CodeSniffer
13/07/11 ALTER WAY – Maintenir du code historique
Supprimer le code mort
» Plusieurs types : Jamais appelé Impossible à appeler Commenté
» Apporte de la confusion
» Reste dans le dépôt de code au cas où
» php_dcd
13/07/11 ALTER WAY – Maintenir du code historique
Factoriser le code dupliqué
» php_cpd
13/07/11 ALTER WAY – Maintenir du code historique
Code mélangé vers procédural
» Séparer les couches de l'application : HTML Javascript, CSS Manipulation des données (SQL, XML) Code structurant
13/07/11 ALTER WAY – Maintenir du code historique
Procédural vers Orienté Objet (1/2)
» Encapsuler l'ancien code
13/07/11 ALTER WAY – Maintenir du code historique
Procédural vers Orienté Objet (2/2)
13/07/11 ALTER WAY – Maintenir du code historique
Déployer le nouveau code
» Automatiser le processus
» Déployer sur un serveur de test
13/07/11 ALTER WAY – Maintenir du code historique
Surveiller le comportement
» Mise en place de logs
» Surveillance des logs !
13/07/11 ALTER WAY – Maintenir du code historique
Merci !
» Email : [email protected]
» Twitter : jmfontaine
» Blog : www.jmfontaine.net
» Autre blog : www.industrialisation-php.net
13/07/11 ALTER WAY – Maintenir du code historique
Crédits
Top Related