code retreat

41
CODE RETREAT 8 JUIN 2015 Charles Bouttaz @CharlesBout Emilien Pecoul @Oua Haïkel Guémar @hgue

Upload: emilien-pecoul

Post on 15-Jan-2017

374 views

Category:

Engineering


1 download

TRANSCRIPT

Page 1: Code retreat

CODE RETREAT8 JUIN 2015

Charles Bouttaz @CharlesBouttaz Emilien Pecoul @Ouarzy

Haïkel Guémar @hguemar

Page 2: Code retreat

MERCI SPONSORS!

Page 3: Code retreat

PRINCIPEItération 1 heureNouvelles contraintes par itérationSortir de sa zone de confortVous n’êtes pas au boulotC’est un lieu d’apprentissage avant toutAmusez vous!

Page 4: Code retreat

ITÉRATION 1• Pas de Pair Programming• Pas de TU

Mais…

• Un livre surprise à gagner pour le premier!

Page 5: Code retreat

ITÉRATION 1.0Initialisation

• Projet console• Un fichier en entrée• Un fichier en sortie• Avoir la même chose dans les 2 fichiers

Page 6: Code retreat

ITÉRATION 1.1DNA 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)

Page 7: Code retreat

ITÉRATION 1.1Input.txt >> ATUGACRE

Output.txt >> ATGAC

Page 8: Code retreat

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 »

Page 9: Code retreat

ITÉRATION 1.2Input.txt >> reverseATGC

Output.txt >> CGTA

Page 10: Code retreat

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 »

Page 11: Code retreat

ITÉRATION 1.3Input.txt >> Count GAGATTACA

Output.txt >> 1

Page 12: Code retreat

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 »

Page 13: Code retreat

ITÉRATION 1.4Input.txt >> insert GA 4GATTACA

Output.txt >> GATTGAACA

Page 14: Code retreat

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 »

Page 15: Code retreat

ITÉRATION 1.5Input.txt >> completeGATTACA

Output.txt >> GATTACACTAATGT

Page 16: Code retreat

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 »

Page 17: Code retreat

ITÉRATION 1.6Input.txt >> tag junk ACAGATTACA

Output.txt >> GATTACA |junk

Page 18: Code retreat

ITÉRATION 1 RÉTRO TIME• Quel est le sujet de ce code retreat ?• Et le gagnant est ?• On ne jette pas le code !

Page 19: Code retreat

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

Page 20: Code retreat

ITÉRATION 2 INTRO• On a bien joué a être au travail• Maintenant prenons le temps de progresser pour de vrai

Page 21: Code retreat

ITÉRATION 2• Aucune contrainte

Page 22: Code retreat

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

Page 23: Code retreat

ITÉRATION 2 RETRO TIME• Quel choix lorsqu’on a plus de contraintes?

Page 24: Code retreat

ITÉRATION 2 OBJECTIF• Choisir librement une solution pour travailler sur du legacy?

Page 25: Code retreat

ITÉRATION 3 INTRORappel 1: SOLID

simple ResponsibilityOpen CloseLiskov Substitution PrincipleInterface SegregationDependency Inversion

Page 26: Code retreat

ITÉRATION 3 INTRORappel 2: 4 rules of simple design (Kent Beck)

Passes its testsMinimizes duplicationMaximizes clarityHas fewer elements

Page 27: Code retreat

ITÉRATION 3• Travail en pair obligatoire• Changement de pilote toutes les 5 min• Supprimer toutes dépendances implicites

Page 28: Code retreat

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

Page 29: Code retreat

ITÉRATION 3 RÉTRO TIME• Quelle différence quand on travail en paire ?

Page 30: Code retreat

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?

Page 31: Code retreat

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

Page 32: Code retreat

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

Page 33: Code retreat

ITÉRATION 4 RETRO TIME• Est-ce que le test fait gagner :

• En temps ?• En qualité ?• En assurance ?

Page 34: Code retreat

ITÉRATION 4 OBJECTIF• Tester après, c’est plus douloureux

Page 35: Code retreat

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

Page 36: Code retreat

ITÉRATION 5 RETRO TIME• C’est quoi la POO ?• C’est quoi la programmation fonctionnelle ?

Page 37: Code retreat

ITÉRATION 5 OBJECTIF• Quelle concept mettre en œuvre pour améliorer son code ?

Même si on arrive à le tester ?

Page 38: Code retreat

ITÉRATION 6 (BONUS)• Refaire l'exercice de la première itération en TDD

Page 39: Code retreat

RÉTRO TIME

Page 40: Code retreat

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 !

Page 41: Code retreat

MERCI