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
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.
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
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 :
- 1. Se faire une idée de la code base
- 2. Treat Warnings as Errors
- 3. Let's kill some mutants
- 4. Améliorer la lisibilité des tests
- 5. "Approve" everything
- 6. "Properties" everywhere
- 7. Tests d'architecture
- 8. Use Cases
- 9. Tell Don't Ask
- 10. Commands
- 11. Plus d'exceptions
- 12. Event Sourcing
Pour chaque étape :
- une proposition de solution "étape par étape" est proposée (en
C#
uniquement) - il existe 1 branche / étape
À 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 🤩