SlideShare une entreprise Scribd logo
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’est un lieu d’apprentissage avant tout
Amusez vous!
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 fichiers
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)
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 première ligne du
fichier est «reverse »
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 première ligne du fichier
est «reverse »
•Compter le nombre d’apparition d’un fragment voulu si
la 1ere ligne est « count fragmentVoulu »
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 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 »
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 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 »
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 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 »
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 » - Michael Feathers
•Contexte entrainant du mauvais code:
•Enjeu court-termiste
•Pression plus ou moins positive
•Isolation
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 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
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
Dependency Inversion
ITÉRATION 3 INTRO
Rappel 2: 4 rules of simple design (Kent Beck)
Passes its tests
Minimizes duplication
Maximizes clarity
Has fewer elements
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 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
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 du code non testé est souvent fortement
couplé (dépandances implicites)
•On test avant ou après avoir supprimer ces dépandances?
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
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
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 couvert par un TU
•Changement de pilotes en ping pong Test
•Travail en paire obligatoire
•Supprimer toutes dépendances implicites
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érer du code legacy ?
•Commencer dès demain par ne plus en produire !
MERCI

Contenu connexe

Similaire à Code retreat

Java-3eme partie.pptx
Java-3eme partie.pptxJava-3eme partie.pptx
Java-3eme partie.pptx
HassanAbdel
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+
ekino
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
Cyrille Grandval
 
11-Concurrence-Section critiques.pdf
11-Concurrence-Section critiques.pdf11-Concurrence-Section critiques.pdf
11-Concurrence-Section critiques.pdf
Patiento Del Mar
 
L'amélioration des tests unitaires par le refactoring
L'amélioration des tests unitaires par le refactoringL'amélioration des tests unitaires par le refactoring
L'amélioration des tests unitaires par le refactoring
Pascal Laurin
 
L'amélioration des tests unitaires par le refactoring
L'amélioration des tests unitaires par le refactoringL'amélioration des tests unitaires par le refactoring
L'amélioration des tests unitaires par le refactoring
MSDEVMTL
 
Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...
Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...
Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...
Pierre-jean Texier
 
TD_complet_reseau__CISCO__Packet Tracer.pdf
TD_complet_reseau__CISCO__Packet Tracer.pdfTD_complet_reseau__CISCO__Packet Tracer.pdf
TD_complet_reseau__CISCO__Packet Tracer.pdf
Ines Ben Hassine
 
testUnitaire (1).pptx
testUnitaire (1).pptxtestUnitaire (1).pptx
testUnitaire (1).pptx
ManalAg
 
Intro archi
Intro archiIntro archi
Intro archi
linuxscout
 
Une architecture agile et testable
Une architecture agile et testableUne architecture agile et testable
Une architecture agile et testable
martinsson
 
C'est quoi, du bon code ?
C'est quoi, du bon code ?C'est quoi, du bon code ?
C'est quoi, du bon code ?
Rémi Lesieur
 
7 astuces pour améliorer vos tests unitaires
7 astuces pour améliorer vos tests unitaires7 astuces pour améliorer vos tests unitaires
7 astuces pour améliorer vos tests unitaires
Pascal Laurin
 
Test unitaire
Test unitaireTest unitaire
Test unitaire
Hamza Ouni
 

Similaire à Code retreat (14)

Java-3eme partie.pptx
Java-3eme partie.pptxJava-3eme partie.pptx
Java-3eme partie.pptx
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
 
11-Concurrence-Section critiques.pdf
11-Concurrence-Section critiques.pdf11-Concurrence-Section critiques.pdf
11-Concurrence-Section critiques.pdf
 
L'amélioration des tests unitaires par le refactoring
L'amélioration des tests unitaires par le refactoringL'amélioration des tests unitaires par le refactoring
L'amélioration des tests unitaires par le refactoring
 
L'amélioration des tests unitaires par le refactoring
L'amélioration des tests unitaires par le refactoringL'amélioration des tests unitaires par le refactoring
L'amélioration des tests unitaires par le refactoring
 
Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...
Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...
Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...
 
TD_complet_reseau__CISCO__Packet Tracer.pdf
TD_complet_reseau__CISCO__Packet Tracer.pdfTD_complet_reseau__CISCO__Packet Tracer.pdf
TD_complet_reseau__CISCO__Packet Tracer.pdf
 
testUnitaire (1).pptx
testUnitaire (1).pptxtestUnitaire (1).pptx
testUnitaire (1).pptx
 
Intro archi
Intro archiIntro archi
Intro archi
 
Une architecture agile et testable
Une architecture agile et testableUne architecture agile et testable
Une architecture agile et testable
 
C'est quoi, du bon code ?
C'est quoi, du bon code ?C'est quoi, du bon code ?
C'est quoi, du bon code ?
 
7 astuces pour améliorer vos tests unitaires
7 astuces pour améliorer vos tests unitaires7 astuces pour améliorer vos tests unitaires
7 astuces pour améliorer vos tests unitaires
 
Test unitaire
Test unitaireTest unitaire
Test unitaire
 

Plus de Emilien Pecoul

Lancer sa carrière en Freelance
Lancer sa carrière en FreelanceLancer sa carrière en Freelance
Lancer sa carrière en Freelance
Emilien Pecoul
 
Consultant: la vie de freelance est elle faite pour moi ?
Consultant: la vie de freelance est elle faite pour moi ?Consultant: la vie de freelance est elle faite pour moi ?
Consultant: la vie de freelance est elle faite pour moi ?
Emilien Pecoul
 
Event Modeling by Example
Event Modeling by ExampleEvent Modeling by Example
Event Modeling by Example
Emilien Pecoul
 
Daily ddd
Daily dddDaily ddd
Daily ddd
Emilien Pecoul
 
Developer entropy
Developer entropyDeveloper entropy
Developer entropy
Emilien Pecoul
 
The software evolution hasn't happened yet
The software evolution hasn't happened yetThe software evolution hasn't happened yet
The software evolution hasn't happened yet
Emilien Pecoul
 
Université EventSourcing CQRS Devoxx fr 2017
Université EventSourcing CQRS Devoxx fr 2017Université EventSourcing CQRS Devoxx fr 2017
Université EventSourcing CQRS Devoxx fr 2017
Emilien Pecoul
 
Event storming
Event stormingEvent storming
Event storming
Emilien Pecoul
 
Pourquoi les evenements sont importants
Pourquoi les evenements sont importantsPourquoi les evenements sont importants
Pourquoi les evenements sont importants
Emilien Pecoul
 
Bref
BrefBref
Mocks vs stubs
Mocks vs stubsMocks vs stubs
Mocks vs stubs
Emilien Pecoul
 

Plus de Emilien Pecoul (12)

Lancer sa carrière en Freelance
Lancer sa carrière en FreelanceLancer sa carrière en Freelance
Lancer sa carrière en Freelance
 
Consultant: la vie de freelance est elle faite pour moi ?
Consultant: la vie de freelance est elle faite pour moi ?Consultant: la vie de freelance est elle faite pour moi ?
Consultant: la vie de freelance est elle faite pour moi ?
 
Event Modeling by Example
Event Modeling by ExampleEvent Modeling by Example
Event Modeling by Example
 
Daily ddd
Daily dddDaily ddd
Daily ddd
 
Developer entropy
Developer entropyDeveloper entropy
Developer entropy
 
The software evolution hasn't happened yet
The software evolution hasn't happened yetThe software evolution hasn't happened yet
The software evolution hasn't happened yet
 
Université EventSourcing CQRS Devoxx fr 2017
Université EventSourcing CQRS Devoxx fr 2017Université EventSourcing CQRS Devoxx fr 2017
Université EventSourcing CQRS Devoxx fr 2017
 
Event storming
Event stormingEvent storming
Event storming
 
Pourquoi les evenements sont importants
Pourquoi les evenements sont importantsPourquoi les evenements sont importants
Pourquoi les evenements sont importants
 
Bref
BrefBref
Bref
 
Mocks vs stubs
Mocks vs stubsMocks vs stubs
Mocks vs stubs
 
Mieux secomprendrebdd
Mieux secomprendrebddMieux secomprendrebdd
Mieux secomprendrebdd
 

Dernier

SRE - Mythes et Réalités - Voxxed 2024.pdf
SRE - Mythes et Réalités - Voxxed 2024.pdfSRE - Mythes et Réalités - Voxxed 2024.pdf
SRE - Mythes et Réalités - Voxxed 2024.pdf
Henri Gomez
 
05_UMT STAR_Vers une indexation de la longévité fonctionnelle en ovin lait
05_UMT STAR_Vers une indexation de la longévité fonctionnelle en ovin lait05_UMT STAR_Vers une indexation de la longévité fonctionnelle en ovin lait
05_UMT STAR_Vers une indexation de la longévité fonctionnelle en ovin lait
Institut de l'Elevage - Idele
 
QCM de révision pour la haute qualité.pdf
QCM de révision pour la haute qualité.pdfQCM de révision pour la haute qualité.pdf
QCM de révision pour la haute qualité.pdf
ffffourissou
 
S210-S-27.04-chaudiere-à-vapeur bilan thermique
S210-S-27.04-chaudiere-à-vapeur bilan thermiqueS210-S-27.04-chaudiere-à-vapeur bilan thermique
S210-S-27.04-chaudiere-à-vapeur bilan thermique
ALIIAE
 
01_UMT STAR_étude de la résilience et des compromis entre résilience et effic...
01_UMT STAR_étude de la résilience et des compromis entre résilience et effic...01_UMT STAR_étude de la résilience et des compromis entre résilience et effic...
01_UMT STAR_étude de la résilience et des compromis entre résilience et effic...
Institut de l'Elevage - Idele
 
04_UMT STAR_Étude de nouveaux caractères en lien avec la santé et le bien-êtr...
04_UMT STAR_Étude de nouveaux caractères en lien avec la santé et le bien-êtr...04_UMT STAR_Étude de nouveaux caractères en lien avec la santé et le bien-êtr...
04_UMT STAR_Étude de nouveaux caractères en lien avec la santé et le bien-êtr...
Institut de l'Elevage - Idele
 
PROVINLAIT - Bâtiment et bien-être estival
PROVINLAIT - Bâtiment et bien-être estivalPROVINLAIT - Bâtiment et bien-être estival
PROVINLAIT - Bâtiment et bien-être estival
idelewebmestre
 
03_UMT STAR_compromis entre résistance au parasitisme et efficience alimentai...
03_UMT STAR_compromis entre résistance au parasitisme et efficience alimentai...03_UMT STAR_compromis entre résistance au parasitisme et efficience alimentai...
03_UMT STAR_compromis entre résistance au parasitisme et efficience alimentai...
Institut de l'Elevage - Idele
 
Note Agro-climatique et prairies n°4 - Juin 2024
Note Agro-climatique et prairies n°4 - Juin 2024Note Agro-climatique et prairies n°4 - Juin 2024
Note Agro-climatique et prairies n°4 - Juin 2024
idelewebmestre
 
Rénovation des prairies sans labour est-ce possible en bio.pdf
Rénovation des prairies sans labour est-ce possible en bio.pdfRénovation des prairies sans labour est-ce possible en bio.pdf
Rénovation des prairies sans labour est-ce possible en bio.pdf
idelewebmestre
 
Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...
Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...
Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...
Daniel Bedard
 
Alternative - Complément au Tramway et 3 ème lien de la ville de Quebec (PDF)
Alternative - Complément au Tramway  et 3 ème lien de la ville de Quebec (PDF)Alternative - Complément au Tramway  et 3 ème lien de la ville de Quebec (PDF)
Alternative - Complément au Tramway et 3 ème lien de la ville de Quebec (PDF)
Daniel Bedard
 
02_UMT STAR_un nouveau biomarqueur de résilience basé sur les métabolites du ...
02_UMT STAR_un nouveau biomarqueur de résilience basé sur les métabolites du ...02_UMT STAR_un nouveau biomarqueur de résilience basé sur les métabolites du ...
02_UMT STAR_un nouveau biomarqueur de résilience basé sur les métabolites du ...
Institut de l'Elevage - Idele
 

Dernier (13)

SRE - Mythes et Réalités - Voxxed 2024.pdf
SRE - Mythes et Réalités - Voxxed 2024.pdfSRE - Mythes et Réalités - Voxxed 2024.pdf
SRE - Mythes et Réalités - Voxxed 2024.pdf
 
05_UMT STAR_Vers une indexation de la longévité fonctionnelle en ovin lait
05_UMT STAR_Vers une indexation de la longévité fonctionnelle en ovin lait05_UMT STAR_Vers une indexation de la longévité fonctionnelle en ovin lait
05_UMT STAR_Vers une indexation de la longévité fonctionnelle en ovin lait
 
QCM de révision pour la haute qualité.pdf
QCM de révision pour la haute qualité.pdfQCM de révision pour la haute qualité.pdf
QCM de révision pour la haute qualité.pdf
 
S210-S-27.04-chaudiere-à-vapeur bilan thermique
S210-S-27.04-chaudiere-à-vapeur bilan thermiqueS210-S-27.04-chaudiere-à-vapeur bilan thermique
S210-S-27.04-chaudiere-à-vapeur bilan thermique
 
01_UMT STAR_étude de la résilience et des compromis entre résilience et effic...
01_UMT STAR_étude de la résilience et des compromis entre résilience et effic...01_UMT STAR_étude de la résilience et des compromis entre résilience et effic...
01_UMT STAR_étude de la résilience et des compromis entre résilience et effic...
 
04_UMT STAR_Étude de nouveaux caractères en lien avec la santé et le bien-êtr...
04_UMT STAR_Étude de nouveaux caractères en lien avec la santé et le bien-êtr...04_UMT STAR_Étude de nouveaux caractères en lien avec la santé et le bien-êtr...
04_UMT STAR_Étude de nouveaux caractères en lien avec la santé et le bien-êtr...
 
PROVINLAIT - Bâtiment et bien-être estival
PROVINLAIT - Bâtiment et bien-être estivalPROVINLAIT - Bâtiment et bien-être estival
PROVINLAIT - Bâtiment et bien-être estival
 
03_UMT STAR_compromis entre résistance au parasitisme et efficience alimentai...
03_UMT STAR_compromis entre résistance au parasitisme et efficience alimentai...03_UMT STAR_compromis entre résistance au parasitisme et efficience alimentai...
03_UMT STAR_compromis entre résistance au parasitisme et efficience alimentai...
 
Note Agro-climatique et prairies n°4 - Juin 2024
Note Agro-climatique et prairies n°4 - Juin 2024Note Agro-climatique et prairies n°4 - Juin 2024
Note Agro-climatique et prairies n°4 - Juin 2024
 
Rénovation des prairies sans labour est-ce possible en bio.pdf
Rénovation des prairies sans labour est-ce possible en bio.pdfRénovation des prairies sans labour est-ce possible en bio.pdf
Rénovation des prairies sans labour est-ce possible en bio.pdf
 
Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...
Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...
Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...
 
Alternative - Complément au Tramway et 3 ème lien de la ville de Quebec (PDF)
Alternative - Complément au Tramway  et 3 ème lien de la ville de Quebec (PDF)Alternative - Complément au Tramway  et 3 ème lien de la ville de Quebec (PDF)
Alternative - Complément au Tramway et 3 ème lien de la ville de Quebec (PDF)
 
02_UMT STAR_un nouveau biomarqueur de résilience basé sur les métabolites du ...
02_UMT STAR_un nouveau biomarqueur de résilience basé sur les métabolites du ...02_UMT STAR_un nouveau biomarqueur de résilience basé sur les métabolites du ...
02_UMT STAR_un nouveau biomarqueur de résilience basé sur les métabolites du ...
 

Code retreat

  • 1. CODE RETREAT 8 JUIN 2015 Charles Bouttaz @CharlesBouttaz Emilien Pecoul @Ouarzy Haïkel Guémar @hguemar
  • 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. ITÉRATION 1 •Pas de Pair Programming •Pas de TU Mais… •Un livre surprise à gagner pour le premier!
  • 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. 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)
  • 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 »
  • 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. ITÉRATION 1.3 Input.txt >> Count GA GATTACA Output.txt >> 1
  • 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. ITÉRATION 1.4 Input.txt >> insert GA 4 GATTACA Output.txt >> GATTGAACA
  • 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 »
  • 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. ITÉRATION 1.6 Input.txt >> tag junk ACA GATTACA Output.txt >> GATTACA |junk
  • 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. 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. ITÉRATION 2 INTRO •On a bien joué a être au travail •Maintenant prenons le temps de progresser pour de vrai
  • 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. ITÉRATION 2 RETRO TIME •Quel choix lorsqu’on a plus de contraintes?
  • 24. ITÉRATION 2 OBJECTIF •Choisir librement une solution pour travailler sur du legacy?
  • 25. ITÉRATION 3 INTRO Rappel 1: SOLID simple Responsibility Open Close Liskov Substitution Principle Interface Segregation Dependency Inversion
  • 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. ITÉRATION 3 •Travail en pair obligatoire •Changement de pilote toutes les 5 min •Supprimer toutes dépendances implicites
  • 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. ITÉRATION 3 RÉTRO TIME •Quelle différence quand on travail en paire ?
  • 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. 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. 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. ITÉRATION 4 RETRO TIME •Est-ce que le test fait gagner : •En temps ? •En qualité ? •En assurance ?
  • 34. ITÉRATION 4 OBJECTIF •Tester après, c’est plus douloureux
  • 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. ITÉRATION 5 RETRO TIME •C’est quoi la POO ? •C’est quoi la programmation fonctionnelle ?
  • 37. ITÉRATION 5 OBJECTIF •Quelle concept mettre en œuvre pour améliorer son code ? Même si on arrive à le tester ?
  • 38. ITÉRATION 6 (BONUS) •Refaire l'exercice de la première itération en TDD
  • 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. MERCI