développeur junior ici.
Je travaille actuellement seul sur une application web pour un gros client de mon entreprise. J'ai commencé le mois dernier. Le client souhaite au moins 25% de commentaires dans chacun de ses projets logiciels.
J'ai vérifié le code des applications précédentes et voici mes observations:
toutes les variables sont commentées avec leurs noms // nameOfCustomer public String nameOfCustomer
tous les getters et setters sont commentés
Il semble que les développeurs placent autant de commentaires que possible pour atteindre ce seuil de 25%, indépendamment de la qualité et de l'utilité. Mon entreprise me dit que "nous le faisons comme le client le veut".
Je n'en ai pas parlé directement avec le client. Voici mes arguments jusqu'à présent:
Quel est votre avis à ce sujet? Comment dois-je gérer la situation?
Toutes les autres réponses et commentaires ici m'ont vraiment bouleversé, car ils sont si contraires à ma première réaction et si contraires à l'attitude dont j'ai été témoin chez mes collègues. Je voudrais donc décrire une approche alternative, ne serait-ce que pour être la voix dissidente .
Le principe directeur de cette réponse est "Enchantez le client". Faire plaisir au client ne signifie pas seulement répondre à ses attentes; cela signifie comprendre leurs demandes si profondément que vous pouvez interpréter ce qu'ils disent de la façon dont ils le pensent et livrer au-delà de ce qu'ils demandent. D'autres réponses semblent plutôt être guidées par le principe de la conformité malveillante, que je trouve odieux; et en plus, c'est une pratique commerciale douteuse car c'est un mauvais moyen d'obtenir des clients fidèles.
Pour moi, quand j'entends le client dire: "Je veux 25% de commentaires", c'est le début d'un dialogue. Pour moi, il est clair que l'implication ici est "Je veux beaucoup de texte descriptif, afin que les nouveaux arrivants dans cette base de code puissent être rapidement opérationnels", et non "Je veux que vous ajoutiez du hasard dans une certaine catégorie syntaxique" comme d'autres réponses semblent le prendre. Et je prendrais cette demande au sérieux et j'ai l'intention d'écrire de nombreux commentaires descriptifs et utiles, guidant un nouveau venu dans la structure du code, soulignant les décisions d'ingénierie surprenantes et décrivant le raisonnement qui y est entré, et donnant un anglais de haut niveau des descriptions de sections de code compliquées (même si elles n'ont pas de surprises). Cette intention et cette compréhension sont le point de départ de la discussion - c'est-à-dire avant même de commencer à parler. Pour moi, l'implication de la demande est si claire qu'elle n'a même pas besoin de cette clarification; mais si pour vous ce n'est pas clair, vous devriez bien sûr vous connecter avec eux!
D'accord, alors où va la boîte de dialogue si c'est le point de départ? La partie suivante de la boîte de dialogue se présente comme suit:
Voici où je pense que la boîte de dialogue devrait ne pas aller:
Le client est roi. Ainsi, en tant qu'entrepreneur, vous rencontrerez tout ce que le client a défini comme standard de qualité. Ou vous risquez d'être absent.
Cela étant dit, il importe beaucoup de définir les normes de qualité (ici pauvres):
Normes de qualité contractuelles: le code livré doit être conforme, sinon il s'agit d'une rupture de contrat. Pas le choix.
Normes formelles de qualité d'entreprise: même s'il fonctionne parfaitement, le code non conforme sera considéré comme de mauvaise qualité par tant de gens, que vous serez vieux avant de les avoir tous convertis en une meilleure pratique. Pire: des outils bien connus peuvent être utilisés pour automatiser et légitimer de telles mesures de qualité (par exemple cube sonar ). Presque pas de choix.
Critères ad hoc définis par quelques personnes chez le client. Ici, vous pouvez engager la discussion. Il y a de l'espoir :-)
Dans ce dernier cas, il pourrait y avoir une certaine flexibilité, et vous pourriez essayer de faire valoir le point de vue diplomatique. Voici quelques arguments qui contredisent les critères du client:
Mais au lieu de parler contre le mal et d'affronter le client, pourriez-vous simplement promouvoir de meilleures approches:
Si le client n'est toujours pas convaincu, vous pouvez proposer une alternative expérimentale, en utilisant des outils générant automatiquement de la documentation avec des commentaires, comme javadoc
ou doxygen
. Proposer avec cela de déplacer le focus de la quantité (25% du code) vers la qualité (générer un javadoc compréhensible).
Le client souhaite au moins 25% de commentaires dans chacun de ses projets logiciels.
Le client souhaite-t-il vraiment 25% des commentaires ou votre client souhaite-t-il que votre code soit aussi descriptif que possible?
À mon humble avis, le client sait ce qu'il veut, mais pas ce dont il a besoin. Comme un client n'est pas un développeur lui-même et reçoit les commentaires de ses propres employés/clients, votre client ne voit que la partie supérieure de l'iceberg.
Je suppose que votre client a une pseudo-connaissance et veut que le code soit bien documenté et facile et bon marché, et l'outil pour cela est les commentaires (dans son esprit).
Essayez de lui parler et préparez des extraits de code avec du code bien écrit qui s'explique, et un autre mal écrit avec des commentaires. Juste quelques lignes. Montrez-le si nécessaire et utilisez-le comme image pour vos mots.
Parlez à votre client/superviseur/peu importe et essayez de leur dire les principes modernes du contrôle de version (pas besoin de commentaires au début du fichier) et du code propre (je recommande le livre aussi) et résultant ainsi un code auto-explicatif.
Peut-être que si vous pouvez le montrer suffisamment bien et faire comprendre à votre client qu'il veut du code propre, pas seulement des commentaires, vous et votre équipe pouvez écrire un meilleur code (avec beaucoup moins de commentaires) et montrer immédiatement que vous êtes un bon développeur qui mérite d'être conservé .
Cela me rappelle ces réponses stupides de débordement de pile que vous voyez qui consistent en une ligne suivie, littéralement, "de texte ici pour atteindre la limite de caractères minimale".
Lorsque cela se produit, des arguments pourraient être avancés selon lesquels deux groupes de personnes sont en faute:
Les personnes qui mettent la limite - clairement, c'est excessif et empêche les gens de soumettre leurs informations correctement formulées sans ajouter de bruit artificiel
Les personnes qui ont soumis des informations qui n'étaient pas correctement formées, ont ensuite ajouté du bruit artificiel lorsque le système les a invité à ajouter à la place une substance plus réelle
Parfois, une question sera à la fois simple et sur le sujet, et il n'y a pas grand-chose à dire de plus que quelques mots. Cependant, c'est extrêmement rare. Dans presque tous les cas, il y a beaucoup plus de substance à dire. Si rien d'autre, il devrait être aveuglément évident que le moyen de contourner une restriction de caractère ne consiste pas simplement à déverser du bruit aléatoire dans votre message.
Cette situation de commentaires que vous rencontrez est presque la même. Vos développeurs ont accepté une demande de commentaires et l'ont mise en œuvre en déversant du bruit aléatoire dans leur code. La documentation du nom des variables, juste à côté de la déclaration des variables, est vandalisme. Cela n'aurait jamais dû arriver.
"Mais comment pouvons-nous atteindre 25%?" En écrivant de véritables commentaires de fond. Utilisez plus de mots, de meilleurs mots, les meilleurs mots pour documenter l'effet des fonctions. Développez vos explications. Décrivez les cas Edge plus en détail.
Cependant, pour en revenir au point d'origine, le client est partiellement en faute ici aussi, car "25% du code source" est extrêmement arbitraire. En fin de compte, cependant, ils sont le client, alors profitez-en. Mais je veux dire "le meilleur". Pas "pire", comme cela s'est produit jusqu'à présent.
Je ne sais pas quel est le problème avec cette exigence.
Juste par doxygénation de base de votre code, vous êtes probablement déjà à 10% environ. Et prenons encore 5% des commentaires que vous avez écrits pour vous-même (certains écrivent plus, mais 5% semble être une estimation conservatrice si vous n'avez pas fait voeu de silence). À ce stade, c'est environ 15% (oui oui, je sais, 5% de 90% est inférieur à 5%, ne crachez pas). Si votre doxygène est inférieur à 10%, vos méthodes sont peut-être très longues; c'est généralement une bonne idée de les diviser en plus petites (principalement privées/protégées), ou d'utiliser des classes d'assistance plus génériques, etc.
Maintenant, pour le reste du texte de commentaire - placez les considérations de conception et les scénarios d'utilisation dans les commentaires de classe/fichier. Ayez des tableaux ou de l'art ASCII (ou du code doxygen qui génère des choses plus belles quand elles sont rendues). Je ne sais pas, bien sûr, de quoi parle votre projet, mais je pense que vous pouvez le faire sans commentaires fictifs (autres que le passe-partout de doxygénation) et atteindre quelque chose près de 25%.
Si c'est seulement, disons, 20% et non 25% - je suis sûr que le client vient de donner ce chiffre comme quelque chose d'arbitraire, et ça ira. Quoi qu'il en soit, discutez avec eux pour discuter de ce que les commentaires devraient englober; et montrez-leur un exemple de fichier commenté pour voir s’ils sont satisfaits. S'ils le sont, c'est tout, s'ils pensent qu'il manque quelque chose, ils vous diront ce qui manque. Ils ne vont pas vous dire "Nous ne pouvons suggérer aucun commentaire supplémentaire possible mais nous voulons toujours que vous en ajoutiez".
PS - Regardez le code standard des conteneurs Java conteneurs) pour voir comment vous pouvez atteindre, oh, 70% ou plus ...
Avoir 25% de commentaires dans votre code est un excellent objectif à atteindre, et cela rend le client heureux. Maintenant, écrire des commentaires de remplissage de 25% comme "i + = 1; // augmenter i de 1" devrait être en dessous de vous, alors prenez votre temps, écrivez des commentaires utiles et profitez du sentiment que vous êtes réellement payé pour faire quelque chose que vous devriez faire en tous cas.
Nous savons tous que c'est une exigence de merde. La question intéressante ici est
comment réagir?
Je suis un grand partisan de rendre les problèmes visibles. Ici, j'utiliserais le fait que l'argent parle.
Demandez-moi de le faire et je dirai que cela ajoutera 1% à mon offre. Oh, mais cela ajoutera 20% à toutes les futures offres de maintenance.
Ce n'est qu'une fois qu'ils ont demandé pourquoi je leur apprendrais que l'intérêt des bons noms est d'éviter la nécessité de commenter.
En guise d'alternative, je proposerai de créer une documentation visant à obtenir un programmeur de maintenance avec un ensemble défini de qualifications supposées à jour sur les idées derrière le projet. Ou bien, je pourrais vous faire 25% de commentaires. Dépend de vous.
Oui, je comprends votre frustration face à la règle idiote. J'ai lu beaucoup de programmes avec des commentaires inutiles comme
x = x + 1; // add 1 to x
Et je me dis, donc c'est ce que signifie un signe plus !! Wow, merci de me l'avoir dit, je ne le savais pas.
Mais cela dit, le client paie la facture. Par conséquent, vous leur donnez ce qu'ils veulent. Si je travaillais dans un concessionnaire automobile et qu'un client disait qu'il voulait une camionnette, je ne discuterais pas avec lui de la nécessité réelle d'une camionnette et je lui poserais des questions sur ce qu'il attend de lui. Je lui vendrais une camionnette.
D'accord, il y a des moments où ce que les clients disent vouloir et ce dont il a vraiment besoin sont si éloignés que j'essaie de discuter de la question avec lui, peut-être de le convaincre d'accepter quelque chose de plus rationnel. Parfois cela fonctionne, parfois non. Au final, si je ne peux pas changer d'avis, je lui donne ce qu'il veut. S'il revient plus tard et dit: Oh, cela ne répondait vraiment pas aux exigences de mon entreprise, alors nous pouvons lui facturer plus pour faire ce que nous lui avons dit de faire la première fois. Le montant que vous pouvez négocier avec le client dépend de la confiance qu'il accorde à votre expertise, de la façon dont son contrat avec vous s'intègre dans l'organisation et, franchement, de sa tête de taureau.
Ce serait un cas très rare où, en supposant que cela dépendait de moi, je perdrais un contrat parce que je pensais que les exigences étaient mal conçues.
Gardez à l'esprit que les personnes avec lesquelles votre entreprise négocie peuvent ou non être celles qui ont inventé cette règle des 25%. Ce pourrait être une règle qui leur serait imposée d'en haut.
Je vois cinq réponses possibles:
Une. Convainquez votre patron ou quiconque négocie avec le client d'en discuter. Il y a de fortes chances que cela n'accomplisse rien, mais vous pouvez essayer.
Deux. Refusez de le faire. Cela vous fera probablement virer ou, si l'entreprise est d'accord avec vous, vous fera perdre le contrat. Cela semble improductif.
Trois. Écrivez des commentaires inutiles pour remplir l'espace, le genre de commentaires qui répètent simplement ce qui est dans le code et que tout programmeur capable de modifier le code pourrait voir en 2 secondes. J'ai vu beaucoup de commentaires comme celui-ci. Il y a des années, j'ai travaillé pour une entreprise où nous devions mettre des blocs de commentaires devant chaque fonction répertoriant les paramètres, comme:
/*
GetFoo function
Parameters:
name: String, contains name
num: int, the number
add_date: date, the date added
Returns:
foo code: int
*/
int GetFoo(String name, int num, Date add_date)
L'objection selon laquelle de tels commentaires constituent une charge de maintenance car vous devez les tenir à jour n'est pas valable. Il n'est pas nécessaire de les tenir à jour car aucun programmeur sérieux ne les examinera jamais. En cas de doute, assurez-vous de bien faire comprendre à tous les membres de l'équipe que les commentaires inutiles et redondants doivent être ignorés. Si vous voulez savoir quels sont les paramètres d'une fonction ou ce que fait une ligne de code, lisez le code, ne regardez pas les commentaires inutiles.
Quatre. Si vous souhaitez ajouter des commentaires inutiles redondants, il vaut peut-être la peine d'écrire un programme pour les générer. Quelque chose d'un investissement à l'avance, mais pourrait économiser un tas de taper sur la route.
À mes débuts dans cette entreprise, une entreprise pour laquelle je travaillais utilisait un programme annoncé comme "Écrit votre documentation pour vous! Documentation complète pour chaque programme!" Le système exigeait que nous donnions à toutes les variables des noms essentiellement dépourvus de sens, puis que nous ayons un tableau donnant un nom significatif pour chaque variable. Ainsi, par exemple - cela fonctionnait avec COBOL - vous auriez une ligne dans votre programme qui disait
MOVE IA010 TO WS124
et ils généreraient une ligne de "documentation" qui disait
COPY CUSTOMER NAME IN INPUT RECORD TO CUSTOMER-NAME IN WORKING STORAGE
Quoi qu'il en soit, on pourrait sûrement écrire un programme pour générer assez facilement une documentation également sans valeur. Lire une ligne comme
a=b+c
et générer le commentaire
// add b to c and save result in a
Etc.
Cinq. Tirez le meilleur parti de la règle idiote. Essayez d'écrire des commentaires utiles et significatifs. Hé, ça pourrait être un bon exercice.
Oh, au fait, puis-je ajouter que vous pouvez toujours jouer la métrique.
Je me souviens une fois qu'un employeur a dit qu'il allait commencer à mesurer la productivité des programmeurs par le nombre de lignes de code que nous produisions par semaine. Quand on nous a dit cela lors d'une réunion, j'ai dit: Super! Je peux facilement augmenter mon score. Plus d'écriture
x=x+4;
J'écrirai plutôt:
x=x+1;
x=x+1;
x=x+1;
x=x+1;
Boucles? Oubliez ça, je vais copier et coller le code dix fois. Etc.
Donc ici, s'ils comptent des lignes de commentaires, faites en sorte que chaque ligne soit courte et poursuivez l'idée sur la ligne suivante. S'il y a un changement dans ce qui se passe dans les commentaires, ne mettez pas à jour le commentaire existant. Mettez une date dessus, puis copiez le texte entier et écrivez "Mise à jour" et une nouvelle date. Si le client le remet en question, dites-lui que vous pensiez qu'il était nécessaire de conserver l'historique. Etc.
Les métriques arbitraires semblent être une réalité de trop de projets ...
Cela se voit souvent dans des exigences stupides telles qu'une complexité cyclomatique maximale conduisant à un code plus complexe, car les fonctions sont divisées inutilement pour garantir la conformité, ou les fichiers sont divisés car ils dépassent une longueur SLoC arbitraire
Les commentaires doivent ajouter au code et expliquer ce qui se passe (et pas seulement répéter le code!).
Cela dit, si c'est ce que veut votre client et que votre entreprise a accepté de fournir, à moins que votre responsable de l'assurance qualité ne développe une dose de bon sens, vous êtes coincé.
À court terme, il n'y a rien que vous puissiez vraiment faire. Allez-y.
Vous devez également ignorer toutes les idées stupides que je vois dans ce fil sur les protestations agressives passives et les blagues stupides dans le code.
Une fois que vous avez développé une relation de confiance avec le client, il sera mieux placé pour écouter votre raisonnement - vous pourriez constater qu'il s'agit d'une demande stupide d'une personne qui était autrefois influente et qu'elle a très peu de soutien en interne.
Vous ne devez en aucun cas vous y opposer sans l'autorisation du client.
Je suis déçu par le manque d'imagination dont font preuve mes collègues programmeurs ici.
Il me semble que le client a fait des recherches. Il a peut-être lu quelque part que le code de qualité contient généralement environ 25% des commentaires. De toute évidence, il se soucie/s'inquiète de l'entretien plus loin sur la route. Maintenant, comment concrétise-t-il cela dans un document d'exigences qui doit être lié à un contrat? Ce n'est pas facile. Cela peut même être impossible. Pourtant, il veut s'assurer d'en avoir pour son argent et énumère donc certains indicateurs de qualité.
Cela ne me semble pas du tout stupide ou ridicule. Les personnes qui ont écrit les exigences ne sont probablement pas des programmeurs. Ils ont peut-être eu une mauvaise expérience avec un projet antérieur. Leurs gars de maintenance se plaignent: "Rien de tout ça n'est documenté!". Cela résonne dans les oreilles alors qu'ils écrivent de nouvelles exigences pour le prochain projet.
Si vous souhaitez sérieusement documenter votre code et fournir un contexte au groupe de maintenance, cette exigence sera remplie automatiquement. Alors ne soyez pas une chatte à ce sujet!
Au final, que ce soit 21% ou 29%, personne ne s'en souciera. Le client fera examiner vos données par un développeur indépendant et il ferait mieux de comprendre ce que vous avez fait.
J'ai rencontré de nombreux programmeurs qui ne comprennent pas comment existent les gens qui ne travaillent pas actuellement sur ce projet.
Pour eux tout ce qu'ils savent, IS connu de tous.
Si quelqu'un ne sait pas TOUT ce qu'il sait actuellement, alors ces gens sont des "idiots" pour eux.
Avec cette norme, vous pouvez forcer les gens à prendre l'habitude d'écrire des commentaires.
Ils peuvent écrire des commentaires inutiles 99% du temps, mais parfois ils peuvent en fait écrire l'une des choses que "TOUT LE MONDE SAIT", et quelqu'un de nouveau dans l'équipe pourrait en fait ne pas passer 16 heures à chercher un bug (que quelqu'un d'autre a déjà résolu, mais a ensuite été annulé pour une autre raison) qui aurait été évident avec un commentaire à ce stade du code.
Avoir des commentaires sur des lignes avec des bogues non évidents peut également aider à éviter que les futurs programmeurs ne cassent complètement un programme par accident (en particulier lorsque la partie "en cours de rupture" n'est pas évidente lors d'un test rapide).