I commenti obsoleti sono un mito urbano?


38

Vedo costantemente persone affermare che "i commenti tendono a diventare obsoleti". Il fatto è che penso di aver visto forse due o tre commenti obsoleti per tutta la mia carriera. Le informazioni obsolete in documenti separati avvengono continuamente, ma nella mia esperienza i commenti obsoleti nel codice stesso sono estremamente rari.

Sono stato solo fortunato con chi lavoro? Alcuni settori sono più inclini a questo problema rispetto ad altri? Hai esempi specifici di recenti commenti obsoleti che hai visto? O i commenti obsoleti sono più un problema teorico che reale?


30
Concordato. Codice obsoleto trasformato in un commento, ora è qualcosa che vedo molto - e mi piacerebbe vedere di meno.
pyvi,

8
Vedo più mancanza di commenti di qualsiasi cosa. In combinazione con scadenti convenzioni di denominazione è una palla di divertimento cercando di leggere alcune delle cose con cui lavoro.
P.Brian.Mackey,

2
Ho visto molti commenti obsoleti, alcuni erano semplicemente MALE fuorviante. Sicuramente nessun mito, ma è per lo più valido per progetti che sono mantenuti da molte persone e / o per lungo tempo, amplificati dalla complessità. Tuttavia ho imparato a fidarmi del codice, non dei commenti (non li leggo quasi mai se superano più di una due righe).
MaR

Ho lavorato principalmente con un codice legacy molto antico per tutta la mia carriera. Ci sono state circa una dozzina di volte in cui ho avuto alcuni gravi problemi relativi a commenti obsoleti in uno strano codice Fortan77 di 30 anni, ma era una percentuale quasi zero del codice in cui i commenti erano adeguati. Quindi sono d'accordo, la portata di un problema deve essere stata esagerata.
Logica SK

Solo per mia fortuna, ne ho visti parecchi nell'anno da quando l'ho pubblicato. Immagino di aver inconsciamente imparato a non fidarmi di loro, quindi a correggerli e andare avanti, senza pensarci abbastanza da mettere nella mia memoria a lungo termine.
Karl Bielefeldt,

Risposte:


33

costantemente

Non riesco davvero a credere di essere l'unico a nuotare in commenti obsoleti e fuorvianti. In caso contrario ciò aiuta a comprendere:

Probabilmente dipende soprattutto dall'età del codice. Il prossimo fattore sarebbe il turnover del personale.

Faccio parti uguali di ricerca e sviluppo e lavori di manutenzione. La ricerca e sviluppo è un nuovo codice, generalmente roba un po 'fuori mano. Molti dei miei colleghi credono nel fornire molte spiegazioni commentate quando provano qualcosa per cui non esiste già una biblioteca. Poiché il rapporto commento / codice è più alto del normale, ci sono solo più opportunità che le cose vadano fuori sincrono.

Il codice di manutenzione ... Sono un manutentore attivo di un sistema di oltre 10 anni e un altro di oltre 5. Il codice e i commenti di 10 anni sono atroci, come ci si aspetterebbe. In 10 anni hai un sacco di mani nel codebase e nessuno ha idea di come funzioni tutto. Il codice e i commenti di 5 anni sono abbastanza buoni perché il turnover del team è stato piuttosto basso.

Lavoro quasi tutti i servizi, anche i nostri prodotti sono altamente personalizzati per un cliente particolare.

Esempi specifici:

  • Commenti che descrivono il miglioramento delle prestazioni per una particolare metodologia, come evitare una copia in memoria. Un grosso problema quando si tratta di una macchina di fascia alta in un Pentium 2 con MB di RAM, ma ora non è un problema.

  • TODOs

  • Blocchi di codice incollato con copia inclusi i commenti. Il commento potrebbe avere un senso nella sua posizione originale, ma qui non ha molto senso

  • Blocchi di commenti in cima al codice commentato (chissà quanti anni ci sono stati).

In tutti questi si nota la tendenza a non mantenere i commenti e il codice allo stesso livello del software. Gli IDE e le abitudini di base degli sviluppatori non aiutano in questo, il mio occhio è stato addestrato per superarli. Penso che commenti obsoleti siano relativamente economici da evitare nei progetti in campo verde e attivi. Se riesci a mantenere alto il rapporto codice / commento, non è un grosso problema tenerli aggiornati. È un po 'più difficile giustificare la caccia a queste cose quando si è in budget x ore per una correzione di bug su un sistema di produzione.


Quindi in pratica stai dicendo che semplicemente ignori del tutto i commenti perché è già un casino troppo grande, solo peggiorando la tua situazione. Difficilmente sorprendente.
Steven Jeuris,

5
@Steven - Io personalmente, no. Sono un grande sostenitore del miglioramento incrementale. Ho visto ringhi di codice completamente indecifrabile trasformati in qualcosa di abbastanza decente con uno sforzo abbastanza graduale. Ma ignorare è certamente la norma nella mia esperienza. È molto comprensibile quando si incontrano diverse classi di 10000 linee intrecciate con settimane di problemi da catalogare, che i commenti obsoleti tendono a cadere in fondo all'elenco delle priorità.
Steve Jackson,

1
@Steve: Nella tua situazione, vorrei semplicemente creare uno script che rimuovesse tutti i commenti e iniziare a commentare da zero dove necessario. :)
Steven Jeuris,

1
la base di codice principale in cui lavoravo era almeno metà commenti e codice raramente commentato. I commenti obsoleti erano un dato di fatto, i commenti corretti erano estremamente rari e non inizierò nemmeno a commentare la documentazione !!! vista ... Dopo questo lavoro ho imparato che meno è buono, se il codice ha bisogno di commenti, probabilmente ha bisogno di un refactor per rendere le cose più ovvie ...
Newtopian

4
Ho visto alcuni terribili esempi di Blocks of copy-pasted code including comments. Comment may have made sense in its original location, but hardly makes sense here. Commenti a livello di classe che parlano di una classe diversa, per esempio.
Peter Taylor,

18

"i commenti tendono a diventare obsoleti".

Ho visto accadere abbastanza spesso da sapere che questo può essere un problema.

Il fatto è che penso di aver visto forse due o tre commenti obsoleti per tutta la mia carriera.

Credo che dovrebbe essere perfettamente possibile lavorare in un ambiente in cui tutti si prendono abbastanza cura dei commenti e li mantengono. È solo un piccolo sforzo in più per guardare i commenti vicino al codice che stai modificando e aggiornarli quando appropriato. Nel caso in cui i commenti siano così lontani che non li noti immediatamente, erano comunque commenti negativi e non avrebbero dovuto essere aggiunti in primo luogo (o almeno non lì).

Inoltre, di solito insieme all'affermazione secondo cui i commenti tendono a diventare obsoleti, segue l'affermazione secondo cui ciò riduce la leggibilità e confonde le persone. Questo è qualcosa che non ho ancora sperimentato. Ogni volta che incontro un commento non aggiornato, vedo chiaramente cosa è cambiato e aggiorno il commento di conseguenza per rappresentare il codice più recente, anche se con qualche sforzo in più.


Un recente studio di Roehm et al. Il 2012 osserva quanto segue:

21 partecipanti [su 28] hanno riferito di ottenere le loro informazioni principali dal codice sorgente e di commenti in linea, mentre solo quattro hanno dichiarato che la documentazione è la loro principale fonte di informazioni.

Ciò è in linea con il tuo sospetto che i commenti nel codice stesso siano generalmente considerati molto utili. Ciò indica che è necessario tracciare una linea chiara tra la documentazione obsoleta e i commenti non aggiornati .

Roehm, T., Tiarks, R., Koschke, R. e Maalej, W. (2012, giugno). In che modo gli sviluppatori professionisti comprendono il software? In Atti della Conferenza internazionale sull'ingegneria del software del 2012 (pagg. 255-265). Stampa IEEE.


Man mano che sono migliorato, ho scoperto che ho bisogno di meno commenti per capire cosa fa il codice nel tipico codice plug and chug.
Paul Nathan,

3
@Paul Nathan, i commenti non dovrebbero mai descrivere ciò che fa il codice - il codice lo descrive meglio. I commenti sono lì per spiegare, perché il codice fa quello che fa.
SK-logic,

2
@ SK-logic: anche se capisco l'argomento, credo che sia troppo ampio. I commenti di una funzione (o codice paragrafo / blocco) possono chiarire molto di più (e più rapidamente) cosa fa la funzione rispetto al suo nome. Ciò è particolarmente necessario per le funzioni pubbliche. Per quanto sia facile leggere il codice, leggere una spiegazione a due righe del codice a 10 righe è ancora più veloce. Immagina di lavorare con la tua API preferita che non ha alcuna documentazione "what" . Saresti molto meno sicuro della sua funzionalità.
Steven Jeuris,

sì, non ho incluso una documentazione (ad esempio Javadoc) - è troppo strutturata per essere chiamata solo " commenti ".
Logica SK

17

I commenti obsoleti sono un odore di lavoro. È come avere test unitari obsoleti o trascurati - mostra che i buoni processi che una volta erano attivi nel negozio stanno degenerando nella codifica da cowboy. La corretta "cultura ingegneristica" di prendere il tempo necessario per fare le cose nel modo giusto si è rotta. È probabile che il progetto / azienda stia andando in debito tecnico.

In breve, sì, sei stato fortunato. Se finora ti è capitato di avere una serie di negozi ragionevolmente ben gestiti nella tua carriera, è del tutto possibile non vedere così tanto. Ma in negozi più tipici, meno gestiti, questo è parallelo al resto del caos.


"I commenti obsoleti sono un odore di lavoro." Molto ben messo! Allo stesso modo il codice auto-documentante solo senza commenti non è la soluzione, ma un 'hack' pigro.
Steven Jeuris,

10

I commenti sono come dei test, sono molto utili quando sono aggiornati, ma possono rendere ancora più difficile la comprensione del codice se non lo sono.

Se non hai mai visto commenti obsoleti, sei stato molto fortunato.

La maggior parte delle basi di codice con cui ho lavorato è stata piena di commenti obsoleti e di solito ignoro completamente i commenti poiché di solito sono fonte di confusione anziché aiuto.


Posso chiedere in quali settori hai lavorato? Mi chiedo se questo è più comune in alcuni rispetto ad altri.
Karl Bielefeldt,

Ho lavorato in 3 diversi paesi in Europa, principalmente come consulente per una grande azienda e una piccola. Ultimamente in una casa di sviluppo SaaS.
Kim.Net,


10

I commenti obsoleti appaiono spesso in JavaDoc:

  • Elenco degli argomenti che non esistono più
  • Non spiegare tutti gli argomenti (quelli mancanti probabilmente sono stati aggiunti in seguito)
  • Cose simili per eccezioni, ecc.

Inoltre, a volte i commenti affermano cose come "fai questo qui per le prestazioni" quando la maggior parte delle considerazioni sulle prestazioni tendono a diventare obsolete anche più velocemente del codice stesso.


3
(Non una critica, ma solo una soluzione) Gli avvertimenti IDE possono fare molto per impedirlo. Se sono necessarie misure più drastiche, fallire la compilazione su un avviso / errore di compilazione javadoc.
Michael K,

1
Questo potrebbe spiegare perché non ne ho visti molti. Non ho mai lavorato da qualche parte che utilizza commenti in stile JavaDoc.
Karl Bielefeldt,

4
@Michael, gli avvisi IDE sono utili in casi lievi. La nostra base di codice legacy produce oltre 20.000 avvisi Checkstyle, molto oltre il limite in cui smetti di prestare attenzione: - ((((Gli IDE, se usati male, possono contribuire in modo significativo alla miseria di Javadoc. La maggior parte delle cazzate Javadoc nella nostra base di codice era ovviamente generata automaticamente.
Péter Török,

4

Di tanto in tanto mi occupo di commenti obsoleti. Certamente non è un mito urbano. La gente lo menziona negli elenchi delle peggiori pratiche non perché ti colpisce molto spesso ma perché quando lo fa, di solito ti costa molto tempo e fatica.

Nella nostra base di codice la maggior parte dei commenti obsoleti sono causati dall'uso del modello (anti) di descrizione del comportamento del metodo vicino alla sua chiamata e non vicino alla dichiarazione del metodo. Succede quando qualcuno estrae un lungo pezzo di codice in un metodo che viene chiamato solo una volta al momento e quindi commenta la chiamata del metodo. Quindi finisci con qualcosa del genere:

featureList = GetFeatures();

// Sorting features and deleting empty ones from the list...
ProcessFeatures(featureList);

E il metodo è dichiarato da qualche parte in basso senza commenti. Nel corso degli anni le persone si sono scontrate con questi metodi per gestire le modifiche alle specifiche e correggere i bug e alla fine si ottiene un metodo che non ordina l'elenco e genera un'eccezione quando trova la funzione vuota. Quindi il commento sopra è un commento obsoleto che alla fine ti costerà del tempo nel debugger. Ciò accade in alcune basi di codice.


3

Chiediti questo. Hai mai cambiato una riga di codice e non hai modificato i commenti associati o ne hai aggiunti di nuovi?

Ho lavorato con un sacco di codice legacy e i commenti a volte non sono nemmeno vicini al pertinente.


2

Per la maggior parte, la mia esperienza corrisponde alla tua, ma ho riscontrato un caso in cui ciò era vero in tutta la base di codice. Era un'app che era stata scritta anni prima da un negozio di consulenza che non era più "in buoni rapporti" con il cliente.

La società ha fatto un lavoro eccezionale commentando il codice, ma i programmatori che l'hanno mantenuto dal momento del trasferimento originale facevano parte della mentalità "cambia solo ciò che deve assolutamente essere cambiato" che di per sé non è male. Sfortunatamente, hanno mantenuto lo stesso atteggiamento anche nei confronti dei commenti, portando a una disconnessione piuttosto ampia tra i commenti e il codice nel tempo.


2

Non vedo troppi commenti descrittivi diventare obsoleti, ma vedo molti commenti TODO presenti da anni. Vorrei che fossero come capsule del tempo e dicessero qualcosa del genere:

//TODO: In 15 years AND NO SOONER... actually implement this method.

1
Il problema in questo caso è probabilmente l'uso improprio di TODO. Credo che i TODO dovrebbero essere usati solo quando il codice è effettivamente funzionante, ma i miglioramenti potrebbero essere apportati in un secondo momento, quindi TODO: implementnon dovrebbero esistere tipi di commenti e il fatto che nessuno sia effettivamente tornato non conta molto. Sfortunatamente, non molte persone aderiscono a questa regola e sono totalmente d'accordo che mi piacerebbe vedere un commento come se avessi pubblicato in qualche codice di produzione ad un certo punto. Sarebbe la mia giornata.
pwny

1
In C # uso NotImplementedException per questi scopi.
Steven Jeuris,

2
@pwny, utilizzo TODO solo su cose che ho intenzione di scrivere prima del check-in, per essere sicuro di coprirlo. Secondo me, qualsiasi cosa a più lungo termine appartiene a un bug tracker.
Karl Bielefeldt,

@Karl Bielefeldt Anche questo ha molto senso.
pwny

2

Negli ultimi 3 progetti a cui ho lavorato, ho trascorso diversi giorni a rimuovere tutti i commenti obsoleti, fuorvianti e semplicemente inutili dalla base di codice. Laddove possibile e necessario, li sostituisco con commenti più appropriati, ma il più delle volte si tratta solo di eliminare il commento e andare avanti.

Ho fatto lo stesso praticamente su ogni base di codice che io abbia mai preso in consegna da altri, di solito dopo che non è stato mantenuto per un po 'e che i proprietari originali se ne sono andati da tempo e / o non sono disposti o incapaci di fare il passaggio di consegne.


1

Potrebbe essere il declino nell'uso dei commenti. Quanto del codice di qualcuno si qualifica? Per uno, qualcuno deve effettivamente includere commenti per essere obsoleti. In secondo luogo, il codice che è stato commentato deve essere modificato. Non sono sicuro che un'alta percentuale di codice si qualifichi.

Devi solo fare affidamento su un brutto commento per rovinare una grande parte di un'applicazione e perdere molto tempo.


0

In un'organizzazione che produce molto codice, è difficile mantenere sincronizzati i commenti. Il modo migliore per capire cosa sta succedendo è usare software che disegnano il diagramma di flusso di controllo del modulo su cui stai lavorando. Questo è l'unico modo per avere un'idea di ciò che fa il software.

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.