maintenir du code historique , par jean marc fontaine

37
RMLL 2011 Maintenir du code historique

Upload: alter-way

Post on 22-Nov-2014

920 views

Category:

Technology


2 download

DESCRIPTION

Les bonnes pratiques de développement ont généralement pour pré-requis implicite d’avoir toute latitude sur le projet. Malheureusement, on hérite souvent d’un code historique plus ou moins bien conçu. Faut-il simplement renoncer aux bonnes pratiques sous prétexte qu’on ne commence pas un projet de zéro ? Nous verrons qu’en introduisant une bonne dose de pragmatisme, il est possible d’intégrer petit à petit des bonnes pratiques dans un code afin d’en faire progresser la qualité par étapes.

TRANSCRIPT

Page 1: Maintenir du code historique , par Jean Marc Fontaine

RMLL 2011

Maintenir du code historique

Page 2: Maintenir du code historique , par Jean Marc Fontaine

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 »

Page 3: Maintenir du code historique , par Jean Marc Fontaine

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

Page 4: Maintenir du code historique , par Jean Marc Fontaine

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

Page 5: Maintenir du code historique , par Jean Marc Fontaine

Se familiariser avec l'applicationSe familiariser avec l'application

Page 6: Maintenir du code historique , par Jean Marc Fontaine

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

Page 7: Maintenir du code historique , par Jean Marc Fontaine

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.

Page 8: Maintenir du code historique , par Jean Marc Fontaine

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

Page 9: Maintenir du code historique , par Jean Marc Fontaine

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

Lister les langages

» SLOCCount

Page 10: Maintenir du code historique , par Jean Marc Fontaine

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

Cartographier le code

» phploc

Page 11: Maintenir du code historique , par Jean Marc Fontaine

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

Générer la documentation de l'API

» PHP Documentor

» Doxygen

Page 12: Maintenir du code historique , par Jean Marc Fontaine

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

Cartographier la base de données

» MySQL Workbench

Page 13: Maintenir du code historique , par Jean Marc Fontaine

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

Déterminer les pré-requis

» Librairies tierces

» Version et extensions de PHP avec PHP_CompatInfo

Page 14: Maintenir du code historique , par Jean Marc Fontaine

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

Page 15: Maintenir du code historique , par Jean Marc Fontaine

22/07/11

Tests d'intégrationTests d'intégration

Page 16: Maintenir du code historique , par Jean Marc Fontaine

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

Page 17: Maintenir du code historique , par Jean Marc Fontaine

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

Page 18: Maintenir du code historique , par Jean Marc Fontaine

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

Outils

» Selenium

» Sikuli

Page 19: Maintenir du code historique , par Jean Marc Fontaine

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

Page 20: Maintenir du code historique , par Jean Marc Fontaine

22/07/11

Tests unitairesTests unitaires

Page 21: Maintenir du code historique , par Jean Marc Fontaine

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

Page 22: Maintenir du code historique , par Jean Marc Fontaine

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

Rendre le code testable

» Injection de dépendance

Page 23: Maintenir du code historique , par Jean Marc Fontaine

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

Couverture de code (1/3)

» PHP_ChangeCoverage

Page 24: Maintenir du code historique , par Jean Marc Fontaine

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

Couverture de code (2/3)

» Sans prise en compte des changements

Page 25: Maintenir du code historique , par Jean Marc Fontaine

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

Couverture de code (3/3)

» Avec prise en compte des changements

Page 26: Maintenir du code historique , par Jean Marc Fontaine

22/07/11

Modification du codeModification du code

Page 27: Maintenir du code historique , par Jean Marc Fontaine

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

Page 28: Maintenir du code historique , par Jean Marc Fontaine

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

Page 29: Maintenir du code historique , par Jean Marc Fontaine

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

Page 30: Maintenir du code historique , par Jean Marc Fontaine

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

Page 31: Maintenir du code historique , par Jean Marc Fontaine

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

Factoriser le code dupliqué

» php_cpd

Page 32: Maintenir du code historique , par Jean Marc Fontaine

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

Page 33: Maintenir du code historique , par Jean Marc Fontaine

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

Procédural vers Orienté Objet (1/2)

» Encapsuler l'ancien code

Page 34: Maintenir du code historique , par Jean Marc Fontaine

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

Procédural vers Orienté Objet (2/2)

Page 35: Maintenir du code historique , par Jean Marc Fontaine

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

Déployer le nouveau code

» Automatiser le processus

» Déployer sur un serveur de test

Page 36: Maintenir du code historique , par Jean Marc Fontaine

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

Surveiller le comportement

» Mise en place de logs

» Surveillance des logs !

Page 37: Maintenir du code historique , par Jean Marc Fontaine

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

Merci !

» Email : [email protected]

» Twitter : jmfontaine

» Blog : www.jmfontaine.net

» Autre blog : www.industrialisation-php.net