Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Sécuriser une refonte avec le Golden Master Testing

Sécuriser une refonte avec le Golden Master Testing

Lorsque vous arrivez aux urgences, on ne vous attaque pas direct au bistouri, on commence par prendre votre pouls.

Même chose lorsque l'on doit récupérer une application inconnue, on commence par capturer la sortie actuelle ("Golden Master") et on compare les sorties à cette référence après chaque modification du code.

Présentation au Printemps Agile 2015 à Caen.

Pierre-Emmanuel Fringant

March 19, 2015
Tweet

More Decks by Pierre-Emmanuel Fringant

Other Decks in Programming

Transcript

  1. Definition of Legacy Code To me, legacy code is simply

    code without tests. Michael Feathers Working Effectively with Legacy Code
  2. • Longs • Difficile de rejouer à l’identique • Difficile

    de détecter un bug caché • Sujets à l’erreur humaine Tests manuels
  3. • Suppose de connaître l’appli : langage, framework, règles métier

    • Garantissent le fonctionnement interne, pas la sortie Tests unitaires, tests d’intégration
  4. 1. Modifier le code de l’appli 2. Capturer la sortie

    3. Comparer la sortie avec le Golden Master Étapes
  5. Pas de modification Appli == GM Output != GM Attendu

    Inattendu Màj du GM Input Golden Master
  6. Modification inattendue On modifie le code jusqu’à ce que la

    sortie corresponde Output 8 Golden Master 1 == ... Output 4 Golden Master 1 != Golden Master 1 != v4 Output 5 v5 Output 3 Golden Master 1 != v3 v8
  7. Formats de sortie • HTML • JSON / XML •

    Dump d’une base données • Checksum md5 d’un fichier binaire (image, pdf...) • Screenshot (https://github.com/BBC-News/wraith) • stdout dans un fichier texte
  8. Pas forcément dans le même langage que l’application. • Capybara

    https://github.com/jnicklas/capybara • Casperjs http://casperjs.org • N’importe quel morceau de code permettant de capturer une sortie et de la comparer à une autre (wget + diff) Outils
  9. Dosage Que tester dans l’application ? • Chemins critiques pour

    le métier (création de compte, commande, paiement, formulaire de contact) • Périmètre de la refonte (redesign, fonctionnelle) Sur quels éléments baser les vérifications ? • Dump HTML complet • Présence d’un message dans la page
  10. Difficultés • Identifiants : ignorer • Timestamps : ignorer •

    Floats : arrondir • Aléatoire : fixer avec une seed • Services externes : simuler les réponses • Données de test : pouvoir les réinitialiser
  11. Application du client : diagnostic • Refactoring : faille de

    sécurité par injection SQL • Bug : article en cours présent dans “Autres articles” • Mise à jour de stack technique : Framework et langage
  12. Mise à jour vers CakePHP 3 : la correction d’un

    bug dans le framework change la sortie.