Quante righe di codice può produrre uno sviluppatore C # al mese? [chiuso]


21

Un dirigente del mio posto di lavoro ha posto a me e al mio gruppo di sviluppatori la domanda:

Quante righe di codice può produrre uno sviluppatore C # al mese?

Un vecchio sistema doveva essere portato su C # e vorrebbe che questa misura fosse parte della pianificazione del progetto.

Da una fonte (apparentemente credibile) aveva la risposta di "10 SLOC / mese ", ma non ne era contento.

Il gruppo ha convenuto che questo era quasi impossibile da specificare perché dipendeva da un lungo elenco di circostanze. Ma potremmo dire che l'uomo non se ne andrebbe (o rimarrebbe molto deluso da noi) se non ci arrivasse una risposta che gli si adatti meglio. Quindi se ne andò con la risposta molte volte migliore di "10 SLOC / giorno "

È possibile rispondere a questa domanda? (disinvolto o addirittura con qualche analisi)


7
Queste linee devono avere una qualità incorporata? > _>
dr Hannibal Lecter,

4
Può essere un codice generato dal computer? In tal caso, sono abbastanza sicuro di poter ottenere il prefisso di potenza di Zetta (10 ^ 21) in linee, dato l'hardware giusto. Non farà nulla, intendiamoci ...
GrandmasterB,

6
Fonte credibile: Mythical Man Month.
Martin York,

2
Quanto legno può mandare un ceppo se un ceppo potrebbe mandare il legno? Non riesco a credere che questa domanda sia ancora stata posta! Cos'è, questo 1975? Ci sono domande molto migliori, come "Quanti sistemi ha implementato con successo il team di sviluppo quest'anno?" o "Quante ore al mese sono state salvate utilizzando il sistema attuale rispetto a prima?" La domanda dovrebbe essere utile, non quantitativa di una metrica irrilevante.
Mark Freedman,

3
Non bisogna rispondere alla domanda perché si basa su presupposti falsi come "più è meglio" o "più codice significa più qualità".
ThomasX,

Risposte:


84

Chiedi al tuo dirigente quante pagine di contratto può scrivere il suo avvocato al mese. Quindi (si spera) si renderà conto che c'è un'enorme differenza tra la scrittura di un contratto di una sola pagina e la scrittura di un contratto di 300 pagine senza scappatoie e contraddizioni. O tra la scrittura di un nuovo contratto e la modifica di uno esistente. O tra scrivere un nuovo contratto e tradurlo in un'altra lingua. O a un diverso sistema giuridico. Forse sarà anche d'accordo sul fatto che "le pagine del contratto per unità di tempo" non sono una misura molto buona per la produttività dell'avvocato.

Ma per darti una risposta alla tua vera domanda: nella mia esperienza, per un nuovo progetto alcune centinaia di SLOC al giorno e lo sviluppatore non sono rari. Ma non appena compaiono i primi bug, questo numero scenderà bruscamente.


18
Quel numero potrebbe persino scendere così bruscamente da entrare in negativo ...
Hans Ke il

Non è un'analogia corretta. Va benissimo chiedere a un traduttore di quante pagine di un testo inglese può tradurre in tedesco in una settimana. E stanno eseguendo il porting di un'applicazione da una lingua / piattaforma a un'altra, un po 'come una traduzione.
SK-logic,

4
@ SK-Logic è? Prova a tradurre una conversazione informale, quindi prova a tradurre un lungo documento legale.
BlackICE,

@ SK-logic - Ogni linea in un documento sorgente tradotto verrà generalmente mappata su una singola linea nel documento di destinazione - è una mappatura molto lineare. Quando si tratta di software, è improbabile che due linguaggi di programmazione siano abbastanza simili nella struttura e nella capacità da poter aspettarsi lo stesso. Probabilmente ci saranno numerose aree in cui è possibile ottenere risparmi e alcune aree in cui avrai relativamente più codice da scrivere.
cjmUK,

1
@KristofProvost, una traduzione da 1 a 1 è normalmente un punto di partenza per un lungo e doloroso processo di refactoring. Ma è necessario prima che qualcosa funzioni. E in tutti i progetti di traduzione che ho incontrato, la motivazione principale era l'invecchiamento della toolchain originale (ad esempio, da PL / I a C ++) e la mancanza di fiducia nel suo futuro. Codice pulito e idiomatico non era mai stata una priorità assoluta in tali progetti.
SK-logic,

33

Quante righe di codice può produrre uno sviluppatore C # al mese?

Se sono buoni, meno di zero.


5
+1: quando manteniamo il codice legacy, ci impegniamo per un check-in a LOC negativo (mantenendo o migliorando la funzionalità). Uno dei miei colleghi è riuscito a rimuovere oltre 2.500 righe di codice in un solo check-in. Quel refactoring lo impiegò circa una settimana, ma la media complessiva era ancora più di -300 linee al giorno. :-)
Peter K.

Misurare con righe di codice ridotte è altrettanto insignificante in quanto ricade nella stessa trappola: quel numero di righe di codice è una misurazione valida di qualsiasi cosa diversa dal numero di righe di codice. Dammi 40.000 righe di buon codice oltre 10.000 righe di spaghetti illeggibili, pieni di bug ogni giorno.
Massimo

1
Ovviamente non ha senso @mh. questa è più una risposta
ironica

21

Corri dall'altra parte ... Adesso.

LoC è una delle peggiori metriche che puoi usare.

I cattivi sviluppatori possono potenzialmente scrivere più LoC al giorno rispetto ai buoni sviluppatori, ma sfornano il codice della spazzatura.

A seconda della complessità del codice, il porting può essere eseguito da processi di automazione che porterebbero a grandi migliaia di modifiche + LoC al giorno, mentre sezioni più difficili in cui i costrutti del linguaggio sono selvaggiamente codice diverso vengono portate a 100LoC al giorno.

Mandalo a leggere la pagina di Wikipedia su SLOC . Se fornisce alcuni esempi carini e semplici del perché è una metrica così scarsa.


1
MxGrath: SLOC è male solo per misurare i progressi, ma è spesso utilizzabile per misurare la complessità complessiva, esp. poiché, come sottolineato da Les Hatton, "la complessità ciclistica di McCabe ha la stessa capacità di previsione delle righe di codice".
pillmuncher,

18

La risposta giusta: No ...

Questo dirigente dovrebbe essere istruito, che SLOC non è una metrica valida per i progressi dell'analisi

La risposta sciatta: qualsiasi numero che puoi inventare.

Dagli solo un numero, tu e la tua squadra potete facilmente fare quel numero comunque. (Mettendo a meno linea, righe vuote, commenti ecc. Ecc., Solo per consentire a questo ragazzo di continuare a vivere nel suo mondo fantastico, e perseguitare ancora un'altra squadra e continuare il ciclo rafforzato della miseria che fa una storia per il futuro.

Non carino, ma fattibile.


Dovrei dire che i commenti potrebbero aumentare l'utilità del codice, però.
Nitrodist,

2
@Nitrodist sono davvero buoni commenti, i commenti a cui mi riferisco sono solo usati per "rendere felice" l'esecutivo. Sarebbe del tutto inutile ...
Zekta Chan,

10

Dal primo sguardo questa domanda sembra assolutamente stupida, e tutti qui hanno risposto solo alla stupida C # LoC. Ma c'è una sfumatura importante: si tratta di una prestazione di porting . Il modo giusto di porre questa domanda è chiedere, quante righe di codice del progetto sorgente (quello che viene portato) può essere gestita da uno sviluppatore in una determinata unità di tempo. È una domanda perfettamente giustificata, poiché è noto il numero totale di righe di codice ed è esattamente la quantità di lavoro da svolgere. E il modo giusto per rispondere a questa domanda è raccogliere un po 'di dati storici: lavorare per, diciamo, una settimana e misurare le prestazioni di ciascuno degli sviluppatori.


1
In che modo ciò indica l'esatta quantità di lavoro da svolgere? Se è necessario eseguire il porting di 1000 righe di codice, potrebbe essere possibile portarlo su 50 righe di codice se si utilizzano librerie disponibili / funzionalità esistenti, ecc. E potrebbero anche essere necessarie 50 righe per il porting di 100 linee di codice esistenti. Totalmente dipendente dal codice.
Mark Freedman,

Ho detto che un numero sorgente di LoC è una metrica corretta, non l'output.
SK-logic,

2
Non sono d'accordo. Se nell'originale esistono sezioni di codice che non hanno alcun senso nella porta, non vengono mai considerate "portate" e quindi non vengono mai conteggiate. OTOH, la creazione di una serie di funzioni e supporto per l'originale può fornire un'indicazione più significativa del progresso fino al completamento. In poche parole, la metrica del progresso vale solo lo sforzo che uno è disposto a fare per generarlo e mantenerlo.
mamma

1
@mummey, gli effetti di cui stai parlando sono solo fluttuazioni, dovrebbero scomparire su una base statistica abbastanza grande.
SK-logic,

7

Ho solo una cosa da dire:

"Misurare l'avanzamento della programmazione mediante righe di codice è come misurare il progresso della costruzione di aeromobili in base al peso."

- Bill Gates

Successivamente, potresti obiettare che Bill Gates non sapeva come realizzare software di successo;)

Nota: SLOC è comunque un'ottima misura della complessità della base di codice!


5
I 
can
write
large
numbers
of
lines
of
code
per
month.

In proporzione al numero di parole, in effetti.

Vedi il mio punto?


1
La maggior parte degli strumenti che generano statistiche locali forniscono LOC logici, ovvero "istruzioni di codice" e non "righe dell'editor". Quindi la tua risposta avrebbe ottenuto un punteggio di 1 LLOC. Generano anche metriche utili come il rapporto tra commenti e complessità del codice e del codice, quindi non sono completamente inutili.
gbjbaanb,

1
@gbjbaanb Questo è solo un altro tipo di inutile. Le lingue dichiarative non hanno dichiarazioni o, quindi, "righe di istruzione". Un buon codice può essere auto-documentato con nomi di identificatori sani anziché commenti. Un altro codice è scritto in modo più grafico in cui non esiste un concetto significativo di "linee", ad esempio i notebook Mathematica.
Jon Harrop,

4

Potrei avere una posizione leggermente diversa su questo, ma penso che potrei capire perché l'esecutivo stava cercando queste informazioni se stanno attualmente pianificando il progetto. Poiché è difficile stimare quanto tempo impiegherà un progetto, uno dei metodi utilizzati (vedi: Stima del software: Demistificazione dell'arte nera ) è stimare quanto tempo impiegherà il progetto sulla base del numero di SLOC in progetti simili e ora gli sviluppatori possono produrre in media. In pratica, ciò dovrebbe essere fatto utilizzando record storici che il gruppo ha a disposizione per progetti simili con sviluppatori uguali o simili.

Tuttavia, non vale nulla che queste stime siano intese solo per la pianificazione di base del progetto e non siano in realtà destinate a stabilire il ritmo degli sviluppatori nel progetto perché le cose cambiano di giorno in giorno. Pertanto, la maggior parte di ciò che leggi sull'uso degli SLOC come strumento di stima è che sono buoni a lungo termine se hai già un buon corpus di conoscenze, ma pessimi per l'uso quotidiano.


4

In genere è una cattiva idea chiamare il tuo capo un idiota, quindi i miei suggerimenti iniziano con la comprensione e la discussione delle metriche, piuttosto che respingerle.

Alcune persone che in realtà non sono considerate idioti hanno utilizzato metriche basate su righe di codice. Fred Brooks, Barry Boehm, Capers Jones, Watts Humphries, Michael Fagan e Steve McConnell li hanno usati tutti. Probabilmente li hai usati anche se solo per dire a un collega, questo modulo di Dio ha 4000 linee, deve essere suddiviso in classi più piccole.

Esistono dati specifici relativi a questa domanda da una fonte che molti di noi rispettano.

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

Ho il sospetto che il miglior uso della riga di codice all'ora del programmatore sia quello di dimostrare che per tutta la durata del progetto, questo valore inizierà piuttosto elevato, ma man mano che i difetti vengono rilevati e corretti, verranno aggiunte nuove righe di codice per risolvere problemi che non facevano parte delle stime originali e le righe di codice rimosse per eliminare la duplicazione e migliorare l'efficienza mostreranno che LOC / h indica cose diverse dalla produttività.

  • Quando il codice viene scritto velocemente, sciatto, gonfio e senza alcun tentativo di refactoring, l'efficienza apparente sarà al massimo. La morale qui sarà che devi stare attento a ciò che misuri.
  • Per uno sviluppatore particolare, se questa settimana aggiunge o tocca una quantità elevata di codice, la settimana successiva potrebbe esserci un debito tecnico da pagare in termini di revisione, test, debug e rilavorazione del codice.
  • Alcuni sviluppatori lavoreranno a un tasso di output più costante rispetto ad altri. Si può scoprire che trascorrono la maggior parte del tempo a ottenere buone storie utente, si girano molto rapidamente e fanno test unitari corrispondenti, quindi si girano e fanno rapidamente codice incentrato solo sulle storie utente. Il take away qui è che gli sviluppatori metodici avranno probabilmente una rapida svolta, scriveranno codice compatto e avranno una bassa rielaborazione perché comprendono molto bene il problema e la soluzione prima di iniziare a scrivere codice. Sembra ragionevole che codificheranno meno perché codificano solo dopo averlo riflettuto, anziché prima e dopo.
  • Quando il codice viene valutato per la sua densità di difetto, si scoprirà che non è uniforme. Alcuni codici spiegheranno la maggior parte dei problemi e dei difetti. Sarà un candidato per la riscrittura. Quando ciò accade, diventerà il codice più costoso perché in virtù del suo elevato grado di rielaborazione. Avrà le righe lorde più alte di conteggi di codice (aggiunte, cancellate, modificate, come potrebbe essere riportato da uno strumento come CVS o SVN), ma le righe nette più basse di codice all'ora investite. Questo può finire per essere una combinazione del codice o implementando il problema più complesso o la soluzione più complicata.

Indipendentemente da come si sviluppa il dibattito sulla produttività del programmatore in righe di codice, scoprirai che hai bisogno di più risorse umane di quelle che puoi permetterti e che il sistema non sarà mai completato in tempo. I tuoi veri strumenti non sono metriche. Usano una metodologia superiore, i migliori sviluppatori che puoi assumere o addestrare e il controllo di portata e rischio (probabilmente con metodi Agile).


The take away here is that methodical developers will probably have quick turn around, will write compact code, and have low rework.Disaccordo. È una riformulazione bassa o una rapida inversione di tendenza. Va bene, la terza opzione è esaurita e lascia la carriera degli sviluppatori.
Neolisk,

3

Dagli una metrica migliore con cui lavorare

Invece di LOC , spiega che questo è il peggiore metrica da utilizzare. Quindi dagli un'alternativa:

Numero di funzioni / caratteristiche per caratteristica / richieste di funzione -> NOFF / RFF

Potrebbe essere necessario aggiungere una ponderazione / normalizzazione oltre a NOFF / RFF, per soddisfare gli importi delle richieste settimanali.

:) chiaramente quanto sopra è inventato, ma qualsiasi cosa, è meglio di SLOC ...


3

Posso dirti che un sacco di appaltatori per un grande progetto ha scritto 15000 LOC (ciascuno) in un anno. Questa è una risposta incredibilmente approssimativa, ma ci è stata utile poiché abbiamo 400.000 LoC C ++ esistenti e siamo riusciti a capire che la conversione di tutto in C # ci richiederebbe circa 26 anni-uomo per il completamento. Prendere o lasciare.

Quindi ora conosciamo il grosso ordine di grandezza, possiamo pianificare meglio per questo - ottenere 20 sviluppatori e stimare il lavoro di un anno per loro sarebbe tutto a posto. Prima di contare, non avevamo idea di quanto tempo ci sarebbe voluto per migrare.

Quindi il mio consiglio per te è di controllare tutto il codice che hai scritto in un determinato periodo di tempo (sono stato fortunato ad avere un nuovo progetto con cui lavorare), quindi eseguire uno dei tanti strumenti di metrica del codice su di esso. Dividi il numero per ora e puoi dargli una risposta precisa: quanto LOC scrivi effettivamente al giorno. Per noi, è uscito a 90 LOC al giorno! Immagino che abbiamo avuto molte riunioni e documentazione su quel progetto, ma poi credo che avremo molte riunioni e documentazione anche sul prossimo :)


2

Sembra corretto.

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

Se si tiene conto del debug, della documentazione, della pianificazione, ecc. La media è di circa 10 righe di codice al giorno. In realtà classificherei 10 righe al giorno nella parte alta (cioè uno sviluppatore molto produttivo).

Anche se puoi sfornare un paio di centinaia di righe in un solo giorno (questo non è sostenibile). Non si tratta di un codice di qualità fino a quando non hai aggiunto tutta la test unitaria alla documentazione e, naturalmente, il debug del codice dopo che il test unitario mostra gli errori. Dopo tutto ciò che hai fatto sei tornato a 10.


1

Suppongo che uno sviluppatore che lavora con un linguaggio come C # dovrebbe essere in grado di scrivere / generare circa 10K LoC / giorno. Suppongo che potrei farlo. Non lo farei mai.

Quello che vuoi da uno sviluppatore è fare il suo lavoro in 10 LoC / giorno. Meno codice è sempre meglio. Spesso inizio a produrre una grande quantità di codice e poi a tagliare via fino a raggiungere il massimo della semplicità, quindi in realtà ho giorni con LoC negativi.

In un certo senso, la programmazione è come la poesia. La domanda non è: quante righe può scrivere un poeta, ma quanto può trasmettere nelle 14 righe di un sonetto.


5
10K LoC? IMO che può essere fatto solo da un generatore. Per quanto riguarda il LoC scritto a mano, preferirei mettere il limite superiore nell'intervallo del LoC 1K. E quello deve essere un giorno estremamente produttivo.
user281377,

@ammoQ: è fattibile. Se qualcuno ti chiedesse di scrivere più codice possibile, potresti farlo. Probabilmente è solo un mito, ma ho sentito che i programmatori costretti a produrre molti LoC lo fanno includendo codice morto o duplicato, espandendo i loop e incorporando le funzioni a mano (o non avendo in primo luogo loop e subroutine) e molti altri stupidi cose. Inoltre, l'uso eccessivo del codice del boilerplate aiuta: D
back2dos il

@ back2dos: OK, stavo piuttosto pensando al codice che in realtà ha senso.
user281377,

@ammoQ: beh, non è certo per questo che ti biasimerei. Il mio punto era piuttosto, che le metriche, che non hanno senso portano al codice, che non ha senso;)
back2dos

1

Lascia che sia il tuo manager a gestirlo o inizia a cercare lavoro.

In tutta serietà, potresti spenderlo in quello che potrebbe essere uno sforzo senza speranza nel spiegare all'esecutivo i metodi corretti e impropri per misurare i progressi di un progetto verso il completamento. In tutta la realtà, tuttavia, a cosa servono i responsabili di ingegneria e di progetto.

D'altra parte, le circostanze sono tali che il dirigente in questione è il tuo responsabile tecnico e / o di progetto. Hai problemi molto più grandi e di base, anche se non si sono ancora rivelati. In questo caso un problema come questo può fungere da "avvertimento" per i maggiori problemi a venire.


1

Altre risposte sono corrette, è una domanda stupida e la risposta non significa una dannata cosa. È tutto vero, ma mi capita di sapere quante righe di codice ho prodotto in circa un mese.

Sono circa 3000 righe di codice C # senza XML-doc. Stavo implementando nuove funzionalità e ho finito con questo importo in un mese o un mese e una settimana. È tutto ciò che è finito nel controllo del codice sorgente, molto codice è stato scritto e poi refactored o cancellato.

Sono uno sviluppatore C # e sto cercando di essere bravo in questo, ma non posso dirti quanto oggettivamente sono bravo. Ho provato a scrivere un buon codice e ho fatto molti sforzi per renderlo facile da mantenere. Ho inserito commenti solo una o due volte in questo codice.

Non so se siano troppe o troppo poche righe di codice e devo dire che non mi interessa davvero. È un dato privo di significato e non può essere utilizzato in modo sicuro per l'estrapolazione in alcun modo. Ma mi capita di conoscere questi dati, quindi ho deciso di condividere.


0

Bene, sono un po 'in ritardo a questa festa come al solito, ma in realtà è interessante. Inizialmente avevo lo stesso pensiero della maggior parte del fatto che la domanda del dirigente fosse stupida. Tuttavia, ho letto la risposta di SK-logic e ho capito che si tratta di una domanda sensata posta in modo insensato. Oppure, in altre parole, c'è un problema valido dietro la domanda.

I manager devono spesso provare a determinare la fattibilità, i finanziamenti, il personale, ecc. Per un progetto. Questo è un problema ragionevole. Per un porto di straightford, una stima basata su linee di codice di porto divise per la media delle linee di codice stimate per sviluppatore al giorno è attraente in semplicità, ma destinata a fallire per tutti i motivi indicati in questa pagina.

Un approccio più sensato sarebbe: -

  1. Per una stima in loco, chiedi agli sviluppatori con la maggiore esperienza con il codice una stima visiva di quanto tempo ci vorrà. Questo è destinato ad essere errato per molte ragioni che non entrerò qui, ma è il migliore che potranno fare all'inizio. Almeno dovrebbero avere un'idea se sarà facile farlo tra una settimana o anni, anche con risorse aggiuntive. Se sono state eseguite porte o lavori di dimensioni simili, potrebbero utilizzarle come guida.
  2. Stimare la porta per componente per ottenere un dimensionamento totale. È necessario includere attività che non sono direttamente correlate alla porta, come la creazione di infrastrutture (macchine, sistemi di costruzione, ecc.), Lo studio e l'acquisto di software, ecc.
  3. Identifica i componenti più rischiosi della porta e inizia prima con quelli. È probabile che questi espellano maggiormente la stima, quindi dovrebbero essere eseguiti anticipatamente, se possibile, in modo tale che nel porto ci siano limitate sorprese.
  4. Tieni traccia dei progressi rispetto al dimensionamento fatto nel passaggio 2 per calcolare continuamente la durata prevista del porto. Man mano che il progetto avanza, questo dovrebbe diventare più preciso. Ovviamente, il numero di righe di codice trasferite (funzionalità nella base di codice originale che ora si trovano nel codice trasferito) può essere utilizzato anche come metrica ed è effettivamente utile per garantire che il prodotto originale venga portato anziché un sacco di nuove fantastiche funzionalità aggiunte mentre non si affronta la porta effettiva.

Si tratterebbe di semplici passi, ovviamente ci sono molte altre attività intorno a ciò che sono utili come investigare strumenti di porting e framework collegabili, creare prototipi, determinare ciò che realmente deve essere portato, riutilizzare strumenti e infrastrutture di test, ecc.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.