Le "Code Review", queste sconosciute



Documenti analoghi
Obiettivo Principale: Aiutare gli studenti a capire cos è la programmazione

SENZA PAROLE. Illustrazione di Matteo Pericoli 2001

PLIDA Progetto Lingua Italiana Dante Alighieri Certificazione di competenza in lingua italiana

Università per Stranieri di Siena Livello A1

Università per Stranieri di Siena Livello A1

GIANLUIGI BALLARANI. I 10 Errori di Chi Non Riesce a Rendere Negli Esami Come Vorrebbe

Il Programma Operativo. Mentore. Rende ordinario quello che per gli altri è straordinario

Piacere di conoscerla

Università per Stranieri di Siena Livello A1

Distribuzione Software. Documentazione Tecnica. Copernico. Iva 22% - Interventi Predisposti

lo PERSONALIZZARE LA FINESTRA DI WORD 2000

Mentore. Rende ordinario quello che per gli altri è straordinario

Formattazione. ü Introduzione

Ins. Zanella Classe seconda. Problemi moltiplicativi

Università per Stranieri di Siena Livello A1

Express Import system

PROMUOVERSI MEDIANTE INTERNET di Riccardo Polesel. 1. Promuovere il vostro business: scrivere e gestire i contenuti online» 15

Hai domande sul nuovo concorso Lines Arcobaleno?

LA SOLUZIONE. EVOLUTION, con la E LA TECNOLOGIA TRASPARENTE IL SOFTWARE INVISIBILE INVISIBILE ANCHE NEL PREZZO R.O.I. IMMEDIATO OFFERTA IN PROVA

I TUTORI. I tutori vanno creati la prima volta seguendo esclusivamente le procedure sotto descritte.

Ci sono circa centralini in Italia

Al termine del lavoro ad uno dei componenti del gruppo verrà affidato l incarico di relazionare a nome di tutto il gruppo.

Ti consente di ricevere velocemente tutte le informazioni inviate dal personale, in maniera assolutamente puntuale, controllata ed organizzata.

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Il Venditore Vincente! Sai piacere a qualcuno? Renditi desiderabile e venderai qualsiasi cosa!

Metodologie di programmazione in Fortran 90

NUOVI APPROCCI PER UN MANAGER ALLENATORE : IL PROCESSO DI COACHING

Webinar e Manuale Operativo Tecnica di Trading

Obiettivo Principale: Spiegare come la stessa cosa possa essere realizzata in molti modi diversi e come, a volte, ci siano modi migliori di altri.

La Posta svizzera SecurePost SA, Oensingen

Manuale della qualità. Procedure. Istruzioni operative

Cookie. Krishna Tateneni Jost Schenck Traduzione: Luciano Montanaro

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

automatizzare il flusso di lavoro

VALUTAZIONE DI USABILITÀ

Carlo Bartolomeo Novaro - Studio di Coaching. Executive Team & Business Coaching NPL Training

Unità di Grugliasco Feb. 2011

CONSIGLI PER GIOVANI NAVIGANTI (anche già navigati).

Scopri come Creare e Vendere viaggi online! Il software per gestire le tue pratiche e i tuoi clienti: Et-Gest

Sistema Gestionale FIPRO. Dott. Enea Belloni Ing. Andrea Montagnani

Architetture Applicative

Ricercare e Testare La Tua Nicchia

Configurazione della ricerca desktop di Nepomuk. Sebastian Trüg Anne-Marie Mahfouf Traduzione della documentazione in italiano: Federico Zenith

CREA IL CATALOGO DEI TUOI PRODOTTI SU IPAD E IPHONE CON UN APP. ANZI, CON UPP!

Il funzionamento di prezzipazzi, registrazione e meccanismi

ALLINEARSI: IL DRIVER PER UNA INNOVAZIONE DI SUCCESSO!

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

Google for Education. Corso introduttivo sull uso delle Google Apps. Langella 1

Poca documentazione: uso di Story Card e CRC (Class Responsibility Collabor) Collaborazione con il cliente rispetto alla negoziazione dei contratti

La tecnologia cloud computing a supporto della gestione delle risorse umane

Segui passo passo le istruzioni e potrai giocare le tue sfide online. Puoi già capirlo, è facile, divertente e eccitante.

HOLTER MONITOR. Illustrazione di Matteo Pericoli 2002

Diritti Riservati Vietata la Rivendita e qualsiasi modifica del seguente ebook

IDS: Intrusion detection systems

Amministrazione gruppi (Comunità)

WERBETURBO.NET Mercato annunci per annunci privati & commerciali

Università per Stranieri di Siena Livello A1

Un imprenditore capisce il marketing? (un problema nascosto) di Marco De Veglia

ipresent FAQ (Domande Frequenti)

Aspettate il giorno 2

"Trasforma Immediatamente i tuoi semplici documenti in Pagine Web generatrici di guadagno con Google Adsense!"

Avvio rapido di Gmail per gli amministratori

Prova Finale Controllo delle versioni

Piano di gestione della qualità

MANUALE PARCELLA FACILE PLUS INDICE

Creare una nuova spedizione personalizzata.

Giovanni Lombisani. Insegnante di Educazione Fisica e Maestro di Ginnastica EFFICIENZA FISICA E SCOLIOSI - IL CASO DI ROBERTO. I.D.

INTRODUZIONE I CICLI DI BORSA

Resoconto «scuola in movimento» per l'anno scolastico 2013/14

IL BUDGET 04 LE SPESE DI REPARTO & GENERALI

Pulire IM. Non tutti sanno che solo una corretta e regolare pulizia nelle cartelle di IM, assicura un funzionamento longevo del programma

ISTRUZIONI PER LA GESTIONE BUDGET

C.I.C. Centro Informazione e Consulenza. Guida all uso del registro elettronico

Novità di Access 2010

Gestione Turni. Introduzione

Analisi e diagramma di Pareto

Esercizio 1 Dato il gioco ({1, 2, 3}, v) con v funzione caratteristica tale che:

In quanti modi posso lanciare ed afferrare la palla? Chi riesce a?

Alfa Layer S.r.l. Via Caboto, Torino ALFA PORTAL

REALIZZARE UN BUSINESS PLAN

ascoltare ispirare e motivare miglioramento problem solving Flex360 pianificare comunicare la vision organizzare

Approccio stratificato

Modelli di Programmazione Lineare e Programmazione Lineare Intera

Estrarre GRATIS le dei membri di un gruppo e mandare Facebook ADS mirate ai membri di un gruppo specifico - GU IDA SUPER RAPIDA -

AUTOREGOLAZIONE PER IL COMPITO

Release Note Aconex Release Pubblicato il 6 febbraio 2015 e aggiornato il 26 febbraio 2015 per coprire il periodo di release dal 15 febbraio

Attività fisica: è più importante la QUANTITA o la QUALITA?

Google AdWords. Corrispondenze Parole Chiave

Esercitazione revisione bozza di proposta

Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress

Mentore. Presentazione

La Leadership efficace

Ti presentiamo due testi che danno informazioni ai cittadini su come gestire i propri

Marketing di Successo per Operatori Olistici

Traduzione e adattamento a cura di Gylas per Giochi Rari Versione 1.0 Luglio giochirari@giochirari.

Appunti sulla Macchina di Turing. Macchina di Turing

EDUCAZIONE ALLA LEGALITÀ a.s. 2013/2014

Descrizione dettagliata delle attività

Transcript:

Le "Code Review", queste sconosciute http://www.aleax.it/itbs11_crev.pdf 2011 Google -- aleax@google.com

Il pubblico di questo talk Shu ("Impara") Ha ("Distacca") Ri ("Trascendi") 2

I temi del talk code review: perché mai abbastanza...? "Fagan inspections" vs CR leggere CR "troppo leggere" & loro anti-pattern gli aspetti sociali delle CR il focus delle CR: leggibilitá e aspetti non testabili (AUTOMAZIONE é meglio!-) strumenti e processi per CR 3

Code Review note da tempo (generazioni!) come strumento eccellente x la qualitá del codice costano molto meno che far trovare i bug dai clienti (o anche da un reparto di QA) scoprono anche problemi inaccessibili ai test e analisi statiche (chiarezza, nomi) lo sappiamo tutti: sono "best practice" e allora perché le trattiamo cosí male?! CR fatte occasionalmente o magari mai CR fatte solo formalmente, no sostanza 4

"Fagan inspection" parte MOLTO pesante di processi pesanti e ad alta cerimonia specifiche, piani di test, architettura, &c, vanno pure ispezionati, non solo il codice fasi: pianificazione, meeting preliminare, {preparazione, meeting d ispezione, rework, verifica/follow-up} 1+ volte "moderator" che decide; ~6 persone/mtg alta cerimonia -> alto costo, quindi inadatte salvo in processi rigidi & molto formalizzati (...che poi hanno i problemi loro...) 5

Occhio al ROI smartbearsoftware.com é x vendere i loro prodotti ("Code Collaborator" &c) e servizi, MA con chiarezza e trasparenza, e ottimi materiali gratis in supporto case studies, analisi, biblio,... riassunto: Fagan é buono, ma leggero é meglio (naturalmente specie con i loro strumenti ;-) 6

Non troppo leggeri (1) "nessun processo"? le CR NON sono allora il tuo peggiore problema...: #1: nessun VCS / RCS #2: niente test automatizzati poi: mancano "team style", controlli di stile automatici, bug/feature tracker,... PRIMA guarisci queste ferite sanguinanti, POI passa a occuparti di Code Review!-) 7

Non troppo leggeri (2) se hai processi & tool "quanto basta", ma nessun ruolo in essi per le CR per cui le CR avvengono raramente o mai e/o sono spesso "solo formali"... forse "non per Quelli Importanti"...? "pair programming" INVECE di CR...? allora QUESTO é il punto giusto da cui iniziare a migliorare il tuo processo!-) 8

PP o CR il Pair Programming é fantastico, MA non svolge lo stesso ruolo delle CR! la coppia facilmente si "sincronizza" varie cose sono chiare a entrambi quelli "che c erano sin dall inizio", ma... forse non chiare ad altri che non c erano (magari mancano commenti, &c) magari nascondono sottili problemi ("dati abbastanza occhi, tutti i bug sono evidenti": ma 4 spesso non bastano!-) l idea migliore: fare *sia* PP, *sia* CR! 9

"Non Quelli Importanti"? (1) il "rispetto" x l autoritá, la fama o l anzianitá puó inibire i reviewer junior non spesso nella cultura geek tipo USA ma attenzione, culture & persone variano spesso causa anche "CR solo formali" antidoto: "non criticare, CHIEDI" no: "questo é rotto quando arg == 0" si: "che succede quando arg == 0?" inquadra come: chiedendo s impara puó produrre un fix, un commento,... 10

"Non Quelli Importanti"? (2) a volte QI hanno ego fragili...! vedono la perfezione come uno stato, non come uno scopo + un processo che aiuta a muovere in quella direzione!-) effetto negativo sul morale di squadra magari + dei contributi di QI... "non criticare, CHIEDI" aiuta anche qui non é un attacco no riflesso difensivo é un ottimo stile di interazione professionale, utile in tanti altri contesti 11

"CR solo formale" (1) puó essere "eccessivo rispetto" "se LUI ha scritto il codice in questo modo, non sono degno di criticarlo!" facile da contrastare: spiega che le CR sono un modo di imparare tecniche &c e lo SONO, spesso e volentieri! 12

"CR solo formale" (2) puó essere "mancanza di buy-in" il reviewer accetta controvoglia di fare le CR "perché deve", non crede che valgano il tempo e l'energia che gli costano caso peggiore: "scambio" di CR solo formali fra due programmatori demotivati come ogni altro aspetto non puó venir solo imposto, va "venduto" efficacemente ci vuole "evangelismo" (programmatore senior entusiasta, magari consulente) e ci vogliono DATI in supporto alla tesi! 13

Aspetti sociali delle CR (1) unico modello che ho visto funzionare: tutti ricevono continuamente CR, ogni volta tutti imparano E tutti insegnano non é che ogni mattina ti fermi a riflettere devo lavarmi i denti stamane? Ne fai un ABITUDINE!-) (buone abitudini, checklist &c sono una grande idea x produttivitá, time mgmt) É lo stesso per le CR: igiene del codice!-) 14

Aspetti sociali delle CR (2) best practice : tutti, sempre!, invitati a commentare, ma un singolo revisore designato (1 per CR) é responsabile della CR (e follow-up x controllare che i difetti siano correttamente rimediati)... come x qualsiasi altro action item!-) potenziale problema: "reviewer shopping" i problemi sociali si rimediano meglio con rimedi sociali e culturali a volte un techie fix puó aiutare (CR automaticamente assegnate a rotazione) un buon workflow-system aiuta molto 15

Cosa NON controllare NON usare la CR per controllare cose come problemi di formattazione del codice, &c lo stile di squadra DEVE essere controllato automaticamente da strumenti tipo lint (o IDE); fare manualmente lavoro che é facilmente automatizzato é uno spreco! A U T O M A T I Z Z A L O! idem per unit-test e loro coverage, &c... non porre troppa attenzione a quel che unit-test (&c) coprono bene (...MA...) 16

Allora COSA controllare? specialmente le cose che l automazione non controlla "mai": leggibilitá, chiarezza, nomi significativi (importante: un Data Dictionary) piú, i punti di difficoltá per i test...: qualitá dei test gestione corretta degli errori problemi di leak delle risorse problemi di sicurezza e privacy multi-tasking prestazioni portabilitá 17

Leggibilitá &c: i commenti commenti (& altra documentazione)...: allineati al codice, ma mai "sua pura ripetizione" (focus: PERCHÉ, non COME...) in italiano (o inglese) corretto usano termini allineati con codice e il linguaggio (int o integer, bool o boolean...) PUNTANO a documenti completi su algoritmi complessi o documenti esterni (specifiche, manuali, &c), NON ripetendoli nel bel mezzo del codice (dev esserci UN punto di autoritá, non due o piú;-). 18

Leggibilitá &c: altro codice chiaro, leggibile, conciso (ma non TROPPO compatto) nomi significativi e coerenti Data Dictionary e codice ben allineati IU (se c é) chiara e secondo lo stile di IU comune a tutto il progetto MOLTO importante: info di errore, log non reinventare la ruota : *riusare* funzionalitá giá presenti altrove nel progetto (con refactoring, se occorre) 19

Difficoltá per i test (1) coverage a parte, sono ben testati i casi limite e d errore (con mock, DI, &c)? casi d errore: se il linguaggio ha eccezioni, sono gestite bene? se no, sono tutti i risultati controllati x possibili errori? leak di memoria (o equivalenti in linguaggi GC)? altri leak di risorse? é tutto finalizzato correttamente in ogni caso? compresi gli errori? é testato? 20

Difficoltá per i test (2) multi-tasking (ahimé...): race condition? possibili deadlock? é importante essere MOLTO difensivi su questi punto! prestazioni: ottimizzazioni premature? Ma: attenzione anche a evitare gli sprechi (overhead facile da evitare quando il modo veloce é altrettanto semplice), e tenere d occhio la scalabilitá (se applicabile!) portabilitá? su che piattaforme é stato pienamente testato il codice? 21

Strumenti & Processi le CR leggere dovrebbero essere fattibili in remoto e in momenti comodi per chi le fa di persona / a voce presenta vantaggi, ma richiede coordinazione + pesante e non lascia la utile audit trail utile in casi di sprint / spike remoto-ma-sincrono (IM, IRC, chat...) é un compromesso (di rado soddisfacente) un thread di mail (o UX equivalente) puó essere il modello principale... 22

CR via email certo non uno strumento nuovo...;-) ma ha molti evidenti vantaggi disponibilitá universale user agent molto personalizzabili facile automatizzare programmi/script x: spedire email automatiche se eventi ricevere email e agire di consequenze qualunque strumento nuovo x le CR DEVE essere progettato per interoperare senza problemi con le CR via email! 23

CR via email: workflow (1) il VCS inizia una CR spedendo un email al revisore (CC il team) con testo e puntatori/ id del change-set ("patch", diff, &c) puntatori/id molto utili (a seconda del VCS), facilitano l esame di diff, contesto, interi file il testo delle diff é spesso ideale per il revisore x positionare commenti/domande meglio quindi averli entrambi, se possibile 24

CR via email: workflow (2) se possibile, le mail di CR devono essere PRIMA del commit/push del change-set al codebase -- qualitá di trunk/head se non fattibile (limiti del VCS), usare uno "staging repository" o branch per ogni changeset "committed but unreviewed" eseguire commit/push a trunk/head solo quando la CR é completa e soddisfacente la flessibilitá dei VCS distribuiti permette e facilita molti workflow alternativi 25

CR via email: workflow (3) il revisore commenta su regioni della diff chiedendo chiarimenti, suggerendo possibili modifiche, indicando probabili problemi (implicite richieste di cambiamenti;-) altri possono offrire feedback simili l autore DEVE risolvere ciascun caso con piena soddisfazione del revisore: é il revisore che decide!...da cui il probl. del "reviewer shopping";-) 26

dimensione dei changeset mirare a circa 200 righe (a seconda di quanto conciso é il linguaggio;-), COMPRESI i commenti (che sono cruciali per la CR!) ovviamente puó essere necessario averne di meno (piccolo bug-fix, minuscola addizione di feature) perché un singolo changeset non dovrebbe MAI fare "+ di una cosa" changeset troppo grandi portano a CR troppo ardue -- MAI + di 400 right, PER FAVORE...;-) 27

Durata di una sessione CR mai passare + di 60-90 minuti consecutivi in CR: l'efficacia "crolla" circa a quel punto ci si "abitua" in modo veramente intenso per le CR non c'é, ahimé!, un effetto "getting in the zone" che aiuti (come x programmazione e debugging: é + tipo un meeting...!) analogamente: non + di una sessione di CR x 1/2 giornata (1 la mattina, 1 il pomeriggio) ovviamente a volte ci sono deadline e altre pressioni, ma... (TBR: un "coding debt"?) 28

"nuovi giocattoli" (solo O.S.) Rietveld (see http://code.google.com/p/ rietveld/ e codereview.appspot.com) é su GAE, quindi non occorre neppure dedicarci un server...;-) ancora abbastanza nuovo, ma maturo Review Board (http://review-board.org/) Codestriker (http:// codestriker.sourceforge.net/) -- in perl! Java Code Reviewer alias JCR (http:// jcodereview.sourceforge.net/ -- é in Python e usabile anche per CR non-java;-) 29

D & R http://www.aleax.it/itbs11_crev.pdf?! aleax@google.com 30