Maintenir du code historique - 2011.rmll.info2011.rmll.info/IMG/pdf/Maintenir_du_code... · »...

Preview:

Citation preview

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 : jm@jmfontaine.net

» Twitter : jmfontaine

» Blog : www.jmfontaine.net

» Autre blog : www.industrialisation-php.net

13/07/11 ALTER WAY – Maintenir du code historique

Crédits

Recommended