Valutare le persone in una recensione è contrario ai sistemi di maggior successo con cui ho lavorato, forse a tutti. Ma l'obiettivo che ho cercato di raggiungere per oltre 20 anni è meno bug e aumento della produttività all'ora dell'ingegnere. Se la valutazione delle persone è un obiettivo, suppongo che le recensioni potrebbero essere utilizzate. Non ho mai visto una situazione in cui era richiesto, come lavoratore o come leader.
Alcuni studi oggettivi (Fagan, ecc.) E molta saggezza popolare suggeriscono che le relazioni tra pari facilitano le revisioni del codice volte a ridurre i bug e aumentare la produttività. I dirigenti che lavorano possono partecipare come lavoratori, ma non come dirigenti. Sono noti i punti di discussione, le modifiche per soddisfare i revisori sono generalmente buone ma non richieste. Da qui la relazione tra pari.
Eventuali strumenti automatici che possono essere accettate senza ulteriori analisi o giudizio sono buone - lint in C, C ++, Java. Compilazione regolare. I compilatori sono DAVVERO bravi a trovare i bug del compilatore. Documentare le deviazioni nei controlli automatici sembra una sottile accusa nei confronti dei controlli automatici. Le direttive sul codice (come fa Java) che consentono deviazioni sono piuttosto pericolose, IMHO. Ottimo per il debug, per consentire di ottenere rapidamente il nocciolo della questione. Non così bello da trovare in un blocco di codice di 50.000 righe non commentato male di cui sei diventato responsabile.
Alcune regole sono stupide ma facili da applicare; valori predefiniti per ogni istruzione switch anche quando non sono raggiungibili, ad esempio. Quindi è solo una casella di controllo e non è necessario dedicare tempo e denaro a testare valori che non corrispondono a nulla. Se hai delle regole , avrai follia , sono indissolubilmente legate . Ogni beneficio di una regola dovrebbe valere la follia che costa e tale relazione dovrebbe essere controllata ad intervalli regolari.
D'altra parte, "Funziona" non è una virtù prima della revisione o della difesa in revisione. Se lo sviluppo ha seguito il modello a cascata , ti piacerebbe fare la revisione quando la codifica è completa all'85%, prima che vengano individuati e risolti errori complicati, perché la revisione è un modo più economico per trovarli. Poiché la vita reale non è il modello a cascata, quando rivedere è in qualche modo un'arte e equivale a una norma sociale. Le persone che leggeranno effettivamente il tuo codice e cercheranno problemi in esso sono oro massiccio. La gestione che supporta questo in modo continuativo è una perla al di sopra del prezzo. Le recensioni dovrebbero essere come check-in, presto e spesso .
Ho trovato queste cose utili:
1) Nessuna guerra di stile . Dove vanno le parentesi graffe aperte dovrebbero essere soggette a un controllo di coerenza in un determinato file. Lo stesso. Va bene allora. Profondità del rientro Ditto ** se ** larghezze della linguetta . La maggior parte delle organizzazioni scopre di aver bisogno di uno standard comune per le schede, che viene utilizzato come ampio spazio.
2) `Ragged
looking
testo che non lo fa
line up is hard to read
per i contenuti
A proposito, K&R ha indentato cinque spazi (CINQUE), quindi gli appelli all'autorità sono privi di valore. Sii coerente.
3) Una copia numerata di riga, immutabile, disponibile pubblicamente del file da rivedere dovrebbe essere indicata per 72 ore o più prima della revisione.
4) Nessun design al volo. Se c'è un problema o un problema, annota la sua posizione e continua a muoverti.
5) I test che attraversano tutti i percorsi nell'ambiente di sviluppo sono un'idea molto, molto, molto, buona. I test che richiedono enormi dati esterni, risorse hardware, uso del sito del cliente, ecc., Sono test che costano una fortuna e non saranno approfonditi.
6) Un formato di file non ASCII è accettabile se esistono strumenti di creazione, visualizzazione, modifica, ecc. O vengono creati all'inizio dello sviluppo. Questo è un mio pregiudizio personale, ma in un mondo in cui il sistema operativo dominante non può uscire a modo suo con meno di 1 gigabyte di RAM, non riesco a capire perché i file inferiori a, diciamo, 10 megabyte dovrebbero essere qualsiasi cosa diverso da ASCII o qualche altro formato supportato commercialmente. Esistono standard per grafica, audio, film, file eseguibili e strumenti che li accompagnano. Non ci sono scuse per un file contenente una rappresentazione binaria di un numero di oggetti.
Per la manutenzione, il refactoring o lo sviluppo del codice rilasciato, un gruppo di collaboratori che avevo usato per la revisione da un'altra persona, seduto a un display e guardando un diff di vecchio e nuovo , come gateway per il check-in in filiale. Mi è piaciuto, era economico, veloce, relativamente facile da fare. Le procedure dettagliate per le persone che non hanno letto il codice in anticipo possono essere educative per tutti ma raramente migliorare il codice dello sviluppatore.
Se sei distribuito geograficamente, guardare le differenze su uno schermo mentre parli con qualcun altro che guarda lo stesso sarebbe relativamente facile. Questo riguarda due persone che osservano i cambiamenti. Per un gruppo più numeroso che ha letto il codice in questione, più siti non è molto più difficile di tutti in una stanza. Le stanze multiple collegate da schermi di computer condivisi e squak box funzionano molto bene, IMHO. Più siti, maggiore è la gestione delle riunioni. Un manager in qualità di facilitatore può guadagnare la loro permanenza qui. Ricorda di continuare a eseguire il polling dei siti in cui non ti trovi.
A un certo punto, la stessa organizzazione aveva un test unitario automatizzato che veniva utilizzato come test di regressione. È stato davvero bello. Ovviamente abbiamo quindi cambiato piattaforma e i test automatici sono stati lasciati indietro. La revisione è migliore, come rileva il Manifesto Agile , le relazioni sono più importanti del processo o degli strumenti . Ma una volta ottenuta la revisione, i test di unità automatizzati / test di regressione sono il prossimo aiuto più importante nella creazione di un buon software.
Se puoi basare i test sui requisiti , beh, come dice la signora in "Quando Harry incontrò Sally" , avrò quello che sta avendo!
Tutte le recensioni devono avere un parcheggio per acquisire requisiti e problemi di progettazione al livello sopra indicato. Una volta che qualcosa viene riconosciuto come appartenente al parcheggio, la discussione dovrebbe fermarsi nella recensione.
A volte penso che la revisione del codice dovrebbe essere come una revisione schematica nella progettazione dell'hardware: completamente pubblica, approfondita, tutorial, la fine di un processo, un gateway dopo il quale viene costruito e testato. Ma le revisioni schematiche sono pesanti perché cambiare gli oggetti fisici è costoso. Le revisioni di architettura, interfaccia e documentazione per il software dovrebbero essere probabilmente pesanti. Il codice è più fluido. La revisione del codice dovrebbe essere più leggera.
In molti modi, penso che la tecnologia riguardi tanto la cultura e le aspettative quanto uno strumento specifico. Pensa a tutte le improvvisazioni " Swiss Family Robinson " / Flintstones / McGyver che deliziano il cuore e sfidano la mente. Vogliamo che le nostre cose funzionino . Non esiste un unico percorso, non più di quanto non esistesse l '"intelligenza" che potrebbe in qualche modo essere astratta e automatizzata dai programmi di intelligenza artificiale degli anni '60 .