Les commentaires sont-ils considérés comme une forme de documentation?

11

Lorsque j'écris de petits scripts pour moi-même, j'empile mon code avec des commentaires (parfois je commente plus que je code). Beaucoup de gens à qui je parle disent que je devrais documenter ces scripts, même s'ils sont personnels, de sorte que si je les vendais, je serais prêt. Mais les commentaires ne sont-ils pas une forme de documentation?

N'est-ce pas:

$foo = "bar"; # this is a comment
print $foo; # this prints "bar"

être considéré comme de la documentation, surtout si un développeur utilise mon code? Ou la documentation est-elle considérée comme étant en dehors du code lui-même?

Dynamique
la source
11
Si vous utilisez un système de génération de documents comme JavaDocs ou Doxygen, les commentaires sont littéralement de la documentation.
Gort le robot
5
YANGNI ( xprogramming.com/Practices/PracNotNeed.html ). Documentez votre code à votre satisfaction. Laissez le client (s'il y en a un) vous payer pour rédiger la documentation à sa satisfaction. Ne vous inquiétez pas de ce que beaucoup de gens à qui vous parlez (sauf s'ils vous paient).
emory
1
De vos 2 commentaires le 2ème est inutile, pourquoi ne pas remplacer $ foo par bar. Si ce n'est pas vrai, le commentaire est faux. Le premier commentaire est faux. C'est une mission.
ctrl-alt-delor
2
Chaque fois que vous souhaitez ajouter un commentaire, changez votre code pour qu'il soit si clair qu'il n'a pas besoin de commentaire. Tout est de la documentation, du code est de la documentation, les commentaires n'ont généralement pas d'informations [supplémentaires] ou sont erronés. Documentez l'intention le quoi (les contrats de code peuvent aider à cela) et le pourquoi. Gardez la documentation proche du code, utilisez les commentaires. Documentation sur les documents: commentaires sur les documents, code clair sur les commentaires.
ctrl-alt-delor
2
YANGNI "vous n'en aurez pas besoin"
Chris S

Réponses:

27

Les commentaires sont définitivement de la documentation. Pour la plupart des projets, les commentaires sont (malheureusement) la principale (sinon la seule) forme de documentation du projet. Pour cette raison, il est très important de bien faire les choses. Vous devez vous assurer que cette documentation reste exacte malgré les modifications de code. Il s'agit d'un problème courant avec les commentaires. Les développeurs les «désaccordent» souvent lorsqu'ils travaillent dans du code familier, ils oublient donc de mettre à jour les commentaires pour refléter le code. Cela peut créer des commentaires obsolètes et trompeurs.

Beaucoup de gens suggèrent de rendre le code auto-documenté. Cela signifie qu'au lieu de commentaires, vous restructurez votre code pour en supprimer le besoin. Cela peut éliminer la plupart des commentaires "quoi" et "comment", mais n'aide pas vraiment avec les commentaires "pourquoi". Bien que cela puisse fonctionner efficacement pour se débarrasser de la plupart des commentaires, il existe encore de nombreuses fois où l'écriture d'un commentaire est le moyen le plus simple et le plus efficace de documenter un morceau de code.

Oleksi
la source
3
"Pour la plupart des projets, les commentaires sont la principale (sinon la seule) forme de documentation du projet." - tentant de déprécier pour cela, mais malheureusement, il doit être admis comme une véritable déclaration. J'espère cependant que ce n'est pas votre intention de prétendre que c'est ainsi que les choses devraient être.
Edward Strange
2
Je ne suis vraiment pas d'accord avec cela, car la seule documentation fiable dont vous disposez est le code source lui-même. Les commentaires et la "documentation" doivent être conservés avec le code, ce qui arrive rarement. La seule source fiable de documentation est donc votre code!
martiert
3
@martiert J'avais l'habitude de ressentir la même chose, mais j'ai trouvé que cela ne fonctionnait pas vraiment aussi bien dans la pratique. Tous ces commentaires «pourquoi» sont beaucoup plus clairs que des commentaires que d'essayer d'extraire les connaissances «pourquoi» du code. Certes, le code d'auto-documentation peut (et devrait) être utilisé pour supprimer la plupart des commentaires, mais parfois un commentaire est le moyen le plus simple, le plus clair et le plus efficace de documenter quelque chose.
Oleksi
3
@martiert Le problème avec le code auto-documenté est qu'il ne permet pas de références à la documentation ailleurs. Certains des meilleurs commentaires dans le code que j'ai jamais vus ont été des références à des articles universitaires qui expliquaient les détails de l'algorithme utilisé ou la sélection des constantes magiques. Aucune quantité d'auto-documentation ne permettra d'éviter le fait que certains documents essentiels sont tout simplement non évidents. Le «pourquoi» tombe souvent dans cette catégorie, et parfois le «comment» aussi.
Donal Fellows
3
Notez également que les commentaires, dans de nombreuses langues, sont utilisés pour générer la documentation réelle ... ils sont donc souvent les mêmes. Voir le MSDN comme exemple.
Steven Evers
12

Ils sont une forme de documentation, mais n'oubliez pas que la documentation est dans l'œil du spectateur ...

  • Pour certains, un code auto-documenté suffit. Mais cela suppose un niveau de détail technique en tant que client. Nous devons être prudents en pensant que cela suffit, car notre ego peut nous dire "C'est évident ce que fait ce code" mais le temps peut prouver le contraire. Cela suppose également que vous connaissiez à l'avance les compétences du lecteur.

  • Pour ceux qui regardent le code source mais avec moins d'expertise technique, les commentaires pourraient être corrects. Mais cela suppose que quelqu'un regarde le code source.

  • Si vous êtes technique, mais que vous n'avez pas le temps de lire tout le code source, un manuel technique pourrait être ce qui est nécessaire.

  • Et si l'utilisateur n'a pas de compétences techniques, mais a juste besoin de savoir ce qui se passe, la documentation utilisateur est ce qu'il faut.

La vraie question est donc qui est votre client? Si vous l'êtes, alors le code ou les commentaires auto-documentés suffisent. Si c'est pour quelqu'un d'autre, vous voudrez peut-être élargir la façon dont vous documentez.

MathAttack
la source
17
Le code d'auto-documentation est un mensonge.
yannis
1
@YannisRizos Plus comme un objectif inaccessible qu'un mensonge pur et simple.
Flame de Ptharien
2
@YannisRizos: vous avez peut-être raison, mais le code qui nécessite beaucoup de commentaires est presque toujours un très mauvais code et pourrait presque toujours être écrit d'une manière qui nécessite moins de commentaires.
Doc Brown
9
@DocBrown dépend. J'ai vu des gens documenter des boucles et j'ai vu des gens affirmer qu'un 100 loc de logique métier était auto-documenté. Le fait est que les commentaires excessifs ne peuvent pas nuire (sauf s'ils sont obsolètes / incorrects), et si je dois choisir entre un code excessif de commentaires et d'auto-documentation, je choisirai toujours le premier. Bien sûr, je préfère de loin les commentaires équilibrés et précis, comme le décrit Oleksi .
yannis
1
@MathAttack La plupart des IDE décents peuvent masquer / plier les commentaires. Mais oui, parfois ils se mettent juste en travers du chemin.
yannis
3

Oui, les commentaires sont une forme de documentation. Qu'il s'agisse ou non d' une documentation utile pour quelqu'un qui doit maintenir ou mettre à jour votre code est une question ouverte.

Je sais que tu le pensais comme un exemple jetable, mais des trucs comme

print $foo; # this prints "bar"

n'est pas utile; il ajoute juste un fouillis visuel. Ne documentez pas l'évidence.

Les commentaires de bloc en tête d'une définition de méthode ou de fonction qui décrivent le but de la fonction ou de la méthode (en termes de haut niveau ), les entrées, les sorties, la valeur de retour (le cas échéant), les exceptions (le cas échéant), les conditions préalables et les postconditions sont utiles, mais seulement dans la mesure où ils indiquent à quelqu'un comment la fonction ou la méthode est censée être utilisée. Ils n'expliquent pas pourquoi la fonction existe.

Si quelqu'un d'autre a besoin de maintenir votre code, vous devez documenter les exigences et la conception quelque part, et cela n'est généralement pas fait dans le code source lui-même.

John Bode
la source
3

Je trouve que s'en tenir à l'approche de Bob Martin à ce sujet, de Clean Code, résout généralement le problème de savoir si vous pensez que vous êtes en train de commenter ou de commenter et de laisser de la documentation:

Nous sommes auteurs. Et une chose au sujet des auteurs, c'est qu'ils ont des lecteurs. En effet, les auteurs sont responsables de bien communiquer avec leurs lecteurs. La prochaine fois que vous écrivez une ligne de code, souvenez-vous que vous êtes un auteur, écrivant pour des lecteurs qui jugeront de vos efforts.

... le rapport entre le temps passé à lire et à écrire est bien supérieur à 10: 1. Nous lisons constamment l'ancien code dans le cadre de l'effort d'écriture de nouveau code.

En d'autres termes, votre code est-il explicite sans la documentation? Il n'y a pas de règle définie (sauf si vous travaillez pour quelqu'un comme Microsoft dont la documentation est accessible au public), il s'agit principalement d'aider le futur lecteur du code qui est souvent vous.

Chris S
la source
2

La documentation doit documenter le pourquoi pas le comment . Le comment devrait être évident dans le code, c'est-à-dire à moins qu'il ne s'agisse d'une astuce d'optimisation obscure ou d'une autre technique spécifique au langage qui ne se produit pas couramment.

Le Why ne devrait probablement pas être dans le code, il devrait être ailleurs comme un backlog de produit, qui est lié pour valider les commentaires avec des identifiants d'histoire qui peuvent être recherchés dans un journal des modifications ou un nom de branche.


la source
1
Les trucs vraiment délicats devraient être dans un article académique (ou, parfois, un brevet).
Donal Fellows
2

Les commentaires sont une forme de documentation. Une forme inférieure et qui suggère que vous avez localisé une zone de votre code qui peut être mieux prise en compte.

Il semble que vous commentiez les choses de manière compulsive. Avoir d'autres options peut être une bonne chose. Je peux penser à trois formes supérieures de documentation:

1) Factorisez mieux votre code. Au lieu d'ajouter un commentaire, extrayez une méthode ou une fonction dont le nom est le texte du commentaire que vous étiez sur le point d'écrire. Le code indique donc ce que votre commentaire était sur le point de dire.

2) Tests. C'est la forme de documentation que je recherche habituellement. Les tests unitaires et les tests d'acceptation sont une documentation évolutive et peuvent être lus facilement si de nombreuses méthodes significatives sont utilisées pour exprimer l'intention, comme au point 1.

3) Pour les scripts, l'option --help. C'est là que vous pouvez devenir fou sur doc. Conservez des exemples, anticipez les besoins de l'utilisateur.

En résumé, si vous êtes enclin à coller un commentaire, vérifiez s'il existe un moyen de communiquer avec le lecteur en structurant mieux le code. Ou existe-t-il un test qui communique pourquoi ce code existe? Si vous avez toujours envie de le commenter, admettez la défaite et faites-le.

Mike Hogan
la source