Dans mon précédent article, je vous ai parlé de l’utilisation de Gherkin dans la rédaction des cas de test. Gherkin vise à tester le fonctionnel et permet une meilleure lisibilité des cas de test. Mais à quoi sert une bonne lisibilité si personne ne lit ces cas de test ? Si les gens continuent d’aller regarder la documentation (écrite il y a bien longtemps, et potentiellement pas à jour), tout ce beau travail ne sert à rien. Dans ce cas là, pourquoi ne pas regrouper l’étape de spécification et l’étape de conception des tests en une seule étape ? C’est le principe de la documentation vivante.
L’enjeu de la documentation
Avoir une bonne documentation est primordial pour une entreprise : elle représente la connaissance accumulée dans le temps, et sert de pilier dès qu’on se pose une question sur une fonctionnalité créée plusieurs mois auparavant (quel était le but de cette fonctionnalité ? quels étaient ses cas particuliers ? …).
La documentation subsiste aux départs des collaborateurs, et évite que les derniers mois d’un expert ne se transforment en une course pour transmettre tout son savoir aux autres.
L’accueil de collaborateurs est aussi facilitée grâce à une bonne documentation car elle :
- donne un support vers lequel le nouvel arrivant pourra se tourner s’il a des questions
- donne un socle commun à tout le monde, avec le même vocabulaire
- s’assure qu’aucun élément important n’a été oublié pendant l’onboading
La documentation peut aussi être un enjeu stratégique. Dès qu’on travaille sur un système critique, la réglementation nous impose un traçage extrêmement précis des exigences entre les différents sous-systèmes afin d’assurer :
- qu’aucun besoin n’a été oublié
- que toutes les fonctionnalités implémentées répondent au moins à un besoin
Les limites des outils de documentation
Les entreprises ont très bien compris que la documentation était stratégique, mais cela reste un véritable casse-tête à gérer : c’est une activité peu gratifiante et difficile à maintenir au jour le jour (on a tous déjà dit “je mettrai la documentation à jour demain, j’ai une urgence là”, et puis on oublie de le faire le lendemain…).
Mais ce n’est pas tout ! Les outils pour gérer cette documentation sont souvent inappropriés et rendent la tâche encore plus pénible. Voici des exemples d’outils utilisés pour la documentation, et certains de leurs inconvénients :
- les fichiers plats (type Word) : inadaptés pour garder un historique clair et centralisé (les gens créent des copies des fichiers pour garder l’historique, puis stockent ces fichiers à différents endroits).
- les outils de ticketing (type JIRA) : permettent que tout soit regroupé à un seul endroit, mais la recherche dans l’historique est souvent fastidieuse, les tickets sont souvent mal reliés entre eux, et il est quasiment impossible avec ce genre d’outils d’avoir une documentation représentative de l’état actuel de notre logiciel.
- les wikis : permettent de bien regrouper la documentation à un même endroit, et la recherche par mot-clés est fluide. De plus, nous pouvons avoir une idée claire de la spécification de notre outil à tout instant. Mais tout cela dépend de la rigueur et de l’implication des équipes dans la maintenance de cette documentation. Si l’équipe ne joue pas le jeu, alors cette documentation n’est pas à jour, et donc ne sert à rien.

La documentation vivante

Nous passons à un format où le code et la spécification s’alimentent l’un l’autre perpétuellement :

- une documentation centralisée dans la codebase
- une bonne gestion de l’historique grâce aux outils performants des développeurs, comme Git
- une documentation à jour car la spécification et les tests sont imbriqués.
Utilisation du Test Driven Development
- implémenter les tests (qui doivent échouer puisque la fonctionnalité n’a pas été implémentée, ou mise à jour)
- implémenter la fonctionnalité minimale pour que le tests passent
- optimiser l’implémentation tout en s’assurant que les tests continuent de passer

- les tests sont toujours implémentés (alors que souvent, ils sont oubliés)
- le logiciel présente moins de bugs car tout refacto est testé directement
- on code plus vite : cela nécessite un peu d’expérience et de pratique, mais notre code est plus incrémental et nous avons une meilleure confiance en lui grâce aux tests
Contraintes et limites
Ce qu’il faut retenir
- La documentation doit
- être centralisée
- avoir une gestion de l’historique
- être à jour et représentative du logiciel à chaque instant
- La documentation vivante consiste à regrouper les tests et les spécification : les tests et la spécification ne font plus qu’un
- Fortement conseillé de la rédiger avec Gherkin
- Changement complet de paradigme de l’entreprise