Les commentaires de TODO ont-ils un sens? [fermé]


86

Je travaille sur un assez gros projet et j'ai la tâche de faire quelques traductions. Il y avait des tonnes d'étiquettes qui n'ont pas été traduites et alors que je cherchais dans le code, j'ai trouvé ce petit morceau de code.

//TODO translations

Cela m'a fait réfléchir sur le sens de ces commentaires pour vous-même (et les autres?), Car j'ai eu l'impression que la plupart des développeurs après avoir terminé un certain code et qu'il fait ce qu'il est censé faire, ils ne le regardent jamais tant qu'ils ne l'ont pas fait. pour le maintenir ou ajouter de nouvelles fonctionnalités. Pour que cela TODOsoit perdu pendant longtemps.

Est-il judicieux d’écrire ces commentaires ou faut-il les écrire sur un tableau blanc / sur un papier / quelque chose d’autre où ils restent au centre des préoccupations des développeurs?


2
(certains) les IDE les suivent. Je les utilise généreusement quand je n'ai pas complètement expliqué la mise en œuvre d'un module, mais le contrat me convient (à moi ou à d'autres) pour poursuivre le développement d'un autre élément connexe.
smp7d

3
TODO pour moi sont plus comme "devrait faire pour optimiser, mais inutile d'expédier"
Jake Berger

8
Chaque fois que je pense à une tâche à effectuer ou à un cas limite à vérifier pour la fonctionnalité actuelle sur laquelle je travaille, j'arrête ce que j'écris (même à mi-déclaration) et j'ajoute un TODO pour elle (même si c'est juste la ligne ci-dessus) . Cela aide à prévenir ces bugs "Oh oui, j'ai même pensé à ça" . Avant de valider la fonctionnalité, je vérifie les TODO. Ils ne se sont jamais engagés, mais depuis que j'ai commencé à le faire, mon nombre de bugs a considérablement diminué .
BlueRaja - Danny Pflughoeft

8
J'utilise toujours #warning TODO: …si je ne veux pas oublier le TODO.
Droitier

2
@WTP: Visual Studio, R #, Netbeans, Eclipse, etc., etc. incluent tous des outils pour afficher tous les TODO dans une solution / un espace de travail. Il n'y a plus besoin de ce vieux bidouillage.
BlueRaja - Danny Pflughoeft

Réponses:


107

J'ai tendance à utiliser des // todocommentaires pour des choses qui doivent arriver, mais je ne peux pas le faire immédiatement.

Je m'assure également de les pourchasser - je les recherche (Visual Studio a une fonctionnalité intéressante dans laquelle il répertorie ces commentaires pour vous) et veille à ce que tout soit fait.

Mais, comme vous le dites, tout le monde n’est pas assidu à leur sujet et, comme beaucoup de commentaires, ils ont tendance à pourrir avec le temps.

Je dirais que c’est plus une préférence personnelle - tant que vous documentez ce qui doit être fait et que vous le poursuivez, peu importe si c’est dans des // todonotes postit ou un tableau blanc (où ils peuvent aussi ne pas finir en action).


18
Eclipse les met en évidence et en répertorie une liste pour vous. Et écrire un commentaire sur TODO pendant que vous avez l’esprit en tête n’est pas une mauvaise idée, même si vous n’avez jamais le courage de le faire. Une âme magnanime peut effectivement parcourir le code à la recherche de choses à faire (OSS).
plaques

4
Resharper a également une belle liste de TODOs, il fonctionne mieux que celui par défaut (recherche dans plus de fichiers).
CaffGeek

Oui, étant donné une liste dans votre IDE, ils sont utiles. Je dirais que leur utilisation est très limitée sinon, car la base de code peut être énorme.
Ingénieur

4
En raison des commentaires pourris, je date toujours et paraphe mes commentaires. Si le commentaire date de quatre contractants il y a trois ans, vous pouvez probablement le supprimer.
user1936

2
Depuis resharper et les dates mentionnées, j'utilise un simple modèle Resharper Live de "// TODO $ user $ ($ date $) -"
dark fader

56

Les IDE modernes reconnaissent les TODOcommentaires et, en tant que tels, ils sont visibles dans leur propre panneau / fenêtre / onglet, ils ne sont donc théoriquement pas perdus (je pense à Eclipse et à Visual Studio, je sais tous les deux assez pour savoir qu'ils le reconnaissent).

Vous pouvez même configurer des mots de commentaire supplémentaires tels que FIXME, BEWAREou tout autre élément que vous souhaitez personnaliser. Cependant, les autres développeurs de votre projet devront personnaliser leur IDE de la même manière.

Maintenant, j’ai écrit "théoriquement" car bien qu’il ne soit pas perdu, le TODO se rapporte plus que souvent à quelque chose qui n’est pas nécessaire au bon fonctionnement de l’application "pour le moment". Et "pour le moment" peut durer de 5 minutes à 5 ans, selon le type / la taille du projet :-)

Enfin, à mon avis, il est toujours plus logique de les inclure dans le code, au bon endroit, en répondant précisément à la question "Où dois-je effectuer le changement" plutôt qu’en dehors du code.

Edit: Comme il est écrit dans l' article de Wikipédia sur les commentaires , y compris la date et le propriétaire du TODO est considéré comme une bonne pratique.


32
Je pense que la date et le propriétaire du TODO sont simplement du bruit. C'est à cela que servent le contrôle de version (et la fonction de blâme) (si vous avez vraiment besoin de l'information).
Sleske

3
Je ne pense pas qu'une wikipedia qui dit "c'est conseillé" puisse être citée; sentir alerte. Mieux lien vers l'article qui prétend cela.
phresnel

@phresnel et bien il y a une citation liée à ce "conseil", donc je n'ai pas ressenti le besoin de le répéter ici, sinon je suis d'accord avec le fait que citer des faits sur wikipedia qui ne s'appuient sur rien pourrait être dangereux
Jalayn

@sleske J'aurais tendance à être d'accord pour garder le bruit minimal MAIS je pense que les IDE ne vous donnent pas automatiquement ces informations du référentiel (sauf erreur, vous devrez comparer manuellement les versions) si vous ne les écrivez pas explicitement .
Jalayn

1
La fonction "annoter" de Visual Studio permet de voir facilement qui a archivé les dernières modifications apportées aux différentes parties du fichier sur lequel vous travaillez et par quel jeu de modifications. Pas parfait, mais dans de nombreux cas (en particulier avec des TODOcommentaires) suffisamment proche pour être utile.
un CVn

13

Cela peut sembler logique, du moins je les utilise parfois. Le point clé consiste à utiliser des balises cohérentes, telles que TODOou FIXMEpermettant de les retrouver facilement avec une simple recherche de texte.

Par exemple, les solutions "quick 'n dirty" sont pratiques à étiqueter, par exemple:

ConnManager.getConnection("mydatabase"); // FIXME: DB name should be configurable

Si le code fait ce qu'il est censé faire, et que personne ne se plaint, le commentaire ne fait aucun mal. Si jamais il est temps d’embellir le code, il est facile de commencer par rechercher des FIXMEétiquettes.


3
"FIXME" et "TODO" ont des significations différentes pour moi. Une traduction, une valeur codée en dur, ou une exception avec ex.printStacktrace()interception est TODO pour moi. D'autre part, FIXME traiterait les exceptions qui se produisent parfois, une fuite de mémoire ou un autre type de bogue que vous avez localisé mais que vous n'avez pas complètement analysé / corrigé.
RDS

10

Dans mon secteur, les développeurs sont encouragés à faire des entrées JIRA (ou etc.) au lieu de faire des commentaires car tout le monde n'a pas la chance de voir les // todoentrées. Mais parfois, dans les grands projets, un attribut personnalisé est défini comme suit:

[AttributeUsageAttribute(AttributeTargets.All, AllowMultiple = true)]
public class DeveloperNote : Attribute
{
    public DateTime EntryDate { get; set; }
    public string Description { get; set; }
    public DeveloperNote(int year, int month, int day, string desc)
    {
        EntryDate = new DateTime(year, month, day);
        Description = desc;
    }
}

Et puis une méthode peut être décorée de cette façon ...

[DeveloperNote(2011, 12, 13, "Make the db connection configurable")]

Et les hauts supérieurs peuvent venir les récolter automatiquement. C'est peut-être excessif pour le simple // todorappel, mais c'est efficace. En outre, cela nécessite une plate-forme .NET.


5
Un commentaire TODO est associé à une ligne de code. Un ticket est plus global et de plus haut niveau, à mon avis. Et je ne pense pas que cette annotation est excessive. TODO a plus de chance de travailler sur plus d'éditeurs.
RDS

6
Votre industrie? Qui est-ce? Je ne connais pas toute une industrie qui encourage l'utilisation de JIRA?!
phresnel

7

TODO est juste un sous-formulaire de commentaire. Les commentaires ont une grande utilité si l’écrivain est habile à savoir quoi transmettre et comment le transmettre. Un sens de l'humour peut également être appliqué ici à petites doses pour ravir les mainteneurs des années plus tard.

L'année dernière, j'ai reçu un appel m'informant qu'une partie de mon code avait été retirée. J'étais plutôt impressionné par le fait qu'il était en production et qu'il avait survécu à la maintenance pendant 16 ans. Sachez donc que votre code pourrait durer très longtemps. Les commentaires sur l’intention, les besoins futurs, etc. peuvent aider dans des années à aider quelqu'un qui examine votre code pour la première fois.


1
Si cela existe depuis plus de dix ans, ce n'est pas vraiment nécessaire et ajouter un TODOcommentaire n'a donc aucun sens.
un CVn

2
Cela suppose qu'ils ne changent jamais. Comme le code, cependant, les commentaires sont susceptibles de changer avec des ajouts, des suppressions et des modifications. Les listes TODO sont plus susceptibles d'être modifiées de cette manière. Je suis certain que depuis la dernière décennie que j'ai touché le code, ses commentaires ont été modifiés.
Pete Mancini

6

Dans mon expérience, cela dépend. Le principal facteur est de savoir si l'équipe est suffisamment disciplinée pour donner suite à ces "petits" commentaires. Si oui, alors ils ont un sens. Si ce n'est pas le cas, ces commentaires ne sont qu'une perte de temps et vous voudrez peut-être examiner d'autres options, telles que les cartes récit.

Personnellement, j'utilise occasionnellement les commentaires TODO, mais ils sont généralement de courte durée et je n'en ai généralement qu'un très petit nombre, un, deux ou trois. Je les utilise plus comme un marqueur dans la base de code que toute autre chose. Si j'attends trop longtemps pour m'occuper d'eux, j'oublie ce que je pensais devoir faire.

Ma préférence serait toujours de ne pas les utiliser et d’utiliser des cartes d’histoires, des arriérés ou similaires. Utilisez un mécanisme pour une tâche.


6

J'avais l'habitude de les écrire dans le passé, mais j'ai constaté que vous ne les suivez généralement pas.

Par conséquent, je ne les utilise maintenant que pour marquer les choses sur lesquelles je veux travailler, juste après avoir terminé mes tâches. Par exemple, j'implémente une nouvelle fonction et remarque qu'une fonction que j'utilise a un petit bogue; Je fais un FIXME pour résoudre ce problème afin d'éviter de dérailler dans ma tâche actuelle.

Pour m'aider, nos builds CI sont configurés pour échouer s'il y a des FIXME dans le code :-).

Si vous remarquez des problèmes potentiels qui ne peuvent pas être résolus immédiatement, ouvrez un ticket / un bug / un problème pour eux. De cette façon, ils peuvent être hiérarchisés comme tous les bugs. Je pense que c'est beaucoup mieux que d'avoir quelques problèmes dans la base de données de bogues et dans le code en tant que TODO.

Vous pouvez éventuellement mettre un TODO avec l'ID de bogue :-).


3

Je pense que les TODOcommentaires, dans une certaine mesure, ont du sens. En particulier si vous travaillez de manière itérative (comme cela est courant dans les magasins agiles et TDD), il y aura des choses dont vous vous rendrez compte qui seront nécessaires bientôt, mais que vous ne voulez pas faire le détour pour les mettre en œuvre immédiatement.

Ce qui devient moche, c'est quand de tels commentaires restent dans la base de code. Bien que vous travailliez activement sur une fonctionnalité, vous pouvez la laisser, mais dès que vous vous apprêtez à la compléter, vous devez vous concentrer sur son élimination. Si vous ne souhaitez pas les remplacer par des codes appropriés, utilisez au moins les fonctionnalités correspondantes. Pour emprunter l'exemple de @ JoonasPulakka, où le code dit initialement

ConnManager.getConnection("mydatabase"); // FIXME: DB name should be configurable

vous pourriez changer cela en quelque chose comme

ConnManager.getConnection(GetDatabaseName());

avec, pour le moment, GetDatabaseName () étant un stub qui retourne simplement la même chaîne que celle avec laquelle vous avez commencé. De cette façon, il y a un point clair pour l'expansion future, et vous savez que toute modification apportée sera reflétée partout où le nom de la base de données est nécessaire. Si le nom de la base de données est même modérément générique, cela peut représenter une amélioration considérable de la facilité de maintenance.

Personnellement, j’utilise mon propre mot-clé au lieu d’être strictement TODO, bien que l’intention reste la même: marquer les éléments qui, je le sais, devront être revisités. De plus, avant de vérifier mon code, je fais une recherche globale du code source pour ce mot clé, choisi de telle sorte qu'il ne devrait normalement pas figurer dans le code. Si c'est trouvé, je sais que j'ai oublié quelque chose, et peut aller de l'avant et le réparer.

Pour ce qui est d'inclure le nom / la signature du programmeur avec le commentaire, je pense que c'est excessif si vous avez un système de contrôle de version du code source (c'est bien ça , non?). Dans ce cas, sa fonction de blâme vous indiquera qui a ajouté le commentaire ou, plus précisément, qui a enregistré en dernier un changement qui a touché le commentaire. Par exemple, dans Visual Studio, cela est facilement accompli en utilisant la fonctionnalité "Annoter" trouvée parmi les fonctionnalités de contrôle de source.


3

Si vous écrivez un TODO ou un FIXME avec l'idée que quelqu'un d'autre le corrigera lorsqu'ils découvriront ce code dans un avenir indéterminé, je dirais que cela ne vous dérange pas. Ils enlèveront le code et encombreront la partie rapport de votre IDE qui collecte ces informations.

Pour être utiles, ils doivent fournir un moyen de marquer votre code pour le (très) futur proche afin que vous puissiez revenir plus rapidement dans le bon état d'esprit. En d'autres termes, vous les placez dans votre code uniquement pour les supprimer le plus rapidement possible.

Tout ce qui a vécu plus longtemps devrait en fait être placé dans votre base de bogues à laquelle il appartient.

Il y a suffisamment de bruit dans nos vies, ne créons pas une nouvelle fanfare de choses qui crient à l'attention alors que c'est nécessaire ailleurs.

Mon 2 cent


2

D'habitude, je ne fais pas de commentaires // TODO, mais je les conserve tous dans un fichier séparé. Je n'arrive toujours pas à trouver / écrire un logiciel en ligne pour les gérer facilement. Les fichiers TODO sont donc toujours les plus utiles pour moi, car lorsque j'ouvre le projet peu de temps après, je ne sais plus quoi faire, puis je regarde dans le fichier TODO et je fais le travail. . J'ai "filename.cpp 354: Recoder ce bla bla bla" et c'est beaucoup plus utile que la recherche // commentaire TODO dans le fichier. J'avais // TODO earler quand j'étais paresseux, mais je viens de supprimer ces vieux // TODO-s du fichier source et je ne les répare pas lorsque le projet fonctionne bien. Je recommande fortement de déplacer tous les // TODO de la source vers un endroit séparé et de les conserver avec d'autres tâches afin que vous puissiez prioriser facilement les tâches. La priorité est vraiment difficile TODO lorsque vous avez tous vos TODO dans divers fichiers et projets.


7
Ensuite, vous insérez une nouvelle fonction dans filename.cpp, par exemple autour de la ligne 200 dans le cas de votre exemple, car il vous serait utile de refactoriser un morceau de code. Tout à coup, votre référence n'a plus de sens. Je préfère que l'IDE me les indique où ils sont en ce moment , pas où ils étaient quand j'ai vu le besoin TODO.
un CVn

Oui, vous avez raison. Parfois, il m'est difficile de trouver la ligne mais je m'en occupe. Et oui. Je peux utiliser les deux pour trouver facilement dans le fichier ou l'IDE mais pour savoir quoi faire à un endroit séparé.
cnd

2

Je trouve ça génial, mais pas seul. Par exemple:

//TODO: ADD MY CLICK EVENT LOGIC
throw new Exception();
//Even a simple messageBox could suffice

Cette approche fonctionne assez bien avec parcimonie. Bien que je dois dire que prendre l'habitude de lancer des exceptions pour vous rappeler de compléter certains codes n'est pas vraiment l'approche la plus professionnelle. Mais cela m'a sauvé dans certains cas où vous pensez que vous avez terminé quelque chose et même écrit que vous avez terminé lorsque vous ne l'avez pas fait.


2
Dans ce cas, vous pouvez simplement lancer une action new NotImplementedException()qui implique une tâche.
CodesInChaos

Dans CI aime utiliser assert(0 && "TODO[cmaster]: Add click event logic");. C'est simple et très efficace pour faire passer le message si j'oublie le TODO ...
cmaster

1

L'énorme avantage de la gestion des commentaires par rapport à l'un des millions d'autres façons de créer une liste de tâches est que les commentaires de la tâche sont accompagnés du code afin qu'ils ne puissent pas être séparés.

L'endroit le plus approprié pour ce genre de choses est probablement le suivi des problèmes plutôt que le code.


0

Je recommande fortement que chaque TODO ou FIXME soit inscrit dans un journal formel. S'ils ne le sont pas, ils sont facilement consultables et il devrait s'agir d'une phase de chaque itération pour rechercher les TODO et les FIXME en suspens. Celles-ci peuvent ensuite être cataloguées et définies comme solution immédiate, ou l'équipe peut planifier leur réparation au moment opportun.

Enfin, une fois résolus, ils doivent être supprimés - s'ils ne sont pas éliminés de manière systématique une fois résolus, ils perdent leur efficacité.

En bout de ligne: ils sont mieux que de ne pas enregistrer de problèmes du tout, mais vous devez en fait les entretenir.


-1

En fait, IntelliJ vous alertera si vous essayez de valider du code comportant de nouveaux TODO. Donc, vous pouvez toujours interpréter un TODO comme "cela devrait vraiment arriver au moment où je commets".


-1

Quand vous considérez le "TODO" comme une étiquette sémantique pour votre commentaire, je pense qu’ils ont un sens.

Dans les normes de codage de mon entreprise, nous spécifions que les initiales du développeur responsable doivent être incluses dans le TODO ( c’est -à- dire que je taperais "SAA TODO:"). Je pense que cela est utile, du moins en tant que convention, car sinon, la tentation de laisser du code non conforme à la norme TODO à la note du futur développeur sera traitée.

De manière utile, de nombreux IDE peuvent être configurés pour ajouter ces commentaires à une liste de tâches, leur permettant ainsi d'être traités de la même manière pour créer des wrnings sans être oubliés indéfiniment.


-2

Une méthode plus odieuse, mais efficace, est probablement de transformer vos commentaires de tâches en messages de compilateur, de manière à ce que vous et tous les autres les voyiez lorsque le programme est compilé.

à Delphes:

{$message 'todo: free this thing when you know its not going to blow up'}

-4

D'après mon expérience, TODOdevrait être utilisé pour indiquer qu'un morceau de code n'est pas utilisable et dire au lecteur ce qui est nécessaire pour le rendre utilisable (localement ou ailleurs).

TODOles annotations ne doivent pas être utilisées pour indiquer qu'une partie du code serait plus intéressante si elle était modifiée de quelque manière que ce soit. Les exemples incluent le code sale qui serait plus facile à gérer si réécrit ou une fonctionnalité supplémentaire dont personne n'a encore besoin. Ces annotations ont tendance à s'accumuler et à rendre grep TODOdes résultats inutiles.


Est-ce seulement votre avis ou vous pouvez le sauvegarder d'une manière ou d'une autre?
Gnat

C'est mon avis et mes conseils basés sur mon expérience. Certaines personnes utilisent les commentaires TODO pour dire "Je sais comment écrire un bon code, mais je ne le ferai pas parce que je m'en fiche, mais bon, j'ai écrit TODO ici, donc ça montre vraiment que je sais écrire du code en clair".
Martin Jambon
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.