Combien de lignes de code un développeur C # peut-il produire par mois? [fermé]

21

Un cadre de mon lieu de travail m'a posé la question à mon groupe de développeurs:

Combien de lignes de code un développeur C # peut-il produire par mois?

Un ancien système devait être porté en C # et il aimerait que cette mesure fasse partie de la planification du projet.

D'une source (apparemment crédible), il avait la réponse "10 SLOC / mois " mais il n'était pas satisfait de cela.

Le groupe a convenu que cela était presque impossible à préciser car cela dépendrait d'une longue liste de circonstances. Mais nous pouvions dire que l'homme ne partirait pas (ou ne serait pas très déçu de nous) si nous ne trouvions pas de réponse qui lui conviendrait mieux. Il est donc reparti avec la meilleure réponse de "10 SLOC / jour "

Peut-on répondre à cette question? (désinvolte ou même avec une analyse)

saumon fumé
la source
7
Ces lignes doivent-elles avoir une qualité intégrée? > _>
dr Hannibal Lecter
4
Peut-il s'agir de code généré par ordinateur? Si c'est le cas, je suis presque sûr que je peux entrer dans le préfixe d'alimentation Zetta (10 ^ 21) en lignes, avec le bon matériel. Ça ne fera rien, faites attention ...
GrandmasterB
6
Source crédible: Mois de l'homme mythique.
Martin York
2
Quelle quantité de bois un mandrin peut-il mandrin si une marmotte peut mandrin du bois? Je ne peux pas croire que cette question soit toujours posée! Quoi, c'est 1975? Il y a de bien meilleures questions, comme: "Combien de systèmes l'équipe de développement a-t-elle déployés avec succès cette année?" ou "Combien d'heures par mois ont été économisées en utilisant le système actuel par rapport à avant?" La question doit être de valeur, pas la quantité d'une métrique non pertinente.
Mark Freedman,
3
Il ne faut pas répondre à la question car elle est basée sur de fausses hypothèses comme "plus c'est mieux" ou "plus de code signifie plus de qualité".
ThomasX

Réponses:

84

Demandez à votre cadre combien de pages de contrat son avocat peut écrire par mois. Puis (j'espère), il se rendra compte qu'il y a une énorme différence entre la rédaction d'un contrat d'une seule page et la rédaction d'un contrat de 300 pages sans lacunes ni contradictions. Ou entre la rédaction d'un nouveau contrat et la modification d'un contrat existant. Ou entre la rédaction d'un nouveau contrat et sa traduction dans une autre langue. Ou à un système juridique différent. Il conviendra peut-être même que les «pages de contrat par unité de temps» ne sont pas une très bonne mesure pour la productivité des avocats.

Mais pour vous donner une réponse à votre vraie question: D'après mon expérience, pour un nouveau projet, quelques centaines de SLOC par jour et développeur ne sont pas rares. Mais dès que les premiers bugs apparaîtront, ce nombre baissera fortement.

nikie
la source
18
Ce nombre pourrait même baisser si fortement qu'il pourrait devenir négatif ...
Hans Ke st ing
Ce n'est pas une analogie correcte. Il est parfaitement normal de demander à un traducteur combien de pages d'un texte anglais il peut traduire en allemand en une semaine. Et ils portent une application d'une langue / plate-forme vers une autre, un peu comme une traduction.
SK-logic
4
@ SK-Logic est-ce? Essayez de traduire une conversation informelle, puis essayez de traduire un long document juridique.
BlackICE
@ SK-logic - Chaque ligne d'un document source traduit sera généralement mappée sur une seule ligne du document cible - il s'agit d'un mappage très linéaire. En ce qui concerne les logiciels, il est peu probable que deux langages de programmation aient une structure et des capacités suffisamment similaires pour pouvoir s’attendre à la même chose. Il y aura probablement de nombreux domaines où des économies pourraient être réalisées, et certains domaines, où vous aurez comparativement plus de code à écrire.
cjmUK
1
@KristofProvost, une traduction 1 à 1 est normalement le point de départ d'un processus de refactorisation long et douloureux. Mais il faut d'abord faire fonctionner quelque chose. Et dans tous les projets de traduction que j'ai rencontrés, la principale motivation était le vieillissement de la chaîne d'outils d'origine (par exemple, PL / I vers C ++) et le manque de confiance en son avenir. Un code propre et idiomatique n'avait jamais été une priorité absolue dans de tels projets.
SK-logic
33

Combien de lignes de code un développeur C # peut-il produire par mois?

S'ils sont bons, moins de zéro.

qes
la source
5
+1: Lors de la maintenance du code hérité, nous nous efforçons d'obtenir un enregistrement LOC négatif (tout en maintenant ou en améliorant les fonctionnalités). Un de mes collègues a réussi à supprimer plus de 2 500 lignes de code en un seul enregistrement. Cette refactorisation lui a pris environ une semaine, mais la moyenne globale était toujours supérieure à -300 lignes par jour. :-)
Peter K.
La mesure par des lignes de code réduites est tout aussi vide de sens qu'elle tombe dans le même piège - ce nombre de lignes de code est une mesure valide de tout autre chose que le nombre de lignes de code. Donnez-moi chaque jour 40 000 lignes de bon code et plus de 10 000 lignes de spaghettis illisibles et criblés de bogues.
Maximus Minimus
1
Bien sûr, cela n'a pas de sens @mh. c'est plus une réponse
ironique
21

Courez dans l'autre sens ... Maintenant.

LoC est l'une des pires mesures que vous pouvez utiliser.

Les mauvais développeurs peuvent potentiellement écrire plus de LoC par jour que les bons développeurs, mais produisent du code de détritus.

Selon la complexité du code, le portage peut être effectué par des processus d'automatisation qui entraîneraient de gros milliers de changements de LoC par jour, tandis que les sections plus difficiles où les constructions de langage sont extrêmement différentes sont portées au 100LoC par jour.

Envoyez-lui de lire la page Wikipedia sur SLOC . Si donne quelques exemples agréables et simples de la raison pour laquelle il s'agit d'une mesure si médiocre.

Dan McGrath
la source
1
MxGrath: SLOC est seulement mauvais pour mesurer les progrès, mais il est souvent utilisable pour mesurer la complexité globale, en particulier. car, comme le soulignent Les Hatton, "McCabe Cyclomatic Complexity a la même capacité de prédiction que les lignes de code."
pillmuncher
18

La bonne réponse: non ...

Cet exécutif doit être informé que le SLOC n'est pas une mesure valide pour la progression de l'analyse

La réponse bâclée: n'importe quel nombre que vous pouvez composer.

Donnez-lui simplement un numéro, vous et votre équipe pouvez facilement le faire de toute façon. (En mettant sauf ligne, lignes vides, commentaires etc etc, juste pour permettre à ce gars de continuer à vivre dans son monde fantastique, et de hanter encore une autre équipe et de continuer le cycle renforcé de la misère qui fait une histoire au thedailywtf.

Pas sympa, mais faisable.

Zekta Chan
la source
Je dois dire que les commentaires pourraient augmenter l'utilité du code, cependant.
Nitrodist
2
@Nitrodist est en effet de bons commentaires, les commentaires auxquels je fais référence sont juste utilisés pour "faire" plaisir à l'exécutif. Ce qui serait totalement inutile ...
Zekta Chan
10

À première vue, cette question semble absolument stupide, et tout le monde ici n'a répondu qu'à la stupide partie C # LoC. Mais il y a une nuance importante - c'est une question sur les performances de portage . La bonne façon de poser cette question est de demander combien de lignes de code du projet source (celui qui est porté) un développeur peut gérer dans une unité de temps donnée. C'est une question parfaitement justifiée, car le nombre total de lignes de code est connu, et c'est exactement la quantité de travail à faire. Et la bonne façon de répondre à cette question est de collecter un peu de données historiques - travaillez, disons, une semaine et mesurez les performances de chacun des développeurs.

SK-logic
la source
1
Comment est-ce une indication de la quantité exacte de travail à faire? Si vous avez besoin de porter 1000 lignes de code, il peut être possible de le porter sur 50 lignes de code si des bibliothèques disponibles / fonctionnalités existantes, etc. sont utilisées. Et cela pourrait également prendre 50 lignes pour porter 100 lignes de code existantes. Totalement dépendant du code.
Mark Freedman,
J'ai dit qu'un nombre source de LoC est une métrique appropriée, pas la sortie.
SK-logic
2
Je ne suis pas d'accord. S'il existe des sections de code dans l'original qui n'ont aucun sens dans le port, elles ne sont jamais considérées comme «portées» et donc jamais comptées. OTOH, la création d'une fonctionnalité et d'un ensemble de support pour l'original peut donner une indication plus significative de la progression jusqu'à l'achèvement. Autrement dit, la mesure de progrès ne vaut que l'effort que l'on est prêt à consentir pour la générer et la maintenir.
mummey
1
@mummey, les effets dont vous parlez ne sont que des fluctuations, ils devraient disparaître sur une base statistique suffisamment large.
SK-logic
7

Je n'ai qu'une chose à dire:

«Mesurer la progression de la programmation par des lignes de code, c'est comme mesurer la progression d'un bâtiment en poids.»

-- Bill Gates

Après cela, vous pouvez affirmer que Bill Gates ne savait pas comment réussir un logiciel;)

Remarque: SLOC est une très bonne mesure de la complexité de la base de code!

Matthieu M.
la source
5
I 
can
write
large
numbers
of
lines
of
code
per
month.

Proportionnelle au nombre de mots, en fait.

Vous voyez mon point?

JBRWilkinson
la source
1
La plupart des outils qui génèrent des statistiques de localisation vous donnent des LOC logiques - c'est-à-dire des "instructions de code" et non des "lignes d'éditeur". Votre réponse aurait donc obtenu un score de 1 LLOC. Ils génèrent également des métriques utiles comme le rapport des commentaires au code et la complexité du code, donc ils ne sont pas complètement inutiles.
gbjbaanb
1
@gbjbaanb C'est juste une autre sorte d'inutile. Les langages déclaratifs n'ont pas d'instructions ni, par conséquent, de "lignes d'instructions". Un bon code peut être auto-documenté avec des noms d'identificateurs sensés au lieu de commentaires. Un autre code est écrit plus graphiquement là où il n'y a pas de concept significatif de "lignes", par exemple des cahiers Mathematica.
Jon Harrop
4

Je pourrais avoir une position légèrement différente à ce sujet, mais je pense que je pourrais comprendre pourquoi l'exécutif recherchait cette information s'il fait actuellement la planification de projet. Puisqu'il est difficile d'estimer la durée d'un projet, l'une des méthodes utilisées (voir: Estimation logicielle: démystifier l'art noir ) consiste à estimer la durée du projet en fonction du nombre de SLOC dans des projets similaires et maintenant les développeurs peuvent produire en moyenne. Dans la pratique, cela est censé être fait en utilisant des enregistrements historiques que le groupe a sous la main pour des projets similaires avec des développeurs identiques ou similaires.

Cependant, cela ne vaut rien que ces estimations sont destinées uniquement à la planification de projet de base et ne sont pas réellement destinées à définir le rythme des développeurs sur le projet car les choses changent d'un jour à l'autre. Ainsi, la plupart de ce que vous lisez sur l'utilisation des SLOC comme outil d'estimation est qu'ils sont bons à long terme si vous avez déjà un bon corpus de connaissances, mais moche pour une utilisation quotidienne.

rjzii
la source
4

C'est généralement une mauvaise idée d'appeler votre patron un idiot, donc mes suggestions commencent par comprendre et discuter des mesures, plutôt que de les rejeter.

Certaines personnes qui ne sont pas réellement considérées comme des idiots ont utilisé des mesures basées sur des lignes de code. Fred Brooks, Barry Boehm, Capers Jones, Watts Humphries, Michael Fagan et Steve McConnell les ont tous utilisés. Vous les avez probablement utilisés même si juste pour dire à un collègue, ce module God est de 4000 lignes, il doit être divisé en classes plus petites.

Il existe des données spécifiques liées à cette question provenant d'une source que beaucoup d'entre nous respectent.

http://www.codinghorror.com/blog/2006/07/diseconomies-of-scale-and-lines-of-code.html

http://www.codinghorror.com/blog/2005/08/are-all-programming-languages-the-same.html

http://discuss.joelonsoftware.com/default.asp?joel.3.286106.22

Je soupçonne que la meilleure utilisation de la ligne de code par heure de programmation est de montrer que pendant la durée de vie du projet, cette valeur commencera assez haut, mais comme des défauts sont détectés et corrigés, de nouvelles lignes de code seront ajoutées pour résoudre les problèmes qui ne faisaient pas partie des estimations originales, et des lignes de code supprimées pour éliminer la duplication et améliorer l'efficacité montreront que LOC / h indique autre chose que la productivité.

  • Lorsque le code est écrit rapidement, bâclé, gonflé et sans aucune tentative de refactorisation, l'efficacité apparente sera à son maximum. La morale ici sera que vous devez faire attention à ce que vous mesurez.
  • Pour un développeur particulier, s'il ajoute ou touche une grande quantité de code cette semaine, la semaine prochaine, il pourrait y avoir une dette technique à payer en termes de révision, de test, de débogage et de retravaillage de code.
  • Certains développeurs travailleront à un taux de sortie plus cohérent que d'autres. On peut constater qu'ils passent le plus de temps à obtenir de bonnes histoires d'utilisateurs, se retournent très rapidement et effectuent des tests unitaires correspondants, puis se retournent et créent rapidement du code qui se concentre uniquement sur les histoires d'utilisateurs. Le retentissement ici est que les développeurs méthodiques auront probablement un tour rapide, écriront du code compact et auront peu de retouches car ils comprennent très bien le problème et la solution avant de commencer à coder. Il semble raisonnable qu'ils codent moins car ils ne codent qu'après avoir réfléchi, plutôt qu'avant et après.
  • Lorsque le code est évalué pour sa densité de défauts, il se révèle être moins qu'uniforme. Certains codes expliqueront la plupart des problèmes et des défauts. Il sera candidat à la réécriture. Lorsque cela se produit, il deviendra le code le plus cher car en raison de son haut degré de retravail. Il aura le plus grand nombre brut de lignes de code (ajoutées, supprimées, modifiées, comme cela pourrait être signalé par un outil comme CVS ou SVN), mais les lignes de code nettes par heure investies les plus faibles. Cela peut finir par être une combinaison du code implémentant le problème le plus complexe ou la solution la plus compliquée.

Quelle que soit l'issue du débat sur la productivité des programmeurs dans les lignes de code, vous constaterez que vous avez besoin de plus de main-d'œuvre que vous ne pouvez vous le permettre et que le système ne sera jamais terminé à temps. Vos vrais outils ne sont pas des métriques. Ils utilisent une méthodologie supérieure, les meilleurs développeurs que vous pouvez embaucher ou former, et le contrôle de la portée et des risques (probablement avec des méthodes Agiles).

DeveloperDon
la source
The take away here is that methodical developers will probably have quick turn around, will write compact code, and have low rework.Être en désaccord. Il s'agit soit d'une reformulation faible, soit d'un délai d'exécution rapide. D'accord, la troisième option est épuisée et quitte la carrière de développeur.
Neolisk
3

Donnez-lui une meilleure métrique avec laquelle travailler

Au lieu de LOC , expliquez qu'il s'agit de la pire mesure à utiliser. Donnez-lui alors une alternative:

Nombre de fonctions / caractéristiques par caractéristique / demande de fonction -> NOFF / RFF

Vous devrez peut-être ajouter une pondération / normalisation en plus de NOFF / RFF, pour répondre aux quantités de demandes par semaine.

:) clairement ce qui précède est composé, mais tout est meilleur que SLOC ...

Nuit noire
la source
3

Je peux vous dire qu'une charge d'entrepreneurs pour un grand projet a écrit 15 000 LOC (chacun) en un an. C'est une réponse incroyablement grossière, mais elle nous a été utile car nous avons 400 000 LoC C ++ existants et nous pourrions comprendre que la conversion de tout cela en C # nous prendrait environ 26 années-homme pour terminer. Donner ou prendre.

Alors maintenant, nous connaissons l'ordre de grandeur approximatif, nous pouvons mieux planifier pour cela - obtenir 20 devs et estimer le travail d'un an pour eux serait à peu près correct. Avant de compter, nous n'avions aucune idée du temps qu'il faudrait pour migrer.

Donc, mon conseil pour vous est de vérifier tout le code que vous avez écrit dans un laps de temps spécifique (j'ai eu la chance d'avoir un nouveau projet avec lequel travailler), puis d'exécuter l'un des nombreux outils de mesure de code dessus. Divisez le nombre par le temps et vous pouvez lui donner une réponse précise - combien de LOC vous écrivez réellement par jour. Pour nous, c'est sorti à 90 LOC par jour! Je suppose que nous avons eu beaucoup de réunions et de documentation sur ce projet, mais je suppose que nous aurons également beaucoup de réunions et de documentation sur le prochain :)

gbjbaanb
la source
2

Cela semble correct.

/programming/966800/mythical-man-month-10-lines-per-developer-day-how-close-on-large-projects

Si vous prenez en compte le débogage, la documentation, la planification, etc. Cela représente en moyenne environ 10 lignes de code par jour. En fait, je noterais 10 lignes par jour sur le côté supérieur (c'est-à-dire un développeur très productif).

Même si vous pouvez produire quelques centaines de lignes en une seule journée (ce n'est pas durable). Ce ne sera pas du code de qualité tant que vous n'aurez pas ajouté tous les tests unitaires de la documentation et bien sûr débogué le code après que votre test unitaire ait montré les erreurs. Après tout cela, vous êtes de retour à 10.

Loki Astari
la source
1

Je suppose qu'un développeur travaillant avec un langage comme C # devrait être capable d'écrire / générer environ 10 000 LoC / jour. Je suppose que je pourrais faire ça. Je ne le ferais jamais.

Ce que vous voulez d'un développeur, c'est de faire son travail en 10 LoC / jour. Moins de code, c'est toujours mieux. Il m'arrive souvent de commencer à produire une grande quantité de code, puis à couper jusqu'à ce que j'atteigne le maximum de simplicité, donc j'ai effectivement des jours avec des LoC négatifs.

Dans un sens, le codage est comme la poésie. La question n'est pas de savoir combien de lignes un poète peut écrire, mais combien il peut transmettre dans les 14 lignes d'un sonnet.

back2dos
la source
5
10K LoC? IMO qui ne peut être fait que par un générateur. En ce qui concerne la LoC manuscrite, je préfère placer la limite supérieure dans la plage de 1K LoC. Et cela doit être une journée extrêmement productive.
user281377
@ammoQ: C'est faisable. Si quelqu'un vous demandait d'écrire autant de code que possible, vous pourriez le faire. C'est probablement juste un mythe, mais j'ai entendu dire que les programmeurs contraints de produire de nombreuses LoC le faisaient en incluant du code mort ou en double, en développant des boucles et en insérant des fonctions à la main (ou en n'ayant pas de boucles et de sous-programmes en premier lieu) et bien d'autres stupides des choses. De plus, la surutilisation du code passe
partout
@ back2dos: OK, je pensais plutôt au code qui a du sens.
user281377
@ammoQ: eh bien ce n'est certainement rien dont je vous blâme. Mon point était plutôt, que les métriques, qui n'ont pas de sens mènent au code, cela n'a pas de sens;)
back2dos
1

Laissez votre manager s'en occuper ou commencez la recherche d'emploi.

En toute sincérité, vous pourriez passer du temps ce qui peut finir par être une tentative désespérée d'expliquer à l'exécutif les méthodes appropriées et inappropriées pour mesurer les progrès d'un projet vers l'achèvement. En réalité, à quoi servent les ingénieurs et les chefs de projet.

En revanche, les circonstances sont telles que le cadre en question EST votre ingénieur et / ou chef de projet. Vous avez des problèmes beaucoup plus importants et plus fondamentaux à traiter, même s'ils ne se sont pas encore révélés. Dans ce cas, un problème comme celui-ci peut servir de «coup de semonce» pour de plus gros problèmes à venir.

maman
la source
1

Les autres réponses sont correctes, c'est une question stupide et la réponse ne signifie pas une fichue chose. C'est vrai, mais je sais combien de lignes de code j'ai produites en un mois environ.

C'est environ 3000 lignes de code C # sans XML-doc. J'implémentais de nouvelles fonctionnalités et je me suis retrouvé avec ce montant en un mois ou un mois et une semaine. C'est tout ce qui s'est retrouvé dans le contrôle de code source, beaucoup de code a été écrit puis refactorisé ou supprimé.

Je suis un développeur C # et j'essaie d'être bon dans ce domaine, mais je ne peux pas vous dire à quel point je suis objectivement bon. J'ai essayé d'écrire du bon code et j'ai mis beaucoup d'efforts pour le rendre facile à maintenir. Je ne mets des commentaires qu'une ou deux fois dans ce code.

Je ne sais pas si c'est trop ou trop peu de lignes de code et je dois dire que je m'en fiche vraiment. C'est un morceau de données sans signification et il ne peut en aucun cas être utilisé pour l'extrapolation. Mais je connais ces données, j'ai donc décidé de les partager.

Dyppl
la source
0

Eh bien, je suis un peu en retard à cette fête, comme d'habitude, mais c'est en fait intéressant. Au départ, je pensais comme la plupart que la question de l'exécutif était stupide. Cependant, j'ai lu la réponse de SK-logic et j'ai réalisé que c'était une question sensée posée de manière absurde. Ou, autrement dit, il y a un problème valable derrière la question.

Les gestionnaires doivent souvent essayer de déterminer la faisabilité, le financement, la dotation en personnel, etc. pour un projet. C'est un problème sensible. Pour un port de Straightford, une estimation basée sur des lignes de code de port divisées par la moyenne estimée des lignes de code par développeur et par jour est séduisante de simplicité, mais vouée à l'échec pour toutes les raisons données sur cette page.

Une approche plus sensée serait: -

  1. Pour une estimation sur place, demandez aux développeurs qui ont le plus d'expérience avec le code une estimation précise du temps qu'il faudra. C'est forcément incorrect pour de nombreuses raisons que je n'entrerai pas ici, mais c'est le mieux qu'ils pourront faire au départ. Au moins, ils devraient avoir une idée si ce sera facile à faire dans une semaine ou des années, même avec des ressources supplémentaires. S'il y a eu des ports de taille similaire ou des travaux effectués, ils pourraient l'utiliser comme guide.
  2. Estimez le port par composant pour obtenir un dimensionnement total. Les tâches qui ne sont pas directement liées au port doivent être incluses, telles que la configuration de l'infrastructure (machines, systèmes de construction, etc.), la recherche et l'achat de logiciels, etc.
  3. Identifiez les composants les plus risqués du port et commencez par ceux-ci en premier. Celles-ci sont susceptibles de faire exploser le plus l'estimation, donc devraient être faites à l'avance si possible afin qu'il y ait des surprises limitées tard dans le port.
  4. Gardez une trace de la progression par rapport au dimensionnement effectué à l'étape 2 pour calculer en permanence la durée prévue du port. À mesure que le projet avance, cela devrait devenir plus précis. Bien sûr, le nombre de lignes de code qui ont été portées (les fonctionnalités de la base de code d'origine qui sont maintenant dans le code porté) peuvent également être utilisées comme métrique et sont en fait utiles pour garantir que le produit d'origine est porté plutôt que un tas de nouvelles fonctionnalités intéressantes ajoutées sans aborder le port réel.

Ce sont les étapes nues, bien sûr, il existe de nombreuses autres activités autour de cela qui sont utiles, comme étudier les outils de portage et les cadres enfichables, créer des prototypes, déterminer ce qui doit vraiment être porté, réutiliser les outils et l'infrastructure de test, etc.

acarlon
la source