SlideShare a Scribd company logo
1 of 44
Download to read offline
APLICAÇÕES QUE
EVOLUEM
D2R Principle: Refatoração como foco do design das
aplicações
©ThoughtWorks 2018 Commercial in Confidence 2
ENTROPIA
3
Vamos falar de termodinâmica?
©ThoughtWorks 2018 Commercial in Confidence
ENTROPIA: desordem interna de um sistema, ou ainda, tem a
ver com a irreversabilidade (espontânea) da ordem
4
©ThoughtWorks 2018 Commercial in Confidence
Entropia em Sistemas Computacionais…
5
POR INTERVENÇÃO
A cada intervenção, a entropia do sistema
cresce de maneira exponencialmente
proporcional à atual entropia do sistema
POR POTENCIAL
A entropia do sistema cresce à medida em
que a diferença entre a ordem interna e a
ordem externa crescem
©ThoughtWorks 2018 Commercial in Confidence
Como a entropia afeta a evolução de um sistema computacional?
6
ENTROPIA RESISTÊNCIA
À MUDANÇA
©ThoughtWorks 2018 Commercial in Confidence
Software também morre!
7
©ThoughtWorks 2018 Commercial in Confidence
Refactoring é a válvula de escape de
entropia do sistema...
8
Atrito ao Refactoring
A melhor forma de saber que um software morreu
©ThoughtWorks 2018 Commercial in Confidence
"Tudo que, direta ou indiretamente,
impede, atrapalha ou desmotiva as pessoas
desenvolvedoras a refatorar um sistema."
10
©ThoughtWorks 2018 Commercial in Confidence
Tipos de Atrito ao Refactoring
11
ATRITO CULTURAL
Muitas equipes trabalham
com mecanismos de
resistência a refactorings.
É muito comum equipes que
têm o mindset SCP
(smallest change possible,
ou "menor alteração
possível"). Mix up your images to match
your content.
ATRITO ARQUITETURAL
A equipe de desenvolvimento
tem receio de realizar
alterações devido ao impacto
que essas alterações podem
causar.
ATRITO SISTÊMICO
O negócio não muda mais, e o
sistema já atende ao negócio
de forma satisfatória.
ATRITO DE
CONHECIMENTO
A equipe não é fluente na
tecnologia em que está
trabalhando.
©ThoughtWorks 2018 Commercial in Confidence
Quando percebo que não sei
qual o impacto que a
refatoração tem sobre o
funcionamento do sistema.
12
IMPACTO
DESCONHECIDO
©ThoughtWorks 2018 Commercial in Confidence
Quando percebo que a
refatoração tem impacto em
algo que eu não quero ou
posso mudar.
13
IMPACTO
INDESEJÁVEL
©ThoughtWorks 2018 Commercial in Confidence
Mas como fazer para diminuir o atrito ao
refactoring, permitindo que eu possa
controlar e entropia da minha aplicação?
14
3 princípios do
Design to Refactor
©ThoughtWorks 2017 Commercial in Confidence
FRONTEIRAS BEM DEFINIDAS
16
Unidades computacionais com
fronteiras bem definidas, em todas as
camadas, permitem reduzir o impacto
de alterações na aplicação
0
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE INTROMETA
17
Não se integre com outras unidades
computacionais de forma que você
tenha que conhecer o seu estado
interno para funcionar.
Exemplos: acessar uma base de dados
compartilhada; conhecer uma determinada
estrutura do sistema de arquivos compartilhada;
acessar atributos de um outro objeto via reflection;
1
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE INTROMETA
18
Exemplos:
● acessar uma base de dados compartilhada
● conhecer uma determinada estrutura do sistema de
arquivos compartilhada
● Acessar atributos de um outro objeto via reflection
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE COMPROMETA
19
Ao se integrar, não se comprometa a
fornecer ou conhecer mais informação
do que o mínimo necessário.
...protocolos de integração...
2
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA
20
3
Ao se integrar, não permita que
entidades externas conheçam a sua
estrutura interna.
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA
21
UNIDADE
COMPUTACIONAL
Outras unidades
computacionais
PersistênciaTestes
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA A OUTRAS UNIDADES COMPUTACIONAIS
"ENCAPSULAMENTO"
22
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA A OUTRAS UNIDADES COMPUTACIONAIS
"ENCAPSULAMENTO"
23
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA A OUTRAS UNIDADES COMPUTACIONAIS
"ENCAPSULAMENTO"
24
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA A OUTRAS UNIDADES COMPUTACIONAIS
"OBJECT MARSHALLING"
25
Aplicação 1 Aplicação 2
JSON
OBJ OBJ
marshalling unmarshalling
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA A OUTRAS UNIDADES COMPUTACIONAIS
"OBJECT MARSHALLING"
26
Aplicação 1 Aplicação 2
JSON
OBJ OBJ
marshalling unmarshalling
Schemas cheios de remendos
por que mudanças estruturais
têm impacto em múltiplas
camadas de múltiplas
aplicações
Eu não refatoro o código da
minha aplicação por que ele
depende de um schema que eu
não posso mudar sem impactar
outras aplicações
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA A OUTRAS UNIDADES COMPUTACIONAIS
"OBJECT MARSHALLING"
27
Aplicação 1 Aplicação 2
JSON
OBJ OBJ
"Tem certeza que vai usar marshalling? Então use com DTOs!"
SANTOS, FÁBIO
DTODTO
©ThoughtWorks 2018 Commercial in Confidence
Pessoas Javistas…
Object Marshalling não é a única opção!!!
28
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA A OUTRAS UNIDADES COMPUTACIONAIS
"OBJECT MARSHALLING"
29
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA A OUTRAS UNIDADES COMPUTACIONAIS
"OBJECT MARSHALLING"
30
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA A OUTRAS UNIDADES COMPUTACIONAIS
"OBJECT MARSHALLING"
31
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA A OUTRAS UNIDADES COMPUTACIONAIS
"OBJECT MARSHALLING"
32
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA À BASE DE DADOS
"OBJECT-RELATIONAL MAPPING"
33
OBJ DB
ORM-Hibernate
Como entidades independentes (tanto em
termos de estrutura quanto de
infraestrutura) código e base de dados têm
ciclos evolutivos diferentes.
Acredite, você não vai evoluir o seu código
porque isso impacta a estrutura de
persistência dos teus dados.
Isso vale tanto para persistência SQL e
noSQL.
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA À BASE DE DADOS
"OBJECT-RELATIONAL MAPPING"
34
DTO DB
ORM-Hibernate
OBJ
©ThoughtWorks 2018 Commercial in Confidence
EFEITO COLATERAL: O Inferno dos DTOs
35
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA AOS TESTES
"TESTES CAIXA BRANCA E MOCKS"
36
"Se toda vez que você refatora o seu código
você tem que alterar os seus testes, então
você não refatora o seu código"
SANTOS, FÁBIO
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA AOS TESTES
"TESTES CAIXA BRANCA E MOCKS"
37
"Não é por que são unitários que os testes
devem deixar de testar comportamentos
para testar interações. Testes unitários
assim são chamados por que testam
comportamentos unitários, e não unidades
de código."
SANTOS, FÁBIO
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA À BASE DE DADOS
"TESTES CAIXA BRANCA E MOCKS"
38
O grande desafio é como testar orquestração...
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA À BASE DE DADOS
"TESTES CAIXA BRANCA E MOCKS"
39
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA À BASE DE DADOS
"TESTES CAIXA BRANCA E MOCKS"
40
ISOLATE FEATURE FROM INTEGRATION
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA À BASE DE DADOS
"TESTES CAIXA BRANCA E MOCKS"
41
ISOLATE FEATURE FROM INTEGRATION
©ThoughtWorks 2017 Commercial in Confidence
NÃO SE EXPONHA À BASE DE DADOS
"TESTES CAIXA BRANCA E MOCKS"
42
ISOLATE FEATURE FROM INTEGRATION
©ThoughtWorks 2018 Commercial in Confidence
Resumindo... ENTROPIA
A desordem interna de um sistema evolui à medida em que se fazem novas intervenções
e/ou à medida em que o mundo à sua volta muda.
Entropia gera resistência à mudança, potencialmente levando software à morte.
REFACTORING COMO VÁLVULA DE ESCAPE
Refactoring permite diminuir a entropia do sistema e deve ser feito continuamente para
amenizar e/ou reverter a desordem gerada por intervenções diretas ou mesmo por
mudanças externas ao sistema.
ATRITO AO REFACTORING
Além do Atrito Cultural e Sistêmico, o Atrito Arquitetural, resumido como Impacto
Desconhecido e Impacto Indesejável, foi o ponto de atenção principal da nossa conversa
hoje.
NÃO SE INTROMETA
NÃO SE COMPROMETA
NÃO SE EXPONHA
43
MUITO OBRIGADO
Perguntas e sugestões:
Fábio Santos
fsantos@ThoughtWorks.com
44

More Related Content

Similar to Fábio Lima Santos - Desenhando aplicações que evoluem

Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareLuciano Almeida
 
Agile Brazil 2012 - Padrões Para Implantar Métodos Ágeis
Agile Brazil 2012 - Padrões Para Implantar Métodos ÁgeisAgile Brazil 2012 - Padrões Para Implantar Métodos Ágeis
Agile Brazil 2012 - Padrões Para Implantar Métodos ÁgeisSuelen Carvalho
 
Apresentação Brazil ISA 2013
Apresentação Brazil ISA 2013Apresentação Brazil ISA 2013
Apresentação Brazil ISA 2013Mezasoft
 
[Pt br] - 36751 - mitre att&ck - azure
[Pt br] - 36751 - mitre att&ck - azure[Pt br] - 36751 - mitre att&ck - azure
[Pt br] - 36751 - mitre att&ck - azureEnrique Gustavo Dutra
 
Como Design de Interação e Arquitetura de Informação no processo de desenvolv...
Como Design de Interação e Arquitetura de Informação no processo de desenvolv...Como Design de Interação e Arquitetura de Informação no processo de desenvolv...
Como Design de Interação e Arquitetura de Informação no processo de desenvolv...Ricardo Saavedra
 
aula1introducaoarquitetura.pdf
aula1introducaoarquitetura.pdfaula1introducaoarquitetura.pdf
aula1introducaoarquitetura.pdfAntonio Lobato
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareUFPA
 
Projetos Estruturados de Redes - Parte 2
Projetos Estruturados de Redes - Parte 2Projetos Estruturados de Redes - Parte 2
Projetos Estruturados de Redes - Parte 2José Wagner Bungart
 
Sprint Zero com mais Valor (TDC-2015)
Sprint Zero com mais Valor (TDC-2015)Sprint Zero com mais Valor (TDC-2015)
Sprint Zero com mais Valor (TDC-2015)Alex Magalhaes
 
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...Klederson Bueno
 
Arquitetura Hexagonal: uma introdução
Arquitetura Hexagonal: uma introduçãoArquitetura Hexagonal: uma introdução
Arquitetura Hexagonal: uma introduçãoMorvana Bonin
 
Palestra carreira e possibilidade em TI
Palestra carreira e possibilidade em TIPalestra carreira e possibilidade em TI
Palestra carreira e possibilidade em TISuzyanne Oliveira
 
Computacao na Nuvem com Azure
Computacao na Nuvem com AzureComputacao na Nuvem com Azure
Computacao na Nuvem com AzureLuciano Condé
 
Insurance Service Meeting 2016 – Juan Mazzini
Insurance Service Meeting 2016 – Juan MazziniInsurance Service Meeting 2016 – Juan Mazzini
Insurance Service Meeting 2016 – Juan MazziniCNseg
 
Softwares que Duram: Uma abordagem Arquitetônica
Softwares que Duram: Uma abordagem ArquitetônicaSoftwares que Duram: Uma abordagem Arquitetônica
Softwares que Duram: Uma abordagem ArquitetônicaHugo Seabra
 

Similar to Fábio Lima Santos - Desenhando aplicações que evoluem (20)

Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de Software
 
Métodos Ágeis - Aula 01
Métodos Ágeis - Aula 01Métodos Ágeis - Aula 01
Métodos Ágeis - Aula 01
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Agile Brazil 2012 - Padrões Para Implantar Métodos Ágeis
Agile Brazil 2012 - Padrões Para Implantar Métodos ÁgeisAgile Brazil 2012 - Padrões Para Implantar Métodos Ágeis
Agile Brazil 2012 - Padrões Para Implantar Métodos Ágeis
 
Apresentação Brazil ISA 2013
Apresentação Brazil ISA 2013Apresentação Brazil ISA 2013
Apresentação Brazil ISA 2013
 
[Pt br] - 36751 - mitre att&ck - azure
[Pt br] - 36751 - mitre att&ck - azure[Pt br] - 36751 - mitre att&ck - azure
[Pt br] - 36751 - mitre att&ck - azure
 
Como Design de Interação e Arquitetura de Informação no processo de desenvolv...
Como Design de Interação e Arquitetura de Informação no processo de desenvolv...Como Design de Interação e Arquitetura de Informação no processo de desenvolv...
Como Design de Interação e Arquitetura de Informação no processo de desenvolv...
 
Arquitetura evolutiva
Arquitetura evolutivaArquitetura evolutiva
Arquitetura evolutiva
 
Qualidade e Testes de Software
Qualidade e Testes de SoftwareQualidade e Testes de Software
Qualidade e Testes de Software
 
aula1introducaoarquitetura.pdf
aula1introducaoarquitetura.pdfaula1introducaoarquitetura.pdf
aula1introducaoarquitetura.pdf
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de Software
 
Projetos Estruturados de Redes - Parte 2
Projetos Estruturados de Redes - Parte 2Projetos Estruturados de Redes - Parte 2
Projetos Estruturados de Redes - Parte 2
 
Sprint Zero com mais Valor (TDC-2015)
Sprint Zero com mais Valor (TDC-2015)Sprint Zero com mais Valor (TDC-2015)
Sprint Zero com mais Valor (TDC-2015)
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
 
Arquitetura Hexagonal: uma introdução
Arquitetura Hexagonal: uma introduçãoArquitetura Hexagonal: uma introdução
Arquitetura Hexagonal: uma introdução
 
Palestra carreira e possibilidade em TI
Palestra carreira e possibilidade em TIPalestra carreira e possibilidade em TI
Palestra carreira e possibilidade em TI
 
Computacao na Nuvem com Azure
Computacao na Nuvem com AzureComputacao na Nuvem com Azure
Computacao na Nuvem com Azure
 
Insurance Service Meeting 2016 – Juan Mazzini
Insurance Service Meeting 2016 – Juan MazziniInsurance Service Meeting 2016 – Juan Mazzini
Insurance Service Meeting 2016 – Juan Mazzini
 
Softwares que Duram: Uma abordagem Arquitetônica
Softwares que Duram: Uma abordagem ArquitetônicaSoftwares que Duram: Uma abordagem Arquitetônica
Softwares que Duram: Uma abordagem Arquitetônica
 

More from DevCamp Campinas

Dylan Butler & Oliver Hager - Building a cross platform cryptocurrency app
Dylan Butler & Oliver Hager - Building a cross platform cryptocurrency appDylan Butler & Oliver Hager - Building a cross platform cryptocurrency app
Dylan Butler & Oliver Hager - Building a cross platform cryptocurrency appDevCamp Campinas
 
Thaissa Bueno - Implantando modelos Deep Learning em cluster Kubernetes com G...
Thaissa Bueno - Implantando modelos Deep Learning em cluster Kubernetes com G...Thaissa Bueno - Implantando modelos Deep Learning em cluster Kubernetes com G...
Thaissa Bueno - Implantando modelos Deep Learning em cluster Kubernetes com G...DevCamp Campinas
 
Gabriel Pacheco e Felipe Cardoso - Nextel + React Native: Lições aprendidas a...
Gabriel Pacheco e Felipe Cardoso - Nextel + React Native: Lições aprendidas a...Gabriel Pacheco e Felipe Cardoso - Nextel + React Native: Lições aprendidas a...
Gabriel Pacheco e Felipe Cardoso - Nextel + React Native: Lições aprendidas a...DevCamp Campinas
 
Everton Gago - Ciência de Dados: O melhor caminho para alinhar o produto com ...
Everton Gago - Ciência de Dados: O melhor caminho para alinhar o produto com ...Everton Gago - Ciência de Dados: O melhor caminho para alinhar o produto com ...
Everton Gago - Ciência de Dados: O melhor caminho para alinhar o produto com ...DevCamp Campinas
 
Eiti Kimura - Analisador de dados automatizado utilizando machine learning
Eiti Kimura - Analisador de dados automatizado utilizando machine learningEiti Kimura - Analisador de dados automatizado utilizando machine learning
Eiti Kimura - Analisador de dados automatizado utilizando machine learningDevCamp Campinas
 
Bárbara Silveira e Giovanna Victorino - Desenvolva também para TVs (AppleTV e...
Bárbara Silveira e Giovanna Victorino - Desenvolva também para TVs (AppleTV e...Bárbara Silveira e Giovanna Victorino - Desenvolva também para TVs (AppleTV e...
Bárbara Silveira e Giovanna Victorino - Desenvolva também para TVs (AppleTV e...DevCamp Campinas
 
Leonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional InterfacesLeonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional InterfacesDevCamp Campinas
 
Lara Rejane - Gestão ágil de pessoas
Lara Rejane - Gestão ágil de pessoasLara Rejane - Gestão ágil de pessoas
Lara Rejane - Gestão ágil de pessoasDevCamp Campinas
 
Eduardo Merighi - Escalabilidade tecnológica de uma fintech: como a Neon faz?
Eduardo Merighi - Escalabilidade tecnológica de uma fintech: como a Neon faz?Eduardo Merighi - Escalabilidade tecnológica de uma fintech: como a Neon faz?
Eduardo Merighi - Escalabilidade tecnológica de uma fintech: como a Neon faz?DevCamp Campinas
 
Erick Zanardo - Desenvolvimento de Jogos em Flutter
Erick Zanardo - Desenvolvimento de Jogos em FlutterErick Zanardo - Desenvolvimento de Jogos em Flutter
Erick Zanardo - Desenvolvimento de Jogos em FlutterDevCamp Campinas
 
Davi Silva e Izabela Amaral - Oferecendo soluções de negócio mais assertivas ...
Davi Silva e Izabela Amaral - Oferecendo soluções de negócio mais assertivas ...Davi Silva e Izabela Amaral - Oferecendo soluções de negócio mais assertivas ...
Davi Silva e Izabela Amaral - Oferecendo soluções de negócio mais assertivas ...DevCamp Campinas
 
Andre Fossa - Reinventando a Nextel: como a transformação digital ajudou a qu...
Andre Fossa - Reinventando a Nextel: como a transformação digital ajudou a qu...Andre Fossa - Reinventando a Nextel: como a transformação digital ajudou a qu...
Andre Fossa - Reinventando a Nextel: como a transformação digital ajudou a qu...DevCamp Campinas
 
Alceu Bravo - Intraempreendedorismo – desafios da inovação para quem tem base...
Alceu Bravo - Intraempreendedorismo – desafios da inovação para quem tem base...Alceu Bravo - Intraempreendedorismo – desafios da inovação para quem tem base...
Alceu Bravo - Intraempreendedorismo – desafios da inovação para quem tem base...DevCamp Campinas
 
João Emilio Santos Bento da Silva - Estratégia de APIs
João Emilio Santos Bento da Silva - Estratégia de APIsJoão Emilio Santos Bento da Silva - Estratégia de APIs
João Emilio Santos Bento da Silva - Estratégia de APIsDevCamp Campinas
 
José Guedes - Como encaramos quando as coisas dão errado
José Guedes - Como encaramos quando as coisas dão erradoJosé Guedes - Como encaramos quando as coisas dão errado
José Guedes - Como encaramos quando as coisas dão erradoDevCamp Campinas
 
Rafael Calsaverini - Inteligência Artificial para recrutar pessoas – Tecnolog...
Rafael Calsaverini - Inteligência Artificial para recrutar pessoas – Tecnolog...Rafael Calsaverini - Inteligência Artificial para recrutar pessoas – Tecnolog...
Rafael Calsaverini - Inteligência Artificial para recrutar pessoas – Tecnolog...DevCamp Campinas
 
Isac Sacchi e Souza - Migrando uma infraestrutura mutável para imutável e Kub...
Isac Sacchi e Souza - Migrando uma infraestrutura mutável para imutável e Kub...Isac Sacchi e Souza - Migrando uma infraestrutura mutável para imutável e Kub...
Isac Sacchi e Souza - Migrando uma infraestrutura mutável para imutável e Kub...DevCamp Campinas
 
Ingrid Barth - Blockchain, Criptomoedas e a nova maneira de entender o dinheiro
Ingrid Barth - Blockchain, Criptomoedas e a nova maneira de entender o dinheiroIngrid Barth - Blockchain, Criptomoedas e a nova maneira de entender o dinheiro
Ingrid Barth - Blockchain, Criptomoedas e a nova maneira de entender o dinheiroDevCamp Campinas
 
Igor Hjelmstrom Ribeiro - Bitcoin: desafios de segurança frente à ataques de...
Igor Hjelmstrom Ribeiro -  Bitcoin: desafios de segurança frente à ataques de...Igor Hjelmstrom Ribeiro -  Bitcoin: desafios de segurança frente à ataques de...
Igor Hjelmstrom Ribeiro - Bitcoin: desafios de segurança frente à ataques de...DevCamp Campinas
 
Fabio De Santi e Thiago Urtaran - Smart cities: um caso real, a arquitetura d...
Fabio De Santi e Thiago Urtaran - Smart cities: um caso real, a arquitetura d...Fabio De Santi e Thiago Urtaran - Smart cities: um caso real, a arquitetura d...
Fabio De Santi e Thiago Urtaran - Smart cities: um caso real, a arquitetura d...DevCamp Campinas
 

More from DevCamp Campinas (20)

Dylan Butler & Oliver Hager - Building a cross platform cryptocurrency app
Dylan Butler & Oliver Hager - Building a cross platform cryptocurrency appDylan Butler & Oliver Hager - Building a cross platform cryptocurrency app
Dylan Butler & Oliver Hager - Building a cross platform cryptocurrency app
 
Thaissa Bueno - Implantando modelos Deep Learning em cluster Kubernetes com G...
Thaissa Bueno - Implantando modelos Deep Learning em cluster Kubernetes com G...Thaissa Bueno - Implantando modelos Deep Learning em cluster Kubernetes com G...
Thaissa Bueno - Implantando modelos Deep Learning em cluster Kubernetes com G...
 
Gabriel Pacheco e Felipe Cardoso - Nextel + React Native: Lições aprendidas a...
Gabriel Pacheco e Felipe Cardoso - Nextel + React Native: Lições aprendidas a...Gabriel Pacheco e Felipe Cardoso - Nextel + React Native: Lições aprendidas a...
Gabriel Pacheco e Felipe Cardoso - Nextel + React Native: Lições aprendidas a...
 
Everton Gago - Ciência de Dados: O melhor caminho para alinhar o produto com ...
Everton Gago - Ciência de Dados: O melhor caminho para alinhar o produto com ...Everton Gago - Ciência de Dados: O melhor caminho para alinhar o produto com ...
Everton Gago - Ciência de Dados: O melhor caminho para alinhar o produto com ...
 
Eiti Kimura - Analisador de dados automatizado utilizando machine learning
Eiti Kimura - Analisador de dados automatizado utilizando machine learningEiti Kimura - Analisador de dados automatizado utilizando machine learning
Eiti Kimura - Analisador de dados automatizado utilizando machine learning
 
Bárbara Silveira e Giovanna Victorino - Desenvolva também para TVs (AppleTV e...
Bárbara Silveira e Giovanna Victorino - Desenvolva também para TVs (AppleTV e...Bárbara Silveira e Giovanna Victorino - Desenvolva também para TVs (AppleTV e...
Bárbara Silveira e Giovanna Victorino - Desenvolva também para TVs (AppleTV e...
 
Leonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional InterfacesLeonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional Interfaces
 
Lara Rejane - Gestão ágil de pessoas
Lara Rejane - Gestão ágil de pessoasLara Rejane - Gestão ágil de pessoas
Lara Rejane - Gestão ágil de pessoas
 
Eduardo Merighi - Escalabilidade tecnológica de uma fintech: como a Neon faz?
Eduardo Merighi - Escalabilidade tecnológica de uma fintech: como a Neon faz?Eduardo Merighi - Escalabilidade tecnológica de uma fintech: como a Neon faz?
Eduardo Merighi - Escalabilidade tecnológica de uma fintech: como a Neon faz?
 
Erick Zanardo - Desenvolvimento de Jogos em Flutter
Erick Zanardo - Desenvolvimento de Jogos em FlutterErick Zanardo - Desenvolvimento de Jogos em Flutter
Erick Zanardo - Desenvolvimento de Jogos em Flutter
 
Davi Silva e Izabela Amaral - Oferecendo soluções de negócio mais assertivas ...
Davi Silva e Izabela Amaral - Oferecendo soluções de negócio mais assertivas ...Davi Silva e Izabela Amaral - Oferecendo soluções de negócio mais assertivas ...
Davi Silva e Izabela Amaral - Oferecendo soluções de negócio mais assertivas ...
 
Andre Fossa - Reinventando a Nextel: como a transformação digital ajudou a qu...
Andre Fossa - Reinventando a Nextel: como a transformação digital ajudou a qu...Andre Fossa - Reinventando a Nextel: como a transformação digital ajudou a qu...
Andre Fossa - Reinventando a Nextel: como a transformação digital ajudou a qu...
 
Alceu Bravo - Intraempreendedorismo – desafios da inovação para quem tem base...
Alceu Bravo - Intraempreendedorismo – desafios da inovação para quem tem base...Alceu Bravo - Intraempreendedorismo – desafios da inovação para quem tem base...
Alceu Bravo - Intraempreendedorismo – desafios da inovação para quem tem base...
 
João Emilio Santos Bento da Silva - Estratégia de APIs
João Emilio Santos Bento da Silva - Estratégia de APIsJoão Emilio Santos Bento da Silva - Estratégia de APIs
João Emilio Santos Bento da Silva - Estratégia de APIs
 
José Guedes - Como encaramos quando as coisas dão errado
José Guedes - Como encaramos quando as coisas dão erradoJosé Guedes - Como encaramos quando as coisas dão errado
José Guedes - Como encaramos quando as coisas dão errado
 
Rafael Calsaverini - Inteligência Artificial para recrutar pessoas – Tecnolog...
Rafael Calsaverini - Inteligência Artificial para recrutar pessoas – Tecnolog...Rafael Calsaverini - Inteligência Artificial para recrutar pessoas – Tecnolog...
Rafael Calsaverini - Inteligência Artificial para recrutar pessoas – Tecnolog...
 
Isac Sacchi e Souza - Migrando uma infraestrutura mutável para imutável e Kub...
Isac Sacchi e Souza - Migrando uma infraestrutura mutável para imutável e Kub...Isac Sacchi e Souza - Migrando uma infraestrutura mutável para imutável e Kub...
Isac Sacchi e Souza - Migrando uma infraestrutura mutável para imutável e Kub...
 
Ingrid Barth - Blockchain, Criptomoedas e a nova maneira de entender o dinheiro
Ingrid Barth - Blockchain, Criptomoedas e a nova maneira de entender o dinheiroIngrid Barth - Blockchain, Criptomoedas e a nova maneira de entender o dinheiro
Ingrid Barth - Blockchain, Criptomoedas e a nova maneira de entender o dinheiro
 
Igor Hjelmstrom Ribeiro - Bitcoin: desafios de segurança frente à ataques de...
Igor Hjelmstrom Ribeiro -  Bitcoin: desafios de segurança frente à ataques de...Igor Hjelmstrom Ribeiro -  Bitcoin: desafios de segurança frente à ataques de...
Igor Hjelmstrom Ribeiro - Bitcoin: desafios de segurança frente à ataques de...
 
Fabio De Santi e Thiago Urtaran - Smart cities: um caso real, a arquitetura d...
Fabio De Santi e Thiago Urtaran - Smart cities: um caso real, a arquitetura d...Fabio De Santi e Thiago Urtaran - Smart cities: um caso real, a arquitetura d...
Fabio De Santi e Thiago Urtaran - Smart cities: um caso real, a arquitetura d...
 

Fábio Lima Santos - Desenhando aplicações que evoluem

  • 1. APLICAÇÕES QUE EVOLUEM D2R Principle: Refatoração como foco do design das aplicações
  • 3. ENTROPIA 3 Vamos falar de termodinâmica?
  • 4. ©ThoughtWorks 2018 Commercial in Confidence ENTROPIA: desordem interna de um sistema, ou ainda, tem a ver com a irreversabilidade (espontânea) da ordem 4
  • 5. ©ThoughtWorks 2018 Commercial in Confidence Entropia em Sistemas Computacionais… 5 POR INTERVENÇÃO A cada intervenção, a entropia do sistema cresce de maneira exponencialmente proporcional à atual entropia do sistema POR POTENCIAL A entropia do sistema cresce à medida em que a diferença entre a ordem interna e a ordem externa crescem
  • 6. ©ThoughtWorks 2018 Commercial in Confidence Como a entropia afeta a evolução de um sistema computacional? 6 ENTROPIA RESISTÊNCIA À MUDANÇA
  • 7. ©ThoughtWorks 2018 Commercial in Confidence Software também morre! 7
  • 8. ©ThoughtWorks 2018 Commercial in Confidence Refactoring é a válvula de escape de entropia do sistema... 8
  • 9. Atrito ao Refactoring A melhor forma de saber que um software morreu
  • 10. ©ThoughtWorks 2018 Commercial in Confidence "Tudo que, direta ou indiretamente, impede, atrapalha ou desmotiva as pessoas desenvolvedoras a refatorar um sistema." 10
  • 11. ©ThoughtWorks 2018 Commercial in Confidence Tipos de Atrito ao Refactoring 11 ATRITO CULTURAL Muitas equipes trabalham com mecanismos de resistência a refactorings. É muito comum equipes que têm o mindset SCP (smallest change possible, ou "menor alteração possível"). Mix up your images to match your content. ATRITO ARQUITETURAL A equipe de desenvolvimento tem receio de realizar alterações devido ao impacto que essas alterações podem causar. ATRITO SISTÊMICO O negócio não muda mais, e o sistema já atende ao negócio de forma satisfatória. ATRITO DE CONHECIMENTO A equipe não é fluente na tecnologia em que está trabalhando.
  • 12. ©ThoughtWorks 2018 Commercial in Confidence Quando percebo que não sei qual o impacto que a refatoração tem sobre o funcionamento do sistema. 12 IMPACTO DESCONHECIDO
  • 13. ©ThoughtWorks 2018 Commercial in Confidence Quando percebo que a refatoração tem impacto em algo que eu não quero ou posso mudar. 13 IMPACTO INDESEJÁVEL
  • 14. ©ThoughtWorks 2018 Commercial in Confidence Mas como fazer para diminuir o atrito ao refactoring, permitindo que eu possa controlar e entropia da minha aplicação? 14
  • 15. 3 princípios do Design to Refactor
  • 16. ©ThoughtWorks 2017 Commercial in Confidence FRONTEIRAS BEM DEFINIDAS 16 Unidades computacionais com fronteiras bem definidas, em todas as camadas, permitem reduzir o impacto de alterações na aplicação 0
  • 17. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE INTROMETA 17 Não se integre com outras unidades computacionais de forma que você tenha que conhecer o seu estado interno para funcionar. Exemplos: acessar uma base de dados compartilhada; conhecer uma determinada estrutura do sistema de arquivos compartilhada; acessar atributos de um outro objeto via reflection; 1
  • 18. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE INTROMETA 18 Exemplos: ● acessar uma base de dados compartilhada ● conhecer uma determinada estrutura do sistema de arquivos compartilhada ● Acessar atributos de um outro objeto via reflection
  • 19. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE COMPROMETA 19 Ao se integrar, não se comprometa a fornecer ou conhecer mais informação do que o mínimo necessário. ...protocolos de integração... 2
  • 20. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA 20 3 Ao se integrar, não permita que entidades externas conheçam a sua estrutura interna.
  • 21. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA 21 UNIDADE COMPUTACIONAL Outras unidades computacionais PersistênciaTestes
  • 22. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA A OUTRAS UNIDADES COMPUTACIONAIS "ENCAPSULAMENTO" 22
  • 23. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA A OUTRAS UNIDADES COMPUTACIONAIS "ENCAPSULAMENTO" 23
  • 24. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA A OUTRAS UNIDADES COMPUTACIONAIS "ENCAPSULAMENTO" 24
  • 25. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA A OUTRAS UNIDADES COMPUTACIONAIS "OBJECT MARSHALLING" 25 Aplicação 1 Aplicação 2 JSON OBJ OBJ marshalling unmarshalling
  • 26. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA A OUTRAS UNIDADES COMPUTACIONAIS "OBJECT MARSHALLING" 26 Aplicação 1 Aplicação 2 JSON OBJ OBJ marshalling unmarshalling Schemas cheios de remendos por que mudanças estruturais têm impacto em múltiplas camadas de múltiplas aplicações Eu não refatoro o código da minha aplicação por que ele depende de um schema que eu não posso mudar sem impactar outras aplicações
  • 27. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA A OUTRAS UNIDADES COMPUTACIONAIS "OBJECT MARSHALLING" 27 Aplicação 1 Aplicação 2 JSON OBJ OBJ "Tem certeza que vai usar marshalling? Então use com DTOs!" SANTOS, FÁBIO DTODTO
  • 28. ©ThoughtWorks 2018 Commercial in Confidence Pessoas Javistas… Object Marshalling não é a única opção!!! 28
  • 29. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA A OUTRAS UNIDADES COMPUTACIONAIS "OBJECT MARSHALLING" 29
  • 30. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA A OUTRAS UNIDADES COMPUTACIONAIS "OBJECT MARSHALLING" 30
  • 31. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA A OUTRAS UNIDADES COMPUTACIONAIS "OBJECT MARSHALLING" 31
  • 32. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA A OUTRAS UNIDADES COMPUTACIONAIS "OBJECT MARSHALLING" 32
  • 33. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA À BASE DE DADOS "OBJECT-RELATIONAL MAPPING" 33 OBJ DB ORM-Hibernate Como entidades independentes (tanto em termos de estrutura quanto de infraestrutura) código e base de dados têm ciclos evolutivos diferentes. Acredite, você não vai evoluir o seu código porque isso impacta a estrutura de persistência dos teus dados. Isso vale tanto para persistência SQL e noSQL.
  • 34. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA À BASE DE DADOS "OBJECT-RELATIONAL MAPPING" 34 DTO DB ORM-Hibernate OBJ
  • 35. ©ThoughtWorks 2018 Commercial in Confidence EFEITO COLATERAL: O Inferno dos DTOs 35
  • 36. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA AOS TESTES "TESTES CAIXA BRANCA E MOCKS" 36 "Se toda vez que você refatora o seu código você tem que alterar os seus testes, então você não refatora o seu código" SANTOS, FÁBIO
  • 37. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA AOS TESTES "TESTES CAIXA BRANCA E MOCKS" 37 "Não é por que são unitários que os testes devem deixar de testar comportamentos para testar interações. Testes unitários assim são chamados por que testam comportamentos unitários, e não unidades de código." SANTOS, FÁBIO
  • 38. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA À BASE DE DADOS "TESTES CAIXA BRANCA E MOCKS" 38 O grande desafio é como testar orquestração...
  • 39. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA À BASE DE DADOS "TESTES CAIXA BRANCA E MOCKS" 39
  • 40. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA À BASE DE DADOS "TESTES CAIXA BRANCA E MOCKS" 40 ISOLATE FEATURE FROM INTEGRATION
  • 41. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA À BASE DE DADOS "TESTES CAIXA BRANCA E MOCKS" 41 ISOLATE FEATURE FROM INTEGRATION
  • 42. ©ThoughtWorks 2017 Commercial in Confidence NÃO SE EXPONHA À BASE DE DADOS "TESTES CAIXA BRANCA E MOCKS" 42 ISOLATE FEATURE FROM INTEGRATION
  • 43. ©ThoughtWorks 2018 Commercial in Confidence Resumindo... ENTROPIA A desordem interna de um sistema evolui à medida em que se fazem novas intervenções e/ou à medida em que o mundo à sua volta muda. Entropia gera resistência à mudança, potencialmente levando software à morte. REFACTORING COMO VÁLVULA DE ESCAPE Refactoring permite diminuir a entropia do sistema e deve ser feito continuamente para amenizar e/ou reverter a desordem gerada por intervenções diretas ou mesmo por mudanças externas ao sistema. ATRITO AO REFACTORING Além do Atrito Cultural e Sistêmico, o Atrito Arquitetural, resumido como Impacto Desconhecido e Impacto Indesejável, foi o ponto de atenção principal da nossa conversa hoje. NÃO SE INTROMETA NÃO SE COMPROMETA NÃO SE EXPONHA 43
  • 44. MUITO OBRIGADO Perguntas e sugestões: Fábio Santos fsantos@ThoughtWorks.com 44