Le recensioni dei codici funzionano davvero nella vera Agile?


13

Così ho iniziato a lavorare per un grande corp., Uno di quelli con 3 lettere nel nome, e stanno cercando di diventare Agile, ma hanno tonnellate di processi, che non credo siano Agili.

Quella che mi ha colpito di più sono le revisioni del codice. Il mio ultimo lavoro è stato con una startup che direi sia il team di sviluppo più agile che abbia mai visto, fatto parte e / o di cui non ho mai sentito parlare.

Comunque, la mia argomentazione è che le Recensioni di Codice sono una perdita di tempo nello sviluppo iterativo o Agile in cui la UX / UI è estrema / intensa (pensate alla perfezione di Apple / Steve Jobs). Forse qualcuno qui può aiutare a capire prima che mi licenzino?

Ecco il mio processo di sviluppo e quello al mio ultimo avvio ... molto Agile.

Facciamo il primo lavoro di funzionalità per ordinare le attività di sviluppo / todos. Vorremmo deridere un paio di versioni e presentarle agli utenti, al team e al marketing per ottenere feedback. Facciamo quindi un'altra ripetizione del modello per ottenere un round dagli stessi stakeholder sopra. Quindi dividiamo il lavoro e iniziamo. Abbiamo pietre miliari e appuntamenti da rispettare, ma continuiamo a collegarci. Non abbiamo recensioni di codice durante tutto questo. Diverse volte durante le settimane del nostro sviluppo teniamo di nuovo delle discussioni con le parti interessate per vedere se sono ancora d'accordo che caratteristiche / funzioni / UX / UI siano ancora in linea con l'obiettivo.

Mentre ci avviciniamo alla fine del ciclo di iterazione di 8 settimane, il QA inizia a testare, quindi va agli utenti alfa e infine agli utenti beta. Ma durante l'alfa e la beta gli sviluppatori stanno esaminando le nuove funzionalità e le funzionalità precedenti apportando modifiche iterative giornaliere o orarie all'interfaccia utente per migliorare la UX. Quindi una funzionalità che è stata sviluppata in questa versione, potrebbe finire per essere cambiata altre 3 volte nelle ultime quattro settimane per migliorarla e perfezionarla o aggiungere alcune piccole funzionalità (ad esempio rendere il componente un po 'più fluido o più intelligente). A volte le modifiche possono essere superficiali, il che significa che nessuna operazione CRUD viene cambiata o modificata, ma cambia solo tutta l'interfaccia utente.

Quindi, con questo tipo di processo di sviluppo, estremamente Agile, le recensioni dei codici non sarebbero una perdita di tempo? Significa che se avessi avuto un altro sviluppatore o due a rivedere il mio codice, ma poi quel codice cambia altre 3 volte prima che esca dalla porta, a causa di tutti i miglioramenti dell'interfaccia utente / UX, non stiamo sprecando il nostro tempo per le prime 3 volte che lo hanno esaminato codice come tale codice / componente / UI è stato eliminato?

Non abbiamo mai avuto molti problemi di qualità con questo processo e sì se uno sviluppatore ha lasciato tutte le conoscenze usciti dalla porta, ma abbiamo sempre trovato sviluppatori intelligenti che lo hanno raccolto e acquisito.

E sì, abbiamo molti tester perché potrebbero dover ripetere il test 3 o 4 volte. Inoltre, ti preghiamo di non rimanere impiccato nel chiedere perché tutte le UI / UX cambiano ... ecco come sono fatte le cose ... stato quindi ecco perché l'app vince tonnellate di premi per UI / UX e gli utenti uccideranno per il app. Il processo di pensiero è se riesco a fare anche un miglioramento del 2% in qualcosa perché ho un'ora in più, quindi lo faccio. Gli utenti saranno più felici, il che significa più $ o utenti. E sì, i nostri utenti sono d'accordo con l'app che cambia continuamente perché è così che è stato fatto dal primo giorno in modo da non vederlo come negativo o negativo.

Spero che questo post non venga fuori come pomposo, ma non riesco proprio a vedere come le Code Code non siano dispendiose. Forse il 2% di tutto il nostro codice nel codice esaminato presenta bug. Ogni versione potrebbe trovare 3 bug tramite revisione del codice. Quindi finisce per essere 40 ore di revisione del codice per sviluppatore per versione (4 x 40 = 160 ore) per trovare da 3 a 5 bug? Le probabilità sono del 50% che da 3 a 5 bug sarebbero stati rilevati dal QA comunque. Non sarebbe meglio passare quelle 40 ore per sviluppatore aggiungendo una nuova funzionalità o migliorando quelle esistenti?


@DeadMG: User Experience
Steven A. Lowe,

4
@ user25702: il processo che descrivi non suona come Agile, suona come RUP / spirale. In particolare "Diverse volte durante le settimane del nostro sviluppo teniamo di nuovo delle discussioni con gli stakeholder per vedere se sono ancora d'accordo che caratteristiche / funzioni / UX / UI siano ancora in linea con l'obiettivo". è anti-agile; le funzioni vengono bloccate durante un'iterazione per evitare i problemi di target mobile associati agli approcci RUP / spirale. Per quanto riguarda la tua domanda nominale, non vedo molto valore nelle recensioni di codice qui se e solo se sei sicuro che i bug sarebbero stati trovati dal QA.
Steven A. Lowe,

1
Le iterazioni di 8 settimane non sono agili e sicuramente non "estremamente agili".
Martin Wickman,

Alcuni PM pensano che le iterazioni significano che abbiamo un paio di brevi iterazioni all'inizio e un paio di lunghe iterazioni nel mezzo seguite da tante brevi iterazioni alla fine, se necessario. Il problema è che ciò incasina il ritmo di battaglia dello sviluppo del software e la capacità di catturare i bug in anticipo. L'iterazione di 8 settimane sarebbe una di quelle iterazioni intermedie. Sono d'accordo che questo non è agile.
Berin Loritsch,

Se vuoi discutere delle recensioni dei codici, ti consiglio di prendere alcune statistiche. Documentare il tempo impiegato per le revisioni del codice (in ore totali di lavoro), il numero di bug / problemi rilevati in esse, insieme alla gravità del problema. Per il mio team abbiamo scoperto che abbiamo trascorso almeno 16 ore uomo per recensione, riscontrando in media 2-3 bug, tutti di natura cosmetica. È stato facile discutere della metodologia test-first per sostituire le revisioni tra pari di fronte a quei numeri.
Berin Loritsch,

Risposte:


13

Ci sono alcune cose che le recensioni di codice possono fare per te e altre che non possono. Gli argomenti a favore delle revisioni del codice:

  • Proprietà collettiva
  • Trova bug (QC)
  • Applica stile coerente (QA)
  • mentoring

Molti processi agili affrontano quelli in diversi modi:

  • Proprietà collettiva: tutti i membri del team sono responsabili del progetto, il che significa che tutti gli occhi saranno puntati sul codice in qualsiasi momento.
  • Gratuito per il refactoring: questo porta le revisioni del codice al livello successivo e consente a tutti i membri del team di eseguire il refactoring, se necessario.
  • Unit test (QC): i test unitari sono più efficienti e meno soggetti a errori umani rispetto all'ispezione visiva. In effetti, devo ancora trovare un mezzo più efficiente.
  • Programmazione di coppia (QA): si occupa del mentoring e fornisce consulenza precoce sul refactoring man mano che il codice viene scritto. Anche questo è ancora un argomento controverso, ma trovo che aiuti mentre acceleri un nuovo sviluppatore. È anche un buon momento per applicare gli standard di codifica.

In sostanza, ci sono altre strade per prendersi cura dei potenziali guadagni che normalmente avreste facendo revisioni tra pari. La mia esperienza personale con le revisioni tra pari è che sono meccanismi molto inefficienti e non sono efficaci nel trovare bug o difetti di progettazione più grandi. Tuttavia, hanno un posto in alcuni team e su progetti in cui l'agile non è fattibile (per qualsiasi motivo), sono del tutto necessari.


3
Sembra che ci sia qualche disinformazione nella risposta attuale. La proprietà collettiva non significa "tutti gli occhi su tutto il codice per tutto il tempo". Il refactoring non ha nulla a che fare con il rilevamento dei difetti. I test unitari e l'ispezione servono a scopi diversi e ciascuno può scoprire diversi tipi di difetti (esempi in altre risposte). La programmazione delle coppie, sebbene sia una forma di revisione, non sostituisce, ad esempio, l'ispezione di Fagan. La tua esperienza personale sembra atipica, soprattutto per quanto riguarda gli errori di progettazione: che tipo di recensioni hai fatto? Come hai misurato l'efficienza per le recensioni?
Michael,

1
Tempo necessario per la revisione rispetto ai difetti rilevati e alla loro gravità. Lo abbiamo confrontato con le stesse metriche con i test unitari. I problemi rilevati durante la revisione del codice erano quasi sempre correlati alla formattazione del codice e richiedevano più tempo per essere eseguiti. Lo stesso tempo trascorso a test unitari ha scoperto problemi reali e non ci è voluto più tempo per prepararsi e fare.
Berin Loritsch,

"Proprietà collettiva": Nella mia esperienza questa è spesso un'illusione: i revisori spesso puntano su piccoli dettagli e non vedono il quadro generale nel codice scritto da altri. Quindi, quando si tratta di modificare quel codice, non lo capiscono davvero e (1) non hanno il coraggio di cambiarlo, o (2) lo riscrivono ampiamente in modo da poterlo capire. Approach (2) ha spesso due effetti collaterali: (A) introducono bug e (B) lo sviluppatore originale non capisce più il codice.
Giorgio,

Il punto B mostra che spesso ciò che accade non è la proprietà collettiva ma la proprietà individuale che passa continuamente da uno sviluppatore all'altro. In questo modo, ogni membro del team sa all'incirca cosa fa il codice e come è organizzato, ma nessuno lo capisce davvero in profondità. Una vera proprietà del codice collettivo richiederebbe molto più tempo e discussioni sul codice per ottenere una comprensione comune, ma spesso questa volta semplicemente non è disponibile.
Giorgio

11

Le recensioni di codice sono solo per trovare bug? Sembra che pensi che sia vero e io no.

Direi che le revisioni del codice possono riguardare maggiormente la proprietà collettiva del codice, assicurando che la conoscenza sia in più punti e preparando gli altri a ereditare il codice che potrebbe essere per nuove funzionalità e per bug. Mi piacciono le revisioni del codice come un modo per avere un po 'di controllo e bilanciamento con il sistema come non si sa mai quando qualcuno potrebbe avere un'idea di dove qualcosa può essere riscritto per mantenere le convenzioni.


4

La programmazione delle coppie è la risposta di XP alle recensioni del codice. In sostanza, ogni riga di codice viene rivista man mano che viene scritta. Sono le revisioni del codice portate all'estremo.


7
Discuterei fortemente con questo. Certo, è in fase di revisione da parte di due persone, ma queste persone si trovano generalmente nella stessa pagina in cui viene scritto il codice. Una revisione del codice è una persona con uno stato d'animo completamente diverso che guarda il tuo codice e trova "doh! Hai dimenticato di gestire quel caso" tipi di problemi - XP davvero non aiuta a farlo.
Billy ONeal,

4

Le revisioni e i test del codice spesso non rilevano gli stessi tipi di bug e è probabile che i bug catturati dalla revisione del codice siano più facili da correggere, poiché la posizione del bug è nota.

Non puoi sapere se il codice è privo di bug solo perché supera i test senza registrarne nessuno. "I test possono solo dimostrare la presenza di bug, non l'assenza." (Dijkstra?)

Anche la revisione del codice mantiene lo stesso stile del codice ed è in grado di trovare luoghi in cui il codice non è buono ma sembra funzionare per ora. Risparmia i costi di manutenzione lungo la strada.

Inoltre, le esigenze di una grande azienda e di una startup sono diverse. Le startup normalmente falliscono e devono muoversi velocemente. Le grandi aziende ottengono molto più valore dal fare le cose nel modo giusto piuttosto che il più velocemente possibile. Potresti preferire lavorare alle startup rispetto alle grandi aziende, ma questo non è un motivo per cercare di imporre strategie di avvio dove non si adattano.


2

Le tue revisioni del codice generano solo modifiche all'interfaccia utente / UX? Direi che non è una revisione del codice, è un test di usabilità. Le revisioni del codice riguardano molto di più la risoluzione dei problemi che gli utenti / i tester / le aziende / qualunque cosa non vedano mai, perché sono nel codice. L'indizio è proprio lì nel nome.

Ora concorderò con te che c'è una linea da tracciare da qualche parte. Revisionate 4 iterazioni della stessa modifica dell'interfaccia utente? O ne fai 4 iterazioni, ognuna delle quali potenzialmente rende il codice meno gestibile? Direi di provare a misurare entrambi gli approcci e di trovare il giusto equilibrio per il tuo team, ma non abbandonare completamente le revisioni del codice.

Anche se una revisione del codice non presenta mai un problema, ha un vantaggio che raramente noti fino a quando non è presente: ogni pezzo di codice viene esaminato da due sviluppatori, quindi due sviluppatori sanno quale sia stata la modifica e ciò che doveva realizzare . Quindi uno di loro si ammala il giorno successivo e parte per una settimana, l'altro può riprendere qualsiasi lavoro urgente che stavano facendo.


1

Tendo a concordare sul fatto che la proprietà e l'associazione del codice collettivo insieme a TDD e CI sono gli antidoti Agile alle sessioni formali di revisione del codice.

Anche sotto UP / Spiral non ero un grande fan di una specifica fase del processo che è la "revisione del codice" perché mi sembra che i tipi di problemi che è probabile trovare si trovino più tardi di quanto potrebbero essere se la stessa energia fosse invece investita in qualche anticipo collaborazione e qualche semplice automazione.

Ho ritenuto che, poiché c'erano: - alcune revisioni condivise del progetto (di solito espresse in UML almeno su una lavagna) significavano problemi di progettazione su larga scala o scarso utilizzo delle API, ecc. Venivano catturati prima che un sacco di codice venisse scritto. - FxCop, CheckStyle, FindBugs (o simili) in esecuzione con build automatizzate di integrazione continua per catturare nomi, stile, visibilità, duplicazione del codice, ecc.

Siamo stati in grado di fallire prima e ottenere feedback più rapidamente di quanto avrebbe prodotto un'abitudine di revisione del codice a valle.

Non sto dicendo che è una perdita di tempo sedersi e dare un'occhiata al tuo codebase di tanto in tanto, ma rendere la revisione del codice un passo gating per chiamare qualcosa fatto sembra che crei un sacco di lavoro in corso che avrebbe potuto essere evitato con una migliore ispezione / collaborazione a monte.


0

Uno degli obiettivi principali che mi aspetto dalle revisioni del codice è aumentare la facilità di manutenzione del codice. Le revisioni del codice dovrebbero aiutare tutti a scrivere codice chiaro ragionevolmente conforme a buoni standard di codifica. La maggior parte del codice richiede molta manutenzione soprattutto nelle grandi aziende. Il rimborso per il codice gestibile dovrebbe iniziare prima del rilascio del codice e continuare successivamente.

Le revisioni del codice di per sé non dovrebbero mai comportare modifiche al codice. Se la revisione del codice indica che sono necessarie modifiche, l'implementazione della modifica comporterà una modifica del codice.

Lo stato del codice può cambiare a seguito della revisione, ma ciò dovrebbe essere in gran parte irrilevante per i problemi menzionati.

Se la revisione del codice provoca più modifiche al codice, allora qualcosa non funziona nel processo di sviluppo. Dato il numero di tester che hai, potrebbe esserci un lancio sul muro e lasciare che i tester trovino la mentalità problematica.

Le cose dovrebbero andare ai tester nello stato completato. Il maggior numero possibile di test dovrebbe essere automatizzato, in modo che i tester non testino più volte le stesse cose.

UI / UX richiede un po 'di tempo di test, ma avere esperti di progettazione / sviluppo sul front-end dovrebbe ridurlo. Richiede anche una faccia davanti allo schermo. Tuttavia, in tutte le applicazioni con cui ho lavorato, era una porzione relativamente piccola del codice.

Il costo per implementare le modifiche (comprese le correzioni di bug) aumenta generalmente per ogni fase che attraversa. Trovare i bug nello sviluppo è generalmente più economico che risolverli dopo averli trovati.

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.