La revisione del codice è una buona pratica?


32

Quando la società in cui lavoro assumeva nuovi manager, ci hanno offerto di fare una panoramica del codice di qualcuno in ogni riunione. Abbiamo incontri ogni due settimane, quindi ogni volta che uno degli sviluppatori mostrava il proprio codice sul proiettore e altri ne discutevano.

Ho pensato che sarebbe stato fantastico: ogni sviluppatore avrebbe prestato maggiore attenzione durante la scrittura del codice e avremmo potuto condividere meglio la nostra esperienza. Ma in qualche modo ci siamo dimenticati di questo e l'offerta è rimasta un'offerta.

Quali sono i vantaggi di questo e ci sono degli svantaggi?


9
Sembra una recensione di codice informale / informale e la revisione del codice è una buona cosa (tm). Abbiamo anche un sito affiliato per le revisioni del codice.
yannis,

@ElYusubov, il commento deve essere sotto la risposta di Oded, immagino)))
superM

2
Supporta un ambiente di apprendimento. È tanto per gli spettatori quanto per gli scrittori.
MathAttack,

3
Finché rimane collaborativo, è una buona pratica. Ci sono alcune culture aziendali (su o fuori) in cui i colleghi sono concorrenti interni. In queste circostanze, le revisioni del codice richiedono abilità sociali / politiche oltre alle capacità tecniche. In tal caso direi che è troppo stressante. Le migliori recensioni di codice sono quelle informali tra colleghi: "hey ho appena ricevuto un aggiornamento e ho visto il codice che hai registrato ieri. Forse sarebbe un'idea migliore se tu ... anziché ...". Collaborativo e utile, non competitivo. L'idea del proiettore sembra in qualche modo un'escursione "buttiamo il pomodoro".
Louis Somers,

2
Uno dei principali vantaggi delle revisioni del codice è che scrivi automaticamente un codice migliore se sai che verrà trasmesso in pubblico.
James Anderson,

Risposte:


52

Le revisioni del codice sono un'ottima pratica.

È probabilmente il modo migliore per imparare dagli errori e vedere come determinati problemi vengono risolti da altri. È anche uno dei modi migliori per mantenere la qualità in una base di codice.

Le revisioni del codice avvengono in molte aziende, anche se è difficile dire che esiste un processo specifico che tutte seguono.

Nella revisione del codice più formale, un anziano (o diversi anziani) siederà con uno sviluppatore per rivedere il proprio codice, offrendo suggerimenti e insegnamenti allo stesso tempo.

Ulteriori vantaggi delle revisioni del codice (come commentato per questa domanda), includono:

  • Un ottimo modo per insegnare e imparare
  • Sono uno dei modi migliori per migliorare e mantenere la coerenza di una base di codice (stile e modi di dire)
  • Aiutano a garantire che tutti i membri del team comprendano lo stile e i modi di dire usati nel progetto e come usarli
  • Le revisioni del codice accelereranno lo sviluppo man mano che individuano errori e creano difetti in anticipo (quindi, sebbene possano rallentare lo sviluppo iniziale, pagano dividendi nei cicli di sviluppo successivi)
  • Esiste un supporto per gli strumenti che aiuta a semplificare il processo di revisione del codice

1
Sì, le recensioni dei codici sono buone. Ma non rallenterà gli sviluppatori?
Radu Murzea,

4
@SoboLAN - Se le revisioni del codice significano che i bug vengono individuati in precedenza e che i cattivi progetti vengono corretti prima che abbiano la possibilità di andare in produzione, cosa ne pensi?
Oded,

9
@SoboLAN: qualità, velocità, prezzo: scegli uno qualsiasi.
Den

6
È anche il modo migliore per migliorare e mantenere la coerenza della base di codice, vale a dire garantire che i membri del team comprendano e condividano gli idiomi di codifica preferiti nel progetto e li utilizzino correttamente.
Péter Török,

4
@SoboLAN: nella mia esperienza, le revisioni del codice accelerano gli sviluppatori. Catturi più bug, più velocemente e riesci ad armonizzare le tue soluzioni con quello che fanno gli altri sviluppatori.
Tynam,

15

Le revisioni del codice sono uno strumento molto utile per l'apprendimento , specialmente quando si ha a bordo un nuovo membro del team. Bene, è anche noto come processo di revisione tra pari :)

Esistono diversi tipi di revisioni del codice:

  • Over-the-spalla - dove uno sviluppatore guarda oltre la spalla dell'autore del codice mentre quest'ultimo cammina attraverso il codice.
  • Pass-around e- mail: il sistema di gestione del codice sorgente invia automaticamente il codice ai revisori dopo aver effettuato il check-in. Estratto dal commento: non sono riuscito a convincere il management ad allocare il tempo per qualsiasi tipo di revisione formale del codice e ho preso in considerazione le modifiche dei miei colleghi ogni volta che ho rimosso le nuove revisioni dal controllo del codice sorgente utilizzando gli strumenti di cronologia / diff integrati in Tortise
  • Programmazione di coppia - Due autori sviluppano il codice insieme sulla stessa workstation, cosa comune nella programmazione estrema.
  • Revisione del codice assistita da strumenti : autori e revisori utilizzano strumenti specializzati progettati per la revisione del codice peer.

C'è solo uno in associated disadvantagecui le revisioni formali del codice richiedono un investimento considerevole in preparazione dell'evento di revisione e dei tempi di esecuzione.

Più riferimenti sono elencati di seguito (per letture di immersioni più profonde)


1
Il tuo secondo proiettile potrebbe essere ampliato. Avendo fallito nel convincere il management ad allocare tempo per qualsiasi tipo di revisione formale del codice, ho preso in considerazione le modifiche dei miei colleghi ogni volta che toglievo nuove revisioni dal controllo del codice sorgente usando gli strumenti di cronologia / diff integrati in Tortise.
Dan Neely,

@DanNel vero commento, lo includerò di sicuro.
EL Yusubov,

11

Quella pratica particolare sembra inefficiente e probabilmente imbarazzante - chi vuole che i loro errori siano segnalati a un intero gruppo di persone. Quindi, se non riescono a scegliere ciò che deve essere rivisto e il codice non è ancora in produzione, questo probabilmente metterà a disagio le persone.

A seconda di quando il codice viene rivisto, può fare una grande differenza nel fatto che i commenti di revisione del codice lo facciano o meno nel codice. Se lo sviluppatore può scegliere e scegliere solo il codice di produzione, è improbabile che i commenti delle recensioni vengano implementati. È bello avere incontri in cui gli sviluppatori possono mettere in mostra alcune tecniche ingegnose a cui hanno appreso che altre persone sarebbero interessate, ma non si tratta di revisione del codice. Questo è allenamento.

Eseguiamo la revisione del codice di ogni pezzo di codice prima che venga spostato nel QA. Ogni pezzo. Coinvolge generalmente solo il revisore del codice e lo sviluppatore. Non passa al QA fino a quando il revisore del codice non lo passa formalmente. Quindi lo sviluppatore deve apportare le modifiche. Abbiamo trovato e risolto rapidamente molti problemi che il QA potrebbe non aver trovato (trovano anche cose che non vediamo anche nella revisione del codice). Inoltre, riduce la codifica dei cowboy e identifica rapidamente le persone che non si comportano bene in modo da poter risolvere i loro problemi e allenarli o eliminarli prima che possano danneggiare la nostra applicazione. Il tempo di revisione del codice fa parte della nostra stima del tempo durante la pianificazione del lavoro, quindi non influisce affatto sulla scadenza. E in realtà, fa risparmiare tempo nel lungo periodo perché prima si trova un problema, più è facile da risolvere.

Personalmente ho insegnato agli sviluppatori meno esperti molte tecniche migliori attraverso la revisione del codice e ho imparato alcune tecniche migliori esaminando il codice di altre persone e i loro commenti sul mio codice. Un'ulteriore revisione del codice garantisce che qualcun altro capisca il codice che contribuisce notevolmente a renderlo più gestibile. A volte, il codice funziona ma le domande della recensione chiariscono che ci saranno problemi di manutenzione perché il codice è difficile da capire. Meglio rifattorizzare in quei casi mentre è ancora tutto nuovo nella tua mente rispetto a un anno dopo quando anche l'autore del codice viene lasciato a grattarsi la testa e chiedersi perché il codice fa così e così.


Sono assolutamente d'accordo con te, ma spero che il nostro team sia abbastanza professionale, non mi vergogni, ma impari.
superM,

2
Finalmente una risposta ragionevole. Ho trovato molto più efficace fare revisioni solo con lo sviluppatore e un singolo revisore che farlo in gruppo. In questo modo è molto più facile gestire gli errori per entrambe le parti e puoi occasionalmente scivolare nella programmazione in coppia senza perdere tempo negli altri del gruppo.
x4u,

5
@superM, la regola è "lode in pubblico, critica in privato" per un motivo.
HLGEM,

+1 per i tempi. La cosa migliore è codificare a coppie, testare prima. Ma in ogni caso vuoi rivedere il codice mentre sei ancora disposto a riscriverlo. C'è poco senso nel riesaminare il codice se non si è disposti a fare una pulizia importante. Sono stato in recensioni di codice in cui lo sviluppatore originale aveva preso più di 50 righe di codice per reimplementare una funzione di libreria. Ma dato che quel codice era stato testato, non era permesso sostituire le 50 linee non necessarie con una singola chiamata di funzione! Questo trasforma un programma da 10.000 linee che può essere gestito da mezzo sviluppatore in un programma da 100.000 linee che ne richiede quattro.
Kevin Cline il

8

Il problema con questo tipo di revisione del codice, uno sviluppatore ogni due settimane, i progressi saranno lenti. Potrebbero passare mesi prima che tutti abbiano avuto una svolta sotto i riflettori.

Mentre le revisioni del codice possono essere buone, ci deve essere un motivo dietro e la procedura per eseguirle.

Diverse questioni dovrebbero essere decise:

  • Chi sceglierebbe lo sviluppatore e quanta notifica verrebbe data. Nessun avviso sono trappole.
  • Chi sceglierebbe la parte di codice da rivedere: gestione, sviluppatore senior del progetto o sviluppatore da rivedere.
  • È lo scopo di insegnare alla persona il cui codice è sul proiettore come fare qualcosa di meglio, o è lo scopo per la persona il cui codice è sul proiettore di insegnare a tutti gli altri nella stanza come migliorare il loro codice.
  • Quale percentuale di codice verrà esaminata in questo modo, farà parte del processo di QA?

Se le persone che hanno proposto questo piano non hanno già le risposte a queste domande, è possibile che leggano un articolo su come tutte le grandi aziende fanno le revisioni del codice, quindi dovremmo farlo anche senza capire lo scopo dietro di loro.


3

La revisione del codice è un'ottima pratica, solo quando l'idea per la revisione del codice viene dal team di sviluppo. Gli sviluppatori non hanno bisogno di proiettori e presentazioni per rivedere l'altro codice. Se lo desiderano, preferiranno andare in conferenza.

Quando l'idea della revisione del codice viene dalla direzione, può sembrare un'indagine sulla bassa qualità del software e può demoralizzare il team di sviluppo. Non penso che il management team debba essere coinvolto nel processo di revisione del codice. Revisione del codice fianco a fianco con il management team - pratica molto negativa, omicida e distruttiva.


2

La revisione del codice è una pratica eccellente, in particolare se viene fatta dagli sviluppatori per condividere le conoscenze e le regole di base sono stabilite in anticipo che suggerimenti e critiche sono pensati per essere COSTRUTTIVI e non usare un singolo sviluppatore per la pratica target.

I manager che non sono sviluppatori saranno accolti con sospetto dagli sviluppatori se decidono di fare revisioni del codice. La maggior parte dei tipi di manager non vorranno entrare nei dettagli che gli sviluppatori hanno intrinsecamente quando guardano il codice. La maggior parte dei manager non capirà perché gli sviluppatori criticano un approccio rispetto all'altro.

Se vuoi mostrare il buon lavoro che gli sviluppatori stanno facendo alla direzione, allora "revisione del codice" ha un significato diverso e non dovrebbe essere così dettagliato come la revisione del codice che viene fatta per istruire / migliorare la qualità del codice tra gli sviluppatori. Questo tipo di presentazione potrebbe essere utile per dimostrare cosa fanno gli sviluppatori se la presentazione può essere di livello superiore e meno specifica del codice, concentrandosi su ciò che i manager comprendono (valore, ROI, ecc.). Potrebbe far capire ai manager che Joe ha aggiunto un valore significativo all'azienda costruendo X, che possiamo mostrare per risparmiare tempo Y o Z dollari per ordine, ecc. Penso che valga la pena di mostrare il valore dell'individuo membri della tua squadra. Ricorda, tuttavia, che devi stare attento a non sopraffare il tuo pubblico con gergo o troppi livelli di dettaglio.


1

Anche se concordo pienamente sul fatto che le revisioni del codice sono molto costruttive per l'insegnamento, vorrei comunque sottolineare, per me, è garantire che i modelli di progettazione del team siano seguiti correttamente.

Scriviamo un piccolo prototipo e rielaboriamo frammenti di codice e, mentre alla fine ci sentiamo a nostro agio con il prodotto, la leggibilità è stata danneggiata - le persone non possono guardarlo e vedere chiaramente cosa sta succedendo.

Gli occhi indipendenti sono sempre utili, trovo che rimani bloccato in alcuni modi di pensare e questo è a tutti i livelli di esperienza. Hai investito ore nella progettazione e nel codice e quindi è difficile gestire le revisioni del codice quando c'è la paura che i tuoi sforzi vengano eliminati. Eppure alla fine, si spera, si finisce con un'applicazione più pulita, più snella e più gestibile e l'esperienza è radicata in te.

Per il nostro team facciamo come indicato da @ElYusubov e utilizziamo uno strumento specifico per Code Review - Crucible. Le persone esaminano, commentano e firmano il codice. Ogni settimana ci sediamo e rivediamo faccia a faccia pezzi di codice interessanti e / o complessi.


+1 possiamo tutti 'farlo funzionare' ma si tratta più di assicurarsi che il codice sia leggibile e gestibile, in particolare seguendo le convenzioni. Non è il lavoro più eccitante ma molto prezioso.
Kirk Broadhurst,

1

Come tirocinante di ingegneria del software, ho trovato le recensioni di codice estremamente utili.

Nel mio team, è necessaria una revisione del codice per ogni commit (i grandi cambiamenti finiscono per essere formali, i piccoli cambiamenti finiscono per essere "quick look"). Sicuramente mi sento come se le mie costolette di ingegneria / progettazione fossero state potenziate da questo, soprattutto perché ho più probabilità di estrarre immediatamente la lavagna rispetto al terminale poiché so di essere "guardato". :)

In effetti, penso che produca un codice molto migliore con l'unico leggero svantaggio che è un tempo di sviluppo leggermente più lento (che a mio avviso, ne vale la pena nel lungo periodo quando non è necessario correggere / estendere un codice progettato in modo terribile). Inoltre, penso che se hai junior / stagisti nella squadra apprezzeranno la possibilità di un feedback prezioso. Lo so che lo faccio!


Ho lavorato per solo / già 1,5 anni e voglio quelle recensioni di codice per motivi simili. ))
superM il

1

Dalla mia esperienza, Code Review è davvero una grande cosa se la esegui bene. Quando hai membri del team e manager professionisti / maturi. Noi programmatori siamo "risolutori di soluzioni". Il nostro compito non è quello di creare righe di "testo". Ecco perché dobbiamo condividere idee, errori, problemi, esperienze. La revisione del codice è davvero una buona pratica per raggiungere questo obiettivo.

Purtroppo suona alla grande, ma è davvero difficile da implementare nella maggior parte delle aziende. La tua squadra ha bisogno di molta "autonomia". Convincere i tuoi dirigenti o il tuo dipartimento finanziario che non è proficuo creare nuove funzionalità sembra difficile.

Nella mia azienda stiamo provando a fare un po 'di revisione del codice. Ma si passa troppo tempo a "rincorrere il coniglio" (creare funzionalità).


"Chasing the rabbit" mi sembra molto familiare)). ma spero ancora che riusciremo a introdurre la revisione del codice, soprattutto quando ai nostri manager non dispiace affatto.
superM

1

Oggigiorno gran parte dei controlli di tipo e di sintassi di base vengono rilevati utilizzando gli strumenti (FXCop ecc.).

Tuttavia, le revisioni del codice sono buone, specialmente con i nuovi membri di un team, cose complesse o di grande impatto (ad esempio qualcosa che sarà evidente a persone importanti se falliscono o causano un impatto aziendale) e specialmente quando si esternalizzano o si utilizzano appaltatori a breve termine (specialmente di nuovo quando sono madrelingua poiché errori di traduzione / problemi di lingua possono consentire al software di superare tutti i test ma non fare esattamente ciò che dovrebbe).

Non sono un fan di mettere il codice su un proiettore per far sì che una squadra possa passare - molto meglio avere una riunione di revisione del codice in cui un altro membro del team (responsabile della squadra ecc.) Passa attraverso un elenco con lo sviluppatore. Questo ha un impatto su meno persone - blocca molto tempo sprecato su argomenti di stile - ed è meno imbarazzante per gli sviluppatori. È più costruttivo e più facile per lo sviluppatore assorbire problemi reali e non essere accecato da "Avrei fatto questo ..." sorta di commenti.

Penso anche che le revisioni non forzate del codice - come mettere il codice su una condivisione o inviarlo via e-mail nella speranza che qualcuno rinunci all'ora di pranzo per passarci attraverso - sia una perdita di tempo.

Sedersi con una pila di elenchi, un pennarello e una tazza di caffè nell'area del caffè è ottimo per questo.


0

Questo tipo di spettacolo collettivo sarebbe utile per le nuove tecnologie o per ottenere diversi jr. si dedica alla velocità, ma non credo sia buono come una revisione coerente del nuovo codice. È più efficiente doverlo fare uno a uno.


-2

La revisione del codice aiuta a vedere "l'intero". Gli sviluppatori separati hanno la tendenza a vedere solo i loro requisiti / problemi. CR scopre idee e soluzioni da tutta la prospettiva. CR aiuta principalmente a eliminare gli sprechi di lavoro inutile. L'intero prodotto è più economico e di migliore qualità.


1
senza una spiegazione, questa risposta potrebbe diventare inutile nel caso in cui qualcun altro pubblica un'opinione opposta. Ad esempio, se qualcuno pubblica un reclamo come "Revisione del codice oscura le cose, rendendo più difficile vedere" l'intero " , in che modo questa risposta aiuterebbe il lettore a scegliere due opinioni opposte? Valuta di modificarlo in una forma migliore, per soddisfare le linee guida su Come rispondere
moscerino il
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.