SlideShare une entreprise Scribd logo
1  sur  20
« Pourtant,
ça marchait en dev … »
Olivier Doucet
Fondateur et Directeur Général d’OXEVA
« It works on my laptop »
C’est quoi le sujet ?
 Anticipation des problèmes avant la mise en production
 Quelques exemples que vous avez pu rencontrer …
 Organisation et bonnes pratiques pour pallier ces
problèmes
 Petite sélection des pièges déjà rencontrés sur les
technologies PHP / MySQL
Qui suis-je ?
 Fondateur d’Oxeva, société d’hébergement avec
infogérance totale
 En charge de l’exploitation depuis dix ans
 Expert PHP / MySQL
 Animation de conférences et formations
Quelques exemples
« mon site est super lent. Pourtant, aucun souci en dev »
« Le paiement ne fonctionne plus sur mon site e-commerce ! »
« mon développeur a voulu modifier cette fonctionnalité super
simple et là ça marche pas, ça doit venir du serveur »
« la base de données plante sans arrêt »
Les environnements
Les environnements
 DEV
 INTEGRATION / TEST
 PREPRODUCTION (Staging)
Le versioning
 Obligatoire, même avec un seul développeur
 Un commit par fonctionnalité
 Un message parlant
 En français, anglais ou Klingon, mais tout le monde suit la
même langue
 Utilisation des concepts de branches et tags
 Chaque commit va mettre à jour « testing » et va subir des
tests
https://xkcd.com/1296/
Les tests 1/3
 Réalisation de tests unitaires avec données de fixtures
 Basés sur ce qui est prévu dans le framework utilisé
 Couplage de ces tests dans un outil de tracking des
modifications (Jenkins, Bamboo)
 Exécution des tests pour chaque commit ou release
 Anticiper tout bug avant d’arriver en prod …
Les tests 2/3
 Tests de code fonctionnels : vérifier de manière brute les
fonctions les plus communes
 Tests d’appels plus complexes
 Scénarios "humains" : Simulation d’un vrai navigateur
 Tests JavaScript, DOM, …
 Possibilité de tests multi-navigateurs avec capture
d’écrans
 Quelques tests HTTP / HTTPS ?
Les tests 3/3
 Métrologie
Si possible, enregistrer le temps d'exécution de chaque
test
Tests de régressions (ou gains) de perfs
Standard de développement
 Un seul mot : lisibilité !
La mise en production
 J’utilise un tag git dûment testé et approuvé
 Je m’en occupe un vendredi soir
 Je fait ça un vendredi soir parce que mon patron insiste
 J’ai préparé un scénario de retour-arrière en cas de
problème
 J’ai vérifié que j’avais une sauvegarde de toutes les
données
BONUS !
Quelques peaux de
bananes avec PHP et
MySQL
Quelques problèmes liés à PHP
 Opcache et les chemins de fichiers
 Taille des entiers
 MAJ des versions de PHP et cycles de release
 Xdebug Gestionnaire d'erreur personnalisé
 Du profiling en prod ? La méthode "Facebook"
Quelques problèmes liés à MySQL
 Tester un site en étant tout seul dessus ...
 Le stockage / le cache
 Gestion des configurations développement et production
 JAMAIS d’accès en dur dans GIT …
 Séparer les fichiers et les bases
 Tuning de la production par un professionnel
Mais aussi …
 Ne jamais sous-estimer la documentation du code !
 Pensez au Wiki interne
Votre TODO
 Ayez plusieurs environnements séparés et cloisonnés
 Versionnez son code
 Les tests unitaires ne sont pas juste pour faire plaisir
 Suivez un standard de syntaxe
 Créez un vrai processus de release
 Bossez avec des gens compétents ^^
Toute cette présentation ne doit pas vous empêcher de respecter le bon adage :
« Release early, release often »
C’est le moment pour les questions !
MERCI !
Pour rester en contact :
odoucet@oxeva.fr
@ezameku
www.olivierdoucet.info

Contenu connexe

Tendances

Presentation Hudson
Presentation HudsonPresentation Hudson
Presentation Hudson
JS Bournival
 

Tendances (20)

NodeJs, une introduction
NodeJs, une introductionNodeJs, une introduction
NodeJs, une introduction
 
Un site web rapide ?
Un site web rapide ? Un site web rapide ?
Un site web rapide ?
 
Optimiser wordpress
Optimiser wordpressOptimiser wordpress
Optimiser wordpress
 
Optimiser WordPress
Optimiser WordPressOptimiser WordPress
Optimiser WordPress
 
Meetup WordPress Lyon #3 : Bien organiser son code dans WordPress.
Meetup WordPress Lyon #3 : Bien organiser son code dans WordPress.Meetup WordPress Lyon #3 : Bien organiser son code dans WordPress.
Meetup WordPress Lyon #3 : Bien organiser son code dans WordPress.
 
Commencer avec le tdd
Commencer avec le tddCommencer avec le tdd
Commencer avec le tdd
 
BBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - PuppetBBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - Puppet
 
Présentation de nodejs
Présentation de nodejsPrésentation de nodejs
Présentation de nodejs
 
Presentation Hudson
Presentation HudsonPresentation Hudson
Presentation Hudson
 
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
 
Java - Exceptions
Java - ExceptionsJava - Exceptions
Java - Exceptions
 
La gestion des exceptions avec Java
La gestion des exceptions avec JavaLa gestion des exceptions avec Java
La gestion des exceptions avec Java
 
Optimisation de son site web
Optimisation de son site webOptimisation de son site web
Optimisation de son site web
 
Jasmine : tests unitaires en JavaScript - Human Talks Grenoble 14.05.2013
Jasmine : tests unitaires en JavaScript - Human Talks Grenoble 14.05.2013Jasmine : tests unitaires en JavaScript - Human Talks Grenoble 14.05.2013
Jasmine : tests unitaires en JavaScript - Human Talks Grenoble 14.05.2013
 
Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascript
 
CasperJs, votre nouveau meilleur ami
CasperJs, votre nouveau meilleur amiCasperJs, votre nouveau meilleur ami
CasperJs, votre nouveau meilleur ami
 
Devoxx java script-1280-720
Devoxx java script-1280-720Devoxx java script-1280-720
Devoxx java script-1280-720
 
Fenetres Avec Double Vitrage Cout
Fenetres Avec Double Vitrage CoutFenetres Avec Double Vitrage Cout
Fenetres Avec Double Vitrage Cout
 
Retours sur le concours Webperf 2010
Retours sur le concours Webperf 2010Retours sur le concours Webperf 2010
Retours sur le concours Webperf 2010
 

En vedette (20)

Herramientas digitales
Herramientas digitalesHerramientas digitales
Herramientas digitales
 
Perceptrón
PerceptrónPerceptrón
Perceptrón
 
Tarea 9
Tarea 9Tarea 9
Tarea 9
 
Presentaciones
PresentacionesPresentaciones
Presentaciones
 
Sol y jesi 3 primera
Sol y jesi 3 primeraSol y jesi 3 primera
Sol y jesi 3 primera
 
Acceso bachillerato
Acceso bachilleratoAcceso bachillerato
Acceso bachillerato
 
Diseño actividad 1
Diseño actividad 1Diseño actividad 1
Diseño actividad 1
 
Www.referate.ro zone touristique-de_bucarest_3fe19
Www.referate.ro zone touristique-de_bucarest_3fe19Www.referate.ro zone touristique-de_bucarest_3fe19
Www.referate.ro zone touristique-de_bucarest_3fe19
 
Relaciones de access
Relaciones de accessRelaciones de access
Relaciones de access
 
Investigacion juridica
Investigacion juridicaInvestigacion juridica
Investigacion juridica
 
Mi plan de vida
Mi plan de vidaMi plan de vida
Mi plan de vida
 
trabajando con las ecuaciones
trabajando con las ecuacionestrabajando con las ecuaciones
trabajando con las ecuaciones
 
equipo 1.Carmen, Magda y Gabby
equipo 1.Carmen, Magda y Gabbyequipo 1.Carmen, Magda y Gabby
equipo 1.Carmen, Magda y Gabby
 
Músicas
MúsicasMúsicas
Músicas
 
Cul es la estructura de una bd
Cul es la estructura de una bdCul es la estructura de una bd
Cul es la estructura de una bd
 
como crear tu propio blog
como crear tu propio blogcomo crear tu propio blog
como crear tu propio blog
 
Clase2 metodos exacavacion_1
Clase2 metodos exacavacion_1Clase2 metodos exacavacion_1
Clase2 metodos exacavacion_1
 
Presentacion de sistemas operativos
Presentacion de sistemas operativosPresentacion de sistemas operativos
Presentacion de sistemas operativos
 
Miss bruja
Miss brujaMiss bruja
Miss bruja
 
Diapositiva Ivan Gonzalez
Diapositiva Ivan GonzalezDiapositiva Ivan Gonzalez
Diapositiva Ivan Gonzalez
 

Similaire à ça marchait pourtant en dev

Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php
ALTER WAY
 

Similaire à ça marchait pourtant en dev (20)

Ecrire et déployer une appli PHP maintenable
Ecrire et déployer une appli PHP maintenableEcrire et déployer une appli PHP maintenable
Ecrire et déployer une appli PHP maintenable
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
 
Wordcamp paris 2015 dev-pragmatique-bonnes-pratiques
Wordcamp paris 2015  dev-pragmatique-bonnes-pratiquesWordcamp paris 2015  dev-pragmatique-bonnes-pratiques
Wordcamp paris 2015 dev-pragmatique-bonnes-pratiques
 
Pensez Web-Performances avec WordPress - Une conférence de Julien Oger et Pie...
Pensez Web-Performances avec WordPress - Une conférence de Julien Oger et Pie...Pensez Web-Performances avec WordPress - Une conférence de Julien Oger et Pie...
Pensez Web-Performances avec WordPress - Une conférence de Julien Oger et Pie...
 
AT2010 Principes Integration Continue
AT2010 Principes Integration ContinueAT2010 Principes Integration Continue
AT2010 Principes Integration Continue
 
Octo Technology - Refcard Tests Web front-end
Octo Technology - Refcard Tests Web front-endOcto Technology - Refcard Tests Web front-end
Octo Technology - Refcard Tests Web front-end
 
Octo RefCard test front-end
Octo RefCard test front-endOcto RefCard test front-end
Octo RefCard test front-end
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShop
 
Normandy JUG integration Continue
Normandy JUG integration ContinueNormandy JUG integration Continue
Normandy JUG integration Continue
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!
 
Usine logicielle à Orange Labs
Usine logicielle à Orange LabsUsine logicielle à Orange Labs
Usine logicielle à Orange Labs
 
Industrialisation des développements logiciels
Industrialisation des développements logicielsIndustrialisation des développements logiciels
Industrialisation des développements logiciels
 
Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
 
Accroître la sécurité de son site internet et de Joomla! plus spécifiquement
Accroître la sécurité de son site internet et de Joomla! plus spécifiquementAccroître la sécurité de son site internet et de Joomla! plus spécifiquement
Accroître la sécurité de son site internet et de Joomla! plus spécifiquement
 
Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
 
RefCard Tests sur tous les fronts
RefCard Tests sur tous les frontsRefCard Tests sur tous les fronts
RefCard Tests sur tous les fronts
 
Introduction au DevOps @SfPot 2014
Introduction au DevOps @SfPot 2014Introduction au DevOps @SfPot 2014
Introduction au DevOps @SfPot 2014
 
PHP : écrire et déployer des applications maintenables !
PHP : écrire et déployer des applications maintenables !PHP : écrire et déployer des applications maintenables !
PHP : écrire et déployer des applications maintenables !
 

ça marchait pourtant en dev

  • 1. « Pourtant, ça marchait en dev … » Olivier Doucet Fondateur et Directeur Général d’OXEVA
  • 2. « It works on my laptop »
  • 3. C’est quoi le sujet ?  Anticipation des problèmes avant la mise en production  Quelques exemples que vous avez pu rencontrer …  Organisation et bonnes pratiques pour pallier ces problèmes  Petite sélection des pièges déjà rencontrés sur les technologies PHP / MySQL
  • 4. Qui suis-je ?  Fondateur d’Oxeva, société d’hébergement avec infogérance totale  En charge de l’exploitation depuis dix ans  Expert PHP / MySQL  Animation de conférences et formations
  • 5. Quelques exemples « mon site est super lent. Pourtant, aucun souci en dev » « Le paiement ne fonctionne plus sur mon site e-commerce ! » « mon développeur a voulu modifier cette fonctionnalité super simple et là ça marche pas, ça doit venir du serveur » « la base de données plante sans arrêt »
  • 7. Les environnements  DEV  INTEGRATION / TEST  PREPRODUCTION (Staging)
  • 8. Le versioning  Obligatoire, même avec un seul développeur  Un commit par fonctionnalité  Un message parlant  En français, anglais ou Klingon, mais tout le monde suit la même langue  Utilisation des concepts de branches et tags  Chaque commit va mettre à jour « testing » et va subir des tests https://xkcd.com/1296/
  • 9. Les tests 1/3  Réalisation de tests unitaires avec données de fixtures  Basés sur ce qui est prévu dans le framework utilisé  Couplage de ces tests dans un outil de tracking des modifications (Jenkins, Bamboo)  Exécution des tests pour chaque commit ou release  Anticiper tout bug avant d’arriver en prod …
  • 10. Les tests 2/3  Tests de code fonctionnels : vérifier de manière brute les fonctions les plus communes  Tests d’appels plus complexes  Scénarios "humains" : Simulation d’un vrai navigateur  Tests JavaScript, DOM, …  Possibilité de tests multi-navigateurs avec capture d’écrans  Quelques tests HTTP / HTTPS ?
  • 11. Les tests 3/3  Métrologie Si possible, enregistrer le temps d'exécution de chaque test Tests de régressions (ou gains) de perfs
  • 12. Standard de développement  Un seul mot : lisibilité !
  • 13. La mise en production  J’utilise un tag git dûment testé et approuvé  Je m’en occupe un vendredi soir  Je fait ça un vendredi soir parce que mon patron insiste  J’ai préparé un scénario de retour-arrière en cas de problème  J’ai vérifié que j’avais une sauvegarde de toutes les données
  • 14. BONUS ! Quelques peaux de bananes avec PHP et MySQL
  • 15. Quelques problèmes liés à PHP  Opcache et les chemins de fichiers  Taille des entiers  MAJ des versions de PHP et cycles de release  Xdebug Gestionnaire d'erreur personnalisé  Du profiling en prod ? La méthode "Facebook"
  • 16. Quelques problèmes liés à MySQL  Tester un site en étant tout seul dessus ...  Le stockage / le cache  Gestion des configurations développement et production  JAMAIS d’accès en dur dans GIT …  Séparer les fichiers et les bases  Tuning de la production par un professionnel
  • 17. Mais aussi …  Ne jamais sous-estimer la documentation du code !  Pensez au Wiki interne
  • 18. Votre TODO  Ayez plusieurs environnements séparés et cloisonnés  Versionnez son code  Les tests unitaires ne sont pas juste pour faire plaisir  Suivez un standard de syntaxe  Créez un vrai processus de release  Bossez avec des gens compétents ^^ Toute cette présentation ne doit pas vous empêcher de respecter le bon adage : « Release early, release often »
  • 19. C’est le moment pour les questions !
  • 20. MERCI ! Pour rester en contact : odoucet@oxeva.fr @ezameku www.olivierdoucet.info

Notes de l'éditeur

  1. Les problèmes rencontrés en production auraient pu, dans la très grande majorité des cas, être anticipés en amont
  2. C’est super compliqué mais on s’en fout !
  3. DEV : Un pour chaque développeur avec sa BDD séparée, outils de debugging, logs verbeux, etc. Intégration : on fusionne le code de chacun et on lance les tests Préproduction (staging) : proche de l'environnement de production : réglage de l'appli en PROD, donc pas de debug / logs minimum, configuration serveur ISO à la prod (versions des logiciels, etc.)
  4. Pas de commit « jour », « heure », ou « quand j’y pense » Savoir quel commit casse quoi
  5. 7 MIN EN ARRIVANT ICI On pourrait parler de la méthodo projet « test driven » … mais non
  6. JS, calques visibles, etc. Penser à une commande complète pour du ecommerce ! Utiliser les api de test données par les marchands Cf bugs de callbacks Screenshot : faire ça avec PhantomJS + ImageMagick « compare »
  7. Avec ça, attention lorsque vous changez le serveur de dev ("chouette les tests sont beaucoup plus rapides maintenant")
  8. « coding standard » : Pour rendre tout ça lisible lorsque l'équipe s'agrandit, on choisit un coding standard et on s'y tient. Indentation : 2 espaces, 4, 8 ou tab ? Le premier troll du développeur
  9. AVANT 13 MINUTES Si vous cherchez un moment avec trafic creux, le meilleur moment est en fait le dimanche soir tard ou lundi matin.
  10. 17min grand max !
  11. Xdebug: : grosse influence sur les perfs, donc tests de charge complètement erronés (attention aux options de compilation de PHP qui peuvent changer son comportement, notamment avec les histoires d'accents dans les images ou l'encodage des fichiers PHP) Gestion des erreurs => agréger les erreurs ? plutôt qu'un log de 20Go ... => jamais lu en fichier, puis oublié, puis "comment exploser l'usage disque" Méthode FB : profiler 1/1000e des requêtes et remonter le tout dans une interface unifiée.
  12. la puissance de son ordi de test Serveur perso i7-3770 @ 3.4 Ghz (4 cores) => parfois plus rapide qu'un serveur de prod (qui compensera avec plus de cores pour plus de traitement en parallèle) Tuning et (et l’intérêt d’une préproduction identique)
  13. est tellement pratique. Evite de vous faire déranger pendant les vacances car "on sait pas où est tel truc".
  14. 50% du temps de dev devrait être assignés aux tests