
Grazie e buongiorno a tutti e
benvenuto a codice come una scena del crimine oggi
voglio darti una prospettiva diversa
sulla tua base di codice sono qui per
indagare le tracce che lasciamo tutti
dietro mentre creiamo i nostri sistemi e voi
vedrà che c’è molto valore
informazioni di tracce sono informazioni
questo ci aiuterà a prevedere il codice
è difficile mantenere il codice a rischio
per gli effetti e il codice che
diventa un collo di palla di produttività della squadra così
saltiamo dentro e diamo un’occhiata
cosa facciamo realmente con i programmatori
programmatori non scriviamo codice sì
certo che lo facciamo anche noi, ma non lo è
dove passiamo la maggior parte del nostro tempo, se tu
guarda la ricerca che troverai
in realtà passiamo la maggior parte del nostro tempo
apportare modifiche al codice esistente
e la maggior parte di quel tempo a sua volta è spesa
cercando di capire cosa fa il codice
in primo luogo e cosa significa
se è così, se vogliamo ottimizzare
qualsiasi aspetto dello sviluppo del software noi
dovrebbe ottimizzare per facilità di
capendo che è dove la grande vittoria
questa è una sfida ecco perché, per favore
dare un’occhiata a questa visualizzazione lo farò
affermare che è qui che si basa la maggior parte dei codici
alla fine finisco è carino
complicato ragionare su quali parti
sono difficili da mantenere
dove saranno gli insetti o far funzionare una squadra
palla di produttività senza più
contesto che non possiamo proprio dire e questo è
un problema che diventa più difficile con la
scala di esso perché i sistemi di oggi sono
sviluppato da più programmatori
organizzato in più squadre e quello
lascia tutti con la propria visione di
come appare il sistema nessuno ha un
quadro olistico e questo non è un nuovo
problema questo è un problema che è stato
in giro per decenni e abbiamo a
numero di soluzioni tradizionali a questo
nel settore del software , quindi mi piacerebbe
per iniziare questo discorso dando un’occhiata a
un po ‘dell’approccio tradizionale
per affrontare questi problemi prima di vedere
i limiti di quelli e poi noi
passare a qualcosa di completamente diverso
quindi se vuoi sapere quale parte di a
codice che è difficile da mantenere o
complessa perché non solo misuriamo
utilizzando le metriche di complessità, quindi lasciatemelo chiedere
tu quanti ne hai usati
metriche di complessità di qualsiasi tipo, così poche
forse sette otto persone fantastiche
grazie quindi abbiamo un numero di
diverse metriche di complessità da scegliere
da e questo è solo un esempio di questo
è uno degli approcci più popolari
questo è chiamato ciclomatico di mccabe
complessità e quello che fai in mccabe
la complessità ciclomatica è fondamentalmente te
considera il tuo programma o la tua funzione
come un grafico e quindi si calcola il
numero di possibili percorsi attraverso di esso e
quindi riassumi quel numero e il
più alto è il numero più complicato
il tuo codice e questo tipo di ha senso
perché si lega a uno dei più
fattori limitanti che abbiamo nella programmazione
è un fattore cognitivo è un lavoro
la memoria c’è davvero solo tu
posso tenere in testa in una volta così vorrei
Diciamo che McCabe ha sicuramente un senso
perché non usiamo più le metriche di complessità
Non lo so, ma conosco il motivo
Non li uso perché non lo uso
la metrica della complessità è dovuta alla complessità
le metriche sono piuttosto negative nella previsione
complessità forse una dichiarazione audace così
lasciatemelo supportare con una citazione
le metriche di complessità sintattica non possono
cattura l’intera immagine del software
complessità e ciò che mi piace di questo
la citazione è che proviene da un documento di ricerca
e quello che i ricercatori hanno fatto qui era
che hanno preso un numero diverso
metrica della complessità mccabe era uno dei
loro e poi li applicano al reale
basi del codice mondiale e ha esaminato quanto bene
loro si esibiscono e quello che hanno scoperto e
questo è stato davvero molto interessante
che non appena l’inizio del controllo per
il numero di righe di codice quelle più
elaborare metriche che non hanno aggiunto un if
ulteriore valore predittivo Wow il numero
di linee di codice che è una metrica schifosa
non è davvero il meglio che possiamo
fare
lasciatemi leggere un’altra citazione vista questo è
uno dei miei preferiti personali perché
questo è un po ‘malvagio l’uso di
le metriche per gestire i progetti software ha
nemmeno raggiunto uno stato di infanzia e
questa è una citazione di Robert gloss di
le mie offerte preferite se non l’hai fatto
controlla questi libri per favore fallo
lui è fantastico, una parola lucida significa che è così
progetti software sono così
così complicato e così aperto
poliedrico che non saremo mai in grado
per misurarlo
quindi ciò che afferma la gloria è che dovremmo
fare qualcosa di diverso dovremmo usare il nostro
intuizione ora come alcuni di voi potrebbero conoscermi
in realtà hanno una carriera parallela come pure
Ho una carriera parallela all’interno
psicologia e come psicologo te
Basta amare il concetto di
intuito perché è così caldo
soggetto umano lanuginoso ma che cos’è
in realtà, lascia che ti chieda quanti
hai programmato per più di
un decennio così a metà stanza almeno grande
quindi in quel periodo hai costruito tutto
un sacco di esperienza sai molto
sul codice e tutta quella competenza è
immagazzinato da qualche parte nella tua testa ora
l’intuizione è fondamentalmente solo qualcosa dentro
questa situazione forse qualcosa che vedi
sullo schermo qualcosa è nel tuo codice
l’editor i trigger sono richiamo di alcuni
di quella informazione è così intuizione
fondamentalmente solo riconoscimento
tuttavia l’intuizione è anche un inconscio
processo automatico e questo significa che tu
non avere alcun controllo cosciente su quale tipo
di informazioni che vengono recuperate e
questo è ciò che dà l’intuizione
qualità mitiche anche a lui piacciono tutte
altri processi inconsci nel nostro cervello
fa anche intuire piuttosto l’intuizione
un mucchio di diversi pregiudizi cognitivi
e anche se siamo riusciti a controllare in qualche modo per
quei pregiudizi che non possiamo essere
hardwired per fallire per loro ma anche
in qualche modo potremmo intuire probabilmente
ancora non farebbe il trucco ed ecco
la ragione per cui l’ intuizione non scala
non importa, non importa quanto siamo bravi
sono come sviluppatori non c’è modo il nostro
competenza e intuizione sta per
scala a milioni di righe di codice e
la parola software non è davvero arrivata
con una buona soluzione a questo e quello è
perché suggerisco di guardare a
altro campo completamente differente
disciplina ma una che affronta simili
domande complicate aperte come noi
fare così benvenuto a te psicologia forense
probabilmente tutti sanno un po ‘ ma
Forensics già credo che tu abbia letto
su diverse indagini sulla criminalità in
i giornali e sono abbastanza sicuro che tu abbia
visto un numero di cose interessanti su
Numeri come TV o testo corretto CSI o
chiunque ho anche scommesso che tutti voi la maggior parte di
probabilmente ne hai visto uno da a
film preferiti Silence of the Lambs come
molti di voi hanno visto il silenzio del
Agnelli praticamente la metà di te, grande come
molti di voi sono d’accordo con me quell’animale
Lecter è il personaggio più figo, sì lui
è davvero incredibile e il primo
volta che ho visto quel film ero abbastanza
influenzato da Hannibal Lecter e no no
no no no no no no no io davvero non voglio dire
che in un modo spaventoso sono stato influenzato da
competenze forensi non le altre cose
ti prometto e sono stato influenzato da lui
perché se ci pensi è abbastanza
incredibile quello che Hannibal Lecter fa
Hannibal Lecter ritorna chiuso dentro
la sua gabbia e lui riceve informazioni
dalle scene del crimine e basato su quello
informazione da sola Hannibal Lecter è
in grado di dedurre non solo i motivi ma
anche la personalità del reo e
quando ho visto quel film la prima volta
era come wow voglio imparare come fare
quella
anni dopo ha effettivamente iniziato a
studio la psicologia criminale mi viene terribilmente
deluso, rimango deluso perché
si è scoperto che quelli incredibili
tecniche che Hannibal Lecter era stato
Usato
hanno una seria limitazione piuttosto che
risulta che lavorano solo a Hollywood
film ma per fortuna ce ne sono alcuni
metodi più scientifici che possiamo usare
quindi per favore permettimi di darti un breve
introduzione al criminale geografico
profiling che è un moderno forense
metodo del profiling geografico
si basa su un fatto molto fondamentale fatto
conosci quei criminali il più delle volte
comportati proprio come noi vanno al
i film vanno nei ristoranti dove vanno
lo shopping si incontrano con gli amici forse
prendono persino i bambini da scuola
a meno che non si spostino in un’area
questo è dove l’opportunità spot-on per
crimine perché il crimine si verifica lì
deve essere una sovrapposizione nel tempo e nello spazio
tra un trasgressore e una vittima e
ciò che significa è che le scene del crimine
là le posizioni geografiche non sono mai
casuali contengono informazioni su
il criminale e questo è qualcosa che possiamo
li uso per catturarli e mi piacerebbe
mostra come questo è fatto nel reale
mondo e per farlo dobbiamo viaggiare
insieme nel tempo abbiamo bisogno di viaggiare a
Londra del XIX secolo a Whitechapel
area le strade di Jack lo Squartatore
cacciato quindi quello che vedi qui è una mappa
oltre il 19 ° secolo a Londra e vedi il
punti blu su quella mappa con le etichette
ognuno di loro rappresenta uno dei
scene del crimine di Jack lo Squartatore ora in a
profilo di criminali geografici ecco cosa
fate si prende ogni uno di quelli crimine
scene e considerarle come un centro di
gravità e poi li aspetti tutti
insieme ma aggiungi anche la tua conoscenza
del comportamento umano e della psicologia in
quel pianto così per esempio scene del crimine
che sono più vicini gli uni agli altri ottenere
assegnato più peso perché
psicologicamente tutte le distanze non lo sono
uguale ora se li abbiamo pesati tutti
insieme finiamo con un nuovo centro di
la gravità e questa è l’area rossa che vedi
lì nel mezzo è qualcosa
chiamato un hotspot e secondo il
la ricerca c’è una probabilità del 70% il nostro
avremo questa casa baster così che è
l’ area da pattugliare sorvegliata se tu
voglio prendere lo Squartatore ora prima di noi
vai avanti e guarda a questo si applica a
soffrire devo ammettere che Jack il
Ripper è un case study davvero economico per
fare perché Jack lo Squartatore non è mai stato
cucinato così chi era qui mi piacerebbe davvero
potrebbe rispondere a questa domanda non posso ma
quello che posso fare è prendere un po ‘di
principali sospetti e guarda come loro
Adatta il profilo quindi iniziamo con il mio
il numero uno preferito sospetto preferito
James Maybrick James Maybrick era un
commerciante di cotone da Liverpool e quando
è andato a Londra per fare affari che ha usato
per affittare la stanza in Middlesex Street così
diamo un’occhiata a Middlesex Street
lì è giusto nel nostro punto caldo se tu
leggere notizie come un anno e mezzo fa
probabilmente hai sentito parlare di alcuni presunti
contiene prove contro un altro Squartatore
sospetto il parrucchiere Aaron Kosminski
kozminski viveva a Sion Square così
diamo un’occhiata a Sian Square hmm
è un po ‘a est del suo punto caldo
quindi kozminski non è una buona idea
questo profilo come Maybrick è solo questo
solleva solo un punto davvero importante
che vorrei chiedervi di tenere a
la parte posteriore della testa mentre applichiamo questo
o software a causa di geografica
il profilo del criminale non punta mai a a
precisione precisa quando una geografica
il profilo del criminale è quello che crea
una superficie di probabilità sul
geografia giusto, questo è tutto
le probabilità ora Perché penso che
questo vale anche per il codice
cosa abbiamo fatto quello che abbiamo fatto qui
è che ne abbiamo preso un potenzialmente vasto
area geografica e restringerla fino a
molto più piccola parte molto più piccola
area in cui ora possiamo concentrare il nostro essere umano
competenza e intuizione e manuale
sforzi e siamo abbastanza sicuri che noi
catturerà l’autore del reato e allora se lo faremo
potrebbe fare lo stesso nel codice
E se potessimo prendere le nostre basi di codice
con centinaia di migliaia di milioni
linee di codice e mai intorpidito fino a a
pochi punti caldi e sono ancora abbastanza sicuro
se effettivamente miglioriamo quel codice otteniamo
un vero effetto in termini di crescita
produttività e qualità come possiamo usare
questo in codice bene la prima cosa che
abbiamo bisogno è una geografia una geografia di
codice e questo è il mio approccio preferito
questa è la squadra che si siede nella squadra della città
i sistemi software sono visualizzati come città
e ogni modulo ogni spazio dei nomi nel tuo
la base di codice viene visualizzata come una città
blocco e ogni classe ottiene ogni file
visualizzato come un edificio e poi più grande
che costruire il più complicato che
codice quindi questo è qualcosa che misuriamo
dal codice da solo ora quello che mi piace
su code city è che ci dà un
buona panoramica della complessità
distribuzione all’interno di un codice base comunque
in realtà non si muove ci avanti questo
è solo una semplice vecchia metrica di complessità
visualizzato in un modo nuovo di sicuro ma
se questa era tutta l’informazione che ho davanti
andrebbe dopo quei grandi edifici e
prova a rifattenerli in modo da ottenere di più
informazioni precise che dobbiamo aggiungere
qualcosa abbiamo bisogno di aggiungere il mancante
dimensione abbiamo bisogno di capire il
movimento spaziale non di criminali ma di
i programmatori e le buone notizie lo ordinano
rimase quello che già tutti voi avete
non siamo abituati a pensarci
in questo modo sto parlando della versione
sistemi di controllo il nostro controllo di versione
i sistemi sono un’ottima offerta di log di comportamento
noi come sviluppatori abbiamo interagito con il nostro
codice e ciò che vedi qui è a
semplice esempio è un singolo commit di a
singolo sviluppatore ma tu vedi che ciascuno
tempo facciamo un commit della nostra versione
il sistema di controllo registra un sacco di valore
informazioni per esempio vediamo chi ha fatto a
commettere quando è avvenuto un commit e
il pezzo più importante in cui nel
il codice ha fatto un cambiamento, quindi quello che ho
suggerisco è che se lo guardi
questo è un singolo commit fatto da un singolo
programmatore contiene un grande sistema
virtualmente migliaia di diversi commit
quindi cosa succede se prendiamo tutti i dati
aggregato e proiettarlo al
superficie statica di un codice ecco cosa
sembra che tu veda quelle aree rosse
brillando su quelli sono i nostri hotspot in
codice e in questo caso è un hotspot
definito come codice complicato che tu
Devo lavorare con spesso così complicato
codice che si deve lavorare con spesso
cosa ci dice in realtà?
quel pezzo di codice per rispondere
domanda che ho fatto un po ‘di diverso
casi di studio e mi piacerebbe presentarne uno
di loro per voi qui questo è un caso che
sono stati studiati un codice base per un anno e
una metà e il codice base è stato sviluppato
da vicino a 100 programmatori ed è stato un
codice abbastanza grande base mezzo mezzo a
milioni di righe di codice ecco cosa è
profilo geografico del trasgressore guardato
come se mia moglie affermasse sempre questo aspetto
come un alieno ma non è questo
circa cinquecentomila
linee di codice e vedi che mi muovo
torna alla rappresentazione bidimensionale
e il motivo per cui lo trovo
questi doni sono una visione molto migliore
dell’importanza relativa del
parti diverse quindi questo è un
visualizzazione interattiva e puoi
ingrandisci e riduci il livello di dettaglio
ti interessa ma anche qui su
la vista di livello più alto che sei in grado di
trova un certo numero di hotspot che vedi quelli
i cerchi rossi ora ricordano che era attivo un hotspot
codice complicato con cui lavorare
Spesso ciò che che in realtà significa
rispondi a questa domanda mi viene in mente un secondo set
delle metriche ho visto quanto sono buone le
hotspot per predire dove sono i difetti
sarà e una ragione per cui ho guardato il
effetti era perché i fatti hanno questo
proprietà veramente affascinante che difetti
tendono a raggruppare i fatti come ciascuno
altro e questo significa che nel tuo
tipico codice base relativamente pochi moduli
tendono ad essere responsabili per la maggior parte delle tue
difetti
quindi ho visto quanto sono buoni i punti caldi
a predire parti dense di difetto di dose
e quello che ho scoperto è stato abbastanza
interessante è venuto fuori che il caldo
spot composti solo da sette
correttamente identificato sette fuori dal
otto parti più colpite ancora di più
interessanti i punti caldi fatti solo fino
Il 4% del codice ancora quei 4% erano
responsabile per il 72% di tutti i difetti o se
giriamo intorno a questo in realtà significa
in questo sistema che se migliorato solo il 4%
di quel codice ci sbarazziamo della maggioranza
di tutti gli effetti, naturalmente
non ne presentiamo di nuovi il
cosa importante qui è che il caldo
gli spot ti aiutano a prendere quel grande sistema
e restringilo alle parti che
davvero importante per entrambi
produttività e qualità ma una volta noi
abbiamo trovato un punto caldo che vogliamo
capire un po ‘di più su quel codice noi
voglio sapere è un errore problematico
che già sappiamo o lo è
qualcosa che continua a declinare
qualità e vedere come possiamo farlo noi
bisogno di capire come i nostri programmi
evolvi quindi dai un’occhiata a ciò che tu
vedi qui è una foto di un pezzo di codice
ora sono ben consapevole che non puoi leggere
i dettagli e non solo perché
Sono un pessimo fotografo, questo è
davvero intenzionale perché ti voglio
concentrarsi sul modello generale qui e
il motivo per cui voglio che tu lo faccia
perché sono abbastanza convinto che noi come
un settore sappiamo come scrivere bene
codice sappiamo che aspetto ha un buon codice
conosciamo l’importanza della denominazione
testabilità i principi solidi tutti
che altre cose così la prima versione di
un programma in genere sembra abbastanza buono
vediamo cosa succede dopo whoops get a
un po ‘macchiato non è sicuro che sia a
buona cosa va bene non importa facciamo
guarda cosa succede dopo
Oh No, cos’è quello che vediamo?
succede dopo che oh no oh no che può
sicuramente non sarebbe una buona cosa cosa solo
è successo quello che è appena successo al suo codice
è iniziato così bello, pulito e
bellissimo e poi un numero di piccoli
si sono verificati disastri
quali sono questi disastri, lasciami fare
dillo al primo qui che è un nuovo
caratteristica il secondo che è il
segno tipico che vedi di un bug-fix fatto
più tardi venerdì poco prima di una scadenza
e l’ultimo qui che deve essere
quando un capo progetto ha deciso di tagliare il
portata e, naturalmente, ha cambiato idea
quindi dis miei amici questo è praticamente il tempo
questo è il tuo programma
manutenzione e questo è effettivamente un bene
cosa perché significa che a qualcuno interessa
sul tuo codice perché ricordi ognuno
uno di quei piccoli disastri rappresenta
qualcosa a cui qualcuno aggiunge valore
il vostro programma in modo che si vuole realmente
vuoi vedere che succeda comunque il
le cose brutte iniziano quando continuiamo a
costruisca su quel fondamento traballante quando noi
consentire ai nostri programmi di continuare a
declino della qualità in quel modo quindi cosa noi
voglio fare è ideare una tecnica che
ci permetterà di catturare il codice offensivo
così, ecco un modo per farlo
questo è qualcosa che chiamo complessità
tendenze come le tendenze di una complessità
questo che prendo ognuno degli hotspot
che abbiamo identificato in un codice base e
quindi scansiona il loro codice sorgente
repository Estraggo ogni storico
versione di quell’hotspot e misurare il
complessità di quella revisione storica e
ciò ci consente di tracciare una tendenza nel tempo
come questo che a sua volta ci permette di
prevedere il futuro e i dati che voi
vedi qui sono dati reali dal sistema reale
questo è da un progetto open source mono
la porta CLR iniziale open source e
questo mostra i dati per un singolo hotspot
più di quattro anni di tempo e si vede che
questo codice ha appena continuato ad accumularsi
la complessità diventa sempre peggio
nel tempo, ricorda che è un hotspot
perché noi
bisogno di lavorare con esso spesso cosa fai
pensa che succede se abbiamo complicato
codice con cui dobbiamo lavorare spesso e
diventa sempre più complessa si è
non c’è da meravigliarsi che ci sia un forte
correlazione tra hot spot e
difetti fin qui visti finora
il lato tecnico ma su larga scala
progetti software direi che il
Il lato sociale del software è ancora di più
importante il più grande il progetto e io
vorrei introdurre questo segmento di
una delle migliori osservazioni e sapere
sul codice di sviluppo del software no
mentire se vogliamo sapere come qualcosa
funziona veramente davvero , abbiamo bisogno di
guarda nel codice perché la verità è
lì ed è descritto in dove
dettagli tecnici precisi, quindi il codice no
mentire ma non dice tutta la verità
entrambi e se ci limitiamo al suo
visibile in un’istantanea statica del codice
ci mancano molte informazioni importanti
un pezzo chiave di informazione che noi
la mancanza è qualcosa che io chiamo tempura
accoppiamento e accoppiamento tempura è
interessante perché l’accoppiamento tempura è
abbastanza diverso dal modo in cui noi
tipicamente parla di accoppiamento in
software perché l’accoppiamento tempura non lo è
misurato dal codice da cui è stato misurato
l’evoluzione del codice quindi lascia che ti mostri
un semplice esempio qui quello che vedi qui
è un sistema semplice con solo tre
parti diverse la prima volta che faccio un
commettere
Ho cambiato l’iniettore di carburante e il
Modulo di diagnostica insieme al successivo
volta che apporto una modifica, cambio qualcosa
altrimenti la prima volta sono tornato a cambiare
l’iniettore di carburante e la diagnostica
modulo di nuovo insieme ora se questo è un
tendenza che continua ci deve essere
una sorta di relazione tra un carburante
reattore e il modulo agnostico perché
stanno cambiando insieme nel tempo come
questo che tipo di relazione potrebbe
che forse sta bene guardiamo un po ‘
dei risultati più comuni
ma troverai abbastanza spesso quando tu
investigare l’ accoppiamento tempura è questo
che hai un pezzo di codice qui
che usa un pezzo di codice qui e
ogni volta viene modificato nell’API di cui hai bisogno
per cambiare anche il client, quindi questo è
accoppiamento fisico fondamentalmente o semplicemente vecchio
e questo è davvero qualcosa che puoi vedere
solo nel codice ma ricorda tempura
l’accoppiamento viene inviato misurato dal codice
accoppiamento tempura è misurata dalla
evoluzione del tuo codice e questo significa
a volte incontri casi
come questo dove hai un pezzo di codice
qui hai un altro pezzo di codice qui
e non c’è assolutamente alcuna dipendenza
tra loro, continuano a cambiare
insieme nel tempo come può quello possibile
essere
come possono due pezzi di codice indipendenti
continuare a cambiare insieme nel tempo è quello
la cosa più spettrale della fisica quantistica
del tempo non, ma troverò in più
casi è un caro vecchio amico copia / incolla
quindi hai un po ‘di codice qui che puoi
messo incollato qui qui e qui e ora
ogni volta che modifichi l’originale che hai
per ricordare di modificare la bussola come
Beh, l’accoppiamento tempura è un ottimo modo
per rilevare i cloni software, ma possiamo farlo
ancora di più con l’accoppiamento tempura e io
vorrebbe mostrarti come mostrare
tu come puoi analizzare un completo
l’architettura quindi considera questo semplice
sistema qui abbiamo tre diversi
sottosistemi qui e possiamo misurare
temperatura pling su un livello di sottosistema
così come non dobbiamo limitarci
in file video e se si misura
qui vediamo che queste temperature
tre sistemi tendono a essere modificati al
Allo stesso tempo ora pensi che faccia a
differenza se questi tre sistemi sono
mani ventose di un singolo programmatore o
se sono sviluppati da più
programmatori organizzati in diversi
squadre ero in realtà in quella situazione a
tempo fa lasciatemi condividere una piccola storia
con te è successo qualcosa
cinque sei anni fa a quel tempo ero
lavorando come consulente e mi sono unito a
nuovo incarico e il mio primo giorno lì
ho firmato un certo numero di compiti
quindi ho scelto uno dei compiti ovviamente
quello che sembrava il più divertente e
iniziare a lavorarci su quello presto
notato che per completare questo
compito ho bisogno di fare un tweak su un’API
tale API era di proprietà di una squadra diversa
così sono andato dal loro capo squadra
e le ho chiesto che pensi di poterlo fare
apporta questa modifica a questa API e a lei
mi ha detto che è un semplice cambiamento
quindi potrei iniziare subito
eccellente quindi sono tornato alla mia scrivania e
ha iniziato a lavorare su un altro compito e quello
è stata una buona cosa perché ne ho preso uno
settimana una settimana per ottenere questo semplice cambiamento
Non ho pensato molto su di esso in un primo momento
contro qualcos’altro è apparso evidentemente
ma si è scoperto che dovevamo modificare
quell’API molto e ogni volta dovevamo
apportare una modifica a ciò che il cambiamento ha preso a
almeno una settimana quindi un giorno ho dovuto
scopri cosa sta succedendo qui
così ho camminato e ho effettivamente chiesto
il capo squadra mi dispiace cosa sta succedendo
qui è qualcosa di inaspettato
alzarsi sempre perché ci vuole
tanto tempo per ottenere il semplice
cambiare e quello che mi ha detto completamente
cambiato come hai un’architettura più morbida
perché è risultato che sì era un
cambiamento davvero semplice da fare per loro
ma per farlo hanno dovuto andare a
ancora un altro team e cambiare la loro API
e quella squadra, a sua volta, doveva ancora andare
un’altra squadra e quella squadra dovevano andare
gli amministratori del database e come noi
tutti sanno che è stato tutto cambiato per
Cresco morire così il cibo da asporto qui è
che se hai un sistema con
dipendenze tra le diverse parti
e quelle parti sono sviluppate da
squadre diverse bene quello che effettivamente
è una dipendenza tra le persone e
naturalmente questo torna indietro
uno di quelli famosi e famosi
osservazioni sul software di legge di Conway così
Immagino tu abbia già sentito molto parlare
La legge di Conway a questa conferenza sono
intenzione di mantenere questo davvero molto breve
chi ha familiarità con la legge di Conway è così
bello così
Il diritto del Congresso è fondamentalmente il
osservazione che il modo in cui siamo organizzati
come un’organizzazione si rifletterà in
una sorta di software design e il meglio
cosa che con la legge di Conway è che ci
sono altrettante interpretazioni di esso
come ci sono post di blog su di esso
quindi possiamo fondamentalmente scegliere il nostro preferito
e il mio preferito è la legge di Conway in
inverso perché usato in Reverse Conway
la legge diventa un utile strumento organizzativo
quindi in pratica significa che iniziamo
il sistema del campo che vogliamo costruire e
allora guardiamo a quel sistema e vediamo come
dovremmo organizzarci per farlo
capita nel modo più efficiente possibile ma
Sì, nuovi sistemi per la maggior parte del tempo
avere il codice esistente di cui abbiamo bisogno
mantenere con i sistemi esistenti che noi
bisogno di migliorare così come possiamo usare
La legge di Conway sul codice legacy cosa io
consiglio qui è che iniziamo da
capire quanto bene fa la corrente
sistema supporta il modo in cui lavoriamo con esso
e una tecnica che puoi usare è
qualcosa che chiamo social network in codice
di nuovo i social network sono misurati da
l’evoluzione del codice da una fonte
repository di codice quindi quello che faccio qui è
che la scansione del codice sorgente
repository e ogni volta trovo un file
dove due programmatori hanno fatto
contributi quei due sviluppatori
ottenere un collegamento di comunicazione tra di loro
ora continuo a cercare la cronologia e io
trova che un altro programmatore ha fatto
contributi allo stesso file bene allora
lei ottiene anche un collegamento di comunicazione
e nel corso del tempo questo ci permette di costruire
un grafico completo sul loro ideale
percorsi di comunicazione nella nostra organizzazione
e come percorsi ideali perché c’è
ovviamente questo è misurato da come
il loro codice è stato effettivamente creato lì
nulla qui per suggerire che alcuni di
quelle linee rappresentano la comunicazione
in realtà ha avuto luogo quindi ciò che è necessario
fare ora è prendere il tuo grafico il tuo
rete di comunicazione e confrontarla con
la tua organizzazione formale di breve e
eventuali discrepanze devono essere comprese
quindi diamo un’occhiata ad alcuni tipici
esempi su cosa puoi aspettarti di trovare
quando lo fai
secondo la legge del Congresso dovremmo
aspetto di trovare qualcosa come questo cosa
vedi qui è che ne abbiamo tre
diverse squadre e tu vedi che la maggior parte di
i percorsi di comunicazione sono tra
membri della stessa squadra e di nuovo quello
significa che su ogni squadra lavorano le persone
con circa le stesse parti del
codice e questa è una buona cosa perché
significa che condividono lo stesso contesto
condividere lo stesso contesto è qualcosa
questo sta solo rendendo la comunicazione così importante
più facile ed economico quindi è qui che tu
vuoi essere e vedi anche tu
avere l’occasione online qui tra
squadre diverse e probabilmente anche questo
un segno che impollinazione incrociata di
la conoscenza è un buon segno nella programmazione
anche così forse rappresenta solo un
programmatore che ruota le squadre ora che ho
una confessione per rendere tutti i dati che tu
vedere in questa sessione è vero da dove viene
i sistemi reali sono tutte le associazioni
da basi di codice reali eccetto questo e
il motivo è che sono uno spartano mio
giorno di lavoro ho analizzato centinaia di
basi di codice differenti e devo ancora trovare
un’organizzazione che è allineata alla morte
ben allineato con il loro codice quindi ho dovuto
rendi questo il prossimo che mostrerò
tu invece è reale quindi ora abbiamo visto
dove vogliamo essere, guarderemo il
lato opposto dello spettro quanti
di voi volete vedere un completo disastro
va bene, proviamoci così
questa è una storia sulla compagnia e
questa è una società che erano in una bella
buona posizione che avrebbero fatto
il tuo prodotto e sono stati in un buono
posizione perché hanno fatto qualcosa
molto simile in passato, quindi il reale
avuto i dati li ha detto che questo progetto
usando i tuoi cinque sviluppatori interni
prendi il tuo vicino qui sì
sai cosa pensi un progetto software
è prevedibile ridicolo e davvero
certo che qualcuno ha avuto l’ idea
sì un anno ma sai che abbiamo questo
fiera molto bella in soli tre
mesi non possiamo farlo in tre mesi
ora come prendi qualcosa che conosci
dura un anno e lo comprime in
solo tre mesi
è così facile gettare quattro volte
come molti sviluppatori su questo e questo era un
progetto frenetico l’iniziale
l’architettura era già stata detta e
assicurato a tempo di quanto ti porterebbe
leggere il mitico uomo-mese
hanno reclutato 25 consulenti e lei
li usavo per organizzarli in quattro
squadre diverse come pensi la loro
diagramma di comunicazione sembrava quello che voglio
per mostrarti ora sono i dati reali
Mi è stato permesso di usare dal vero
progetto che ho appena fatto all’unanimità così
eccoci qui, sembra piuttosto bello, no?
ma ti assicuro che non è niente
bello questo è un completo
disastro questo è anarchia questo è un
interruzione della comunicazione e la ragione
è così brutto è perché sì, se guardi
a quelle quattro squadre diverse che vedi
che i membri della stessa squadra li hanno
hanno molte linee tra di loro
il che significa che lavorano nelle stesse parti
del codice il problema è che tutti
altrimenti ottenga quello pure quindi non è per questo
diverse squadre questo è praticamente uno
team di 29 sviluppatori con
confini organizzativi artificiali
tra loro ora non ho lavorato su a
progetto me stesso inizialmente sono entrato come
parte di esse analisi post mortem e
poi parlo molto al
sviluppatori e loro mi hanno detto molto
cose interessanti una cosa che loro
mi ha detto che avevano un sacco di
difetti la seconda cosa che tutti
mi ha detto che il codice era difficile da fare
capire e questo è stato un po ‘sorprendente
perché avevo guardato il codice
in precedenza e non l’ho trovato così male
e ma hanno scoperto che la ragione era
certo che anche se hai scritto il
pezzo di codice te stesso oggi tre giorni
più tardi sembrava completamente diverso
perché 500 sviluppatori avevano lavorato
nel frattempo la cosa finale che
mi hanno detto che hanno speso molto
di tempo che unisce funzionalità diverse
rami e se si dà un’occhiata a questo
schema si vede che non non l’hanno fatto
unire il problema il loro problema era quello
la loro architettura non poteva proprio supportare
il loro modo di lavorare con esso così per favore
allinea la tua architettura al tuo
organizzazione che il tuo codice ringrazierà
per questo ora ricorda quel progetto I
ti ho appena detto che si sono lamentati
molto sui loro difetti e in effetti
avevano un enorme arretrato di fatti e
questo non dovrebbe davvero essere una sorpresa
dato quello che sappiamo veramente
bug del software si scopre che il
numero di programmatori dietro un pezzo di
il codice è uno dei migliori predittori di
il numero di problemi di qualità che codifica
avrà quindi se sappiamo di che
correlazione comincio a pensare che sì
di nuovo questo è qualcosa che possiamo effettivamente
misurare questo è dati che abbiamo in a
cronologia del controllo della versione quindi vediamo se
possiamo trovare un modo per identificare il codice a
rischio di difetti ecco un approccio
questa è una visualizzazione chiamata frattale
le figure di un frattale funzionano così
consideri ogni file nel tuo sistema come
una scatola e ogni programmatore viene assegnato
un colore e più ha quel programmatore
contribuito al codice più grande è il loro
area della scatola ora vedi un esempio
qui da una vera base di codice e se lo fossi
dopo l’ accesso allo sviluppo parallelo I
andrei dopo il secondo lì
perché quel file ha contributi da
un sacco di programmatori diversi e lo faremo
trova il codice come quello che devi ispezionare
e capisci perché e te lo prometto
quello che troverai la maggior parte del tempo è
quel codice cambia per un motivo
motivo per cui il file attira molti
gli sviluppatori è probabilmente perché ha
molte ragioni per farlo ha troppe cose
responsabilità quindi sono ulteriori cifre
un buon punto di partenza, ma possiamo fare
ancora di più se guardi il frattale
figure vedrete che il reale
darci un buon modo per identificare
il principale proprietario della conoscenza dietro a ciascuno
pezzo di codice che il programmatore ha realizzato
la maggior parte dei contributi sono anche
probabilmente quelli che sanno di più
su quel pezzo di codice, quindi se abbiamo
quell’informazione su ciascuno
file di nuovo perché non aggregarlo e
proiettarlo sulla superficie statica di a
codice che ci consentirebbe di costruire a
completa mappa della conoscenza di un codebase
ecco come appare ora questo è
di nuovo dati reali da una vera base di codice
questo è lo sviluppo del
linguaggio di programmazione Scala un partner
con un compilatore qui ed è lo stesso
principio ogni file è visualizzato come a
cerchio in questo caso e ogni sviluppatore
il proprietario della conoscenza è visualizzato da
colore su un cerchio corrispondente ora a
la mappa della conoscenza è qualcosa che puoi
usare per semplificare la comunicazione, quindi facciamolo
Diciamo che vogliamo unirci a questo progetto
e vogliamo dare un contributo a
la parte posteriore nell’angolo in alto ora
usando una mappa della conoscenza vediamo che il
sviluppatore giallo è reso padrone due
contributi quindi probabilmente conosce un
molto su quel codice e se non lo fa
sappiamo che vediamo che l’arancione rosa
lo sviluppatore ha anche contribuito molto
il back-end quindi chiediamogli invece
ma invece di concentrarsi sugli individui noi
potrebbe ottenere dati ancora più interessanti se
noi aggregiamo queste informazioni in squadre
perché questo in realtà ci darebbe un
modo per valutare la legge di Conway ecco cosa
sembra che ora ogni colore rappresenti
una squadra e tu vedi quella ferma prospettiva
il nostro Conway sembra davvero abbastanza
bene vedi che la squadra rossa loro
praticamente hai il tuo sottosistema
dove potrebbero focalizzare il riferimento e
anche la squadra rosa aveva il suo
sottosistema dove possono lavorare
isolamento ma in un angolo abbiamo un
grande sottosistema con contributi da
tutte e tre le squadre e ancora quando lo trovi
una cosa del genere è necessario
capire perché e la ragione potrebbe essere a
semplice che questa organizzazione manca solo
una quarta squadra per assumere un condiviso
responsabilità o ancora modifiche al codice per
una ragione troppe responsabilità e
forse quel pezzo di codice è stato un
suddivisione grezza in tre parti differenti
e ovviamente una volta che hai questi dati
puoi sovrapporlo con i risultati di a
l’analisi di accoppiamento temporale ricorda il
progetto che solo qualche tempo fa
il progetto è stato un semplice cambiamento
una settimana perchè
Organizzazione Fulford è così che abbiamo trovato
fuori ora la parte finale che voglio mostrare
ti legando alla comunicazione
diagrammi i social network quando noi
parlare dei social network di cui abbiamo bisogno
menzionare il principio di Pareto e il
Il principio di Pareto è meglio conosciuto come il
80/20 la regola ed è qualcosa che
vale per tutti i social network
Facebook Twitter e ho anche trovato quello
tiene su basi di codice che l’80% di
il contenuto è creato ma il 20% del
membri e lo avete in codice come
beh, hai alcuni sviluppatori che sono
stato in giro per lungo tempo in tutti
sistema conoscono il codice dentro e fuori
forse sono così che cosa vorrebbe
succede se te ne vai, se vuoi
lasciare la vostra base di codice Cameron bene si
ovviamente otterrebbe il divario di conoscenza
Quanto è grande la maggior parte delle volte non ne abbiamo idea
ma ti sembra di dire che possiamo effettivamente
scoperto qui è quello che sembra avere
uno sguardo a quelle aree rosse in questo caso
non rappresentano nessun hotspot no
rappresentano il codice abbandonato che è
codice scritto dallo sviluppatore che lo è
non fa più parte dell’organizzazione e
questo è qualcosa che potresti usare
motivo per la distribuzione della conoscenza
nella tua base di codice e quando lo fai
molto probabilmente troverai schemi
così abbiamo un intero abbandonato
sottosistema e ancora questo è il
informazioni puoi usare un po ‘di più
in modo proattivo come parte del tuo rischio
gestione
quindi se sai che hai intenzione di fare
alcune modifiche a una funzione che è
abbandonato in questo modo usa quell’informazione
per programmare un tempo aggiuntivo per l’ apprendimento
perché è un rischio enormemente aumentato per
modifica il codice che non capiamo più
quindi ho quasi finito ora voglio solo
riassumendo per te oggi abbiamo visto come
le tecniche dalla psicologia forense possono
aiutaci a identificare gli hotspot nel codice come
bene e gli hotspot sono il codice che ci aiuta
prevedere il codice che è difficile da mantenere e
codice a rischio di difetti e abbiamo
visto anche che una volta abbracciamo il passato
di un codice base la sua evoluzione
otteniamo molte informazioni sociali come
bene che ci aiuti a misurare cose che noi
non sono stato in grado di misurare prima
cose come la conoscenza a causa del
distribuzione e perdita di conoscenza e io
penso sia importante che questi
tecniche che non stanno da sole
hanno bisogno di un ingrediente vitale di cui hanno bisogno
perché queste tecniche ci sono
per aiutare e guidare la tua esperienza in questo
probabilmente sarà più necessario e questo è
un argomento enorme e se vuoi leggere
di più ne scrivo molto a riguardo
sul mio sangue, naturalmente, anche quello
libro completo se vuoi immergerti
i dettagli e la cosa su cui sto lavorando
in questo momento è di fornire questi strumenti come a
servizio quindi è qualcosa che spero di aver
sarà in grado di rilasciare il prossimo mese se
sei interessato iscriviti per un’anteprima
adesso è gratis ora prima di prendere
domande mi piace prendere questo
opportunità e dire grazie mille per
ascoltandomi e che il codice sia con
grazie
oh bello
Grazie così ricevo un sacco di domande
qui la prima domanda è affascinante ma
pensi di confondere la causalità
con la correlazione no non la penso così ma
è sempre un rischio e non ne sono sicuro
quella domanda si riferisce al mio studio lì
sugli insetti potrebbe essere così la cosa è
quel consiglio praticamente ognuno di questi
analisi si basano su dati empirici della
il cursore risulta che in realtà abbiamo un
sottocampo nelle università che studiano software
evoluzione in modo da avere un sacco di accademici
studi di altissima qualità che vanno
nella maggior parte di questi risultati, quindi se lo sei
interessato a ciò che hanno un sacco di
riferimenti nel mio libro quindi se lo sei
interessato mi mandi una mail che hai il mio
indirizzo email lì e sarò felice di
fornirti alcuni riferimenti su
sostenere il materiale di ricerca quindi ecco
il prossimo è davvero interessante come
rendi conto che i tecnici cambiano
squadre nel tempo quando analizzano le squadre sì
è una domanda complicata e il modo in cui lo faccio
è che non posso farlo quando lo fai
questo analizza questo uno dei più difficili
le cose è capire quale tempo
periodo in cui dovresti effettivamente studiare così
quello che tendo a fare è che lo faccio sempre
l’analisi tecnica tende sempre a
correre su una vita completa del
codebase perché mi permette di individuare
Tendenze a lungo termine Tendo anche a correre molto
analisi molto più brevi come The Lost
Sprint o il tempo dall’ultima
rilascio o qualcosa del genere e questo
ti dà di nuovo una visione diversa e a
prospettiva diversa che davvero lo farà
ti aiuta particolarmente da quando tutti
le storie sono le caratteristiche su cui abbiamo lavorato
fresco nella tua mente in modo da poter vedere come
in realtà ha avuto un impatto sul codice base e
quando studio le metriche sociali che faccio
sicuro di non andare più indietro allora
fino all’ultimo organizzatore principale
cambiare così è fondamentalmente come lo faccio
Penso che sarebbe troppo complicato e anche
molto rischio per pregiudizi altrimenti effettivamente
sì e questo è il prossimo come fai tu
conto che le persone cambiano squadra di nuovo
o tempo di analisi più breve ma
a volte se sono solo gli individui
ruotando li lascio semplicemente li dentro e
si vedrà che questo è l’esempio che ho
ti ha mostrato dove ha questa linea
squadre diverse che non sono il venditore
questa è la maggior parte del tempo che è un bene
segno ma anche se hai pesanti
dipendenze tra le tue diverse
squadre non è necessariamente male tanto a lungo
come hai una spiegazione plausibile per
si penso che sia il più importante
cosa con tutti questi analizzatori è
che quello che vuoi cercare sono i
cose che ti hanno sorpreso non appena te
trova qualcosa in cui non hai un bene
spiegazione del perché sembra così
di solito è un segnale di avviso
la tua esperienza quanto efficace hai
trovato TDD e test unitario per essere in
prevenire gli effetti e far rispettare
codice qualità e struttura fai tu
Raccomando TDD wow mi piace quella domanda
quindi sì, molte squadre intendo parte del mio
il lavoro è che vado in un’azienda che faccio
analisi del loro codebase e parto
il nostro rapporto con risultati e
raccomandazioni e molte squadre oggi
usano TDD o almeno lavorano molto con
automatizzare test e controlli e cosa io
ho scoperto che è piuttosto interessante, no
avere dati se TDD ti aiuta davvero
oppure no ci sono altri studi che sembrano
in quella e poi direi che
i loro risultati sono penso che ci siano
ancora inconcludenti ci sono positivi
effetti collaterali a TDD sicuramente ma che cosa
Io tendo a trovare è che la maggior parte del caldo
i punti tendono ad essere nel codice di prova
i peggiori trasgressori sono sempre nel test
codice e penso che il motivo principale e io sono
speculando ora ma penso al principale
la ragione è che noi sviluppatori facciamo un
differenza facciamo una divisione mentale su
una mano avevamo il codice dell’applicazione e noi
sappiamo che è vitale e importante che noi
tenerlo pulito, bello e manutenibile
e tutta quella roba
underhand abbiamo il codice di prova e la maggior parte
del tempo in cui eravamo felici, dimentichiamoci
per scriverne qualcuna così e penso
questo è un errore pericoloso perché da
una prospettiva di manutenzione che c’è
davvero nessuna differenza tra il tuo test
codice e il codice dell’applicazione se il tuo
il codice di test è privo di qualità
la tua schiena e di nuovo quella quantità di caldo
gli spot nel codice di test sono qualcosa che ho
visto indipendente da TD o D o non T DT
quindi quelle erano le domande che ho ricevuto qui
e andrò alla clinica degli oratori
nel caso tu voglia continuare il loro
discussione e sarò felice di rispondere
qualsiasi domanda tu possa avere di nuovo così
grazie mille e goditi il resto del
conferenza
Grazie
benvenuto a codice come una scena del crimine oggi
voglio darti una prospettiva diversa
sulla tua base di codice sono qui per
indagare le tracce che lasciamo tutti
dietro mentre creiamo i nostri sistemi e voi
vedrà che c’è molto valore
informazioni di tracce sono informazioni
questo ci aiuterà a prevedere il codice
è difficile mantenere il codice a rischio
per gli effetti e il codice che
diventa un collo di palla di produttività della squadra così
saltiamo dentro e diamo un’occhiata
cosa facciamo realmente con i programmatori
programmatori non scriviamo codice sì
certo che lo facciamo anche noi, ma non lo è
dove passiamo la maggior parte del nostro tempo, se tu
guarda la ricerca che troverai
in realtà passiamo la maggior parte del nostro tempo
apportare modifiche al codice esistente
e la maggior parte di quel tempo a sua volta è spesa
cercando di capire cosa fa il codice
in primo luogo e cosa significa
se è così, se vogliamo ottimizzare
qualsiasi aspetto dello sviluppo del software noi
dovrebbe ottimizzare per facilità di
capendo che è dove la grande vittoria
questa è una sfida ecco perché, per favore
dare un’occhiata a questa visualizzazione lo farò
affermare che è qui che si basa la maggior parte dei codici
alla fine finisco è carino
complicato ragionare su quali parti
sono difficili da mantenere
dove saranno gli insetti o far funzionare una squadra
palla di produttività senza più
contesto che non possiamo proprio dire e questo è
un problema che diventa più difficile con la
scala di esso perché i sistemi di oggi sono
sviluppato da più programmatori
organizzato in più squadre e quello
lascia tutti con la propria visione di
come appare il sistema nessuno ha un
quadro olistico e questo non è un nuovo
problema questo è un problema che è stato
in giro per decenni e abbiamo a
numero di soluzioni tradizionali a questo
nel settore del software , quindi mi piacerebbe
per iniziare questo discorso dando un’occhiata a
un po ‘dell’approccio tradizionale
per affrontare questi problemi prima di vedere
i limiti di quelli e poi noi
passare a qualcosa di completamente diverso
quindi se vuoi sapere quale parte di a
codice che è difficile da mantenere o
complessa perché non solo misuriamo
utilizzando le metriche di complessità, quindi lasciatemelo chiedere
tu quanti ne hai usati
metriche di complessità di qualsiasi tipo, così poche
forse sette otto persone fantastiche
grazie quindi abbiamo un numero di
diverse metriche di complessità da scegliere
da e questo è solo un esempio di questo
è uno degli approcci più popolari
questo è chiamato ciclomatico di mccabe
complessità e quello che fai in mccabe
la complessità ciclomatica è fondamentalmente te
considera il tuo programma o la tua funzione
come un grafico e quindi si calcola il
numero di possibili percorsi attraverso di esso e
quindi riassumi quel numero e il
più alto è il numero più complicato
il tuo codice e questo tipo di ha senso
perché si lega a uno dei più
fattori limitanti che abbiamo nella programmazione
è un fattore cognitivo è un lavoro
la memoria c’è davvero solo tu
posso tenere in testa in una volta così vorrei
Diciamo che McCabe ha sicuramente un senso
perché non usiamo più le metriche di complessità
Non lo so, ma conosco il motivo
Non li uso perché non lo uso
la metrica della complessità è dovuta alla complessità
le metriche sono piuttosto negative nella previsione
complessità forse una dichiarazione audace così
lasciatemelo supportare con una citazione
le metriche di complessità sintattica non possono
cattura l’intera immagine del software
complessità e ciò che mi piace di questo
la citazione è che proviene da un documento di ricerca
e quello che i ricercatori hanno fatto qui era
che hanno preso un numero diverso
metrica della complessità mccabe era uno dei
loro e poi li applicano al reale
basi del codice mondiale e ha esaminato quanto bene
loro si esibiscono e quello che hanno scoperto e
questo è stato davvero molto interessante
che non appena l’inizio del controllo per
il numero di righe di codice quelle più
elaborare metriche che non hanno aggiunto un if
ulteriore valore predittivo Wow il numero
di linee di codice che è una metrica schifosa
non è davvero il meglio che possiamo
fare
lasciatemi leggere un’altra citazione vista questo è
uno dei miei preferiti personali perché
questo è un po ‘malvagio l’uso di
le metriche per gestire i progetti software ha
nemmeno raggiunto uno stato di infanzia e
questa è una citazione di Robert gloss di
le mie offerte preferite se non l’hai fatto
controlla questi libri per favore fallo
lui è fantastico, una parola lucida significa che è così
progetti software sono così
così complicato e così aperto
poliedrico che non saremo mai in grado
per misurarlo
quindi ciò che afferma la gloria è che dovremmo
fare qualcosa di diverso dovremmo usare il nostro
intuizione ora come alcuni di voi potrebbero conoscermi
in realtà hanno una carriera parallela come pure
Ho una carriera parallela all’interno
psicologia e come psicologo te
Basta amare il concetto di
intuito perché è così caldo
soggetto umano lanuginoso ma che cos’è
in realtà, lascia che ti chieda quanti
hai programmato per più di
un decennio così a metà stanza almeno grande
quindi in quel periodo hai costruito tutto
un sacco di esperienza sai molto
sul codice e tutta quella competenza è
immagazzinato da qualche parte nella tua testa ora
l’intuizione è fondamentalmente solo qualcosa dentro
questa situazione forse qualcosa che vedi
sullo schermo qualcosa è nel tuo codice
l’editor i trigger sono richiamo di alcuni
di quella informazione è così intuizione
fondamentalmente solo riconoscimento
tuttavia l’intuizione è anche un inconscio
processo automatico e questo significa che tu
non avere alcun controllo cosciente su quale tipo
di informazioni che vengono recuperate e
questo è ciò che dà l’intuizione
qualità mitiche anche a lui piacciono tutte
altri processi inconsci nel nostro cervello
fa anche intuire piuttosto l’intuizione
un mucchio di diversi pregiudizi cognitivi
e anche se siamo riusciti a controllare in qualche modo per
quei pregiudizi che non possiamo essere
hardwired per fallire per loro ma anche
in qualche modo potremmo intuire probabilmente
ancora non farebbe il trucco ed ecco
la ragione per cui l’ intuizione non scala
non importa, non importa quanto siamo bravi
sono come sviluppatori non c’è modo il nostro
competenza e intuizione sta per
scala a milioni di righe di codice e
la parola software non è davvero arrivata
con una buona soluzione a questo e quello è
perché suggerisco di guardare a
altro campo completamente differente
disciplina ma una che affronta simili
domande complicate aperte come noi
fare così benvenuto a te psicologia forense
probabilmente tutti sanno un po ‘ ma
Forensics già credo che tu abbia letto
su diverse indagini sulla criminalità in
i giornali e sono abbastanza sicuro che tu abbia
visto un numero di cose interessanti su
Numeri come TV o testo corretto CSI o
chiunque ho anche scommesso che tutti voi la maggior parte di
probabilmente ne hai visto uno da a
film preferiti Silence of the Lambs come
molti di voi hanno visto il silenzio del
Agnelli praticamente la metà di te, grande come
molti di voi sono d’accordo con me quell’animale
Lecter è il personaggio più figo, sì lui
è davvero incredibile e il primo
volta che ho visto quel film ero abbastanza
influenzato da Hannibal Lecter e no no
no no no no no no no io davvero non voglio dire
che in un modo spaventoso sono stato influenzato da
competenze forensi non le altre cose
ti prometto e sono stato influenzato da lui
perché se ci pensi è abbastanza
incredibile quello che Hannibal Lecter fa
Hannibal Lecter ritorna chiuso dentro
la sua gabbia e lui riceve informazioni
dalle scene del crimine e basato su quello
informazione da sola Hannibal Lecter è
in grado di dedurre non solo i motivi ma
anche la personalità del reo e
quando ho visto quel film la prima volta
era come wow voglio imparare come fare
quella
anni dopo ha effettivamente iniziato a
studio la psicologia criminale mi viene terribilmente
deluso, rimango deluso perché
si è scoperto che quelli incredibili
tecniche che Hannibal Lecter era stato
Usato
hanno una seria limitazione piuttosto che
risulta che lavorano solo a Hollywood
film ma per fortuna ce ne sono alcuni
metodi più scientifici che possiamo usare
quindi per favore permettimi di darti un breve
introduzione al criminale geografico
profiling che è un moderno forense
metodo del profiling geografico
si basa su un fatto molto fondamentale fatto
conosci quei criminali il più delle volte
comportati proprio come noi vanno al
i film vanno nei ristoranti dove vanno
lo shopping si incontrano con gli amici forse
prendono persino i bambini da scuola
a meno che non si spostino in un’area
questo è dove l’opportunità spot-on per
crimine perché il crimine si verifica lì
deve essere una sovrapposizione nel tempo e nello spazio
tra un trasgressore e una vittima e
ciò che significa è che le scene del crimine
là le posizioni geografiche non sono mai
casuali contengono informazioni su
il criminale e questo è qualcosa che possiamo
li uso per catturarli e mi piacerebbe
mostra come questo è fatto nel reale
mondo e per farlo dobbiamo viaggiare
insieme nel tempo abbiamo bisogno di viaggiare a
Londra del XIX secolo a Whitechapel
area le strade di Jack lo Squartatore
cacciato quindi quello che vedi qui è una mappa
oltre il 19 ° secolo a Londra e vedi il
punti blu su quella mappa con le etichette
ognuno di loro rappresenta uno dei
scene del crimine di Jack lo Squartatore ora in a
profilo di criminali geografici ecco cosa
fate si prende ogni uno di quelli crimine
scene e considerarle come un centro di
gravità e poi li aspetti tutti
insieme ma aggiungi anche la tua conoscenza
del comportamento umano e della psicologia in
quel pianto così per esempio scene del crimine
che sono più vicini gli uni agli altri ottenere
assegnato più peso perché
psicologicamente tutte le distanze non lo sono
uguale ora se li abbiamo pesati tutti
insieme finiamo con un nuovo centro di
la gravità e questa è l’area rossa che vedi
lì nel mezzo è qualcosa
chiamato un hotspot e secondo il
la ricerca c’è una probabilità del 70% il nostro
avremo questa casa baster così che è
l’ area da pattugliare sorvegliata se tu
voglio prendere lo Squartatore ora prima di noi
vai avanti e guarda a questo si applica a
soffrire devo ammettere che Jack il
Ripper è un case study davvero economico per
fare perché Jack lo Squartatore non è mai stato
cucinato così chi era qui mi piacerebbe davvero
potrebbe rispondere a questa domanda non posso ma
quello che posso fare è prendere un po ‘di
principali sospetti e guarda come loro
Adatta il profilo quindi iniziamo con il mio
il numero uno preferito sospetto preferito
James Maybrick James Maybrick era un
commerciante di cotone da Liverpool e quando
è andato a Londra per fare affari che ha usato
per affittare la stanza in Middlesex Street così
diamo un’occhiata a Middlesex Street
lì è giusto nel nostro punto caldo se tu
leggere notizie come un anno e mezzo fa
probabilmente hai sentito parlare di alcuni presunti
contiene prove contro un altro Squartatore
sospetto il parrucchiere Aaron Kosminski
kozminski viveva a Sion Square così
diamo un’occhiata a Sian Square hmm
è un po ‘a est del suo punto caldo
quindi kozminski non è una buona idea
questo profilo come Maybrick è solo questo
solleva solo un punto davvero importante
che vorrei chiedervi di tenere a
la parte posteriore della testa mentre applichiamo questo
o software a causa di geografica
il profilo del criminale non punta mai a a
precisione precisa quando una geografica
il profilo del criminale è quello che crea
una superficie di probabilità sul
geografia giusto, questo è tutto
le probabilità ora Perché penso che
questo vale anche per il codice
cosa abbiamo fatto quello che abbiamo fatto qui
è che ne abbiamo preso un potenzialmente vasto
area geografica e restringerla fino a
molto più piccola parte molto più piccola
area in cui ora possiamo concentrare il nostro essere umano
competenza e intuizione e manuale
sforzi e siamo abbastanza sicuri che noi
catturerà l’autore del reato e allora se lo faremo
potrebbe fare lo stesso nel codice
E se potessimo prendere le nostre basi di codice
con centinaia di migliaia di milioni
linee di codice e mai intorpidito fino a a
pochi punti caldi e sono ancora abbastanza sicuro
se effettivamente miglioriamo quel codice otteniamo
un vero effetto in termini di crescita
produttività e qualità come possiamo usare
questo in codice bene la prima cosa che
abbiamo bisogno è una geografia una geografia di
codice e questo è il mio approccio preferito
questa è la squadra che si siede nella squadra della città
i sistemi software sono visualizzati come città
e ogni modulo ogni spazio dei nomi nel tuo
la base di codice viene visualizzata come una città
blocco e ogni classe ottiene ogni file
visualizzato come un edificio e poi più grande
che costruire il più complicato che
codice quindi questo è qualcosa che misuriamo
dal codice da solo ora quello che mi piace
su code city è che ci dà un
buona panoramica della complessità
distribuzione all’interno di un codice base comunque
in realtà non si muove ci avanti questo
è solo una semplice vecchia metrica di complessità
visualizzato in un modo nuovo di sicuro ma
se questa era tutta l’informazione che ho davanti
andrebbe dopo quei grandi edifici e
prova a rifattenerli in modo da ottenere di più
informazioni precise che dobbiamo aggiungere
qualcosa abbiamo bisogno di aggiungere il mancante
dimensione abbiamo bisogno di capire il
movimento spaziale non di criminali ma di
i programmatori e le buone notizie lo ordinano
rimase quello che già tutti voi avete
non siamo abituati a pensarci
in questo modo sto parlando della versione
sistemi di controllo il nostro controllo di versione
i sistemi sono un’ottima offerta di log di comportamento
noi come sviluppatori abbiamo interagito con il nostro
codice e ciò che vedi qui è a
semplice esempio è un singolo commit di a
singolo sviluppatore ma tu vedi che ciascuno
tempo facciamo un commit della nostra versione
il sistema di controllo registra un sacco di valore
informazioni per esempio vediamo chi ha fatto a
commettere quando è avvenuto un commit e
il pezzo più importante in cui nel
il codice ha fatto un cambiamento, quindi quello che ho
suggerisco è che se lo guardi
questo è un singolo commit fatto da un singolo
programmatore contiene un grande sistema
virtualmente migliaia di diversi commit
quindi cosa succede se prendiamo tutti i dati
aggregato e proiettarlo al
superficie statica di un codice ecco cosa
sembra che tu veda quelle aree rosse
brillando su quelli sono i nostri hotspot in
codice e in questo caso è un hotspot
definito come codice complicato che tu
Devo lavorare con spesso così complicato
codice che si deve lavorare con spesso
cosa ci dice in realtà?
quel pezzo di codice per rispondere
domanda che ho fatto un po ‘di diverso
casi di studio e mi piacerebbe presentarne uno
di loro per voi qui questo è un caso che
sono stati studiati un codice base per un anno e
una metà e il codice base è stato sviluppato
da vicino a 100 programmatori ed è stato un
codice abbastanza grande base mezzo mezzo a
milioni di righe di codice ecco cosa è
profilo geografico del trasgressore guardato
come se mia moglie affermasse sempre questo aspetto
come un alieno ma non è questo
circa cinquecentomila
linee di codice e vedi che mi muovo
torna alla rappresentazione bidimensionale
e il motivo per cui lo trovo
questi doni sono una visione molto migliore
dell’importanza relativa del
parti diverse quindi questo è un
visualizzazione interattiva e puoi
ingrandisci e riduci il livello di dettaglio
ti interessa ma anche qui su
la vista di livello più alto che sei in grado di
trova un certo numero di hotspot che vedi quelli
i cerchi rossi ora ricordano che era attivo un hotspot
codice complicato con cui lavorare
Spesso ciò che che in realtà significa
rispondi a questa domanda mi viene in mente un secondo set
delle metriche ho visto quanto sono buone le
hotspot per predire dove sono i difetti
sarà e una ragione per cui ho guardato il
effetti era perché i fatti hanno questo
proprietà veramente affascinante che difetti
tendono a raggruppare i fatti come ciascuno
altro e questo significa che nel tuo
tipico codice base relativamente pochi moduli
tendono ad essere responsabili per la maggior parte delle tue
difetti
quindi ho visto quanto sono buoni i punti caldi
a predire parti dense di difetto di dose
e quello che ho scoperto è stato abbastanza
interessante è venuto fuori che il caldo
spot composti solo da sette
correttamente identificato sette fuori dal
otto parti più colpite ancora di più
interessanti i punti caldi fatti solo fino
Il 4% del codice ancora quei 4% erano
responsabile per il 72% di tutti i difetti o se
giriamo intorno a questo in realtà significa
in questo sistema che se migliorato solo il 4%
di quel codice ci sbarazziamo della maggioranza
di tutti gli effetti, naturalmente
non ne presentiamo di nuovi il
cosa importante qui è che il caldo
gli spot ti aiutano a prendere quel grande sistema
e restringilo alle parti che
davvero importante per entrambi
produttività e qualità ma una volta noi
abbiamo trovato un punto caldo che vogliamo
capire un po ‘di più su quel codice noi
voglio sapere è un errore problematico
che già sappiamo o lo è
qualcosa che continua a declinare
qualità e vedere come possiamo farlo noi
bisogno di capire come i nostri programmi
evolvi quindi dai un’occhiata a ciò che tu
vedi qui è una foto di un pezzo di codice
ora sono ben consapevole che non puoi leggere
i dettagli e non solo perché
Sono un pessimo fotografo, questo è
davvero intenzionale perché ti voglio
concentrarsi sul modello generale qui e
il motivo per cui voglio che tu lo faccia
perché sono abbastanza convinto che noi come
un settore sappiamo come scrivere bene
codice sappiamo che aspetto ha un buon codice
conosciamo l’importanza della denominazione
testabilità i principi solidi tutti
che altre cose così la prima versione di
un programma in genere sembra abbastanza buono
vediamo cosa succede dopo whoops get a
un po ‘macchiato non è sicuro che sia a
buona cosa va bene non importa facciamo
guarda cosa succede dopo
Oh No, cos’è quello che vediamo?
succede dopo che oh no oh no che può
sicuramente non sarebbe una buona cosa cosa solo
è successo quello che è appena successo al suo codice
è iniziato così bello, pulito e
bellissimo e poi un numero di piccoli
si sono verificati disastri
quali sono questi disastri, lasciami fare
dillo al primo qui che è un nuovo
caratteristica il secondo che è il
segno tipico che vedi di un bug-fix fatto
più tardi venerdì poco prima di una scadenza
e l’ultimo qui che deve essere
quando un capo progetto ha deciso di tagliare il
portata e, naturalmente, ha cambiato idea
quindi dis miei amici questo è praticamente il tempo
questo è il tuo programma
manutenzione e questo è effettivamente un bene
cosa perché significa che a qualcuno interessa
sul tuo codice perché ricordi ognuno
uno di quei piccoli disastri rappresenta
qualcosa a cui qualcuno aggiunge valore
il vostro programma in modo che si vuole realmente
vuoi vedere che succeda comunque il
le cose brutte iniziano quando continuiamo a
costruisca su quel fondamento traballante quando noi
consentire ai nostri programmi di continuare a
declino della qualità in quel modo quindi cosa noi
voglio fare è ideare una tecnica che
ci permetterà di catturare il codice offensivo
così, ecco un modo per farlo
questo è qualcosa che chiamo complessità
tendenze come le tendenze di una complessità
questo che prendo ognuno degli hotspot
che abbiamo identificato in un codice base e
quindi scansiona il loro codice sorgente
repository Estraggo ogni storico
versione di quell’hotspot e misurare il
complessità di quella revisione storica e
ciò ci consente di tracciare una tendenza nel tempo
come questo che a sua volta ci permette di
prevedere il futuro e i dati che voi
vedi qui sono dati reali dal sistema reale
questo è da un progetto open source mono
la porta CLR iniziale open source e
questo mostra i dati per un singolo hotspot
più di quattro anni di tempo e si vede che
questo codice ha appena continuato ad accumularsi
la complessità diventa sempre peggio
nel tempo, ricorda che è un hotspot
perché noi
bisogno di lavorare con esso spesso cosa fai
pensa che succede se abbiamo complicato
codice con cui dobbiamo lavorare spesso e
diventa sempre più complessa si è
non c’è da meravigliarsi che ci sia un forte
correlazione tra hot spot e
difetti fin qui visti finora
il lato tecnico ma su larga scala
progetti software direi che il
Il lato sociale del software è ancora di più
importante il più grande il progetto e io
vorrei introdurre questo segmento di
una delle migliori osservazioni e sapere
sul codice di sviluppo del software no
mentire se vogliamo sapere come qualcosa
funziona veramente davvero , abbiamo bisogno di
guarda nel codice perché la verità è
lì ed è descritto in dove
dettagli tecnici precisi, quindi il codice no
mentire ma non dice tutta la verità
entrambi e se ci limitiamo al suo
visibile in un’istantanea statica del codice
ci mancano molte informazioni importanti
un pezzo chiave di informazione che noi
la mancanza è qualcosa che io chiamo tempura
accoppiamento e accoppiamento tempura è
interessante perché l’accoppiamento tempura è
abbastanza diverso dal modo in cui noi
tipicamente parla di accoppiamento in
software perché l’accoppiamento tempura non lo è
misurato dal codice da cui è stato misurato
l’evoluzione del codice quindi lascia che ti mostri
un semplice esempio qui quello che vedi qui
è un sistema semplice con solo tre
parti diverse la prima volta che faccio un
commettere
Ho cambiato l’iniettore di carburante e il
Modulo di diagnostica insieme al successivo
volta che apporto una modifica, cambio qualcosa
altrimenti la prima volta sono tornato a cambiare
l’iniettore di carburante e la diagnostica
modulo di nuovo insieme ora se questo è un
tendenza che continua ci deve essere
una sorta di relazione tra un carburante
reattore e il modulo agnostico perché
stanno cambiando insieme nel tempo come
questo che tipo di relazione potrebbe
che forse sta bene guardiamo un po ‘
dei risultati più comuni
ma troverai abbastanza spesso quando tu
investigare l’ accoppiamento tempura è questo
che hai un pezzo di codice qui
che usa un pezzo di codice qui e
ogni volta viene modificato nell’API di cui hai bisogno
per cambiare anche il client, quindi questo è
accoppiamento fisico fondamentalmente o semplicemente vecchio
e questo è davvero qualcosa che puoi vedere
solo nel codice ma ricorda tempura
l’accoppiamento viene inviato misurato dal codice
accoppiamento tempura è misurata dalla
evoluzione del tuo codice e questo significa
a volte incontri casi
come questo dove hai un pezzo di codice
qui hai un altro pezzo di codice qui
e non c’è assolutamente alcuna dipendenza
tra loro, continuano a cambiare
insieme nel tempo come può quello possibile
essere
come possono due pezzi di codice indipendenti
continuare a cambiare insieme nel tempo è quello
la cosa più spettrale della fisica quantistica
del tempo non, ma troverò in più
casi è un caro vecchio amico copia / incolla
quindi hai un po ‘di codice qui che puoi
messo incollato qui qui e qui e ora
ogni volta che modifichi l’originale che hai
per ricordare di modificare la bussola come
Beh, l’accoppiamento tempura è un ottimo modo
per rilevare i cloni software, ma possiamo farlo
ancora di più con l’accoppiamento tempura e io
vorrebbe mostrarti come mostrare
tu come puoi analizzare un completo
l’architettura quindi considera questo semplice
sistema qui abbiamo tre diversi
sottosistemi qui e possiamo misurare
temperatura pling su un livello di sottosistema
così come non dobbiamo limitarci
in file video e se si misura
qui vediamo che queste temperature
tre sistemi tendono a essere modificati al
Allo stesso tempo ora pensi che faccia a
differenza se questi tre sistemi sono
mani ventose di un singolo programmatore o
se sono sviluppati da più
programmatori organizzati in diversi
squadre ero in realtà in quella situazione a
tempo fa lasciatemi condividere una piccola storia
con te è successo qualcosa
cinque sei anni fa a quel tempo ero
lavorando come consulente e mi sono unito a
nuovo incarico e il mio primo giorno lì
ho firmato un certo numero di compiti
quindi ho scelto uno dei compiti ovviamente
quello che sembrava il più divertente e
iniziare a lavorarci su quello presto
notato che per completare questo
compito ho bisogno di fare un tweak su un’API
tale API era di proprietà di una squadra diversa
così sono andato dal loro capo squadra
e le ho chiesto che pensi di poterlo fare
apporta questa modifica a questa API e a lei
mi ha detto che è un semplice cambiamento
quindi potrei iniziare subito
eccellente quindi sono tornato alla mia scrivania e
ha iniziato a lavorare su un altro compito e quello
è stata una buona cosa perché ne ho preso uno
settimana una settimana per ottenere questo semplice cambiamento
Non ho pensato molto su di esso in un primo momento
contro qualcos’altro è apparso evidentemente
ma si è scoperto che dovevamo modificare
quell’API molto e ogni volta dovevamo
apportare una modifica a ciò che il cambiamento ha preso a
almeno una settimana quindi un giorno ho dovuto
scopri cosa sta succedendo qui
così ho camminato e ho effettivamente chiesto
il capo squadra mi dispiace cosa sta succedendo
qui è qualcosa di inaspettato
alzarsi sempre perché ci vuole
tanto tempo per ottenere il semplice
cambiare e quello che mi ha detto completamente
cambiato come hai un’architettura più morbida
perché è risultato che sì era un
cambiamento davvero semplice da fare per loro
ma per farlo hanno dovuto andare a
ancora un altro team e cambiare la loro API
e quella squadra, a sua volta, doveva ancora andare
un’altra squadra e quella squadra dovevano andare
gli amministratori del database e come noi
tutti sanno che è stato tutto cambiato per
Cresco morire così il cibo da asporto qui è
che se hai un sistema con
dipendenze tra le diverse parti
e quelle parti sono sviluppate da
squadre diverse bene quello che effettivamente
è una dipendenza tra le persone e
naturalmente questo torna indietro
uno di quelli famosi e famosi
osservazioni sul software di legge di Conway così
Immagino tu abbia già sentito molto parlare
La legge di Conway a questa conferenza sono
intenzione di mantenere questo davvero molto breve
chi ha familiarità con la legge di Conway è così
bello così
Il diritto del Congresso è fondamentalmente il
osservazione che il modo in cui siamo organizzati
come un’organizzazione si rifletterà in
una sorta di software design e il meglio
cosa che con la legge di Conway è che ci
sono altrettante interpretazioni di esso
come ci sono post di blog su di esso
quindi possiamo fondamentalmente scegliere il nostro preferito
e il mio preferito è la legge di Conway in
inverso perché usato in Reverse Conway
la legge diventa un utile strumento organizzativo
quindi in pratica significa che iniziamo
il sistema del campo che vogliamo costruire e
allora guardiamo a quel sistema e vediamo come
dovremmo organizzarci per farlo
capita nel modo più efficiente possibile ma
Sì, nuovi sistemi per la maggior parte del tempo
avere il codice esistente di cui abbiamo bisogno
mantenere con i sistemi esistenti che noi
bisogno di migliorare così come possiamo usare
La legge di Conway sul codice legacy cosa io
consiglio qui è che iniziamo da
capire quanto bene fa la corrente
sistema supporta il modo in cui lavoriamo con esso
e una tecnica che puoi usare è
qualcosa che chiamo social network in codice
di nuovo i social network sono misurati da
l’evoluzione del codice da una fonte
repository di codice quindi quello che faccio qui è
che la scansione del codice sorgente
repository e ogni volta trovo un file
dove due programmatori hanno fatto
contributi quei due sviluppatori
ottenere un collegamento di comunicazione tra di loro
ora continuo a cercare la cronologia e io
trova che un altro programmatore ha fatto
contributi allo stesso file bene allora
lei ottiene anche un collegamento di comunicazione
e nel corso del tempo questo ci permette di costruire
un grafico completo sul loro ideale
percorsi di comunicazione nella nostra organizzazione
e come percorsi ideali perché c’è
ovviamente questo è misurato da come
il loro codice è stato effettivamente creato lì
nulla qui per suggerire che alcuni di
quelle linee rappresentano la comunicazione
in realtà ha avuto luogo quindi ciò che è necessario
fare ora è prendere il tuo grafico il tuo
rete di comunicazione e confrontarla con
la tua organizzazione formale di breve e
eventuali discrepanze devono essere comprese
quindi diamo un’occhiata ad alcuni tipici
esempi su cosa puoi aspettarti di trovare
quando lo fai
secondo la legge del Congresso dovremmo
aspetto di trovare qualcosa come questo cosa
vedi qui è che ne abbiamo tre
diverse squadre e tu vedi che la maggior parte di
i percorsi di comunicazione sono tra
membri della stessa squadra e di nuovo quello
significa che su ogni squadra lavorano le persone
con circa le stesse parti del
codice e questa è una buona cosa perché
significa che condividono lo stesso contesto
condividere lo stesso contesto è qualcosa
questo sta solo rendendo la comunicazione così importante
più facile ed economico quindi è qui che tu
vuoi essere e vedi anche tu
avere l’occasione online qui tra
squadre diverse e probabilmente anche questo
un segno che impollinazione incrociata di
la conoscenza è un buon segno nella programmazione
anche così forse rappresenta solo un
programmatore che ruota le squadre ora che ho
una confessione per rendere tutti i dati che tu
vedere in questa sessione è vero da dove viene
i sistemi reali sono tutte le associazioni
da basi di codice reali eccetto questo e
il motivo è che sono uno spartano mio
giorno di lavoro ho analizzato centinaia di
basi di codice differenti e devo ancora trovare
un’organizzazione che è allineata alla morte
ben allineato con il loro codice quindi ho dovuto
rendi questo il prossimo che mostrerò
tu invece è reale quindi ora abbiamo visto
dove vogliamo essere, guarderemo il
lato opposto dello spettro quanti
di voi volete vedere un completo disastro
va bene, proviamoci così
questa è una storia sulla compagnia e
questa è una società che erano in una bella
buona posizione che avrebbero fatto
il tuo prodotto e sono stati in un buono
posizione perché hanno fatto qualcosa
molto simile in passato, quindi il reale
avuto i dati li ha detto che questo progetto
usando i tuoi cinque sviluppatori interni
prendi il tuo vicino qui sì
sai cosa pensi un progetto software
è prevedibile ridicolo e davvero
certo che qualcuno ha avuto l’ idea
sì un anno ma sai che abbiamo questo
fiera molto bella in soli tre
mesi non possiamo farlo in tre mesi
ora come prendi qualcosa che conosci
dura un anno e lo comprime in
solo tre mesi
è così facile gettare quattro volte
come molti sviluppatori su questo e questo era un
progetto frenetico l’iniziale
l’architettura era già stata detta e
assicurato a tempo di quanto ti porterebbe
leggere il mitico uomo-mese
hanno reclutato 25 consulenti e lei
li usavo per organizzarli in quattro
squadre diverse come pensi la loro
diagramma di comunicazione sembrava quello che voglio
per mostrarti ora sono i dati reali
Mi è stato permesso di usare dal vero
progetto che ho appena fatto all’unanimità così
eccoci qui, sembra piuttosto bello, no?
ma ti assicuro che non è niente
bello questo è un completo
disastro questo è anarchia questo è un
interruzione della comunicazione e la ragione
è così brutto è perché sì, se guardi
a quelle quattro squadre diverse che vedi
che i membri della stessa squadra li hanno
hanno molte linee tra di loro
il che significa che lavorano nelle stesse parti
del codice il problema è che tutti
altrimenti ottenga quello pure quindi non è per questo
diverse squadre questo è praticamente uno
team di 29 sviluppatori con
confini organizzativi artificiali
tra loro ora non ho lavorato su a
progetto me stesso inizialmente sono entrato come
parte di esse analisi post mortem e
poi parlo molto al
sviluppatori e loro mi hanno detto molto
cose interessanti una cosa che loro
mi ha detto che avevano un sacco di
difetti la seconda cosa che tutti
mi ha detto che il codice era difficile da fare
capire e questo è stato un po ‘sorprendente
perché avevo guardato il codice
in precedenza e non l’ho trovato così male
e ma hanno scoperto che la ragione era
certo che anche se hai scritto il
pezzo di codice te stesso oggi tre giorni
più tardi sembrava completamente diverso
perché 500 sviluppatori avevano lavorato
nel frattempo la cosa finale che
mi hanno detto che hanno speso molto
di tempo che unisce funzionalità diverse
rami e se si dà un’occhiata a questo
schema si vede che non non l’hanno fatto
unire il problema il loro problema era quello
la loro architettura non poteva proprio supportare
il loro modo di lavorare con esso così per favore
allinea la tua architettura al tuo
organizzazione che il tuo codice ringrazierà
per questo ora ricorda quel progetto I
ti ho appena detto che si sono lamentati
molto sui loro difetti e in effetti
avevano un enorme arretrato di fatti e
questo non dovrebbe davvero essere una sorpresa
dato quello che sappiamo veramente
bug del software si scopre che il
numero di programmatori dietro un pezzo di
il codice è uno dei migliori predittori di
il numero di problemi di qualità che codifica
avrà quindi se sappiamo di che
correlazione comincio a pensare che sì
di nuovo questo è qualcosa che possiamo effettivamente
misurare questo è dati che abbiamo in a
cronologia del controllo della versione quindi vediamo se
possiamo trovare un modo per identificare il codice a
rischio di difetti ecco un approccio
questa è una visualizzazione chiamata frattale
le figure di un frattale funzionano così
consideri ogni file nel tuo sistema come
una scatola e ogni programmatore viene assegnato
un colore e più ha quel programmatore
contribuito al codice più grande è il loro
area della scatola ora vedi un esempio
qui da una vera base di codice e se lo fossi
dopo l’ accesso allo sviluppo parallelo I
andrei dopo il secondo lì
perché quel file ha contributi da
un sacco di programmatori diversi e lo faremo
trova il codice come quello che devi ispezionare
e capisci perché e te lo prometto
quello che troverai la maggior parte del tempo è
quel codice cambia per un motivo
motivo per cui il file attira molti
gli sviluppatori è probabilmente perché ha
molte ragioni per farlo ha troppe cose
responsabilità quindi sono ulteriori cifre
un buon punto di partenza, ma possiamo fare
ancora di più se guardi il frattale
figure vedrete che il reale
darci un buon modo per identificare
il principale proprietario della conoscenza dietro a ciascuno
pezzo di codice che il programmatore ha realizzato
la maggior parte dei contributi sono anche
probabilmente quelli che sanno di più
su quel pezzo di codice, quindi se abbiamo
quell’informazione su ciascuno
file di nuovo perché non aggregarlo e
proiettarlo sulla superficie statica di a
codice che ci consentirebbe di costruire a
completa mappa della conoscenza di un codebase
ecco come appare ora questo è
di nuovo dati reali da una vera base di codice
questo è lo sviluppo del
linguaggio di programmazione Scala un partner
con un compilatore qui ed è lo stesso
principio ogni file è visualizzato come a
cerchio in questo caso e ogni sviluppatore
il proprietario della conoscenza è visualizzato da
colore su un cerchio corrispondente ora a
la mappa della conoscenza è qualcosa che puoi
usare per semplificare la comunicazione, quindi facciamolo
Diciamo che vogliamo unirci a questo progetto
e vogliamo dare un contributo a
la parte posteriore nell’angolo in alto ora
usando una mappa della conoscenza vediamo che il
sviluppatore giallo è reso padrone due
contributi quindi probabilmente conosce un
molto su quel codice e se non lo fa
sappiamo che vediamo che l’arancione rosa
lo sviluppatore ha anche contribuito molto
il back-end quindi chiediamogli invece
ma invece di concentrarsi sugli individui noi
potrebbe ottenere dati ancora più interessanti se
noi aggregiamo queste informazioni in squadre
perché questo in realtà ci darebbe un
modo per valutare la legge di Conway ecco cosa
sembra che ora ogni colore rappresenti
una squadra e tu vedi quella ferma prospettiva
il nostro Conway sembra davvero abbastanza
bene vedi che la squadra rossa loro
praticamente hai il tuo sottosistema
dove potrebbero focalizzare il riferimento e
anche la squadra rosa aveva il suo
sottosistema dove possono lavorare
isolamento ma in un angolo abbiamo un
grande sottosistema con contributi da
tutte e tre le squadre e ancora quando lo trovi
una cosa del genere è necessario
capire perché e la ragione potrebbe essere a
semplice che questa organizzazione manca solo
una quarta squadra per assumere un condiviso
responsabilità o ancora modifiche al codice per
una ragione troppe responsabilità e
forse quel pezzo di codice è stato un
suddivisione grezza in tre parti differenti
e ovviamente una volta che hai questi dati
puoi sovrapporlo con i risultati di a
l’analisi di accoppiamento temporale ricorda il
progetto che solo qualche tempo fa
il progetto è stato un semplice cambiamento
una settimana perchè
Organizzazione Fulford è così che abbiamo trovato
fuori ora la parte finale che voglio mostrare
ti legando alla comunicazione
diagrammi i social network quando noi
parlare dei social network di cui abbiamo bisogno
menzionare il principio di Pareto e il
Il principio di Pareto è meglio conosciuto come il
80/20 la regola ed è qualcosa che
vale per tutti i social network
Facebook Twitter e ho anche trovato quello
tiene su basi di codice che l’80% di
il contenuto è creato ma il 20% del
membri e lo avete in codice come
beh, hai alcuni sviluppatori che sono
stato in giro per lungo tempo in tutti
sistema conoscono il codice dentro e fuori
forse sono così che cosa vorrebbe
succede se te ne vai, se vuoi
lasciare la vostra base di codice Cameron bene si
ovviamente otterrebbe il divario di conoscenza
Quanto è grande la maggior parte delle volte non ne abbiamo idea
ma ti sembra di dire che possiamo effettivamente
scoperto qui è quello che sembra avere
uno sguardo a quelle aree rosse in questo caso
non rappresentano nessun hotspot no
rappresentano il codice abbandonato che è
codice scritto dallo sviluppatore che lo è
non fa più parte dell’organizzazione e
questo è qualcosa che potresti usare
motivo per la distribuzione della conoscenza
nella tua base di codice e quando lo fai
molto probabilmente troverai schemi
così abbiamo un intero abbandonato
sottosistema e ancora questo è il
informazioni puoi usare un po ‘di più
in modo proattivo come parte del tuo rischio
gestione
quindi se sai che hai intenzione di fare
alcune modifiche a una funzione che è
abbandonato in questo modo usa quell’informazione
per programmare un tempo aggiuntivo per l’ apprendimento
perché è un rischio enormemente aumentato per
modifica il codice che non capiamo più
quindi ho quasi finito ora voglio solo
riassumendo per te oggi abbiamo visto come
le tecniche dalla psicologia forense possono
aiutaci a identificare gli hotspot nel codice come
bene e gli hotspot sono il codice che ci aiuta
prevedere il codice che è difficile da mantenere e
codice a rischio di difetti e abbiamo
visto anche che una volta abbracciamo il passato
di un codice base la sua evoluzione
otteniamo molte informazioni sociali come
bene che ci aiuti a misurare cose che noi
non sono stato in grado di misurare prima
cose come la conoscenza a causa del
distribuzione e perdita di conoscenza e io
penso sia importante che questi
tecniche che non stanno da sole
hanno bisogno di un ingrediente vitale di cui hanno bisogno
perché queste tecniche ci sono
per aiutare e guidare la tua esperienza in questo
probabilmente sarà più necessario e questo è
un argomento enorme e se vuoi leggere
di più ne scrivo molto a riguardo
sul mio sangue, naturalmente, anche quello
libro completo se vuoi immergerti
i dettagli e la cosa su cui sto lavorando
in questo momento è di fornire questi strumenti come a
servizio quindi è qualcosa che spero di aver
sarà in grado di rilasciare il prossimo mese se
sei interessato iscriviti per un’anteprima
adesso è gratis ora prima di prendere
domande mi piace prendere questo
opportunità e dire grazie mille per
ascoltandomi e che il codice sia con
grazie
oh bello
Grazie così ricevo un sacco di domande
qui la prima domanda è affascinante ma
pensi di confondere la causalità
con la correlazione no non la penso così ma
è sempre un rischio e non ne sono sicuro
quella domanda si riferisce al mio studio lì
sugli insetti potrebbe essere così la cosa è
quel consiglio praticamente ognuno di questi
analisi si basano su dati empirici della
il cursore risulta che in realtà abbiamo un
sottocampo nelle università che studiano software
evoluzione in modo da avere un sacco di accademici
studi di altissima qualità che vanno
nella maggior parte di questi risultati, quindi se lo sei
interessato a ciò che hanno un sacco di
riferimenti nel mio libro quindi se lo sei
interessato mi mandi una mail che hai il mio
indirizzo email lì e sarò felice di
fornirti alcuni riferimenti su
sostenere il materiale di ricerca quindi ecco
il prossimo è davvero interessante come
rendi conto che i tecnici cambiano
squadre nel tempo quando analizzano le squadre sì
è una domanda complicata e il modo in cui lo faccio
è che non posso farlo quando lo fai
questo analizza questo uno dei più difficili
le cose è capire quale tempo
periodo in cui dovresti effettivamente studiare così
quello che tendo a fare è che lo faccio sempre
l’analisi tecnica tende sempre a
correre su una vita completa del
codebase perché mi permette di individuare
Tendenze a lungo termine Tendo anche a correre molto
analisi molto più brevi come The Lost
Sprint o il tempo dall’ultima
rilascio o qualcosa del genere e questo
ti dà di nuovo una visione diversa e a
prospettiva diversa che davvero lo farà
ti aiuta particolarmente da quando tutti
le storie sono le caratteristiche su cui abbiamo lavorato
fresco nella tua mente in modo da poter vedere come
in realtà ha avuto un impatto sul codice base e
quando studio le metriche sociali che faccio
sicuro di non andare più indietro allora
fino all’ultimo organizzatore principale
cambiare così è fondamentalmente come lo faccio
Penso che sarebbe troppo complicato e anche
molto rischio per pregiudizi altrimenti effettivamente
sì e questo è il prossimo come fai tu
conto che le persone cambiano squadra di nuovo
o tempo di analisi più breve ma
a volte se sono solo gli individui
ruotando li lascio semplicemente li dentro e
si vedrà che questo è l’esempio che ho
ti ha mostrato dove ha questa linea
squadre diverse che non sono il venditore
questa è la maggior parte del tempo che è un bene
segno ma anche se hai pesanti
dipendenze tra le tue diverse
squadre non è necessariamente male tanto a lungo
come hai una spiegazione plausibile per
si penso che sia il più importante
cosa con tutti questi analizzatori è
che quello che vuoi cercare sono i
cose che ti hanno sorpreso non appena te
trova qualcosa in cui non hai un bene
spiegazione del perché sembra così
di solito è un segnale di avviso
la tua esperienza quanto efficace hai
trovato TDD e test unitario per essere in
prevenire gli effetti e far rispettare
codice qualità e struttura fai tu
Raccomando TDD wow mi piace quella domanda
quindi sì, molte squadre intendo parte del mio
il lavoro è che vado in un’azienda che faccio
analisi del loro codebase e parto
il nostro rapporto con risultati e
raccomandazioni e molte squadre oggi
usano TDD o almeno lavorano molto con
automatizzare test e controlli e cosa io
ho scoperto che è piuttosto interessante, no
avere dati se TDD ti aiuta davvero
oppure no ci sono altri studi che sembrano
in quella e poi direi che
i loro risultati sono penso che ci siano
ancora inconcludenti ci sono positivi
effetti collaterali a TDD sicuramente ma che cosa
Io tendo a trovare è che la maggior parte del caldo
i punti tendono ad essere nel codice di prova
i peggiori trasgressori sono sempre nel test
codice e penso che il motivo principale e io sono
speculando ora ma penso al principale
la ragione è che noi sviluppatori facciamo un
differenza facciamo una divisione mentale su
una mano avevamo il codice dell’applicazione e noi
sappiamo che è vitale e importante che noi
tenerlo pulito, bello e manutenibile
e tutta quella roba
underhand abbiamo il codice di prova e la maggior parte
del tempo in cui eravamo felici, dimentichiamoci
per scriverne qualcuna così e penso
questo è un errore pericoloso perché da
una prospettiva di manutenzione che c’è
davvero nessuna differenza tra il tuo test
codice e il codice dell’applicazione se il tuo
il codice di test è privo di qualità
la tua schiena e di nuovo quella quantità di caldo
gli spot nel codice di test sono qualcosa che ho
visto indipendente da TD o D o non T DT
quindi quelle erano le domande che ho ricevuto qui
e andrò alla clinica degli oratori
nel caso tu voglia continuare il loro
discussione e sarò felice di rispondere
qualsiasi domanda tu possa avere di nuovo così
grazie mille e goditi il resto del
conferenza
Grazie
Please follow and like us: