Refactoring du Bouchonnois

Kata de refactoring pour apprendre des techniques telles que Property-Based Testing, Approval Testing, Strangler, Functional Programming, ....

Ce kata a pour objectif de s'exercer au refactoring sur un code existant afin de :

  • Identifier certains smells dans notre code

  • Comprendre quelles pratiques et/ou outils peuvent nous aider pour surpasser ces smells

  • Pratiquer dans 1 environnement safe en dehors de son code de production

Cloner le code

Le kata est disponible sur github ici.

Le contexte

Nos vaillants chasseurs du Bouchonnois ont besoin de pouvoir gérer leurs parties de chasse. Ils ont commencé à faire développer 1 système de gestion par l'entreprise Toshiba mais ne sont pas satisfaits.

L'entreprise leur parle d'une soit-disante dette technique qui les ralentit dans le développement de nouvelles features...

Les chasseurs comptent sur nous pour améliorer la situation.

Example Mapping

Ils ont fait quelques ateliers avec Toshiba et ont réussi à clarifier ce qui est attendu du système. Pour ce faire, ils ont utilisé le format Example Mapping à découvrir ici.

Voici l'Example Mapping qui a servi d'alignement pour développer ce système.

Version PDF disponible ici.

Facilitation

Pré-requis

Le code est disponible en .NET 7.

Voici la liste des packages utilisés :

  • xUnit

  • FluentAssertions

  • Verify.xUnit

  • FSCheck

  • TngTech.ArchUnitNET.xUnit

  • LanguageExt.Core

  • FluentAssertions.LanguageExt

Guide

Chaque étape comprend :

  • un "guide" de facilitation

  • une proposition de solution "étape par étape"

1 branche / étape avec le code source associé

Objectifs pédagogiques

À travers ces différentes étapes j'ai essayé d'introduire les sujets suivants :

  • Example Mapping

  • Static Code Analysis / Linter

  • Treat Warnings as Errors

  • Mutation Testing

  • Test Data Builders

  • Approval Testing

  • Automated Refactoring

  • Property-Based Testing

  • Tests d'Architecture

  • Test-Driven Development

  • Clean Architecture

  • Domain Driven Design

  • Tell Don't Ask

  • Functional Programming

  • Avoid Primitives

  • Avoid Exceptions

  • Architecture Decision Records

  • Event Sourcing

  • ...

Bon voyage 🤩

Proposition de solution

Afin d'améliorer le code on te propose de suivre les étapes ci-dessous :

page1) Se faire une idée du codepage2) "Treat warnings as errors"page3) Let's kill some mutantspage4) Améliorer la lisibilité des testspage5) "Approve Everything"page6) Définir des propriétéspage7) Tests d'architecturepage8) Use Casespage9) Tell Don't Askpage10) "Avoid Primitives" - Commandspage11) "Avoid Exceptions"page12) "Event Sourcing"

Last updated