Maintenir du code
   historique


     RMLL 2011
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 noyé
»   Être pragmatique et non idéaliste
»   Privilégier le retour sur investissement
»   Utiliser les outils avec un certain recul
Se familiariser avec l'application
Utiliser l'application



»    Échanger avec les gens du métier
»    Les regarder manipuler l'application
»    La manipuler soi-même
»    Regarder les logs




22/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.




22/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




22/07/11                  ALTER WAY – Maintenir du code historique
Lister les langages



»    SLOCCount




22/07/11         ALTER WAY – Maintenir du code historique
Cartographier le code



»    phploc




22/07/11      ALTER WAY – Maintenir du code historique
Générer la documentation de l'API



»    PHP Documentor
»    Doxygen




22/07/11              ALTER WAY – Maintenir du code historique
Cartographier la base de données



»    MySQL Workbench




22/07/11               ALTER WAY – Maintenir du code historique
Déterminer les pré-requis



»    Librairies tierces
»    Version et extensions de PHP avec PHP_CompatInfo




22/07/11                 ALTER WAY – Maintenir du code historique
Créer de la documentation



»    Documenter au fur et à mesure
»    Ne pas repartir des documentations existantes




22/07/11                  ALTER WAY – Maintenir du code historique
Tests d'intégration

22/07/11
Filet de sécurité



»    Encadre le comportement actuel
»    Permet de repérer facilement les modifications de comportement




22/07/11                 ALTER WAY – Maintenir du code historique
Efficacité



»    Facile à mettre en œuvre sans connaître les détails internes
»    Couvre plusieurs couches techniques




22/07/11                   ALTER WAY – Maintenir du code historique
Outils



»    Selenium
»    Sikuli




22/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




22/07/11                   ALTER WAY – Maintenir du code historique
Tests unitaires

22/07/11
•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é




22/07/11                   ALTER WAY – Maintenir du code historique
Rendre le code testable



»    Injection de dépendance




22/07/11                 ALTER WAY – Maintenir du code historique
Couverture de code (1/3)



»    PHP_ChangeCoverage




22/07/11                  ALTER WAY – Maintenir du code historique
Couverture de code (2/3)



»    Sans prise en compte des changements




22/07/11                 ALTER WAY – Maintenir du code historique
Couverture de code (3/3)



»    Avec prise en compte des changements




22/07/11                 ALTER WAY – Maintenir du code historique
Modification du code

22/07/11
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




22/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




22/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




22/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




22/07/11                        ALTER WAY – Maintenir du code historique
Factoriser le code dupliqué



»    php_cpd




22/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




22/07/11                       ALTER WAY – Maintenir du code historique
Procédural vers Orienté Objet (1/2)



»    Encapsuler l'ancien code




22/07/11                  ALTER WAY – Maintenir du code historique
Procédural vers Orienté Objet (2/2)




22/07/11   ALTER WAY – Maintenir du code historique
Déployer le nouveau code



»    Automatiser le processus
»    Déployer sur un serveur de test




22/07/11                  ALTER WAY – Maintenir du code historique
Surveiller le comportement



»    Mise en place de logs
»    Surveillance des logs !




22/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




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

Maintenir du code historique - RMLL 2011

  • 1.
    Maintenir du code historique RMLL 2011
  • 2.
    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 »
  • 3.
    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
  • 4.
    Bien démarrer » Ne pas se sentir noyé » Être pragmatique et non idéaliste » Privilégier le retour sur investissement » Utiliser les outils avec un certain recul
  • 5.
    Se familiariser avecl'application
  • 6.
    Utiliser l'application » Échanger avec les gens du métier » Les regarder manipuler l'application » La manipuler soi-même » Regarder les logs 22/07/11 ALTER WAY – Maintenir du code historique
  • 7.
    Etudier tous lesdocuments 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. 22/07/11 ALTER WAY – Maintenir du code historique
  • 8.
    Soyez prudent » Les documents sont obsolètes » Les documents sont erronés » Les documents ne sont pas exhaustifs 22/07/11 ALTER WAY – Maintenir du code historique
  • 9.
    Lister les langages » SLOCCount 22/07/11 ALTER WAY – Maintenir du code historique
  • 10.
    Cartographier le code » phploc 22/07/11 ALTER WAY – Maintenir du code historique
  • 11.
    Générer la documentationde l'API » PHP Documentor » Doxygen 22/07/11 ALTER WAY – Maintenir du code historique
  • 12.
    Cartographier la basede données » MySQL Workbench 22/07/11 ALTER WAY – Maintenir du code historique
  • 13.
    Déterminer les pré-requis » Librairies tierces » Version et extensions de PHP avec PHP_CompatInfo 22/07/11 ALTER WAY – Maintenir du code historique
  • 14.
    Créer de ladocumentation » Documenter au fur et à mesure » Ne pas repartir des documentations existantes 22/07/11 ALTER WAY – Maintenir du code historique
  • 15.
  • 16.
    Filet de sécurité » Encadre le comportement actuel » Permet de repérer facilement les modifications de comportement 22/07/11 ALTER WAY – Maintenir du code historique
  • 17.
    Efficacité » Facile à mettre en œuvre sans connaître les détails internes » Couvre plusieurs couches techniques 22/07/11 ALTER WAY – Maintenir du code historique
  • 18.
    Outils » Selenium » Sikuli 22/07/11 ALTER WAY – Maintenir du code historique
  • 19.
    Intégration continue » Placer ces tests dans une intégration continue (Jenkins, PHPUnderControl) » Début de l'usine de développement 22/07/11 ALTER WAY – Maintenir du code historique
  • 20.
  • 21.
    •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é 22/07/11 ALTER WAY – Maintenir du code historique
  • 22.
    Rendre le codetestable » Injection de dépendance 22/07/11 ALTER WAY – Maintenir du code historique
  • 23.
    Couverture de code(1/3) » PHP_ChangeCoverage 22/07/11 ALTER WAY – Maintenir du code historique
  • 24.
    Couverture de code(2/3) » Sans prise en compte des changements 22/07/11 ALTER WAY – Maintenir du code historique
  • 25.
    Couverture de code(3/3) » Avec prise en compte des changements 22/07/11 ALTER WAY – Maintenir du code historique
  • 26.
  • 27.
    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 22/07/11 ALTER WAY – Maintenir du code historique
  • 28.
    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 22/07/11 ALTER WAY – Maintenir du code historique
  • 29.
    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 22/07/11 ALTER WAY – Maintenir du code historique
  • 30.
    Supprimer le codemort » Plusieurs types : – Jamais appelé – Impossible à appeler – Commenté » Apporte de la confusion » Reste dans le dépôt de code au cas où » php_dcd 22/07/11 ALTER WAY – Maintenir du code historique
  • 31.
    Factoriser le codedupliqué » php_cpd 22/07/11 ALTER WAY – Maintenir du code historique
  • 32.
    Code mélangé versprocédural » Séparer les couches de l'application : – HTML – Javascript, CSS – Manipulation des données (SQL, XML) – Code structurant 22/07/11 ALTER WAY – Maintenir du code historique
  • 33.
    Procédural vers OrientéObjet (1/2) » Encapsuler l'ancien code 22/07/11 ALTER WAY – Maintenir du code historique
  • 34.
    Procédural vers OrientéObjet (2/2) 22/07/11 ALTER WAY – Maintenir du code historique
  • 35.
    Déployer le nouveaucode » Automatiser le processus » Déployer sur un serveur de test 22/07/11 ALTER WAY – Maintenir du code historique
  • 36.
    Surveiller le comportement » Mise en place de logs » Surveillance des logs ! 22/07/11 ALTER WAY – Maintenir du code historique
  • 37.
    Merci ! » Email : jm@jmfontaine.net » Twitter : jmfontaine » Blog : www.jmfontaine.net » Autre blog : www.industrialisation-php.net 22/07/11 ALTER WAY – Maintenir du code historique

Notes de l'éditeur

  • #3 Pas besoin d'argumenter : un dépôt de code est indispensable à partir d'un seul développeur