BreizhCamp 2015 #BzhCmp
Refactoring avec 1,22% de
code couvert par les tests …
Golden Master Testing
à la rescousse !
Séba...
<me/>
Sébastien Prunier
@sebprunier
Développeur chez SERLI
www.devconferences.org
Nantes JUG
Il était une fois ...
SGBDR
BatchLogiciel de gestion
JSON
SaaS
upload
write
read
Il faut faire la v2 !
Batch
(age = 3 mois)
TODO
v2
Quelques métriques
10 000
lignes de code
Quelques métriques
1
test unitaire
Quelques métriques
1,22%
de code couvert
par les tests
Constat
Je vois du code legacy ...
Comment faire ?
Solution 1
“Tester c’est douter”
Comment faire ?
Solution 2
Tests unitaires, mocks et base
embarquée (HSQLDB)
Comment faire ?
Solution 3
Golden Master Testing
- Déterminer le comportement du programme
- Exécuter avec un large jeu de...
Jeu de données
"Exécuter avec un large jeu de données"
Le jeu de données
"Cool, il y a des recettes en cours !"
SGBDR
Logiciel de gestion
SGBDR
reference
snapshot
Golden Master Test
1 - Création du Golden Master
SGBDR
reference
JSON
Batch
read
write
Golden
Master
~ 70 000 fichiers
Golden Master Test
2 - Copie du batch
SGBDR
reference
JSON
Batch
read
write
Golden
Master
Batch (copy)
copy
Golden Master Test
3 - Exécution de la copie du batch
SGBDR
reference
JSON
Batch
read
write
Golden
Master
Batch (copy)
cop...
Golden Master Test
4 - Comparaison au Golden Master
SGBDR
reference
JSON
Batch
read
write
Golden
Master
Batch (copy)
copy
...
Assertions (1/3)
Guava
TreeTraverser<File>
Assertions (2/3)
AssertJ
assertThat(refactoredFile).hasContentEqualTo(masterFile)
Assertions (3/3)
for (File masterFile :
Files.fileTreeTraverser().preOrderTraversal(masterOutput)) {
File refactoredFile =...
Exécution
couverture > 85%
durée d’exécution ~ 30 sec
Infinitest dans Intellij
Jenkins
Conclusion
Golden Master Test
= approche simple et efficace
The end is near
Merci !
Questions ?
Liens
● http://blog.sebprunier.com/code/testing/golden-master-testing-refactoring/
● https://github.com/google/guava
● htt...
Prochain SlideShare
Chargement dans…5
×

[Breizhcamp 2015] Refactoring avec 1,22% de code couvert par les tests ... Golden Master testing à la rescousse !

737 vues

Publié le

Plus de 10000 lignes de code à refactorer, très peu de tests unitaires, seulement 1,22% de code couvert par les tests ... Voilà le challenge auquel j'ai été récemment confronté !

Voici mon retour d'expérience sur la technique "Golden Master testing" que j'ai utilisée pour sereinement venir à bout de ce refactoring.

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
737
Sur SlideShare
0
Issues des intégrations
0
Intégrations
45
Actions
Partages
0
Téléchargements
6
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

[Breizhcamp 2015] Refactoring avec 1,22% de code couvert par les tests ... Golden Master testing à la rescousse !

  1. 1. BreizhCamp 2015 #BzhCmp Refactoring avec 1,22% de code couvert par les tests … Golden Master Testing à la rescousse ! Sébastien Prunier - @sebprunier
  2. 2. <me/> Sébastien Prunier @sebprunier Développeur chez SERLI www.devconferences.org Nantes JUG
  3. 3. Il était une fois ... SGBDR BatchLogiciel de gestion JSON SaaS upload write read
  4. 4. Il faut faire la v2 ! Batch (age = 3 mois) TODO v2
  5. 5. Quelques métriques 10 000 lignes de code
  6. 6. Quelques métriques 1 test unitaire
  7. 7. Quelques métriques 1,22% de code couvert par les tests
  8. 8. Constat Je vois du code legacy ...
  9. 9. Comment faire ? Solution 1 “Tester c’est douter”
  10. 10. Comment faire ? Solution 2 Tests unitaires, mocks et base embarquée (HSQLDB)
  11. 11. Comment faire ? Solution 3 Golden Master Testing - Déterminer le comportement du programme - Exécuter avec un large jeu de données - Stocker les résultats → Gloden Master - Refactorer, exécuter et comparer au master
  12. 12. Jeu de données "Exécuter avec un large jeu de données"
  13. 13. Le jeu de données "Cool, il y a des recettes en cours !" SGBDR Logiciel de gestion SGBDR reference snapshot
  14. 14. Golden Master Test 1 - Création du Golden Master SGBDR reference JSON Batch read write Golden Master ~ 70 000 fichiers
  15. 15. Golden Master Test 2 - Copie du batch SGBDR reference JSON Batch read write Golden Master Batch (copy) copy
  16. 16. Golden Master Test 3 - Exécution de la copie du batch SGBDR reference JSON Batch read write Golden Master Batch (copy) copy read JSON write
  17. 17. Golden Master Test 4 - Comparaison au Golden Master SGBDR reference JSON Batch read write Golden Master Batch (copy) copy read JSON write compare
  18. 18. Assertions (1/3) Guava TreeTraverser<File>
  19. 19. Assertions (2/3) AssertJ assertThat(refactoredFile).hasContentEqualTo(masterFile)
  20. 20. Assertions (3/3) for (File masterFile : Files.fileTreeTraverser().preOrderTraversal(masterOutput)) { File refactoredFile = new File( masterFile.getPath().replace( masterOutputPath, refactoredOutputPath ) ); assertThat(refactoredFile).exists(); if (masterFile.isFile()) { assertThat(refactoredFile).hasContentEqualTo(masterFile); } }
  21. 21. Exécution couverture > 85% durée d’exécution ~ 30 sec Infinitest dans Intellij Jenkins
  22. 22. Conclusion Golden Master Test = approche simple et efficace
  23. 23. The end is near Merci ! Questions ?
  24. 24. Liens ● http://blog.sebprunier.com/code/testing/golden-master-testing-refactoring/ ● https://github.com/google/guava ● http://joel-costigliola.github.io/assertj/ ● https://plus.google.com/+TheSimpsons

×