È una recensione del codice che usa solo commenti di codice una buona idea?

16

Presupposti

  • Il team utilizza DVCS
  • IDE supporta l'analisi dei commenti (come TODO ed ecc.)
  • Strumenti come CodeCollaborator sono costosi per il budget
  • Strumenti come gerrit sono troppo complessi per l'installazione o non utilizzabili

Flusso di lavoro

  • L'autore pubblica da qualche parte sul ramo di funzionalità di repository centrale
  • Il revisore lo preleva e avvia la revisione
  • In caso di domande / domande, scrivi un commento con un'etichetta speciale, come "REV". Tale etichetta NON DEVE essere nel codice di produzione - solo nella fase di revisione:

    $somevar = 123;
    // REV Why do echo this here?
    echo $somevar;
    
  • Quando il revisore termina i commenti dei post - si limita a inviare messaggi stupidi con "commenti" e respinge

  • L'autore richiama il ramo di funzionalità e risponde ai commenti in modo simile o migliora il codice e lo spinge indietro
  • Quando i commenti "REV" sono passati, possiamo pensare che la revisione è terminata con successo.
  • L'autore rebases in modo interattivo il ramo di una caratteristica, lo schiaccia per rimuovere quei commit di "commenti" e ora è pronto per unire la funzione per sviluppare o eseguire qualsiasi azione che normalmente potrebbe essere eseguita dopo una recensione interna di successo

Supporto IDE

So che i tag di commento personalizzati sono possibili in Eclipse & NetBeans. Certo, dovrebbe anche essere nella famiglia blablaStorm.

Domande

  1. Pensi che questa metodologia sia valida?
  2. Sai qualcosa di simile?
  3. Che cosa può essere migliorato in questo?
posta gaRex 04.10.2012 - 03:29
fonte

3 risposte

14

L'idea è in realtà molto bella. Contrariamente ai flussi di lavoro comuni, mantieni la recensione direttamente nel codice, quindi tecnicamente non hai bisogno di altro che di editor di testo per utilizzare questo flusso di lavoro. Anche il supporto nell'IDE è bello, soprattutto la possibilità di visualizzare l'elenco di recensioni in basso.

Ci sono ancora alcuni svantaggi:

  • Funziona bene per team molto piccoli, ma i team più grandi richiederanno il monitoraggio su ciò che è stato rivisto, quando, da chi e con quale risultato. Sebbene tu abbia effettivamente questo tipo di tracciamento (il controllo della versione ti permette di sapere tutto), è estremamente difficile da usare e cercare e spesso richiede una ricerca manuale o semi-manuale attraverso le revisioni.

  • Non credo che il revisore abbia abbastanza feedback da parte del recensore per sapere come sono stati effettivamente applicati i punti recensiti .

    Immagina la seguente situazione. Alice sta rivedendo per la prima volta il codice di Eric. Si accorge che Eric, un giovane sviluppatore, ha usato la sintassi che non è il più descrittivo nel linguaggio di programmazione effettivamente utilizzato.

    Alice suggerisce una sintassi alternativa e invia il codice a Eric. Riscrive il codice utilizzando questa sintassi alternativa che crede di capire correttamente e rimuove il commento // BLA corrispondente.

    La prossima settimana, riceverà il codice per la seconda recensione. Riuscirà a ricordare che ha fatto questa osservazione durante la sua prima recensione, per vedere come l'ha risolta Eric?

    In un processo di revisione più formale, Alice ha potuto immediatamente vedere che ha fatto un'osservazione e vedere il diff del codice pertinente, per notare che Eric ha frainteso la sintassi di cui lei gli parlava.

  • Le persone sono ancora persone. Sono abbastanza sicuro che alcuni di questi commenti finiranno nel codice di produzione e alcuni rimarranno come una spazzatura mentre sono completamente obsoleti .

    Naturalmente, lo stesso problema esiste con qualsiasi altro commento; per esempio ci sono molti commenti TODO in produzione (incluso il più utile: "TODO: Comment the code below."), e molti commenti che non sono stati aggiornati quando il codice corrispondente era.

    Ad esempio, l'autore originale del codice o il revisore potrebbe andarsene, e il nuovo sviluppatore non capirebbe cosa dice la recensione, quindi il commento rimarrà per sempre, in attesa che qualcuno sia troppo coraggioso per cancellarlo o per in realtà capisco cosa dice.

  • Questo non sostituisce una recensione faccia a faccia (ma lo stesso problema si applica anche a qualsiasi altra recensione più formale che non viene eseguita faccia a faccia).

    Specialmente, se la recensione originale richiede una spiegazione, il revisore e il recensore inizieranno una sorta di discussione . Non solo ti troverai con grandi commenti BLA, ma anche quelle discussioni inquinano il registro del controllo della versione .

  • Potresti anche riscontrare problemi minori con la sintassi (che esiste anche per i commenti di TODO). Ad esempio, cosa succede se un lungo commento "// BLA" viene generato su più righe e qualcuno decide di scriverlo in questo modo:

    // BLA This is a very long comment which is way beyond 80 characters, so it actually
    // fills more then one line. Since the next lines start with slashes, but not "BLA"
    // keyword, the IDE may not be able to show those lines, and display only the first one.
    
  • E infine come una nota minore e molto personale: non scegliere "BLA" come parola chiave. Sembra brutto. ;)

risposta data 04.10.2012 - 05:24
fonte
4

Vorrei integrare i commenti nel codice con un documento di accompagnamento. Ciò riassumerebbe i risultati e continuerà a vivere dopo la rimozione dei commenti. I vantaggi di questo sarebbe:

  • compattezza. Se la persona di solito non riesce a controllare che un puntatore non sia nullo (o qualche altro errore di principiante nella lingua che stai usando) il revisore può lasciare decine di commenti REV in tal senso, e nel documento può dire " Ho trovato 37 posti in cui i puntatori non sono stati controllati per primi "senza elencarli tutti
  • luogo di lode. Un commento come REV this is a nice design sembra un po 'strano, ma le mie recensioni del codice spesso includono l'approvazione e le correzioni
  • interattività. Il tuo commento campione è "perché hai fatto questo?" ed è molto tipico. Un approccio solo per i commenti non supporta una conversazione. La persona può modificare il proprio codice ed eliminare il commento, oppure eliminare il commento. Ma "perché l'hai fatto?" e "per favore cambia questo, è sbagliato" non sono la stessa cosa.
  • tenere un registro. Un revisore successivo può verificare se il codice è stato effettivamente modificato o se i commenti sono stati rimossi. Possono anche verificare che i commenti siano stati "presi in carico" e lo sviluppatore non stia facendo più gli stessi errori in una recensione successiva.

Utilizzerei anche un elemento di lavoro per eseguire la revisione e rispondere alla revisione e associarvi i controlli. Ciò semplifica la ricerca dei commenti in un vecchio changeset e la visualizzazione di ciascuno in un altro changeset.

    
risposta data 04.10.2012 - 13:14
fonte
2

Altri hanno parlato dei limiti di questo approccio. Hai detto che strumenti come gerrit erano difficili da installare - ti suggerisco di dare un'occhiata a phabricator (http://www.phabricator.com). Questo è il sistema di revisione del codice usato da Facebook da anni, ed è stato recentemente aperto. Non è difficile da installare, ha eccellenti flussi di lavoro e risolve tutti i problemi menzionati negli altri commenti.

    
risposta data 05.10.2012 - 00:33
fonte

Leggi altre domande sui tag