CODE
RETREAT
8 JUIN 2015
Charles Bouttaz @CharlesBouttaz
Emilien Pecoul @Ouarzy
Haïkel Guémar @hguemar
MERCI SPONSORS!
PRINCIPE
Itération 1 heure
Nouvelles contraintes par itération
Sortir de sa zone de confort
Vous n’êtes pas au boulot
C’es...
ITÉRATION 1
•Pas de Pair Programming
•Pas de TU
Mais…
•Un livre surprise à gagner pour le premier!
ITÉRATION 1.0
Initialisation
•Projet console
•Un fichier en entrée
•Un fichier en sortie
•Avoir la même chose dans les 2 f...
ITÉRATION 1.1
DNA Kata, la biotech du futur!
•Supprimer toutes les lettres qui ne sont pas des paires
de bases valides
•Ne...
ITÉRATION 1.1
Input.txt >>
ATUGACRE
Output.txt >>
ATGAC
ITÉRATION 1.2
•Supprimer toutes les lettres qui ne sont pas des paires de
bases valide
•Inversion de la séquence ADN si la...
ITÉRATION 1.2
Input.txt >>
reverse
ATGC
Output.txt >>
CGTA
ITÉRATION 1.3
•Supprimer toutes les lettres qui ne sont pas des paires de
bases valide
•Inversion de la séquence ADN si la...
ITÉRATION 1.3
Input.txt >>
Count GA
GATTACA
Output.txt >>
1
ITÉRATION 1.4
•Supprimer toutes les lettres qui ne sont pas des paires de bases
valide
•Inversion de la séquence ADN si la...
ITÉRATION 1.4
Input.txt >>
insert GA 4
GATTACA
Output.txt >>
GATTGAACA
ITÉRATION 1.5
•Supprimer toutes les lettres qui ne sont pas des paires de
bases valide
•Inversion de la séquence ADN si la...
ITÉRATION 1.5
Input.txt >>
complete
GATTACA
Output.txt >>
GATTACA
CTAATGT
ITÉRATION 1.6
•Supprimer toutes les lettres qui ne sont pas des paires de
bases valide
•Inversion de la séquence ADN si la...
ITÉRATION 1.6
Input.txt >>
tag junk ACA
GATTACA
Output.txt >>
GATTACA
|junk
ITÉRATION 1 RÉTRO TIME
•Quel est le sujet de ce code retreat ?
•Et le gagnant est ?
•On ne jette pas le code !
ITÉRATION 1 OBJECTIF
•Générer du code legacy :
« Du code legacy est du code qui n’est pas couvert par des tests
unitaires ...
ITÉRATION 2 INTRO
•On a bien joué a être au travail
•Maintenant prenons le temps de progresser pour de vrai
ITÉRATION 2
•Aucune contrainte
ITÉRATION 2
•Plusieurs commandes peuvent se cumuler (A traiter par
ordre d’apparition dans le fichier)
•Le fichier input p...
ITÉRATION 2 RETRO TIME
•Quel choix lorsqu’on a plus de contraintes?
ITÉRATION 2 OBJECTIF
•Choisir librement une solution pour travailler sur du legacy?
ITÉRATION 3 INTRO
Rappel 1: SOLID
simple Responsibility
Open Close
Liskov Substitution Principle
Interface Segregation
Dep...
ITÉRATION 3 INTRO
Rappel 2: 4 rules of simple design (Kent Beck)
Passes its tests
Minimizes duplication
Maximizes clarity
...
ITÉRATION 3
•Travail en pair obligatoire
•Changement de pilote toutes les 5 min
•Supprimer toutes dépendances implicites
ITÉRATION 3
•Plusieurs commandes peuvent se cumuler (A traiter par
ordre d’apparition dans le fichier)
•Le fichier input p...
ITÉRATION 3 RÉTRO TIME
•Quelle différence quand on travail en paire ?
ITÉRATION 3 OBJECTIF
•Sensibiliser à l’importance d’une paire quand on modifie du
code non testé
•Identifier le fait que d...
ITÉRATION 4
•Modification de code seulement si couvert par un TU
•Changement de pilotes en ping pong Test
•Ne pas travaill...
ITÉRATION 4
•Plusieurs commandes peuvent se cumuler (A traiter par
ordre d’apparition dans le fichier)
•Le fichier input p...
ITÉRATION 4 RETRO TIME
•Est-ce que le test fait gagner :
•En temps ?
•En qualité ?
•En assurance ?
ITÉRATION 4 OBJECTIF
•Tester après, c’est plus douloureux
ITÉRATION 5
•Pas de if ni de switch en dehors de Factory
•Pas de mutation d'objet
•Modification de code seulement si couve...
ITÉRATION 5 RETRO TIME
•C’est quoi la POO ?
•C’est quoi la programmation fonctionnelle ?
ITÉRATION 5 OBJECTIF
•Quelle concept mettre en œuvre pour améliorer son code ?
Même si on arrive à le tester ?
ITÉRATION 6 (BONUS)
•Refaire l'exercice de la première itération en TDD
RÉTRO TIME
CONCLUSION
•Le legacy ce n’est pas juste le code des autres
•Vision court termiste vs maintenance à long terme
•Comment gé...
MERCI
Prochain SlideShare
Chargement dans…5
×

Code retreat

387 vues

Publié le

Code Retreat Lyon Juin 2015

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

  • Soyez le premier à aimer ceci

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

Aucune remarque pour cette diapositive

Code retreat

  1. 1. CODE RETREAT 8 JUIN 2015 Charles Bouttaz @CharlesBouttaz Emilien Pecoul @Ouarzy Haïkel Guémar @hguemar
  2. 2. MERCI SPONSORS!
  3. 3. PRINCIPE Itération 1 heure Nouvelles contraintes par itération Sortir de sa zone de confort Vous n’êtes pas au boulot C’est un lieu d’apprentissage avant tout Amusez vous!
  4. 4. ITÉRATION 1 •Pas de Pair Programming •Pas de TU Mais… •Un livre surprise à gagner pour le premier!
  5. 5. ITÉRATION 1.0 Initialisation •Projet console •Un fichier en entrée •Un fichier en sortie •Avoir la même chose dans les 2 fichiers
  6. 6. ITÉRATION 1.1 DNA Kata, la biotech du futur! •Supprimer toutes les lettres qui ne sont pas des paires de bases valides •Ne pas utiliser de librairies tierces ou natives de manipulation de chaînes pour des raisons "évidentes" de sécurité et de performance (dixit le CTO)
  7. 7. ITÉRATION 1.1 Input.txt >> ATUGACRE Output.txt >> ATGAC
  8. 8. ITÉRATION 1.2 •Supprimer toutes les lettres qui ne sont pas des paires de bases valide •Inversion de la séquence ADN si la première ligne du fichier est «reverse »
  9. 9. ITÉRATION 1.2 Input.txt >> reverse ATGC Output.txt >> CGTA
  10. 10. ITÉRATION 1.3 •Supprimer toutes les lettres qui ne sont pas des paires de bases valide •Inversion de la séquence ADN si la première ligne du fichier est «reverse » •Compter le nombre d’apparition d’un fragment voulu si la 1ere ligne est « count fragmentVoulu »
  11. 11. ITÉRATION 1.3 Input.txt >> Count GA GATTACA Output.txt >> 1
  12. 12. ITÉRATION 1.4 •Supprimer toutes les lettres qui ne sont pas des paires de bases valide •Inversion de la séquence ADN si la première ligne du fichier est «reverse » •Compter le nombre d’apparition d’un fragment voulu si la 1ere ligne est « count fragmentVoulu » •Insérer un fragment voulu si la 1ere ligne est « insert fragmentVoulu positionInsertion »
  13. 13. ITÉRATION 1.4 Input.txt >> insert GA 4 GATTACA Output.txt >> GATTGAACA
  14. 14. ITÉRATION 1.5 •Supprimer toutes les lettres qui ne sont pas des paires de bases valide •Inversion de la séquence ADN si la première ligne du fichier est «reverse » •Compter le nombre d’apparition d’un fragment voulu si la 1ere ligne est « count fragmentVoulu » •Ne pas utiliser de librairies tierces ou natives de manipulation de chaînes pour des raisons "évidentes" de sécurité et de performance (dixit le CTO) •Insérer un fragment voulu si la 1ere ligne est « insert fragmentVoulu positionInsertion » •Compléter la séquence si la 1ere ligne est « complete »
  15. 15. ITÉRATION 1.5 Input.txt >> complete GATTACA Output.txt >> GATTACA CTAATGT
  16. 16. ITÉRATION 1.6 •Supprimer toutes les lettres qui ne sont pas des paires de bases valide •Inversion de la séquence ADN si la première ligne du fichier est «reverse » •Compter le nombre d’apparition d’un fragment voulu si la 1ere ligne est « count fragmentVoulu » •Ne pas utiliser de librairies tierces ou natives de manipulation de chaînes pour des raisons "évidentes" de sécurité et de performance (dixit le CTO) •Insérer un fragment voulu si la 1ere ligne est « insert fragmentVoulu positionInsertion » •Compléter la séquence si la 1ere ligne est « complete » •Insérer un tag si la 1ere ligne est « tag tagContent fragmentToTag »
  17. 17. ITÉRATION 1.6 Input.txt >> tag junk ACA GATTACA Output.txt >> GATTACA |junk
  18. 18. ITÉRATION 1 RÉTRO TIME •Quel est le sujet de ce code retreat ? •Et le gagnant est ? •On ne jette pas le code !
  19. 19. ITÉRATION 1 OBJECTIF •Générer du code legacy : « Du code legacy est du code qui n’est pas couvert par des tests unitaires » - Michael Feathers •Contexte entrainant du mauvais code: •Enjeu court-termiste •Pression plus ou moins positive •Isolation
  20. 20. ITÉRATION 2 INTRO •On a bien joué a être au travail •Maintenant prenons le temps de progresser pour de vrai
  21. 21. ITÉRATION 2 •Aucune contrainte
  22. 22. ITÉRATION 2 •Plusieurs commandes peuvent se cumuler (A traiter par ordre d’apparition dans le fichier) •Le fichier input peut contenir une séquence simple ou complète •Ajouter 2 lettres X et Y (http://www.maxisciences.com/adn/adn-des-chercheurs-creent- deux-nouvelles-lettres-dans-l-039-alphabet-du- vivant_art32558.html) •Ajouter la commande « simple » qui converti une séquence double en séquence simple •Ajouter la commande « noSynthetic » qui supprime les paire de base X et Y
  23. 23. ITÉRATION 2 RETRO TIME •Quel choix lorsqu’on a plus de contraintes?
  24. 24. ITÉRATION 2 OBJECTIF •Choisir librement une solution pour travailler sur du legacy?
  25. 25. ITÉRATION 3 INTRO Rappel 1: SOLID simple Responsibility Open Close Liskov Substitution Principle Interface Segregation Dependency Inversion
  26. 26. ITÉRATION 3 INTRO Rappel 2: 4 rules of simple design (Kent Beck) Passes its tests Minimizes duplication Maximizes clarity Has fewer elements
  27. 27. ITÉRATION 3 •Travail en pair obligatoire •Changement de pilote toutes les 5 min •Supprimer toutes dépendances implicites
  28. 28. ITÉRATION 3 •Plusieurs commandes peuvent se cumuler (A traiter par ordre d’apparition dans le fichier) •Le fichier input peut contenir une séquence simple ou complète •Ajouter 2 lettres X et Y (http://www.maxisciences.com/adn/adn-des-chercheurs-creent- deux-nouvelles-lettres-dans-l-039-alphabet-du- vivant_art32558.html) •Ajouter la commande « simple » qui convertit une séquence double en séquence simple •Ajouter la commande « noSynthetic » qui supprime les paire de base X et Y
  29. 29. ITÉRATION 3 RÉTRO TIME •Quelle différence quand on travail en paire ?
  30. 30. ITÉRATION 3 OBJECTIF •Sensibiliser à l’importance d’une paire quand on modifie du code non testé •Identifier le fait que du code non testé est souvent fortement couplé (dépandances implicites) •On test avant ou après avoir supprimer ces dépandances?
  31. 31. ITÉRATION 4 •Modification de code seulement si couvert par un TU •Changement de pilotes en ping pong Test •Ne pas travailler sur votre code •Travail en paire obligatoire •Supprimer toutes dépendances implicites
  32. 32. ITÉRATION 4 •Plusieurs commandes peuvent se cumuler (A traiter par ordre d’apparition dans le fichier) •Le fichier input peut contenir une séquence simple ou complète •Ajouter 2 lettres X et Y (http://www.maxisciences.com/adn/adn-des-chercheurs-creent- deux-nouvelles-lettres-dans-l-039-alphabet-du- vivant_art32558.html) •Ajouter la commande « simple » qui converti une séquence double en séquence simple •Ajouter la commande « noSynthetic » qui supprime les paire de base X et Y
  33. 33. ITÉRATION 4 RETRO TIME •Est-ce que le test fait gagner : •En temps ? •En qualité ? •En assurance ?
  34. 34. ITÉRATION 4 OBJECTIF •Tester après, c’est plus douloureux
  35. 35. ITÉRATION 5 •Pas de if ni de switch en dehors de Factory •Pas de mutation d'objet •Modification de code seulement si couvert par un TU •Changement de pilotes en ping pong Test •Travail en paire obligatoire •Supprimer toutes dépendances implicites
  36. 36. ITÉRATION 5 RETRO TIME •C’est quoi la POO ? •C’est quoi la programmation fonctionnelle ?
  37. 37. ITÉRATION 5 OBJECTIF •Quelle concept mettre en œuvre pour améliorer son code ? Même si on arrive à le tester ?
  38. 38. ITÉRATION 6 (BONUS) •Refaire l'exercice de la première itération en TDD
  39. 39. RÉTRO TIME
  40. 40. CONCLUSION •Le legacy ce n’est pas juste le code des autres •Vision court termiste vs maintenance à long terme •Comment gérer du code legacy ? •Commencer dès demain par ne plus en produire !
  41. 41. MERCI

×