Dois-je être gêné si mon ratio LOC / jour est trop élevé? [fermé]

9

Je travaille actuellement sur un projet indépendant, donc je n'ai pas exactement le luxe de tout au long des tests humains ou de la révision du code externe - cependant, je ne vois aucun bogue difficile dans mon code actuel (je les corrige comme je les vois) , et la plupart du temps ce ne sont que des noms de champs erronés et des choses que vous corrigez en une minute ou deux), et je le teste après avoir implémenté une fonctionnalité avant de la pousser. Dernièrement, mon numéro LOC était d'environ 400 par jour (pour mémoire, c'est C #), et je n'implémente pas seulement de nouveaux systèmes, mais aussi réécris des choses que j'ai déjà écrites et corrige quelques bugs.

Dois-je être dérangé? Est-ce le signe que je dois m'arrêter et revoir tout le code que j'ai écrit jusqu'à cette date et le refactoriser?

Max Yankov
la source
comment mesurez-vous LOC? exclut-il ou non le code généré par Visual Studio?
jk.
Avec cette commande bash dans mon dossier de code: (find ./ -name '* .cs' -print0 | xargs -0 cat) | wc -l
Max Yankov
à droite, ce qui est susceptible d'inclure tout code généré, par exemple designer.cs - Je ne me soucierais pas du nombre de lignes que vous écrivez
jk.
Généralement, oui, mais avec cet environnement particulier (moteur de jeu Unity) ce n'est pas le cas.
Max Yankov
1
J'essaie de supprimer autant de lignes de code que je peux raisonnablement avant d'en ajouter d'autres. Travailler sur un système minimal est tellement plus agréable que l'alternative.
Jon Purdy

Réponses:

18

LOC est probablement l'une des mesures les plus utilisées, et en conséquence est probablement l'une des mesures les plus inutiles de la qualité du code et une mesure encore plus inutile de l'effort de programmation.

Oui, c'est une déclaration audacieuse pour moi de faire, et non, je ne peux pas vous indiquer des études prouvant mon point. Cependant, je peux affirmer avec une expérience durement acquise que lorsque vous commencez à vous soucier de la quantité de code que vous avez écrit, vous vous inquiétez probablement des mauvais problèmes.

Vous devez d'abord vous demander ce que vous essayez de mesurer ou de prouver, et si cette preuve est simplement hors d'intérêt, ou pour soutenir une amélioration de la qualité plus large et où vous devez utiliser ces informations pour obtenir l'adhésion de votre équipe. / la direction pour faire quelque chose.

L'une des choses pour lesquelles j'ai tendance à utiliser LOC est un peu de santé mentale. Si je me retrouve à écrire beaucoup de code, je m'intéresse davantage au LOC par méthode, ou au LOC par classe, plutôt qu'au LOC dans l'ensemble. Ces mesures peuvent être des indicateurs que vous devez refactoriser davantage si vous vous sentez un petit trouble obsessionnel-compulsif sur la façon dont votre code devrait être factorisé. Les classes très volumineuses peuvent avoir besoin d'être refactorisées en quelques classes plus petites, et les longues méthodes multilignes peuvent devoir être décomposées en plusieurs méthodes, d'autres classes, ou peuvent même indiquer une répétition qui pourrait être supprimée. Remarquez que j'ai utilisé le mot «pourrait» plusieurs fois là-bas.

La réalité est que LOC ne fournit qu'un indicateur possible et aucune garantie réelle que votre code puisse avoir besoin de changer. La vraie question à se poser est de savoir si le code se comporte comme requis et comme prévu. Si c'est le cas, votre prochaine question est de savoir si vous serez en mesure de maintenir le code facilement et si vous aurez le temps, maintenant ou à l'avenir, d'apporter des modifications au code de travail pour réduire vos frais de maintenance à l'avenir.

Souvent, beaucoup de code signifie que vous aurez plus à gérer plus tard, mais parfois même un code bien factorisé peut s'étendre sur des centaines de lignes de code, et oui, vous pouvez parfois vous retrouver à écrire des centaines de lignes de code en une journée. L'expérience me dit cependant que si je soutiens une sortie de centaines de lignes de nouveau code chaque jour, il y a souvent un risque qu'une grande partie du code soit copiée et collée de manière inappropriée ailleurs, et cela en soi peut indiquer des problèmes avec la duplication et la maintenance, mais là encore ce n'est pas une garantie, j'ai donc tendance à compter sur ce que mon expérience et mon instinct me disent en fonction de la façon dont les tâches à accomplir ont été accomplies.

La meilleure façon d'éviter le dilemme posé dans votre question à mon humble avis est d'oublier le LOC et de refaçonner TOUT le temps. Écrivez d'abord votre test de code, implémentez pour échouer, refactorisez pour passer, puis voyez ce qui peut être refactorisé et ensuite améliorez le code. Vous quitterez la tâche en sachant que vous avez déjà revérifié votre travail, et vous ne serez pas si inquiet à l'idée de vous remettre en question à l'avenir. De manière réaliste, si vous utilisez une approche de test d'abord comme je l'ai décrit, toute mesure LOC / jour sur votre code terminé signifie vraiment que vous avez écrit 3 à 5 fois la quantité mesurée, cet effort étant masqué avec succès par votre refactoring en cours efforts.

S.Robins
la source
1
+1 400 lignes par jour pourraient être une indication d'un problème, malheureusement je pense que la seule façon de le savoir est la révision du code, ce qui est difficile sur une équipe d'un homme
jk.
Merci pour une réponse si détaillée :) Je pense que cela couvre complètement le sujet.
Max Yankov
@jk. Je crois que je réponds à votre commentaire dans le contexte de ma réponse. En solo, la meilleure façon de protéger la qualité de votre code est de vous concentrer sur la façon dont vous écrivez et testez votre code. Une bonne suite de tests associée à une mentalité de refactorisation continue peut être aussi bonne qu'une révision de code à bien des égards. Notez que je ne dis pas de ne rien faire du tout, mais plutôt qu'ils devraient être secondaires pour garantir que votre produit répond aux exigences et a une bonne couverture de test, ce qui permet d'apporter de futures modifications en toute confiance. Ma première question lors de la révision du code est toujours "Où est le test pour cela?" :-)
S.Robins
+1 Bien que vous ne puissiez pas pointer vers des études qui montrent que LOC est une mauvaise métrique, il est facile de trouver des études qui ont rencontré des problèmes car elles ont utilisé LOC comme métrique.
daramarak
Entièrement d'accord que LOC est une métrique inutile. Certains jours, j'écris des centaines de lignes de code et ça va. Certains jours, je net zéro. Certains jours, je ne fais que supprimer le code. :-)
Brian Knoblauch
5

Pas du tout - certains jours, vous corrigez un bug difficile à trouver et ne changez qu'une ligne. D'autres jours, vous ajoutez du nouveau code et écrivez plusieurs milliers de lignes.

LOC LOC ne vous dit rien, sauf que les tâches de cette journée pourraient être accomplies avec 400 lignes de code.

Tom Clarkson
la source
2

Certaines de ces réponses manquent de raison, vous n'utilisez pas LOC comme mesure de la productivité (si vous l'étiez, vous ne vous inquiéteriez pas d'être trop `` productif ''), ce que vous faites en réalité, c'est de vous soucier de la qualité de votre code car le code est l'ennemi c'est une bonne chose à craindre.

Malheureusement, la seule façon de connaître la qualité du code est la révision du code, car vous êtes une équipe individuelle, ce sera difficile, même si vous vous êtes arrêté pour réviser votre code (et vous ne voulez pas vraiment vous arrêter, non?) son propre code ne révélera pas autant qu'un pair examinant votre code. Je suggère d'essayer de demander à quelqu'un d'autre de revoir au moins une partie de votre code afin que vous puissiez savoir si votre 400 LOC / jour produit du charabia ou non. Même un examen indépendant du code d'un jour vous aidera ici

jk.
la source
1

Vous ne devriez pas être dérangé par le nombre de LOC que vous produisez par jour.

Mais vous devriez être dérangé:

  • si votre code n'est pas testé (si par exemple, vous n'avez pas de tests unitaires)
  • si vous commencez à avoir des difficultés à ajouter de nouvelles fonctionnalités ou à changer les fonctionnalités implémentées (cela signifie que votre refactoring n'était pas correct)
  • si votre expérience n'est pas importante et que votre code n'est pas révisé (une paire d'yeux supplémentaire est susceptible de détecter des problèmes)
BЈовић
la source
0

LOC est une mesure `` officielle '' de la productivité, mais les arguments contre sa valeur pourraient être longs (un ORM pourrait générer 50000 lignes de code en 3 minutes, cependant, si la conception de la base de données est incorrecte, tout ce code peut aller dans le bac).

Je vous suggère de mesurer vos progrès en suivant le% de tâches terminées par rapport au temps vs% de tâches planifiées. C'est ça qui compte. Les clients paient pour un code de travail qui fournit une valeur commerciale et non pour les LOC.

Quelques références sur LOC

Aucune chance
la source
mais il n'utilise pas LOC comme mesure de productivité
jk.
Oui, mais comme je l'ai dit, ce n'est pas une mesure précise. Même chose lorsque vous utilisez «valeur moyenne de 1 200» vous obtenez une moyenne mais elle est biaisée et imprécise. Avec LOC, les choses empirent car chaque environnement de développement et chaque ensemble d'outils peuvent refléter des chiffres de productivité différents. Par exemple, les LOC ne peuvent pas comparer la complexité du code, seulement sa longueur. J'ai modifié le message d'origine avec 2 références que vous voudrez peut-être voir.
NoChance
0

Mesurez-vous également le nombre de doublons de code ?

Si le rendement élevé est dû au fait que vous avez beaucoup de copier-coller dans votre code, vous devez vous inquiéter.

Raison: dans le cas où il y avait une erreur dans votre source copier-coller, il est difficile et sujet aux erreurs de corriger toutes les utilisations du copier-coller

k3b
la source
-1

Si vous croyez au beau code fonctionnel, cela devrait être votre seule mesure

"Est-ce que ça coule? Est-ce que c'est beau?"

Nuit noire
la source
3
la seule mesure? comment ça marche? est-ce assez rapide?
jk.
c'est pourquoi j'ai dit fonctionnel :)
Darknight