Sensibilisation au Software Craftsmanship
TDD Lego

@cpoissonnier

Vos attentes ?

Objectifs

Découvrir des bonnes pratiques du génie logiciel

  • Clean Code
  • TDD
  • Refactoring
  • Dette technique
  • Pair-programming

Atelier créé par

Mike Bowler

@mike_bowler

Bryan Beecham

@BillyGarnet

Traduit et adapté par

Isabelle Blaquez

@iblaquez

Alice Barralon

@a_barralon

distribué sous licence Creative Commons CC BY-NC-SA

Ces slides sont très largement inspirées par leur travail, merci à elles !

Software Craftsmanship

Software Craftsmanship

  • Pas seulement des logiciels opérationnels,
     mais aussi des logiciels bien conçus.
  • Pas seulement l'adaptation aux changements,
     mais aussi l' ajout constant de la valeur.
  • Pas seulement les individus et leurs interactions,
     mais aussi une communauté de professionnels.
  • Pas seulement la collaboration avec les clients,
     mais aussi des partenariats productifs.

En tant qu’aspirants Artisans du Logiciel, nous relevons le niveau du développement professionnel de logiciels par la pratique et en aidant les autres à acquérir le savoir-faire. Grâce à ce travail, nous avons appris à apprécier

It’s a lifestyle where developers choose to be responsible for their own careers and for improving their craft, constantly learning new tools and techniques. Software Craftsmanship is all about putting responsibility, professionalism, pragmatism and pride back into software development

Sandro Mancuso - The Software Craftsman : Professionalism, Pragmatism, Pride

Construire une maison & une personne

Premier atelier

3 minutes

Admirons vos œuvres

Debrief

On démonte !

Valeur métier

Est-ce que le paillasson amène de la valeur ?

Coût

Si chaque picot coûte 1000€, est-ce que ça aurait influencé votre design ?

KISS ( Keep It Simple, Stupid)

vs

YAGNI (You Ain't Gonna Need It)

Introducing abstractions early, with no justification other than “we may need it in the future,” is what makes applications so complicated.

Sandro Mancuso - The Software Craftsman : Professionalism, Pragmatism, Pride

Qu'est-ce qu'un programme parfait ?

Programme parfait

Quelques éléments de réponse :

  • Fonctionne
  • Satisfait les exigences
  • Rapide
  • Peu cher
  • Facile à étendre
  • ...

Programme parfait

Chaque nouveau projet vide est un programme parfait

  • pas de bug
  • infiniment rapide
  • n'a rien coûté
  • implémenté immédiatement
  • facile de rajouter des fonctionnalités
  • facile à maintenir et à comprendre

 

Chaque ajout de code nous éloigne de cet idéal

 

A nous de nous efforcer à tout mettre en œuvre pour atteindre cet idéal

Construire une maison & une personne v2

Second atelier

1 minute

Debrief

On démonte !

Ceci est une maison

(tant que les besoins exprimés ne disent pas le contraire)

TDD

Comment peut-il nous aider à approcher de cet idéal ?

Make them FIRST

  • Fast

  • Isolated

  • Repeatable

  • Self-verifying

  • Timely

3 règles

Écrire du code de production uniquement pour faire passer un test qui échoue

Écrire juste assez de code de test pour démontrer un échec

Écrire juste assez de code de production pour faire passer un test

Refactoring

Un refactoring consiste à changer la structure interne d'un logiciel sans en changer son comportement observable

- Martin Fowler

Clean code that works

- Ron Jeffries

Sans test, le refactoring est trop risqué !

TDD en pratique

Un code maintenable est un code refactoré au préalable

Un nouveau test = un nouveau comportement

Ecrire au plus vite un code qui fait passer les tests

Construire une maison & une personne en TDD

Troisième atelier

Existe-t-il une personne dans le programme ?

Construire une maison & une personne en TDD - Itération 1

Existe-t-il une maison dans le programme ?

Construire une maison & une personne en TDD - Itération 2

Est-ce que la maison est plus haute que la personne ?

Construire une maison & une personne en TDD - Itération 3

Est-ce que la maison est plus large que la personne ?

Construire une maison & une personne en TDD - Itération 4

Est-ce que la personne peut entrer dans la maison ?

Construire une maison & une personne en TDD - Itération 5

Debrief

On démonte !

Construire la maison de mes rêves (sans refactoring)

Quatrième atelier

Règles

  • Une nouvelle exigence toutes les 30 secondes

  • Pas de refactoring (deux briques assemblées ne pourront pas être séparées)

Construire la maison de mes rêves - Exigence 1

La maison doit avoir deux murs connectés

Construire la maison de mes rêves - Exigence 2

La maison doit avoir une fenêtre sur un mur

Construire la maison de mes rêves - Exigence 3

La maison doit être entièrement fermée

Construire la maison de mes rêves - Exigence 4

La maison doit avoir un toit en pente

Construire la maison de mes rêves - Exigence 5

La maison doit avoir une cheminée

Construire la maison de mes rêves - Exigence 6

La maison doit avoir une porte au rez-de-chaussée

Construire la maison de mes rêves - Exigence 7

La maison doit avoir une fenêtre sur un second mur

Construire la maison de mes rêves - Exigence 8

Finalement, la maison doit avoir un toit plat

Je suis un client sympa ... Je vous donne le double du temps !

Debrief


Ne détruisez pas votre maison et mettez la de côté

Cinquième atelier

Construire la maison de mes rêves (avec refactoring)

  • Une nouvelle exigence toutes les 30 secondes

  • Refactoring autorisé

Règles

Construire la maison de mes rêves - Exigence 1

La maison doit avoir deux murs connectés

Construire la maison de mes rêves - Exigence 2

La maison doit être entièrement fermée

Construire la maison de mes rêves - Exigence 3

La maison doit avoir un toit en pente

Construire la maison de mes rêves - Exigence 4

La maison doit avoir une fenêtre sur un mur

Construire la maison de mes rêves - Exigence 5

La maison doit avoir une fenêtre sur un second mur

Construire la maison de mes rêves - Exigence 6

La maison doit avoir une cheminée

Construire la maison de mes rêves - Exigence 7

La maison doit avoir une porte au rez-de-chaussée

Construire la maison de mes rêves - Exigence 8

La maison doit avoir maintenant un toit plat

Debrief

On démonte !

Dette technique

Ce que l'on vient de mettre en évidence

Dette technique

C'est le choix d'emprunter du temps (pour corriger un bug à l'arrache), que l'on devra "rembourser", avec des intérêts .

 

Si on emprunte trop, le projet n'évoluera plus, et on voudra tout réécrire

 

L'absence de dette technique permet donc d'aller plus vite, et surtout d'aller plus loin

Comment combattre la dette technique ?

On peut minimiser la dette technique grace au refactoring

Le refactoring permet d'obtenir une conception simple et évolutive, une conception émergente

TDD est une méthode dirigée par les tests, pour bien concevoir un produit

Boy scout rule

Always leave the code behind
in a better state than you found it

Broken Window Theory

Un défaut/mauvaise pratique dans le code a toujours tendance se répandre dans la base de code

 

Ah, c'est comme ça qu'on fait ? C'est pourri, mais ok, je vais faire pareil

 

Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live

(Ça s'appelle l'empathie et le professionnalisme en fait)

Fear Driven Development

Propreté/propriété du code doit être partagée et collective

Pair building

Sixième atelier

Règles

  • Deux rôles : pilote & co-pilote

  • Le rôle change à chaque itération (ping pong pair-programming)

Règles

1.

Co-pilote écrit un test qui apporte de la valeur sur un post-it

2.

Le pilote construit le minimum pour faire passer le test

3.

Refactoring jusqu'à ce qu'on ait une implémentation satisfaisante

Sujet au choix

  • Personne

  • Animal

  • Plante

  • Véhicule

  • Batiment

  • ...

Exemples de tests

  • Existe-t-il une personne dans le programme ?

  • Existe-t-il une maison dans programme ?

  • La maison est plus haute que la personne ?

  • La maison est plus large que la personne ?

  • La maison a au moins 4 briques de haut ?

  • La personne peut entrer dans la maison ?

  • La maison a une cheminée ?

  • La personne a deux bras ?

Démo !

Debrief

On démonte !

Pair building en équipe

Septième atelier

Règles

  • Chaque équipe (6-8 personnes) travaillent ensemble sur une table

  • Grande construction complexe, composée de petites constructions indépendantes et différentes liées entre elles (zoo, aéroport, parc d'attraction, ...)

TODO LIST

  1. Backlog produit : quelques minutes pour identifier quelques composants à construire

  2. Implémentation : chaque pair construit un composant en TDD puis intègre sa construction au sein du grand projet (au centre de la table)

Démo !

Debrief

On démonte !

Take away

  • Software Craftsmanship : état d'esprit, recherche de la qualité, pousse à la remise en question et l'apprentissage continu
     
  • TDD : permet de faire émerger le design d'un produit
    • Chaque ajout de test doit ajouter de la valeur métier
    • Chaque ajout dans le code de production doit permettre à un test de passer de rouge à vert
       
  • Refactoring : changement interne d'un logiciel, sans en changer son comportement observable. Pratique indispensable pour réduire la dette technique
    • doit être fait sur du code testé pour être fait de manière sûre et sereine
       
  • Dette technique : finit toujours par se payer. En la traitant le plus vite possible, on améliore la rapidité des développements et la qualité du produit

Aller plus loin

Merci