Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Fathi Bellahcene

.Net m'a tuer!

[Fakes Framework] : Comment tester unitairement le code Legacy Part 1/4

 

Le “Fakes Framework”

Cela fait quelques temps que je regarde le Fakes Framework sous tous ses angles et je doit dire que je suis passé par plusieurs états:

Tout d’abord, j’étais très enthousiaste : les Shims apportaient une réel plus value par rapport aux framework existant (MoQ et  RhinoMock par exemple). On avait la possibilité de produire du code avec le design que l’on voulait sans être contraint par l’écriture des tests unitaires.

Ensuite, un peu de déception: l’utilisation de préfixe (Shims & Stubs) et de suffixe (les types des params) éloignent l’écriture des tests du code métier. le fait que les classes soient générées rend le réfactoring pénible car on doit tout régénérés à chaque modification. Sans oublier que le temps de compilation est rallongé. La puissance des Shims mis dans les mains de développeurs pas sensible à la qualité du design ne m’enchante gère: on va pouvoir faire du code crade ET le tester : on perd donc un des aspects positif (et certainement le plus important) du TDD qui est justement de forcer les développeurs à respecter un certains nombre de bonnes pratiques: des méthodes courtes et ayant une unique tâche (SRP) des classes découplés (DIP), l’utilisation d’interfaces (IBP)…

Pour résumer en une phrase:

Un grand pouvoir implique de grandes responsabilités

A partir de là, je me suis poser la question suivante: comment utiliser proprement le Fakes Framework lorsque l’on doit traiter du code Legacy.

Pourquoi cette question?

  • Il ne faut pas se voiler la face : la majorité du code que j’ai rencontré dans ma vie n’est pas (ou très peu) testé. Le TDD ne s’applique pas et je n’ai pas connaissance d’une méthode permettant de traiter le code Legacy.
  • Parce qu'avec l’arrivé des méthodes Agile, faire du développement qui implique d’accepter le changement donc de supporter de gros refactoring doit être testé (sinon c’est la catastrophe assuré)
  • Parce que je reste persuadé que le Fakes Framework est un formidable outil qui est en mesure de traiter ces problèmes et qu’il ne reste plus qu’a trouver la bonne méthode: on ne doit pas jetter le bébé avec l’eau du bain.

Quel est le problème posé par le code Legacy?

On pourrait définir le code Legacy de la manière suivante:

Un code crade, peu documenté, pas testé, fait par des développeurs qui ne sont plus présent dans la société et qui n’a pas de specs à jours….MAIS qui fonctionne!

Donc, si on souhaite le tester, on doit d'abord le modifier pour le rendre testable(réduire la taille des méthodes, casser le couplage,… ) mais si on fait ca, on risque d’introduire des bugs sans s’en rendre compte car on a pas de tests unitaires pour s’assurer que l’on ne casse rien.

C’est donc le serpent qui se mord la queue:

 

Le “Fakes Framework” permet une approche qui pourrait résoudre ce problème, en combinant les nouvelles possibilités offertes par les Shims avec les Stubs. Ca donnerai ca:

  1. On utilise les Shims pour tester sans modifier le code Legacy jusqu’a ce qu’il soit totalement couvert.
  2. On ré-factorise le code Legacy avec la garantie que l’on n’introduit pas de bugs car on a des tests unitaires
  3. On remplace les Shims par des Stubs: parce que les Shims c’est dangereux et que tant qu’il nous reste des Shims, on a potentiellement des défaut de design dans notre programme.
  4. une fois tout nos Shims supprimés: on se retrouve dans une situation proche de celle qu’apporte le TDD : code testé ET de qualité.

Alors bien sûr, la théorie c’est bien beau mais ca donne quoi concrètement? Je vous propose donc d’appliquer cette méthode sur un exemple et de voir avec vous ce que cela donne.

 

A suivre…

Vous aurez donc deux blog-post avec les contenu suivant:

Part 2/3 : Présentation de l’exemple et appliquation des Shims

Part 3/3 : Refactoring et application des Stubs et conclusion

 

@Bientôt!

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: lundi 17 décembre 2012 11:42 par fathi

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01