Press "Enter" to skip to content

GOTO 2017 • A Crystal Ball to Prioritize Technical Debt • Adam Tornhill


Buon giorno a tutti e benvenuti
questo discorso dove stiamo andando a guardare fuori
per una sfera di cristallo che ci aiuterà a
non solo identificare ma anche dare la priorità
profondità tecnica quindi saltiamo dentro
e vedere che cosa questo è tutto mio
il punto di partenza è martin fowler’s
nota definizione di profondità tecnica
e quello che voglio che facciamo qui è farlo
concentrarsi sull’aspetto chiave e sulla chiave
l’aspetto della profondità tecnica è proprio questo
come la sua controparte finanziaria tecnica
eft incorrere in un pagamento di interessi e questo
è qualcosa che ho trovato in cui noi
l’ industria che tendiamo ad abusare e
a volte fraintendono e il
conseguenza di ciò è quella tecnica
profondità il concetto non è così utile o
utile come potrebbe essere così lasciami mostrare
tu cosa intendi per averlo con te
fai un piccolo esperimento quindi cosa sta succedendo
capita ora è che ho intenzione di mettere su un
pezzo di codice qui e il tuo compito è quello di
giudicare la qualità di quel pezzo di codice
tutto bene pronto
sei pronto, quindi dai un’occhiata a questo
bellezza quanti di voi pensano che questo
è un codice eccellente quanti ne lascerebbero
questo per una revisione del codice così sembra
siamo solo due di noi ovviamente questo è
codice non buono questo non è il tipo di
codice che scriviamo e ovviamente lo faremo
mai scrivere qualcosa del genere
noi stessi non scriviamo mai, ma è a
problema è una profondità tecnica senza
più contesto che non possiamo dire perché
non è la profondità tecnica a meno che non abbiamo
pagare un tasso di interesse e un
il tasso di interesse è abbastanza interessante a
funzione del tempo quindi per identificarlo
profondità tecnica avremo bisogno di avere un
dimensione temporale nel nostro codice dove possibile
otteniamo una cosa del genere in pochi minuti
andando a mostrarti
tecnica, ma prima di andare lì lo farei
piace condividere una piccola storia con te come
come parte del mio lavoro di giorno vado a diverso
le aziende e io analizziamo le loro basi di codice
e qualche tempo fa ho lavorato con un’azienda
che prima del mio arrivo avevano usato
lo strumento in grado di quantificare
la profondità tecnica così l’avevano presa
strumento e lo ha lanciato a 15 anni
codebase e questo strumento hanno segnalato che su
il tuo codice base di 15 anni che hai
accumulato 4000 anni di tecnica
profondità 4000 anni solo per metterlo dentro
prospettiva per se 4000 anni fa quello
Era qui quando Mosè si separò dal Mar Rosso
così 4000 anni di profondità tecnica possono
beh, sii preciso ma non lo è
particolarmente utile, intendo dove siamo noi
iniziare è tutta la profondità uguale ai siti
in realtà penso che sia un errore da provare
quantificare la profondità tecnica dal solo codice
e la ragione per cui dico è perché
la maggior parte della profondità tecnica non è uniforme
tecnico e questo è qualcosa che ho trovato
più e più volte che noi come
gli sviluppatori che tendiamo a scambiare
problemi organizzativi per tecnici
problemi e la conseguenza è che noi
iniziare a trattare i sintomi invece di
la causa principale è solo per darti un po ‘
esempi veloci forse hai visto
questo che vieni in una nuova compagnia
giusto e qualcuno ti aiuta il primo
giorno e ti dice va bene ma sii un po ‘
è attento a questa parte del codice
un casino completo è davvero molto difficile
per capire o il mio preferito
si potrebbe potrebbe avere sentito questo abbiamo
passare molto tempo a fondersi in modo diverso
feature branches dobbiamo comprare meglio
unisci gli strumenti hai sentito uno di questi
di te non sì così come vedrai lì
potrebbe essere un aspetto organizzativo
e ne parleremo più tardi
ma penso che la ragione principale che noi
fare errate attribuzioni come questa
perché l’ organizzazione che costruisce il
il codice è invisibile nel codice stesso e
è sfortunato perché c’è un
forte legame tra profondità tecnica e
l’organizzazione e ne sono abbastanza sicuro
non possiamo affrontare la profondità tecnica
senza prendere una visione olistica di esso e
quella visione olistica deve includere il nostro
dimensione sociale così basata su ciò che ho
ti ho detto fino ad ora ho messo insieme un po ‘di a
lista dei desideri tipo di informazioni I
pensa che abbiamo bisogno per affrontare
profondità tecnica e la prima cosa è nostra
il punto di partenza è scoprire quale parte
del codice ha il più alto interesse
valutare il secondo aspetto è il nostro
l’architettura supporta il modo in cui il nostro sistema
evolve stiamo lavorando con o contro
la nostra architettura e la terza e ultima
e forse il punto più importante indica come
fa apparire dal nostro punto di vista sociale
ordina qualsiasi palla di produttività accanto a te
so che quei pezzi del codice erano cinque
squadre diverse devono lavorare insieme
tutto il tempo
ora per favore ripensa al progetto te
lavorare ora
pensi questo tipo di informazioni
ti sarebbe utile nel tuo lavoro di giorno I
vedi che alcuni di voi annuiscono è così
perché siamo bravi ti godrai il
resto della sessione quello che ti voglio
concentrarsi qui è che nulla di questo
informazioni sono disponibili nel codice
di per sé più importante ci piacciono alcuni
informazioni critiche ci piace stretto
dimensione temporale e ci manca social
informazioni organizzative quindi come possiamo
prendi quello dove è la nostra sfera di cristallo
scopre che tutti voi ne avete già uno
non sono abituato a pensarci in quel modo
Sto parlando del nostro controllo della versione
dati quindi questo è un semplice esempio da
ottenere e il controllo della versione è incredibile
che in realtà è un log comportamentale
ci dice esattamente quali parti del codice
abbiamo cambiato a che punto nel tempo in modo
otteniamo la dimensione temporale giusta e
basato su quella dimensione temporale che possiamo
Calcola molto interessante
statistiche e frequenze ma anche di più
importanti dati sul controllo delle versioni sono sociali
dati quindi sappiamo esattamente quale programmatore
che ha funzionato in quali parti del codice
quindi abbracciamo il controllo della versione più tardi
e vediamo come ci aiuta a trovare il codice
con alto tasso di interesse e la mia partenza
il punto qui è un concetto che chiamo hotspots
lascia che ti mostri come funziona questo è un
analisi hotspot di un noto Java
sistema Tomcat come chiunque abbia lavorato o
ho usato Tomcat, sì, molti di voi sono così cool
Tomcat è un sistema maturo con un ricco
storia e ho intenzione di mostrarvi come
interpretare questa visualizzazione così avere a
guarda quei grandi cerchi blu che
lampeggia in quel momento ognuno di quelli
rappresenta una cartella in Tomcat
repository e vedi che hai
altri cerchi più piccoli al suo interno
quelle sono sottocartelle, quindi questo è un
distillazione gerarchica che segue
è la struttura delle cartelle del tuo codice
anche interattivo che penso sia
importante una volta arrivati ​​ai sistemi di
scala in modo da poter fare causa min al livello di
dettaglio a cui sei interessato e se tu
fai così vedrai che ogni file è
rappresentato come un cerchio e vedrai
che i cerchi hanno differenti
la dimensione è perché la dimensione è usata per
rappresentare la complessità del
codice corrispondente ora come misuriamo
complessità del codice che abbiamo un sacco di
modi diversi destra immagino molti di voi
sono familiari con cose come mccabe
abbiamo anche la complessità ciclomatica
cose come le metriche sul volume delle statistiche sulla salute
che potremmo usare e in realtà non lo è
importa quale tipo di metrica usi
perché ciò che tutti hanno in comune è
che sono ugualmente cattive metriche di complessità
sono terribilmente terribili nel misurare
complessità, quindi quello che tendo ad usare è il
la cosa più semplice che potrebbe funzionare
che in questo caso è il numero di
le linee di codice hanno un livello molto alto
correlazione a cose come il ciclomatico
complessità e inoltre questo non è il
parte interessante dei dati
una parte interessante dei dati è ciò che è
il tasso di interesse in modo da quello che stiamo andando a
fare è che stiamo andando a tirare fuori un po ‘
dati da un sistema di controllo versione e
guarda la frequenza del cambiamento di quello
codice in modo quanto spesso abbiamo effettivamente in
lavorare in questo
al codice e se combinati questi due
le dimensioni erano in grado di identificare
codice complicato che dobbiamo lavorare
con spesso e questo è i nostri punti caldi così
torniamo a Tomcat e lo vedi
in tongkat i punti caldi sono relativamente
pochi hot spot in questo momento solo perché
qualcosa è un punto caldo che non lo fa
significa che è un problema che significa
questa è la parte più importante di
il codice quando si tratta di laboratorio tecnico
quindi vuoi controllare quel codice e
assicurati che il codice sia bello e pulito
è facile capire che è facile
evolvi perché è lì che passi
la maggior parte del tempo però nella pratica
più spesso che non ho trovato che il
l’opposto è vero e ciò tende a fare
hot spot grandi candidati rifrangenti
e c’è una ragione affascinante per cui
questo è il caso e voglio mostrarti
perché prendendo in prestito una citazione dal loro
grande George Orwell forse ti ricordi
quelli di voi hanno letto George Orwell
che in realtà ha detto che tutto il codice è
uguale ma qualche codice è più uguale di
altri ora cosa significherà con quello
dichiarazione bene lascia che ti mostri per favore
dai un’occhiata ai seguenti grafici
tutti mostrano esattamente la stessa cosa così dentro
l’ asse x hai ogni file nel
sistema e sono ordinati secondo
la loro frequenza di cambiamento è il numero
si impegna a fare ogni file e il file
il numero di commit è ciò che vedi qui
sull’asse delle ordinate ora se guardi il
esempi gratuiti qui vedi quel dos
rappresentano tre codice radicalmente diverso
basi sono implementate in differenti
lingue per indirizzare domini diversi
usano completamente diversi
tecnologie sono sviluppati da
diverse organizzazioni hanno a
durata della vita diversa è tutto
diverso ma vedi qualche battutista
è giusto che tutti mostrano esattamente il
stessa distribuzione lo spettacolo una legge di potere
distribuzione e questo è qualcosa che ho
trovato in ogni singolo codice base che
Ho analizzato questo sembra essere il modo
quel software si evolve e questo è
importante perché questo ci dà uno strumento
dare la priorità perché ciò significa
che nella tua tipica base di codice la maggior parte di
il tuo codice è qui
nel longtail rappresenta il codice
raramente, se mai hai bisogno di lavorare con e
la maggior parte della nostra attività di sviluppo è
focalizzato su una parte relativamente piccola di
il tuo codice e questo è dove vogliamo
focalizzare i miglioramenti per essere carina
certo che avremo un vero ritorno su questo
investimento, quindi gli hotspot sono fantastici
punto di partenza ma a volte lo sono
non abbastanza e voglio mostrarti un
esempio in cui gli hotspot non sono abbastanza
lavoro e voglio mostrarti un altro
case study questa è un’analisi hotspot di
the.net core runtime da microsoft e
quando ho fatto questa analisi era come sei
mesi fa
la maggior parte dei punti caldi erano qui nel
JIT impacchetta la compilazione just-in-time
supporto giusto ma vedi anche che c’è
un po ‘come un hot spot satellitare qui
qualcosa chiamato GC dot CPP è così
punto netto garbage collector ora GC che CP
squadra sembra abbastanza innocente qui sullo schermo
ma questo è solo perché la scala di
dotnet core dotnet è enorme che consiste
di quello che vedi qui sullo schermo
circa quattro milioni di righe di codice
e GC dot CPP quindi un file relativamente grande
quanto grande non ne ho idea, quindi guardiamo
quello su Github Wow
quindi abbastanza grande, quindi abbiamo bisogno di guardare
nel file raw e quando lo facciamo noi
vedrà quel GC con cui CPP è un file
37000 linee di C ++ oltre 7000 linee
di C + + lascia che ti dica che ero un
Sviluppatore C ++ Ho fatto C ++ per 10 anni e
sì, so cosa pensi che sia 10
anni non torno mai indietro
Sono d’accordo ma allo stesso tempo
mi dà molto rispetto per 47.000
gli occhi di C ++ è roba del genere
incubi di Madoff e inoltre come
è utile sapere che lo vedi
CPP è un punto caldo Quindi facciamo finta I
vieni alla tua organizzazione e dì hey
guarda ho trovato la tua peggior manutenzione
problemi Ho trovato la tua profondità tecnica
con il più alto tasso di interesse che hai appena
riscrivi questo file e tutto va bene
di nuovo sarebbe accurato ma non
particolare utile, quindi è necessario
fare meglio perché come agiamo su
tali informazioni la risposta è che non lo facciamo
quindi quello che suggerisco è questo quando denta
tra quei grandi hotspot quello che facciamo ora è
che prendiamo il codice sorgente
Lo analizzerò in pezzi di diverso
metodi e poi guardare da dove viene
ogni commit viene eseguito correttamente, quindi è esattamente
la stessa misura ma su una funzione
livello di metodo mi permetta di mostrare come questo
guarda su GC il CPP quindi il nostro hotspot
l’analisi a livello di funzione rivela
che l’ hotspot numero uno su a
il livello di funzione è una funzione chiamata grow
carte-tessere di mattoni che consiste in una funzione
sono trecentotrentadue righe di
codice che è un po ‘forzante a
la funzione non lo è ma è sicuramente
molto meno di tre a settemila
linee di codice che è la dimensione del
file totale ed è decisamente inferiore a
quattro milioni di righe di codice che è il
dimensione di un sistema totale quindi ancora di più
importante ora siamo al livello in cui
possiamo agire sull’informazione e fare a
refactoring mirato basato su come abbiamo
ha lavorato con il codice fino ad ora
stiamo per tornare ai punti caldi
ma prima di farlo vorrei
tipo di provare a rispondere a una domanda come
come si arriva a un file con 37.000
linee di C ++ non posso davvero lasciar perdere
quindi questo è un consiglio per me
questo è il miglior libro che conosco su come
le organizzazioni falliscono è scritto da Diane
Morgan e Diane Warren l’interessante
la cosa qui è che non è un software
è una sociologa e lei
usato l’ incidente Challenger per coniare lei
paura della normalizzazione della devianza, quindi come
molti di voi ricordano lo space shuttle
Sfidante sì, così come la metà di voi
essere giusto in modo facciamo un breve riepilogo su
cos’è successo così questo è il loro
Challenger sul suo lancio finale e
questa è la vera navetta spaziale e cosa
vedi qui è questo enorme oggetto che è
un solido ripetitore di razzi che è enorme
la cosa giusta è così grande così è
consegnato in tre segmenti separati
che vengono poi assemblati e ciò che vedi
ecco uno sbuffo di fumo grigio lo vedi
non è una buona cosa che non dovrebbe essere
Lì, quindi, quello che è successo veramente è stato quello
ecco una congiunzione tra due diversi
segmenti e quel giunto non è riuscito a sigillare
e la conseguenza era che un po ‘di caldo
i gas di razzo potrebbero sfuggire e colpire il
intera struttura del Challenger così
quell’astronave fondamentalmente si è disintegrata
una volta entrato lì e quando Diane
Morgan scrive di questo lei dice al
storia di già indietro nei loro anni ’70 quando
hanno fatto i primi test di progettazione sul
Challenger e i ripetitori di razzi solidi
si è scoperto che il reale
prestazioni di quei razzi solidi
giunti di richiamo deviati dal
prestazione prevista in che cosa fai
in quel caso, questo non è un signore, così loro
formò un comitato e discussero
il problema e hanno deciso di passarlo
spento come un rischio accettabile
anni dopo durante il primo in volo
prove di nuovo è stato rivelato che il
le prestazioni effettive deviate dal
progetto
performance di nuovo discutono il
il problema era passato come un
rischio accettabile e andò avanti e avanti
come quello per anni prima effettivi e a
stanchi del lancio ce n’erano alcuni
preoccupazioni molto reali sollevate da alcuni dei
ingegneri che lavorano questa roba a causa del
temperature insolitamente fredde in Florida
in quel momento di nuovo è stato discusso e
spacciato come un rischio accettabile e il
conseguenza fu una tragica perdita di vite umane
ora questo è ciò che Diane Warren chiama il
normalizzazione della devianza che ogni volta
accettiamo un rischio che le deviazioni diventino
il nuovo normale otteniamo un nuovo punto di
riferimento e questo è interessante
perché non si tratta di questo
astronavi si tratta di persone e noi
avere un sacco di normalizzazione della devianza
anche nel software lasciatemi darti un
esempio diciamo che ti unisci a un nuovo
organizzazione e si eredita un file con
6.000 linee di codice
wow, questo è molto, ma se lavori con
abbastanza a lungo che diventa il tuo nuovo
normale inizi a conoscerli
linee di codice e intendo anche
seriamente che differenza avrebbe fatto
con qualche centinaio di righe in più
codice giusto così presto ne abbiamo sette
migliaio di righe di codice, allora abbiamo
ottomila e così via così abbiamo bisogno di
trovare un modo per identificare e fermare il
normalizzazione di Debian
ecco una tecnica che ho trovato davvero
utile per il software questo è qualcosa che io
chiamare le tendenze della complessità e il modo in cui questo
funziona fondamentalmente che quando trovo un
hot spot, tiro fuori tutto storico
revisioni dal controllo versione in seguito
di quel codice e poi misuro il codice
complessità in ogni momento e
tracciare una tendenza come questa in tutti i sistemi
raccontano storie giuste
ci limitiamo a imparare a leggerli così
ecco un esempio in modo da vedere il blu
la linea mostra la crescita in linee di codice
la linea rossa è una delle complessità
metriche come la complessità ciclomatica e
vedi qui che c’era una specie di
refactoring quaggiù in aprile
giusto ma in qualche modo sembravano avere
non è riuscito a risolvere la causa principale perché
Preda ha visto iniziare la complessità
di nascosto di nuovo prima che ci fosse un
aumento drammatico qui solo al
inizio dell’era
quindi questo è un segnale di avvertimento di cui abbiamo bisogno
fare un passo indietro e considerare cosa
in realtà accade e nella direzione
che questo codice cresce così
la normalizzazione della devianza è uno dei
ragioni per cui gli informatori sono così
importante nelle organizzazioni e ho trovato
le tendenze della complessità rendono grandi
whistleblowers nel codice in modo da riassumere questo
gli hotspot di prima parte ci aiutano a identificare
quel codice con il più alto tasso di interesse
e la ragione per cui lavorano è perché tutto
il codice non è uguale a ciò che voglio che facciamo
ora è di salire sull’astrazione
scala e guarda l’architettonico
livello e prova a scoprire come funziona
l’architettura supporta il nostro modo
il sistema si evolve e come tutti voi conoscete
non posso davvero parlare di architettura
senza menzionare l’arte così fa chiunque
riconosci questo lavoro nessuno di voi
questa è una buona cosa perché non è così
esiste questo è qualcosa chiamato liquido
proiezione di luce di cristallo fatta dal
artista Gustav Metzger quindi questo è un
oggetto che cambia tutto il tempo giusto
quindi questa opera d’arte sembra completamente
diverso oggi rispetto a ieri
è una specie di affascinante da guardare subito
la cosa interessante è il modo in cui
cambia perché il modo in cui cambia è
che ogni nuova forma richiede il
distruzione di una forma esistente e questo
è esattamente come dovrebbe essere il codice
evolvere in modo che il codice di successo si evolva
e cambierà e questo è un bene
cosa comunque la ragione per cui dico che è
ordine distruttivo è perché cambia e
nuove funzionalità che spesso diventano
sempre più difficile da attuare
nel tempo e alcuni sistemi hanno appena
sembra raggiungere una sorta di punto di svolta
e oltre quel punto ottengono virtualmente
impossibile da mantenere così come possiamo
capisco come possiamo scoprirlo bene
abbiamo i nostri punti caldi giusti ma lo farei
dì che il livello del fuoco lo rende carino
difficile ragionare sugli aspetti macro
del sistema quindi vorremmo sollevare
l’astrazione
malattia laterale quindi un modo per farlo
è questo invece di misurare punti caldi
sul nostro livello di funzionalità dei filin
introduciamo componenti logici ma
prendendo una serie di file e gocciolando tutto
aggregando tutti i contributi a questo
file e mettere un nome logico su di esso così noi
può avere i nostri componenti logici seguire
la struttura della cartella del tuo codice, se tu
volere
è abbastanza tipico che tu possa usare qualsiasi
tipo di mappatura qui che vuoi il
l’unica cosa importante è quella
gruppo o mappe che introduci logico
componenti che dovrebbero andare avanti
significato architettonico nel tuo
contesto così una volta che lo facciamo possiamo iniziare
ragionare sul nostro sistema si evolve così
lascia che ti mostri un esempio specifico da
nostra architettura orientata ai servizi così
quello che farei in questo caso è che io
introdurrà un componente logico per
ogni errore di servizio e poi lo farei
misurare punti caldi su quel livello
lascia il livello dei servizi ora quando lo facciamo
che otteniamo aiuto per rispondere a uno dei
domande più importanti che abbiamo su
micro servizi e questo è un serio
domanda giusta intendo seria nel modo
che le guerre di fiamma hanno parlato
le amicizie sono finite e il
la domanda è quanto è grande il micro servizio
supposto essere 100 linee di codice 1.000
mm sappiamo che è un po ‘fuorviante
motivo per le dimensioni del servizio in termini di
linee di codice perché quello che siamo
in realtà sono le capacità aziendali
vogliamo che ogni servizio implementa a
capacità di una singola azienda proprio così
la chiave qui è la coesione, quindi una volta iniziato
misurare gli hotspot a questo livello che possiamo
identificare i servizi di hotspot così è
in realtà alcuni dati reali da un reale
sistema e vediamo che il numero uno
hotspot qui è qualcosa chiamato il
servizio di raccomandazioni vediamo che abbiamo
fatto un sacco di modifiche per quel pezzo di
il codice e ora è composto da circa
cinquemila righe di codice ora giusto
che calcolerà il trasferimento di complessità
singoli file possiamo aggregare il
contributi da più file e
ottenere una complessità
l’intero servizio e vediamo che questo
il servizio è praticamente un po ‘rapido
sviluppo iniziale e ora sembra
si sono stabilizzati su quel livello più alto di
come cinquemila righe di codice con a
molte modifiche tutte le volte ma senza
qualsiasi crescita significativa in questo tipo di
dati non ne risolve veramente nessuno
i problemi bene lo fa è che ti aiuta
poni le domande giuste e la domanda
ecco se quel servizio con cinque
migliaia di righe di codice che cambiano tutte
il tempo rappresenta davvero un singolo
capacità di business forse è un
servizio che è meglio se diviso
in due parti o gratis ma possiamo farlo
ancora di più con questo tipo di dati e io
vorrebbe mostrarti come
introducendo un concetto chiamato temporale
accoppiamento o cambio accoppiamento ecco come
funziona , diciamo che ne abbiamo tre
diversi sottosistemi la prima volta
fare una modifica a questo sistema abbiamo modificato a
iniettore carburante e modulo diagnostico
insieme la prossima volta facciamo un cambiamento noi
modificare qualcos’altro la terza volta
siamo tornati a modificare il carburante
modulo iniettore e diagnostica ora se
questa è una tendenza che continua c’è
essere una sorta di relazione tra
quei due sottosistemi giusto perché loro
continua a cambiare insieme questo è qualcosa
possiamo usare per ragionare sul loro
architetture e voglio mostrarti un
esempio da alcuni diversi
stili architettonici e mi piacerebbe
inizia parlando di strati mentre
strati
bene perché l’architettura a strati ha
è stato così popolare così tanto di quello che chiamiamo
i sistemi legacy sono implementati in
stili stratificati quindi questo è fondamentalmente il
elementi costitutivi canonici di un modello
Visualizza il controller e ho assegnato una luce
base di codice per il nostro vivere quando vengo a
una società chiedo sempre loro che cosa è gentile
di stile architettonico che hai e loro
spesso dimmi che sì stiamo usando un
controller vista modello o vista modello
presentatore o modello viewmodel o
alcune di quelle variazioni giusto e poi
guardi il codice e questo non lo è mai
come appare il codice e il motivo
per questo è che noi tutti sappiamo che questo
non è abbastanza giusto
abbiamo bisogno di un livello di servizi troppo a destra di
Certo, abbiamo bisogno di un livello di servizi e ma
al di sotto di questo dobbiamo avere un repository
layer e la ragione per cui dobbiamo avere un
strato di repository è perché io in realtà
non ne ho idea quindi chiamiamolo il meglio
pratica dobbiamo e quindi abbiamo bisogno di un
object relational mapper oltre a quello
sotto di tale perché noi non vogliamo
accedere al sequel direttamente e poi
forse abbiamo un sequel e noi tutti
sappi che in realtà è abbastanza probabile
che abbiamo qualche strato in più, proprio noi
può avere un aiutante di vista o qualcosa del genere
che ora questo è interessante perché se
facciamo una misura di accoppiamento temporale su
questo livello consideriamo ogni livello a
componente componente logico che cosa fa
il nostro modello di cambiamento sembra davvero
ecco come sembrano hanno trovato
e questo è dati reali da sistemi reali
che da qualche parte tra il 30 e il 70% di tutti
commette increspature attraverso l’ intero
gerarchia architettonica e questo è gentile
di interessante perché influisce su cosa
possiamo fare con quel sistema così che cosa
significa che alcuni cambiamenti sono locali
giusto e ho trovato che funziona come
questo che l’architettura è così
fondamentalmente costruito attorno a un tecnico
partizionamento in edificio tecnico
blocchi ma il tipo di lavoro che facciamo è caratterizzato
orientato al suo utente finale orientato così là
è una specie di conflitto tra questi due
stili e lavorerà con te
ora l’ho trovato a strati
le architetture potrebbero funzionare davvero davvero
bene per le piccole squadre dove l’hanno visto
funziona meno bene quando la squadra è a
un po ‘più grande e penso che il tipo
di punto è basso come quattro forse cinque
gente quindi se hai un grande
questa organizzazione potrebbe diventare una realtà
problema e potrebbe diventare reale
problema perché ora abbiamo tutto
gli sviluppatori lavorano tutte le parti del codice
tutto il tempo non solo è abbastanza
un maggiore coordinamento in testa
ti mette anche a rischio per cose come
interazioni inaspettate e io
vorrei reclamarlo
una delle motivazioni originali per
architetture stratificate è questo o
separazione delle preoccupazioni ma che volontà
affermare che se la maggior parte dei nostri commit ha
forse ripple per tutti gli strati
solo forse siamo noi le preoccupazioni sbagliate
stanno separando l’ onore e penso che sia così
uno dei motivi principali anche a causa del
recente popolarità di cose come micro
servizi e tutti voi lo riconoscete
giusto perché è quello che i servizi di micro
sembra in PowerPoint in realtà noi
sappi che i micro servizi sono molto
molto più complesso, quindi condividiamo
elementi costitutivi abbiamo un servizio
modelli che abbiamo gli occhi IP del cliente che possiamo
avere preoccupazioni trasversali come
diagnostica e monitoraggio e tutto il resto
roba così che ulteriore complessità,
quando dovrebbe venire con un rischio e quello
il rischio è l’accoppiamento che è come il
peccato cardinale nei servizi di micro destra
accoppiamento stretto quindi è qualcosa che noi
voglio evitare perché nel momento in cui noi
avviare un paio di servizi diversi a
l’altro si perde un sacco di
vantaggio come micro servizi che siamo
lasciato con un eccesso di confusione di complessità
quindi se abbiamo un importante architettonico
principio come quello
perché non misuriamo in modo ancora una volta cerchiamo di
considera ogni micro servizio il nostro logico
componente e misuriamo la temperatura
pling a quel livello in modo che possiamo
rilevare modelli come questo cambiano i genitori
che ripple attraverso più repository
e se iniziamo ad usarlo dal
molto all’inizio possiamo usarlo come un
sistema di allerta precoce e prevenire quelli
cose da accadendo e se lo facciamo
possiamo evitare cose come quelle che chiamo
loro micro chirurgia shotgun
modello ora qual è il micro servizio a
modello di intervento chirurgico fucile che è
fondamentalmente l’idea che tu vuoi
modificare una singola capacità aziendale e
finisci per modificare cinque diversi
servizi e ci sono diversi motivi per cui
quello può accadere la risorsa che ho visto
che il nostro più comune è prima di tutto
che quei diversi servizi possono
condividere il codice da cui non è stabile
una prospettiva evolutiva
un altro motivo per cui ho visto alcuni
i servizi sono solo astrazioni che perdono
allora i nostri servizi tendono a dipendere
i loro dettagli di implementazione che rende
loro cambiano insieme ho visto anche quello
questo tende ad essere un po ‘più comune RAM
quando la stessa squadra è responsabile
molti servizi sembra diventare molto
molto più facile inviare più diretto
informazioni e assumere più informazioni sul
ricevitore quindi quali strumenti devo usare
analizzare questo tipo di architetture e
fare un’analisi hotspot e temporale
analisi di accoppiamento bene
quando ho scritto il mio libro come tre o
quattro anni fa con il crimine dei tuoi programmatori
scena il mandato davvero sugli strumenti
disponibile che potrebbe fare l’ analisi I
volevo fare così ho messo insieme il mio
suite di strumenti è disponibile sul mio github
conto che è open source basta scaricare
suona con esso è una bella
buon punto di partenza se vogliamo iniziare
per avere un’idea di cosa sia questo tipo di
gli analizzatori possono farti per te
è così che sto lavorando proprio ora
qualcosa chiamato scena del codice che puoi
dare un’occhiata a quel codice vedere un I / O I
avere un sacco di diversi casi di studio
lì è gratis da usare per l’open source
progetti quindi se lavori in quello spazio
dai un’occhiata a ciò ce ne sono anche alcuni
opzioni interessanti da parte del mondo accademico
lo spazio il mio preferito è questo io
chiamalo radar evolutivo che è
particolarmente forte sul cambio accoppiamento
è uno strumento davvero molto buono per questo
e, infine, se si desidera creare la tua
possedere strumenti che consiglio di avere a
guarda la piattaforma delle alci in modo che l’alce
la piattaforma è una piattaforma per la costruzione di yak
analizzatori di codice alce è anche il migliore
scusa, so di imparare a programmare in
chiacchiere è una lingua meravigliosa quindi
per riassumere questa parte l’abbiamo vista
i nostri hotspot si adattano a tutti diversi
livelli possiamo usare la stessa misura su a
livello di funzione a livello di file come possiamo
a livello architettonico e abbiamo visto
come utilizzare l’accoppiamento temporale per valutare
le nostre architetture l’evoluzione di loro
ora voglio passare gli ultimi minuti di
questa presentazione sull’esplorazione del
lato sociale del nostro codice, quindi fammi iniziare
chiedendovi quanti di voi sviluppare
software come parte di una squadra così è
come il 99,9 percento di qualcosa di più
di che si scrive e questo è quello che hai da
fare perché assumiamo sempre più grandi
problemi i nostri sistemi diventano più e
più complesso e semplicemente non possiamo lavorare
solo su di loro
quindi abbiamo bisogno di stare insieme nella squadra
per raggiungere ciò che vogliamo raggiungere
comunque quello che voglio che tu sappia è quello
il lavoro di squadra non è mai un lavoro di squadra sempre libero
viene fornito con un costo
e quel costo è ciò che la psicologia sociale
si chiama perdita di processo quindi perdita di processo
è un concetto che il sociale
gli psicologi hanno preso dal
campo di meccanica e idee ancora solo
come una macchina non può funzionare al 100%
efficienza sempre dovuta a cose
come l’attrito e la perdita di calore non possono
il nostro team quindi lascia che ti mostri come questo
il modello funziona così ne abbiamo un sacco
individui e insieme hanno a
produttività potenziale che non è mai cosa
usciamo da una squadra il vero
la produttività è sempre un po ‘più piccola
e parte del potenziale è semplicemente perso come
è persa bene il tipo di perdita del processo
ottieni dipende dai compiti che fai
ma direi in qualcosa di simile
il software è la maggior parte della perdita di processo
coordinamento e spese generali di comunicazione
e potresti anche avere aspetti software
come ad esempio le perdite di motivazione che
è una cosa molto reale in diversi in
diversi progetti di vita sono le cattive notizie
che non si può mai evitare la perdita del processo
interamente non puoi mai eliminarlo ma
quello che possiamo fare è minimizzare questo
Certo, diamo un’occhiata a un altro comune
fonte per la perdita di processo questo è un altro
concetto dalla psicologia sociale chiamato
la diffusione della responsabilità e il
la diffusione della responsabilità è qualcosa
che puoi provare se lo sei
abbastanza sfortunato da essere testimone
emergenza o un incidente
il Crossway risulta di più
spettatori più persone presenti quando
succede qualcosa di simile
meno probabile è la volontà di un individuo
offrire aiuto
tipo di paura non è e ci sono
diverse ragioni per quello comune
la ragione è, naturalmente, che più preper
presente abbiamo appena assunto che il nostro bene
qualcun altro aiuterà invece noi
avere molta diffusione di
responsabilità nel software – e ora lo sono
andando a parlare un po ‘ di
stanco argomento stanco e controverso
il tipo di argomento non parli mai di
sulla nostra conferenza è stupido
faccio così ho intenzione di fare che sono
andando a parlare di ci credo o no
Ho davvero paura di dirlo, ma lo sono
parlerò della proprietà del codice Wow
così e voglio parlarne perché io
voglio chiarire questo quando dico
codice di proprietà non intendo proprietà in
un senso di hey questo è il mio codice stare lontano
no per niente
Intendo la proprietà del codice nel senso che
qualcuno si assume una responsabilità personale
per un pezzo di codice e per la sua qualità
e per il suo futuro e quello qualcuno
potrebbe essere un individuo potrebbe essere un
coppia o potrebbe essere una piccola squadra all’interno
un’organizzazione più grande quindi cose simili
che ci aiutano a minimizzare la diffusione di
responsabilità e se hai un
principio importante come quello che dovremmo
prova a supervisionare e misurare qui
un modo per farlo visto che siamo dentro
versione controllo di Wonderland abbiamo
accesso a tutti quei dati sociali così noi
sapere esattamente quale individuo
ha lavorato su quali parti del codice cosa
facciamo ora è di aggregare le persone
nelle squadre giuste perché questo è il
livello interessante per operare e misurare
su così vediamo come un diffusivo
la metrica della responsabilità è così com’è
lo stesso tipo di visualizzazione che abbiamo visto
prima con gli hotspot solo ora il
colore porta un significato diverso la
il colore mostra la quantità di inter squadra
coordinamento quindi più spesso diverso
i team lavorano nelle stesse parti del codice
e il più frammento che il loro
sforzi di sviluppo più il rosso è
modulo e file corrispondenti qui ora
come usiamo bene questi dati
area qui con un sacco di potenziale molto
di accesso parallelo allo sviluppo per lotti
di diverse squadre come possiamo reagire a
quello è davvero molto difficile lì
sono in generale due cose che ho visto
lavorare la prima cosa è che inizi
per indagare su quella parte del codice
da un punto di vista tecnico perché tu
troverà quel codice cambia per un motivo
e la ragione per cui parte del codice
attira così tante squadre diverse
probabilmente perché aveva molte ragioni per
fare così ha troppe responsabilità
quindi vedrai che se lo prendi
codice e li identifichi
responsabilità e lo dividi
secondo le responsabilità non solo
otterrete un sistema più coeso voi
otterrà anche un sistema che ti aiuta
ridurre al minimo la quantità di coordinamento
esigenze tra diversi team un altro
cosa che potresti trovare da tempo a
il tempo è che la tua organizzazione può mancare
una squadra da condividere
responsabilità in modo che tu possa effettivamente avere
per presentare una nuova squadra per affrontarla
proprietà ma possiamo fare molto di più
con il controllo della versione in seguito possiamo iniziare
misurare cose come la legge di Conway
giusto, ecco un esempio ora questa volta
i contributi di ogni squadra sono
contrassegnato con colori diversi proprio così
ogni squadra ha un colore unico e qui noi
può vedere questo è un pacchetto per caratteristica
architettura puoi vedere fondamentalmente ciascuno
il cerchio qui rappresenta una caratteristica e
vedi dalla prospettiva di Conway
legge questo sembra assolutamente meraviglioso
non lo fa
ogni squadra lavora in perfetto isolamento
con un minimo di spese generali di coordinamento
tra loro è che il modo in cui vogliamo
non sono sicuro perché non lo so
devo fare una confessione qui tutto il giorno
che hai visto così lontano o da
sistemi del mondo reale tranne quello che ho avuto
di fingere perché non ho mai visto che
capita in realtà e io non penso
è una buona idea andare così fino in fondo
non andando a parlare tanto di questo, ma
Penso che quando ci separiamo squadre troppo
corriamo il rischio di essere introdotti o di cadere
in un sacco di diverse trappole sociali
potrebbe essere più costoso del
coordinamento vero e proprio, ma per favore
chiedimi di questo in seguito e lo sarò
felice di parlare
su di esso ma ora voglio mostrarti un
esempio più realistico è il prossimo
dati reali quindi questa è un’organizzazione I
ha lavorato con un paio di anni fa e
quello che questa organizzazione ha fatto è stato loro
ho deciso di introdurre così i team di funzionalità
hanno preso la loro organizzazione esistente
e lo affettò in dodici diversi
squadre e poi hanno lavorato in volata così
all’inizio di ogni sprint ciascuno
il team ha assegnato un numero di compiti e
quindi lavorano sul codice base
e questo è ciò che il contributo
modelli assomigliano dopo un mese fa
vedi nessun modello nemmeno io questo
è fondamentalmente mucche collettive e il
motivo per cui dico che il coro succede
qui questo è un incubo di coordinamento
perché quello che succede qui è che tu
hanno fondamentalmente 12 squadre diverse
lavorando nelle stesse parti del codice
tutto il tempo per motivi diversi così
non solo è lì e devi iniziare
mettere processi e cose in cima
quello per essere in grado di controllare il
qualità e lo sarà
davvero molto costoso un altro
che sta per essere costoso è che in
in questo caso ti mancano le sinergie tra
caratteristiche diverse in modo che tu manchi
opportunità per semplificare non solo il
dominio del problema ma anche la soluzione
dominio quindi per favore allinea la tua architettura
e la tua organizzazione sta andando il tuo codice
per ringraziarti ora spero che tu abbia
apprezzato questo viaggio attraverso il
affascinante campo di codice in evoluzione e
alla fine si tratta di scrivere meglio
software che può evolversi con
la pressione delle nuove funzionalità ti romanzo
suggerisce e cambia le circostanze e
Sono abbastanza sicuro che scrivere codice di
quella qualità non sarà mai facile
quindi abbiamo bisogno di tutto il supporto che possiamo ottenere
e spero che questa sessione abbia
ti ha ispirato a investigare sul campo in
più profondità se vuoi saperne di più
su questo ho due libri sul
argomento il tuo codice è una scena del crimine e il mio
nuovo libro disponibile da una ripresa pragmatica
uno scaffale per libri ora progetta i raggi x del software
anche blog molto su questo quindi se tu
guarda ampere Komar
Ho molti casi di studio diversi
da diversi sistemi open source lì
puoi leggere e ora prima di prendere
alcune domande mi piace prendere questo
opportunità e dire grazie mille per
ascoltandomi e che il codice sia con
grazie
Grazie, sì grazie molto per il colloquio in modo
ci sono alcune domande che sono entrati da
la terra attraverso l’app è uno di loro
Penso piuttosto un interessante nel
quello comune
qual è il modo migliore per condividere il
necessità del codice di refactoring per
le parti interessate un management mi dispiace ancora
tempo qual è il modo migliore per vendere il
necessità del codice di refactoring per
parti interessate e gestione oh sì
è una buona cosa sì , in realtà è così
non così difficile, quindi penso che ne abbiamo bisogno
è che abbiamo bisogno di colmare questa lacuna
tra noi sviluppatori e management e
il modo per farlo è assicurarci che noi
tipo di parlare la stessa lingua che abbiamo
lasciare che sia penso che sia per lo più nostro
responsabilità come sviluppatori da dare
gestione di dare un’occhiata alla nostra parola e
molti manager non sono tecnici
non scrivere codice forse non l’hanno mai fatto
e quindi quello che ho trovato è quello
visualizzare le cose davvero davvero
aiuta gli hotspot a essere abbastanza
intuitivo la maggior parte dei manager tende a
capirli che sì, questo è davvero
dove lavoriamo tutto il tempo in modo che tengano
a perché ciò di cui hanno paura è di
Naturalmente per prendere una decisione come va bene
andiamo avanti hey abbiamo un refactoring
distintivi o per migliorare questa roba e poi
così non ottieni alcun effetto
se mostri loro dati reali, possono basarsi
le loro decisioni sui dati che li rendono
mi sento molto più a mio agio anche io
ho trovato che visualizzare cose simili
le tendenze della complessità aiutano molto perché
quello che trovo in pratica è quello in cui
identificare un punto caldo in un grande
organizzazione e guardo il codice e
Vedo che questo è davvero molto difficile
abbiamo davvero bisogno di fare qualcosa qui allora
ti guardi indietro nel tempo e lo vedi
questo codice è stato probabilmente un problema
per anni e le tendenze sono davvero molto
bravo a visualizzare che puoi vedere
tutto bene hai lavorato la maggior parte della tua
tempo in questa parte del codice e come te
diventa sempre di più e sempre di più
complicato tutti i manager lo capiscono
che non è una buona cosa in modo che il mio
la raccomandazione mette invece dei numeri
di fare affidamento su una sensazione istintiva e
visualizzarlo
un altro è puoi avere esempi di
guadagni di processo opposti alla perdita di processo
per esempio quando uno sviluppatore lavora
insieme con un esperto di dominio su
progetto di sviluppo specifico del dominio sì
certo che puoi e ne abbiamo molte
di processo guadagnato in quel modo ma
davvero dispiaciuto di dirlo, ma non è così
qualcosa che posso misurare ora per lavoro
lì ma sì, è sicuramente un caso così
si consiglia per squadra trasversale limitata
coordinamento quale sarebbe un tale processo
sembra così penso che ci sia un
importante distinzione da fare qui
perché ciò che vogliamo fare è fondamentalmente
vogliamo minimizzare il coordinamento
bisogno tra le diverse squadre penso
questo è davvero fondamentale allo stesso tempo
tempo non vogliamo isolare le squadre
perché poi ci imbattiamo in molto
strane trappole sociali come fondamentali
errori di attribuzione e potremmo arrivare a lungo
tempi di consegna tra le squadre, quindi abbiamo bisogno
fare una distinzione tra ciò che io
chiamare i confini operativi e
i loro confini della conoscenza così ci sono
diversi modi per raggiungere questo tuo
confini operativi le parti del
codice in cui trascorri la maggior parte del tuo tempo
dovrebbe essere relativamente piccolo, giusto per te
la squadra dovrebbe avere un significato da un
prospettiva architettonica penso che sia
importante ma i tuoi confini della conoscenza
deve essere molto più ampio così là
sono diversi modi per raggiungere quello
è iniziare a invitare persone da altri
team per il tuo codice di recensioni e design
lavora per conoscerli e
contesto di scambio per conoscere l’un l’altro
un’altra cosa che puoi fare è incoraggiare
le persone non hanno scritto la loro squadra
tutti vogliono ruotare la squadra, ma se
vogliono farlo, dovrebbero essere liberi
per farlo e la terza cosa è a cosa
Penso che funzioni molto bene in quanto aperto
modello di proprietà della fonte in cui un tipo di squadra
di possedere un pezzo di codice nel senso
responsabilità detective chiunque può
apportare modifiche ad esso, ma la squadra ha il
ultima parola su quello che sta succedendo dentro in
il codice e cosa non è questo in realtà
ha funzionato abbastanza bene perché porta via
questo girocollo giusto se ho bisogno di fare un
cambia in questa parte del codice
può farlo non devo aspettare per
qualcun altro in modo tutto quello che fate rendono
una decisione consapevole e deliberata
perché questo non è qualcosa che lo farà
capita automaticamente spero di riuscirci
rispondere a una domanda così c’erano un sacco di
domande sulle verità che eri
usando quello che hai fatto mostra che sul
scivoli ancora che uno si ha in realtà
usa per fare le visualizzazioni che
hai nella tua presentazione oh sì sì
Uso le virgolette per quello perché è così
tipo della mia vita in questi giorni
quello sarà il conforto degli asiatici che puoi usare
qualunque strumento tu voglia far loro tu
posso aver iniziato solo usando Excel
si può effettivamente ottenere abbastanza lontano con
che d3 è meraviglioso nel visualizzare i dati
come quella
questo è ciò che i codici in uso per la maggior parte di
le visualizzazioni non si sta concentrando su
hotspot che li rendono ancora più caldi
dipende da cosa fai con loro
Certo, sì sì intendo a breve termine
ovviamente quando inizi a rifattorizzare a
hotspot potrebbe effettivamente aumentare
attività in quell’hotspot tuttavia che cosa
vedrai che cosa è una scoperta tipica
che hotspot davvero veramente spaventosi
cosa succede con loro quando ti rifatti
loro e rifattorizzare un hotspot non lo è
qualcosa che si fa, come va bene Diamo
fatelo in modo di iniziare questa settimana e
finiamo tra due mesi
quindi è qualcosa che deve essere un
processo iterativo che faremo
miglioramenti sempre più piccoli
tempo in modo che dovrebbero effettivamente raffreddarsi
nel tempo e molti hotspot vanno via
perché non esistono nel nuovo
design sono rappresentati da diversi
elementi di design e durante il tuo
fabbriche se vedi un calo notevole
in complessità se inizi a misurare
tendenze come quella in cui puoi effettivamente e
è un altro che si lega a un
domanda che ho avuto su come su come
vendere questa roba per la gestione è giusto
che puoi mostrare loro che io guardo
effettivamente ottenendo il nostro effetto misurabile
dei nostri refactoring come puoi creare
proprietà del codice come si crea il codice
proprietario sì, non penso che tu possa
non pensare di poter creare, intendo
di nuovo qualunque sia il modello delle tue scarpe intendo
Ho visto tutto e ho visto un sacco
di diversi stili che funzionano penso
la chiave è davvero renderla un
scelta deliberata decide su un modello
e seguitela bene, la domanda finale è stata fatta
hai usato sonarqube
no non ho usato sonic qube II do use
un sacco di strumenti di analisi statici che ho usato
lavoro ai miei tempi quando ero in rete
consulente sì è vero ho usato e
dipende molto è ora che li chiudo
giorni uso altri strumenti di analisi statica
per quello e sono davvero un grande fan di
analisi statica, credo solo che
problema è che abbiamo bisogno di qualcosa in cima
dell’analisi statica abbiamo bisogno di tecniche
in questo modo dare la priorità e dire hey questo
è dove dovremmo iniziare a parlare
quelle scoperte che l’analisi statica
gli strumenti ci danno quindi è solo un altro
fonte di input e penso che siano loro
si completano a vicenda abbastanza bene, okay
grazie mille grazie mille per il
gran parlare e speriamo di vedervi qualche volta
sì grazie e per favore vieni e prendi a
mazzo sì ci sono adesivi
Please follow and like us: