Quali sono i processi di revisione del codice comuni e ciò che è considerato negativo?


16

La mia azienda ha recentemente iniziato a fare revisioni del codice formalizzate. Il processo procede in questo modo: invii in un github, richiedi una richiesta pull, il codice viene esaminato da circa tre persone, quindi se tutto passa, il tuo codice entra.

Il processo sembra corretto, tuttavia le tre persone che eseguono le revisioni del codice non sembrano essere corrette. Noto che quando inserisco il mio codice per la revisione, ricevo ovunque tra 100-200 commenti. Il numero più alto per me è stato di 300 commenti una volta. Naturalmente penseresti che si tratta di grandi cambiamenti, ma questo può essere anche cambiamenti molto piccoli con meno di 50 righe di codice (che include test unitari). Tutti i commenti sono considerati "indispensabili" e senza discussione.

Con questo in mente, il mio problema principale qui è che sembra un po 'eccessivo. Ho parlato con il gruppo e mi hanno detto sostanzialmente che solo perché ho avuto così tanti anni di sviluppo in php non significa che sono uno "sviluppatore". Naturalmente questo sembra più doloroso che no. Inoltre noto che all'interno del gruppo non sembrano produrre più commenti e la maggior parte delle volte ignorano o ignorano in altro modo altri commenti o suggerimenti che lo accettano raramente come un punto valido anche se qualcosa è rotto.

Quindi la mia domanda è se questo è giusto? O comune?


3
Che tipo di commenti stai ricevendo? Sembra molto. Sta formattando i commenti? Coding? È difficile rispondere senza sapere di più sulla natura dei commenti (e forse esattamente cosa nel tuo codice ha attivato i commenti).
MetalMikester

1
Ehi, non sono sicuro che sia il termine giusto, ma sono per lo più commenti generali di "best practice" come rinominare variabili, spostare funzioni, rinominare le funzioni verso l'alto di 3-5 volte, ecc. Abbiamo phpcs installato, quindi la formattazione è corretta.
user1207047

Ho anche dimenticato di menzionare questo biglietto, in realtà sono uno sviluppatore di livello 3 presso questa compagnia. Ho la certificazione php e sto andando alla grande negli ultimi 8 anni di lavoro qui. Questo è stato solo di recente che ha iniziato a succedere. Quindi voglio dire che uno vorrebbe pensare che dopo 8 anni, sapresti qualcosa di giusto?
user1207047

1
"Quindi voglio dire che uno vorrebbe pensare che dopo 8 anni, sapresti qualcosa di giusto?" - Beh, saresti sorpreso ... Le cose che vedo al lavoro a volte ...
MetalMikester,

Risposte:


15

Tutti i commenti sono considerati "indispensabili" e senza discussione.

Questo è il vero problema, poiché non vi è alcuna priorità in questo. Quando ricevi 100-300 commenti, ci devono essere alcuni con priorità A (bug reali), alcuni prio B (che probabilmente porteranno a bug in seguito) e altri prio C (tutto il resto). Spiega ai tuoi colleghi che sei disposto a rispettare tutti i loro desideri, ma per rendere effettivi i cambiamenti e che il tuo tempo è limitato, insisti su una priorità. Quindi, inizia prima a correggere prio A commento, e se hai davvero tempo per più dopo, puoi iniziare con B (se sei fortunato, il tuo capo capirà che riparare prio B e C non è così importante e ti darà alcuni compiti più importanti invece di perdere tempo).


Ho provato molte volte a chiedere la priorità dei commenti. Ricevo qualcosa del tipo "bello avere" e "richiesto". Si scopre che la stragrande maggioranza di essi sono "richiesti".
user1207047

2
Ho visto accadere dove uno specifico sviluppatore riceve molti elementi di azione dalle sue recensioni per impedire che incasinino il codice in altre aree del programma. Ma questo sarebbe per uno sviluppatore eccezionalmente povero che è "costretto" al progetto e il lead non può liberarsene a causa delle decisioni di gestione.
Dunk,

2
Sai @Dunk, penso che tu sia qui. Il tuo commento ha colpito davvero a casa e ho accettato questa risposta poiché non credo di poter accettare un commento. Sono un "estraneo" a questo gruppo e ora capisco perché la cerchia interna sta ottenendo recensioni migliori e più veloci e quelle esterne no. Sono stato "costretto" in questa squadra dalla direzione, sì e siamo "costretti" a lavorare insieme. Quindi questo suona molto ragionevole e una spiegazione logica del perché è più duro. Quello o io puzzo davvero di programmazione. L'unico modo per capirlo è andare in un altro gruppo / azienda e vedere di persona.
user1207047

4
@ user1207047: Non dovresti accettare una risposta perché ti piace uno dei commenti sottostanti in quanto va contro gli standard e lo scopo del sito (penso di percepire uno schema qui). C'è una funzionalità di commento positivo per questo.
webbiedave,

10

Le revisioni del codice possono essere un processo di divisione.

Sei in un importante incrocio, però. Fai un'analisi ponderata sulla loro recensione. Stanno identificando i problemi di nit-picking o evidenziando gravi difetti nel tuo stile e nella tua logica?

Se è il primo, consiglierei di lavorare per una risoluzione (nuovo lavoro o nuovi processi di revisione del codice).

Se è quest'ultimo, ti consiglio di fare molta lettura del codice e studiare per cercare di portare il tuo codice alla qualità professionale.


Ehi, buoni pensieri. Da quello che posso raccogliere, alcuni di essi sono in effetti un'analisi ponderata, ma la maggior parte di essi sembra essere un pignolo, come spostare le funzioni o rinominare le funzioni. Il problema è che quando spiegano il loro processo di pensiero ha davvero senso, ma tra loro non stanno facendo la stessa cosa e stanno facendo gli stessi errori di me.
user1207047

Ancora di più, la recensione del codice è così profonda che dimentico quello che stavo facendo e creo più bug risolvendo l'app a causa degli eccessivi centinaia di commenti. Ad esempio, una volta mi è stato detto di riscrivere gran parte del codice. Prima di esso il codice era corretto e funzionale. Dopo le revisioni del codice e quasi 150 commenti, la funzione e la correttezza originali erano sparite e sono stati inseriti tonnellate di bug. Quando ho realizzato questo e li ho riparati, mi è stato sostanzialmente detto, "Sì, il nostro processo di revisione del codice ti rende un programmatore fantastico perché ora tornerai a risolverlo ed è più facile da fare."
user1207047

8
@utente: la denominazione di metodi / funzioni è importante, non è necessariamente nit-picking. Se fai un cattivo lavoro con la denominazione, questo può essere fastidioso per la tua squadra. Se non riesci a trovare un nome chiaro, probabilmente non è una buona funzione. Sembra che tu sia il "nuovo" ragazzo e gli altri apparentemente hanno un metodo per la loro follia di cui probabilmente hanno discusso molte volte prima. Pertanto, la ragione per meno commenti. Ti suggerisco di imparare quello che vogliono e di provare a conformarsi piuttosto che alle teste di testa. Guadagna un po 'di rispetto, quindi sarai in grado di offrire idee alternative che verranno soddisfatte con una mente aperta.
Dunk,

1
@utente: Sembra che tu abbia bisogno di standard di codifica / design.
Dunk,

2
@utente: tutto ciò che puoi fare è provare a lavorare all'interno del sistema e dimostrare di essere un giocatore di squadra. Se l'hai fatto. allora o la tua percezione non è corretta, hai a che fare con persone irrazionali, percepiscono che il tuo atteggiamento è controverso O è semplicemente una cattiva politica dell'ufficio. Le uniche su cui hai il controllo sono il tuo atteggiamento / percezione. Se sei convinto di non istigare in qualche modo il problema, non so perché rimarrai. Vai a trovare un posto in cui è piacevole lavorare perché le persone vanno d'accordo. Se gli stessi problemi si verificano altrove, guardati allo specchio.
Dunk,

5

Dai tuoi commenti sembra che i tuoi colleghi stiano usando il processo di revisione del codice per concordare una metodologia o lucidare il codice. Ho appena iniziato a fare revisioni del codice come te e noto che a volte discutiamo molto su cose che sono solo approcci o miglioramenti di implementazione. Questo non è affatto male per quanto ragionevole (300 commenti sembrano troppi per me, che deve sembrare un thread reddit)

Forse è necessario concordare alcune decisioni sull'architettura del codice prima di iniziare a implementarlo o forse è solo d'accordo sulle convenzioni di denominazione, i modelli e le buone pratiche in modo che tutti sappiate cosa viene considerato "buon codice".

Se stai rispettando i tuoi standard di codice come dici tu e il codice funziona come previsto, non dovrebbero esserci così tanti commenti, quindi o stanno usando il tuo codice come forum o ti stanno trollando come sembra che tu stia puntando.

Proverei ad essere critico con me stesso, proverei a prendere parte alle conversazioni e vedere la ragione di tutti questi commenti e magari parlarne con loro in modo costruttivo per capire perché sono così insoddisfatti del tuo codice e se puoi codice in un modo che rende tutti felici e il lavoro non si blocca nella revisione del codice.

Ho appena letto i tuoi ultimi commenti, a volte quando non sei d'accordo con il codice puoi ripassarlo cento volte e proporre cambiamenti ovunque che non ti rendono felice perché la vera ragione è che avresti fatto una diversa decisione architettonica e semplicemente non ti piace quel codice, non importa quante volte lo refatti. Come ho detto sopra, forse devi concordare preventivamente l'approccio al codice, quindi quando lo scrivi sai cosa si aspettano da esso e quindi il tuo codice sarebbe più ragionevole per loro.


1
Il 100% è d'accordo con l'ultimo paragrafo: dovresti discutere il tuo progetto previsto prima dell'implementazione. Almeno allora stai iniziando con un framework apparentemente accettabile. Quindi, dopo l'implementazione, potrebbe valere l'ennesimo tentativo di discutere del progetto finale (non del codice). Quindi modificare il codice in modo che corrisponda all'esito della discussione di progettazione finale. Se dopo un paio di tentativi e ciò non migliora le cose, ciò dovrebbe rendere ovvio che la posizione è semplicemente sbagliata e dovresti iniziare a cercare altrove.
Dunk,

4

Da quello che stai dicendo, mi sembra che potrebbero avere un pregiudizio contro gli sviluppatori php, e quindi stanno cercando di trovare ogni singola cosa che non va nel tuo codice per dimostrare il loro punto .¹

Per quanto riguarda la revisione del codice stesso, credo come hai già detto, che un'enorme quantità di commenti minori è meno utile di alcune critiche valide e valide. E anche se ho un'esperienza limitata riguardo alle revisioni del codice, la seguente tecnica ha funzionato bene per i team in cui ho lavorato in passato.

  • Prima di tutto, un analizzatore di codice statico dovrebbe essere usato per identificare la maggior parte dei problemi prima che avvenga la revisione del codice. Ad esempio: l'esecuzione del codice tramite Sonar, Lint o qualsiasi altro buon analizzatore di codice dovrebbe aiutarti a sbarazzarti della maggior parte dei problemi minori. Soprattutto dal momento che i tuoi revisori possono definire profili personalizzati per garantire tutto da posizionamento della parentesi, spazi bianchi, commenti, denominazione variabile corretta e molto altro ...
  • Secondo, mi sembra che funzioni bene se dividi i commenti in diverse categorie. Ad esempio, due categorie in cui un gruppo include piccole cose che dovresti prendere in considerazione e applicare in futuro. E un secondo gruppo per quei commenti che richiedono una modifica immediata del codice che richiederebbe un altro commit e una successiva revisione. Ovviamente, il numero di commenti in quest'ultimo gruppo dovrebbe essere inferiore.

Inoltre, devo dire che le mie prime recensioni di codice reali contenevano anche più commenti di quanto inizialmente mi aspettassi. Tuttavia non l'ho mai considerato una cosa negativa. Se continui a imparare dai loro commenti² e sei disposto ad applicare quelle nuove tecniche apprese / le migliori pratiche nei tuoi futuri invii di codice, i commenti dovrebbero diminuire. È stato sicuramente il caso per me ;-)

¹ Nella mia esperienza, ciò accade molto poiché molti programmatori affermano che php è il linguaggio di programmazione più malvagio, con i programmatori più inesperti che lo usano. Prendo le distanze da questa affermazione poiché credo che un ottimo software possa essere scritto in qualsiasi lingua!

² Supponendo che sebbene i commenti siano eccessivi, c'è un certo valore in essi


Sono pienamente d'accordo con quello che hai detto. È un'esperienza di apprendimento e si dovrebbe imparare. Tuttavia, questo è successo abbastanza a lungo fino al punto in cui non sembra che sia così. O sto diventando più stupido o sta succedendo qualcos'altro. Suppongo che se ogni richiesta pull sta generando centinaia di commenti, allora o ti sbagli di continuo in ogni momento, o c'è qualcos'altro coinvolto qui che non coincide con quello che sostengono che stanno cercando di fare. O devono dire "Okay, fermiamoci e impariamo" o arriviamo al punto. Almeno è così che lo vedo.
user1207047

1
@ user1207047 Dopo aver letto le tue risposte alle altre risposte, mi sembra che tu sappia già la risposta alla tua stessa domanda .. :-) Sembra abbastanza chiaro che qualcosa è sospetto con le tue recensioni di codice. Forse è tempo di parlare con un superiore o di richiedere un trasferimento in un'altra squadra?
Jérôme,

3

È comune per chiunque ottenere più di 100 commenti nelle proprie recensioni di codice su base regolare? Direi di no. È comune per le persone la cui qualità del codice "lascia molto a desiderare" per ottenere molti commenti, assolutamente.

Tuttavia, dipende anche dalle "regole" del processo di revisione del codice. Ognuno ha le proprie idee su come qualcosa avrebbe dovuto essere fatto. Se il tuo processo di revisione del codice consente ai commenti di essere nel formato "Dovresti farlo in questo modo invece che in quel modo", probabilmente otterrai MOLTI commenti anche per un codice adeguato. Se il tuo processo ha lo scopo di trovare "difetti", il numero di commenti dovrebbe essere molto più piccolo.

Nella mia esperienza, le recensioni che consentono "suggerimenti" per metodi alternativi sono perditempo. Tali "suggerimenti" dovrebbero essere gestiti uno a uno al di fuori del processo di revisione. Le recensioni di difetti sono più utili in quanto inducono le persone a concentrarsi sugli errori invece di "perché non l'hai fatto come l'avrei fatto?". È anche più utile perché non si può negare un bug se qualcuno lo trova. Quindi, non ci sono sentimenti feriti ma probabilmente gratitudine.

AGGIORNAMENTO: Detto questo, alcuni codici sono semplicemente cattivi, anche se privi di difetti. In tal caso, il commento della recensione dovrebbe essere un singolo commento che dice qualcosa di simile. "Questo codice deve essere ripulito. Ti preghiamo di rimandare la revisione fino a quando il codice non verrà discusso con [il tuo nome qui]." In tal caso, un'ulteriore revisione del codice dovrebbe interrompersi fino alla correzione del commento.

UPDATE2: @User: Discuti il ​​tuo codice / progetto con uno di essi mentre lo stai sviluppando in modo da poter implementare ciò che stanno cercando prima di arrivare lontano facendo a modo tuo? Stai cambiando qualcosa su come stai sviluppando il codice in base ai loro suggerimenti o continui a pensare che la tua strada vada bene? Stai imparando qualcosa dai loro commenti?

Quando sono il capofila di un progetto, è mio compito essere responsabile di TUTTI i prodotti di lavoro. Se approvo un prodotto di lavoro, allora sto sostenendo che il prodotto è accettabile. Voglio avere una reputazione per la costruzione di prodotti di qualità. Quindi, ho aspettative e non accetterò meno che soddisfacente. Allo stesso tempo, cerco di insegnare e spiegare i motivi delle mie preferenze. Tali preferenze potrebbero non essere sempre ideali (in particolare agli occhi degli altri), ma la maggior parte di tali preferenze deriva dall'esperienza. Di solito una reazione per evitare di ripetere quelli cattivi. Quindi, ci sono alcuni dei miei "stickler" personali che sono necessari per ottenere la mia approvazione, indipendentemente dal pushback.

Dall'altro lato, è necessario conoscere le aspettative necessarie per ottenere l'approvazione dei prodotti di lavoro. Puoi non essere d'accordo, ma poiché non sembri avere l'autorità di sovrastare, allora impara cosa ci si aspetta. Dubito che il team stia cercando di farti fallire. Poiché ciò li rende anche cattivi. A tal proposito, dimostra solo che sei desideroso di imparare (anche se non lo sei), prendi quello che dicono e fai del tuo meglio per adattarti alle loro preferenze e probabilmente li vedrai indietreggiare un po '. Forse trova quello che puoi almeno tollerare e vedere se faranno un po 'di mano per insegnarti i loro modi. Chissà, nel frattempo potresti imparare qualcosa che potrebbe davvero portare le tue abilità al livello successivo.


D'accordo, e non avresti sentito nessuna discussione da parte mia per questi motivi. Tuttavia, il processo non è proprio così. Dicono che lo è, e nella maggior parte dei casi sembra che solo le persone al di fuori di questi tre gruppi siano sottoposte a un esame più pesante di se stesse. Sostengono che gli altri sono cattivi sviluppatori ma sono gli unici "sviluppatori" nel team.
user1207047

Una cosa tuttavia è che se non riesci a capire il codice, o lo sviluppatore ha reinventato la ruota invece di usare un metodo esistente, o se il suo metodo ha una complessità ciclomatica di 50, allora questo è sicuramente il caso di un commento, anche se non c'è nessun bug. Codice difficile da leggere e duplicazione è una responsabilità, anche se non è un bug. Questo è il motivo per cui non esito mai a sottolineare che una variabile ha un nome mediocre o che la soluzione introduce un accoppiamento temporale che rende più difficile la comprensione del codice. Il debito tecnico deve essere gestito.
Laurent Bourgault-Roy,

1
@Laurent: so cosa stai dicendo e in molti modi sono d'accordo. Tuttavia, ciò apre una lattina di vermi che tende a nevicare. Se la tua azienda ha i fondi e il programma per consentire alle revisioni del codice di prendere una parte significativa dello sforzo, allora va bene (come i progetti di attrezzature mediche / aeromobili). Ma la maggior parte dei progetti non ha il lusso. Pertanto, limitare l'ambito dei commenti delle recensioni è molto utile. Per compensare le tue preoccupazioni, è compito del committente supervisionare gli sviluppatori e il loro lavoro. Dovrebbero sapere chi monitorare più da vicino e correggere tali problemi prima della revisione del codice.
Dunk,

Dovremo concordare di non essere d'accordo qui :). Il debito tecnico è qualcosa che dovrai pagare prima o poi (e più aspetti, più interessi paghi). Non risparmierai alcun centesimo ritardando la pulizia. Se non ti prendi il tempo per ripulirlo ora, la prossima modifica potrebbe costarti il ​​doppio del tempo perché avrai difficoltà a capire il codice. Lavoro con una base di codice di 8 anni e lo sviluppo è rallentato a causa di problemi di qualità. Ora abbiamo una regola ufficiale "la qualità interna non è negoziabile". Posso attestare che ci ha salvato!
Laurent Bourgault-Roy,

Rileggo il tuo commento e mi rendo conto che forse abbiamo una prospettiva diversa a causa della nostra metodologia. Lavoro in una squadra agile dove non c'è piombo. Dato che siamo tutti uguali e tutti responsabili della qualità del codice, dobbiamo tutti monitorarci a vicenda. E la revisione del codice viene eseguita ogni 3-4 ore prima di ogni integrazione. Quindi la pulizia di una grande richiesta pull è di qualche ora se siamo molto nazisti o se abbiamo fatto un refactor che ha avuto un impatto su una parte vecchia e fragile del software. Ecco perché vedo il commento sulla qualità del codice come un "no biggy".
Laurent Bourgault-Roy,

2

Alcune importanti differenze con il nostro processo di ispezione del team:

  • la base di un'ispezione è una lista di controllo, compilata da tutto il team.
  • Il focus è difetti (presente e futuro), non stile per il gusto dello stile.
  • i 3 ispettori (incluso l'autore) si siedono per esaminare i commenti. Restano solo i commenti a maggioranza.

2

Per 50 LOC 300 commenti sembra essere un po 'eccessivo e - wow - 3 revisori per ogni richiesta pull? La tua azienda deve avere molte risorse.

Dalla mia esperienza per un utile processo di revisione del codice ci devono essere alcune regole e / o linee guida:

  • Priorità dei commenti
  • Classificazione dei commenti (bug, stile del codice, ecc.)
  • Architettura / design concordato da seguire
  • Stile del codice concordato

Se non ricevi una priorità dai revisori, chiedi al tuo project manager / team leader responsabile; la persona responsabile dei costi dovrebbe avere un'opinione sulle priorità.

Se hai un'architettura definita, una comprensione comune di quali schemi di progettazione usi nel tuo progetto e uno stile di codice concordato, i commenti della recensione dovrebbero riguardare solo "problemi reali" come problemi di sicurezza, bug involontari, casi angolari non coperti dallo specifico architettura, ecc.

Se il tuo team di sviluppo non ha concordato "problemi di gusto" (ad esempio se una variabile membro inizia con "m_"), ogni revisore ti costringerà a seguire il suo stile, che è solo una perdita di tempo / denaro.


1

Mi sembra davvero un problema di comunicazione. Ti aspetti che il tuo codice non sia abbastanza male da meritare 300 commenti. I revisori sembrano pensare che abbiate bisogno di molti feedback. Discutere avanti e indietro in modo asincrono farà perdere molto tempo. Cavolo, scrivere 300 commenti è una tremenda perdita di tempo. Se questi non sono tutti difetti, è possibile come nuovo membro del team non conoscere ancora lo stile del team. È normale e qualcosa che dovrebbe essere appreso per accelerare l'intera squadra.

Il mio consiglio è di risparmiare tempo. Accelera il feedback. Vorrei:

  • Fai più revisioni intermedie per evitare di commettere lo stesso errore e generare lo stesso commento 50 volte
  • Siediti con un revisore mentre rivedono il tuo codice in modo da poter parlare dei problemi man mano che si presentano, evitando così di documentare 300 "problemi" che verranno eliminati nel prossimo commit
  • Associa uno di questi "veri" sviluppatori per un po 'di tempo mentre scrivi il codice per vedere cosa farebbero diversamente

Le persone potrebbero discutere contro l'associazione perché "ci vorrà più tempo", ma questo ovviamente non è un problema qui.

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.