In primo luogo, il team dovrebbe concordare l'obiettivo della revisione del codice (non si dovrebbe dare per scontato tale accordo, poiché la revisione del codice può essere utilizzata per una varietà di cose, e diverse organizzazioni lo fanno per diversi motivi. , Supporrò che l'obiettivo fosse migliorare il lavoro futuro di uno sviluppatore.
Per migliorare, lo sviluppatore deve sapere
- cosa era buono? - > Dovrei continuare a farlo
- che cosa era male? - > Dovrei cambiarlo
- e perché? - > Quindi posso valutare la gravità del problema, oltre a riconoscere problemi simili in futuro
Di quale azione si tratta?
Il feedback dovrebbe riguardare un comportamento, non una persona. Pertanto, dovrebbe identificare (preferibilmente con esempi) il comportamento del feedback. Quindi non dire:
You're lazy.
perché non si tratta di comportamento, ma di personalità (percepita). Inoltre, è troppo vago: si tratta della lunga pausa pranzo? Lenta battitura? Non rispondere alle e-mail in modo tempestivo? Troppe funzionalità implementate? Invece, dovresti dire:
Last week, you were assigned bug #1059. You have marked this defect resolved, but the bug still exists, and can be reproduced with the instructions provided in the trouble ticket.
E perché?
Successivamente, dovresti descrivere perché quell'azione o codice era buono o cattivo. La ragione addotta dovrebbe essere obiettiva e di sufficiente importanza per giustificare un cambiamento. Ad esempio:
AClass.amethod() is invoked by concurrent threads, but not thread safe. Data corruption is likely.
o
This method name is misleading. It sounds as if we're merely calulating the pay grade, but actually also pays the employee. Somebody not familiar with the implementation is likely to misuse the method, causing accidental salary payments ...
Naturalmente, a volte non si ha una discussione ironclad perché il codice è cattivo (o buono). Questo significa che non sai che hai ragione. Pertanto è prudente essere curiosi, piuttosto che presuntuosi:
This looks awfully complex. Why don't you just invoke AClass.amethod() instead?
o
This appears to be nearly identical to AClass.amethod(). Why can we not reuse that method?
Puoi anche dare un feedback positivo, naturalmente:
That's a great approach to coordinate the worker threads! I usually do X instead, and I always wondered how I could make it more robust. Now I know :-)
Non fare questo
Per illustrare l'importanza di quanto sopra, consideriamo un esempio di contatore del mondo reale preso alla lettera da una revisione formale del codice:
The code leaves a poorly thought out impression.
E questo è tutto ciò che il recensore ha scritto su questa scoperta.
Questo è un feedback terribile su così tanti livelli:
- Il feedback implica qualcosa di non lusinghiero nei confronti dell'autore (cioè, che lui pensa male)
- Il feedback riguarda un'impressione. Questo non è obiettivo.
- Il feedback non identifica alcuna parte del codice che deve essere modificata,
- né dare alcuna ragione per cui dovrebbe essere.
Il destinatario di tale "feedback" non può sapere cosa deve cambiare, né perché, e quindi non impara nulla. In realtà, non può nemmeno sapere che il feedback è giusto e, vista la conclusione poco lusinghiera e poco lusinghiera, è molto più probabile vederlo come un attacco personale da parte di qualcuno che vuole elevarsi spingendo giù i suoi pari. Gridare è probabile che ne consegua.