Buona idea per inserire numeri di bug in un commento all'inizio del file sorgente? [chiuso]


40

È buona norma inserire i numeri di bug nel file stesso all'interno di un commento di intestazione?

I commenti sarebbero simili a questo:

 MODIFIED    (MM/DD/YY)
 abc 01/21/14 - Bug 17452317 - npe in drill across in dashboard edit mode

 cde 01/17/14 - Bug 2314558  - some other error description

Sembra utile, ma è considerata una cattiva pratica?


23
La domanda che vorrei porre è "Cosa puoi fare con i numeri di bug incorporati che non puoi già fare con il tuo database di bug?" Non riesco a pensare a nessun caso d'uso reale.
M. Dudley,


6
@JensG Ecco perché lo metti nel messaggio di commit e un logfile ti darà praticamente la stessa identica cosa, ma senza ingombrare il file ...
Izkata

1
@JensG E quando hai corretto punteggi o centinaia di difetti su un determinato file? La risposta ovvia è che annulli periodicamente gli ID non aggiornati, ma poi ritorni ad accedere al registro VC ...
dmckee

3
Questa domanda è l'oggetto dell'articolo di Ars Technica Dovremmo elencare i bug nell'intestazione di un file sorgente? (pubblicato 15 giorni dopo la pubblicazione di questa domanda).
Peter Mortensen,

Risposte:


107

L'ho già visto in precedenza, sia manualmente dagli autori che automaticamente da script e trigger integrati con i sistemi di controllo della versione per aggiungere al file autore, commento sul check-in e informazioni sulla data.

Penso che entrambi i metodi siano piuttosto terribili per due ragioni principali. Innanzitutto, aggiunge confusione e rumore al file, specialmente quando questi commenti invecchiano e diventano irrilevanti per lo stato corrente del file. In secondo luogo, si tratta di informazioni duplicate rispetto a quelle già gestite nel sistema di controllo della versione e, se si utilizza un moderno sistema di controllo della versione che supporta i set di modifiche, in realtà sta perdendo informazioni sulle modifiche.

Semmai, considera l'integrazione con il tuo sistema di localizzazione dei difetti. Alcuni strumenti consentono di collegare un difetto o un numero ID attività in un commento di check-in a un elemento nello strumento di monitoraggio. Se nello strumento sono presenti tutti i difetti, le richieste di miglioramento e le attività lavorative, è possibile fornire tale collegamento. Naturalmente, questo ha il rovescio della medaglia di una dipendenza da quegli strumenti per il progetto.


2
"e se stai utilizzando un moderno sistema di controllo della versione che supporta i set di modifiche, in realtà sta perdendo informazioni sulle modifiche." - Puoi approfondire per favore?
Geek

10
@Geek Non sono sicuro di cosa spiegare. Se si guarda un file che fa riferimento a un numero ID bug, non si vedono altre modifiche ai file a causa dello stesso difetto a meno che non si eseguano ricerche nei file. Ecco cos'è un set di modifiche: una raccolta di file archiviati insieme.
Thomas Owens

9
Aggiungo anche che se si passa a un nuovo sistema di tracciamento dei bug, quei numeri diventano immediatamente privi di valore. Mi sono imbattuto in quello nel mio attuale lavoro in cui alcuni commenti hanno numeri dal software di tracciamento dei bug che non è stato usato da 10 anni.
17 del 26

2
Quindi, dopo essere passati al nuovo sistema di tracciamento dei bug, diventano utili come se non fossero mai stati lì. Ma supponendo che abbiano fornito un certo valore ad un certo punto e non fornisca alcun valore negativo ora, perché non farlo?
Cruncher,

@ 17of26 - Immagino che potresti collegare vecchi bug / problemi a nuovi, se non attraverso altri meccanismi se non come un commento come "vecchio bug tracker bug 1234".
Kenny Evitt,

42

Esiste esattamente un caso in cui lo farei, vale a dire come parte di un avvertimento per i futuri programmatori: "Non chiamare la funzione foo() direttamente la qui; questo ha causato il bug # 1234, vale a dire ...", e quindi una breve descrizione del il bug segue.

E se il codice è cambiato in modo tale da non essere tentato di chiamare foo()direttamente, rimuovi quel commento. Avrebbe solo irritato e fatto saltare in aria il codice.


19
Forse sono un po 'duro, ma se foo()non dovesse essere chiamato direttamente, allora il codice dovrebbe essere strutturato in modo tale da non poter essere.
MetaFight

20
Oh, ho provato a scrivere qualcosa come esempio, per rendere il testo più concreto - non prendermi troppo alla lettera. Un caso migliore sarebbe un caso in cui hai utilizzato una libreria esterna e la funzione che normalmente utilizzeresti per uno scopo specifico aveva un bug. Quindi un commento "Non chiamare foo()qui" sarebbe ragionevole.
rem

16

È una pratica del tutto orribile. Aggiunge uno sforzo per ottenere un effetto che è pura duplicazione; in altre parole, l'unica cosa che aggiunge al solo utilizzo dei log di commit è la possibilità di creare incoerenze. I tuoi file sorgente diventano ingombri di quantità illimitate di cose che non guardi mai.

L'unico aspetto positivo che posso discernere è che potresti ricostruire la cronologia di origine senza accedere al controllo della versione, ad esempio quando studi una stampa. Ma pochissime persone sono abbastanza competenti per seguire le complessità dello sviluppo del software, mentre allo stesso tempo non sono in grado di comprendere il controllo della versione.


Quanti bug pensi che siano esattamente possibili in un file e se ce ne sono molti è probabilmente il momento di riscriverli.
Andy,

11

No.

Questo è ciò che le persone hanno fatto prima di usare un sistema di controllo della versione (cioè quando il codice sorgente era solo un backup nei file zip).


2
che era una specie di sistema di controllo della versione (e uno che ho visto utilizzato in modo operativo nelle software house fino al 2006, e senza dubbio è in uso da qualche parte oggi).
jwenting

1
@jwenting Ho visto domande su questo sito da persone abbastanza sfortunate da lavorare attualmente in negozi dove è pratica corrente :-(
Carson63000,

Usiamo un ottimo sistema di controllo del codice sorgente. Nessuno tranne me inserisce commenti durante il check in del codice. <shrug> Commento alcune cose (come PLSQL che non viene sempre monitorato da SCM). Commento il mio codice per spiegare, ma non lo ricollego mai a particolari bug, ma faccio sempre riferimento ai bug di SCM per inviare commenti quando eseguo il check-in. Spero che alla fine qualcuno lo apprezzerà.
Pedante

11

È, IMHO, una pessima idea. Dopo la revisione numero 100, avrai il 90% di commenti e il 10% di codice. Non lo considero pulito e leggibile.

L'unico punto in questo che vedo è quando devi scambiare il tuo codice tra SCC e, per qualsiasi motivo, non puoi trasferire la cronologia tra i due sistemi (ma anche quando salvi i commenti della cronologia in quel modo, perderai la cronologia delle differenze anche, quindi salvare i commenti ti aiuterà solo un po ').


8

Vedo che tutti sono contrari all'idea e hanno fornito una ragione storica (era pre-controllo dell'era) del perché le persone lo facessero.

Tuttavia, nella mia attuale azienda, gli sviluppatori di database stanno seguendo questa pratica e taggano ulteriormente il numero di bug attorno al pezzo di codice. A volte lo trovo utile quando vedi un bug nel codice e puoi scoprire immediatamente la correzione di bug che ha introdotto questo problema. Se non abbiamo tali informazioni nel mio pacchetto di database, non sarà certamente facile trovare la causa principale di tale implementazione.

Sì, ingombra il codice, ma aiuta a trovare il motivo per cui quel pezzo di codice è lì.


3
Assolutamente. A volte ho la leggera sensazione che i programmatori siano inorriditi dalla ridondanza, quindi evitano di avere le stesse informazioni accessibili in modi diversi. Questo è molto interessante, perché i programmatori sono in genere anche inorriditi da cattive prestazioni e quindi usano le cache nei loro programmi. Ma la memorizzazione nella cache dei numeri di bug nel codice accanto al luogo in cui sono più utili è considerata negativa? Mmmh.
JensG,

C'è spesso un altro modo per ottenere quelle informazioni (sul progetto a cui sto lavorando, sarebbe quello right click > Team > Show Annotationsdi ottenere la colpa git del file corrente), ma la differenza è che con i commenti c'è la scoperta - possono saltare fuori da te - e con le annotazioni, devi consapevolmente decidere di andare a cercarle.
David Conrad,

Pensa, decidi, fai clic, fai clic, fai clic, scorri. Ecco perché ho detto "memorizzazione nella cache del codice". Se è lì, lo vedo e basta.
JensG,

2
@JensG Punto di vista interessante. Le cache possono migliorare le prestazioni ma hanno anche un costo di trasporto. Se la cache deve essere riempita, aggiornata, invalidata, svuotata e così via da uno sforzo umano ridondante, metterei in dubbio il rapporto costi-benefici, soprattutto considerando quanto terribili siano gli umani nel mantenere sincronizzate tali costruzioni denormalizzate.
Jeffrey Hantin,

7

Uno dei punti del test Joel è

Hai un database di bug?

Tali informazioni potrebbero essere conservate in un database di bug se si ritiene che siano importanti, ma sarebbero solo rumorose nei commenti.


1
Vedi l'esempio nella domanda - i commenti farebbero riferimento al database dei bug ...
Izkata

@Izkata Ma questo è il punto. Il database stesso può avere un campo "commento" con il commento. La domanda non è di avere o meno un database di bug, ma se è una buona idea conservarlo nel file sorgente. Penso che, anche se sono commenti, dovrebbero essere conservati nel database stesso perché è quello che serve.
Pierre Arlaud,

6

Penso che tu abbia due problemi qui. Innanzitutto, perché dovresti semplicemente fare affidamento sul diff quando la maggior parte dei sistemi ti consente di inserire commenti di revisione? Come buoni commenti in codice, scopri perché la modifica è stata apportata e non solo la modifica stessa.

In secondo luogo, se si dispone di questa capacità, è consigliabile metterli tutti nello stesso posto. Non è necessario cercare nel file le linee di codice contrassegnate che non sono più necessarie. I commenti all'interno del codice di lavoro sono lì per dirti perché è codificato in questo modo.

Una volta messo in pratica, le abitudini formate rendono la base di codice più facile da lavorare per tutti.

Il rilevamento di bug e funzionalità associato e il motivo per cui stai modificando questo file, possono darti un'idea di quanto sia necessario approfondire la cronologia e possibilmente guardare le differenze. Ho ricevuto una richiesta per "Tornare alla formula originale". Sapevo bene dove andare nella cronologia delle revisioni e ho solo recensito una o due differenze.

Personalmente, il codice annotato sembra un work in progress per un problema che viene risolto da tentativi ed errori. Elimina questo pasticcio dal codice di produzione. Essere in grado di scivolare facilmente dentro e fuori le righe di codice rende solo più facile essere confusi.


2

Se non hai VCS con messaggi di commit e nessun sistema di tracciamento dei bug con un'opzione per lasciare commenti, è un'opzione, e non quella ottimale, per tenere traccia delle modifiche.
Meglio avere un foglio di calcolo con quelle informazioni, o se ti trovi in ​​un ambiente senza tali "lussi", un file di testo che si trova da qualche parte vicino alle tue fonti.
Ma consiglio vivamente se ti trovi in ​​un ambiente simile per iniziare a costruire un caso per investire in un sistema VCS e di tracciamento dei bug :)


2

Tienilo a mente: il codice è spesso più lungo degli strumenti che lo supportano. Detto diversamente, i tracker dei problemi, il controllo della versione e tutti gli altri script si evolveranno nel corso dello sviluppo. Le informazioni si perdono.

Mentre sono d'accordo, il disordine dei file è fastidioso, aprire un file e comprenderne la storia senza ricorrere all'uso degli strumenti, è sempre stato molto utile, specialmente se sto mantenendo il codice.

Personalmente, penso che ci sia spazio sia per gli strumenti che per il registro nel codice.


2

So che Git non lo fa e la semplice risposta è "perché mai andrebbe lì?"

È un design meno modulare in generale. Con questa soluzione, ora i file sono un mix tra contenuto e metadati. Amazon S3 è un altro esempio di servizio per l'archiviazione di file che non aggiunge front-matter YAML o simili ai file.

Ogni utente di un file deve prima elaborarlo attraverso il sistema di controllo della versione. Si tratta di un accoppiamento stretto, ad esempio il tuo IDE preferito si romperà se non supporta il tuo VCS.


2

No, non è una buona pratica tenere traccia delle correzioni dei bug come commenti nel codice. Questo genera solo disordine.

Dico lo stesso anche per il messaggio sul copyright che hai citato. Se nessuno al di fuori della tua azienda vedrà mai questo codice, non c'è motivo di includere un messaggio sul copyright.

Se si utilizza il software di monitoraggio della versione ( Git , SVN , ecc.), È necessario includere tali note nei messaggi di commit. Nessuno vuole scavare tra le intestazioni di ogni file di codice per generare note di rilascio o vedere una panoramica delle modifiche apportate. Questi registri delle modifiche devono essere archiviati tutti insieme, nella cronologia di tracciamento della versione, nel rilevatore di difetti o in entrambi.

Se stai cercando una buona lettura su questo argomento, ti consiglio il capitolo quattro di Clean Code .


Le notifiche sul copyright sono anche lì per (leggermente ridondanti) mettere in guardia i dipendenti che il file appartiene al datore di lavoro. E forse scoraggia sharing illegale (anche da parte dei dipendenti), a giudicare da quante persone sembrano pensare che il copyright si applica solo se v'è un avviso.
Bernd Jendrissek,

1

Penso che ci siano altri elementi in questa discussione che sono spesso dimenticati ma sono casi in cui alcuni commenti di revisione sono rapidi per una squadra.

Quando si lavora in un ambiente di team con una base di codice condivisa e in cui diversi membri del team lavorano potenzialmente nelle stesse aree di codice, inserire un breve commento di revisione nell'ambito (metodo o classe) corretto indicando che è stata apportata una modifica può essere molto utile per risolvere rapidamente i conflitti di unione o di registrazione.

Allo stesso modo, quando si lavora in un ambiente in cui sono coinvolti diversi rami (funzionalità), per una terza persona (build master) è più facile identificare cosa fare per risolvere potenziali conflitti.

Ogni volta che devi allontanarti dall'IDE e chiedere a qualcuno perché hanno cambiato qualcosa, ciò disturba la produttività di entrambi i membri del team. Una breve nota nell'ambito corretto può aiutare a ridurre o eliminare la maggior parte di questa interruzione.


3
la domanda riguarda il commento all'inizio del file sorgente, subito dopo il messaggio sul copyright - questo non ha nulla a che fare con i commenti negli ambiti più ristretti
moscerino

Tutte le risposte qui parlano proprio di questo, però. Se apporto modifiche significative all'intero file di classe (rimontaggio o correzione della formattazione), non commenterei il file di classe come ambito?
StingyJack,

0

Qualsiasi informazione sui bug direttamente associata a un pezzo di codice, diventa irrilevante quando l'integrità dell'intera modifica viene modificata da una correzione successiva.

Una volta era comune aggiungere informazioni nel riepilogo delle funzioni quando dovevamo fare affidamento su strumenti esterni (ad esempio javadocs) per creare note di rilascio dal codice. È principalmente inutile o ridondante con gli strumenti di controllo della versione moderna.

Potrebbe avere senso solo come un commento in un pezzo di codice molto modulare, se si dovesse ricorrere a un codice oscuro o non stellare che i futuri sviluppatori sarebbero tentati di cambiare - ignari del motivo che sta dietro - come in una soluzione alternativa a un bug / difetto della libreria.


0

Sicuramente non metterei tali informazioni all'inizio del file - di solito una cosa del genere appartiene a un sistema di ticket.

Vi sono tuttavia alcuni casi in cui i riferimenti al sistema dei biglietti e / o altra documentazione hanno senso. Ad esempio, se esiste una lunga spiegazione del progetto o una descrizione delle alternative. O informazioni su come testare le cose o spiegazioni sul perché sia ​​stato fatto esattamente in questo modo. Se è breve, appartiene al file stesso; se è lungo e / o riguarda un'immagine più grande, probabilmente vorrai metterlo altrove e fare riferimento a esso.


questo non sembra aggiungere un valore sostanziale a ciò che è già stato pubblicato nelle risposte precedenti
moscerino

0

Il progetto a cui sono attualmente assegnato al lavoro aveva questo tipo di elenco di numeri di bug all'inizio di ogni file; tuttavia, nessuno degli sviluppatori ancora presenti nel progetto lo accoda più. La maggior parte di loro pensa che sia uno spreco di spazio inutile, in quanto è di gran lunga inferiore al tracciamento dei bug di commit in un file utilizzando il nostro sistema di controllo della versione.

In alcuni file critici che hanno subito molte correzioni e miglioramenti, questi elenchi sono diventati così grandi che è necessario scorrere oltre per ottenere il codice. Quando si grepping questi elenchi possono causare diversi falsi positivi in ​​quanto un titolo breve o una breve descrizione sono elencati con ciascuno.

In breve, questi elenchi sono nella migliore delle ipotesi inutili e nella peggiore delle ipotesi uno spreco di spazio enorme e caotico che rende il codice più difficile da cercare e individuare.

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.