Skip to content

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

License

Notifications You must be signed in to change notification settings

ythirion/refactoring-du-bouchonnois

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Refactoring du Bouchonnois

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

  • Identifier certains smells dans notre code
  • Comprendre quelle pratique et/ou outil peuvent nous aider pour surpasser ces smells
  • Pratiquer dans 1 environnement safe en dehors de son code de production

Refactoring du Bouchonnois

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 Inconnus

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.

Refactoring du Bouchonnois

Version PDF disponible ici

Facilitation

Pré-requis

Le code est disponible en C# (.NET 7), java(21), kotlin.

Voici la liste des librairies utilisés / recommandées :

.NET Java Kotlin
xUnit junit Kotest
FluentAssertions assertJ Native kotest asertions
Verify.xUnit approvalTests approvalTests
FSCheck vavr-test kotest-property
TngTech.ArchUnitNET.xUnit archunit archunit
LanguageExt.Core vavr arrow-kt
FluentAssertions.LanguageExt assertj-vavr kotest-extensions-arrow

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

Pour chaque étape :

  • une proposition de solution "étape par étape" est proposée (en C# uniquement)
  • il existe 1 branche / étape

Branches

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 🤩