Specifications du code
Documentation du code
Manuel/aide utilisateur
Howtos/tutoriels
...
Une part importante dans la vie d'un logiciel se déroule en dehors du code.
Cela commence souvent par l'écriture des pré-requis et des spécifications, qui seront ensuite convertis en code.
Example avec l'Observatoire Rubin.
Concept de programming by contract: documenter les obligations contractuelles du logiciel dans un format lisible par machine, et documenter les intentions derrière les obligations en anglais/français.
Question: quand doit-on écrire la documentation de son code ?
La dette est d'autant plus grande que l'on attend...
Question: Que doit-on écrire dans son code ?
Tout ce qui pourrait ne pas être évident pour quelqu'un d'autre que l'auteur (y compris l'auteur dans un an).
En pratique, pre et post-conditions pour les méthodes, utilisation prévue des variables, tout ce qui est susceptible d'être mal compris par quelqu'un qui n'aurait pas écrit l'intégralité du code, et pas seulement le bout de fonction que l'on est entrain de lire.
def toto(a, b):
""" worst case scenario
"""
return b[a]
def extract_value_from_dict(key: str, data: dict) -> float:
""" better scenario
"""
return data[key]
Question: une fois le code écrit, est-ce que la documentation va au-delà ?
Souvent oui: écriture d'un manuel utilisateur, tutoriels, publication de la documentation en ligne ou en ligne de commande, ... Cela va dépendre de la portée de votre travail. Identifiez les utilisateurs.
C'est l'étape de Software Design Documentation. Cela peut aller du simple fichier texte, à l'utilisation de logiciel de projet plus complexe, mais cela reste une étape "haut niveau".
L'idée est de décrire avec des mots, des diagrammes, des relations, les différentes parties du futur logiciel.
Automatiser la génération de documentation
def function(arg):
"""
A short description.
A bit longer description.
Parameters
----------
arg : type
description
Returns
-------
type
description
Raises
------
Exception
description
Examples
--------
Examples should be written in doctest format, and
should illustrate how to use the function/class.
>>>
"""
pass
Example pour Atom
Il existe des outils pour facilement extraire la documentation du code, et la formatter pour une publication sur le web, e.g. sphinx (API reference).
Ces outils permettent aussi d'étoffer la documentation, et d'ajouter du contenu autour du code. L'hébergement peut se faire facilement sous GitLab/GitHub (avec intégration continue).
Voir aussi readthedocs ou mkdocs
Mettre la documentation du code en ligne OK. Mais comment on utilise le code ?
La présence de tutoriels est souvent très appréciée. Ces tutoriels peuvent être inclus dans la doc du code (e.g. doctest), ou en plus (e.g. quickstart).
Qui va utiliser le code :
développeurs? internes/externes? scientifiques? grand public?
Quel genre d'utilisation :
implémentation de nouvelles fonctionnalités bas niveau? utilisation d'API haut niveau? Interface graphique ou ligne de commande?
La documentation doit faire l'objet du même traitement que le code lors d'une revue de code.
Ca suppose aussi que les règles sont connues de toutes et tous. L'équipe doit être formée, et les utilisateurs extérieurs doivent pouvoir trouver l'information (e.g. README).
Mieux que 20,000 lignes d'explication, mieux qu'un long discours, l'exemple est un outil puissant pour présenter le fonctionnement du code.
Un bon tutoriel bénéficie du retour de la communauté d'utilisateurs.
Contrairement à d'autres disciplines, l'informatique touche un grand nombre de communautés diverses. Ce qui est trivial pour l'un, ne le sera pas forcément pour l'autre.
Les clichés ont la vie dure. On nous demande souvent d'écrire un code qui marche.
On nous dit que les gens ne lisent pas la doc non plus, et puis il n'y pas de place pour "du blabla" ou des "tutos rigolos" sur la fiche de paie ou l'évaluation annuelle.
Et puis de toute façon, si le chef de projet est relou, on se casse sur un autre projet. Qu'est-ce qu'on a raté ?
Pour être efficace, la gestion de la documentation doit être vu comme un bénéfice pour celui ou celle qui l'écrit.
Et s'il était temps que le travail de documentation soit reconnu comme une partie intégrante du travail de développeur, avec donc des formations ? Et si la qualité du logiciel passait aussi par l'évaluation de sa documentation ?
Ah ah looser, la doc c'est chiant, moi je code tellement bien que tout le monde comprend sans le blabla.