SlideShare a Scribd company logo
1 of 48
Download to read offline
Fazendo as pazes com o legado,[object Object],dicas, técnicas e experiências,[object Object],Refactoring!,[object Object]
Legacycode,[object Object],Michael Feathers, Working Effectively with Legacy Code:,[object Object],“Code without tests”,[object Object]
Legacycode,[object Object],“Aplicações que estão em produção e que não recebem novas features e tem baixa manutenção, apenas bugs graves”,[object Object]
Greenfield,[object Object]
E se...,[object Object],Aplicação está em produção,,[object Object],Implementação constantes de novas funcionalidades,,[object Object],Correções de bugs,,[object Object],Mas...,[object Object]
O código é ruim,,[object Object],Difícil de dar manutenção,,[object Object],Ambiente não confiável,,[object Object],Afeta até mesmo a moral do time...?,[object Object]
Brownfield,[object Object]
dicas, técnicas e experiências,[object Object],Brownfieldapplications,[object Object]
Eu sou,[object Object],Emmanuel G. Brandão,,[object Object],32 anos,,[object Object],Programador humano,,[object Object],egomesbrandao{twitter, msn, gtalk, blog, site, e-mail, facebook, ...},[object Object]
Brownfieldapp’s,[object Object]
Você entra para a equipe, dia 1,[object Object],Acessa o VCS, baixa o código,[object Object],Compila e... erro, falta framework!,[object Object],Instala, ... Erro! Falta arquivo.config,[object Object],Compila... Erro! Configuração errada,[object Object]
Problemas,[object Object],SRP não é respeitado nem nas camadas,,[object Object],Acesso a dados problemático,,[object Object],O código é ininteligível,,[object Object],Práticas comuns não são usadas,,[object Object],Se OO é procedural, se funcional é OO,,[object Object],Incerteza é uma constante,[object Object]
Bases da mudança,[object Object]
Controle de versão (VCS),[object Object]
Alteração do código,[object Object]
ecosistema,[object Object],Controle de versão,[object Object],Integração contínua,[object Object],Testes automatizados,[object Object],Métricas,[object Object],Controle de bugs,[object Object]
Bases da mudança,[object Object]
Um pouco sobre código,[object Object],Conheça fundamentos (OO, Funcional, ...),[object Object],SOLID (SRP, OCP,...,DI ),[object Object],Adote: KISS, YAGNI, DRY,[object Object]
Camadas são polêmicas,[object Object],Tier: mais ligada ao hardware que roda (UI no cliente, middleware no server, ...),[object Object],Layer: Separação lógica (validação, lógica de negócios, ...),[object Object]
Brownfield applications: dicas, técnicas e experiências
Brownfield applications: dicas, técnicas e experiências
Brownfield applications: dicas, técnicas e experiências
anti-corruptionlayer,[object Object],Implementação do design pattern: Adapter,[object Object],Isola problemas com dependência de frameworks de terceiros ou sistemas,[object Object]
Vertical layer,[object Object],Log,[object Object],Veja AOP,[object Object],Case,[object Object]
Refactoringlayers,[object Object]
Brownfield applications: dicas, técnicas e experiências
Brownfield applications: dicas, técnicas e experiências
Brownfield applications: dicas, técnicas e experiências
Use tatft,[object Object],Para ter certeza de que tudo continua funcionando:,[object Object],“Test All The Fucking Time”,[object Object],Bryan Liles,[object Object]
Testes: leitura,[object Object],Workingeffectivewithlegacycode, Michael Feathers, tem vários cenários de teste,[object Object],Método monstro,[object Object],Código alienígina,[object Object]
Brownfield applications: dicas, técnicas e experiências
Bases da mudança,[object Object]
Dependenceinjection,[object Object],DependenceInjection (DI),[object Object],InversionofControl (IoC),[object Object],Service locator,[object Object]
Objetivo,[object Object],Desacoplar...,[object Object],...te força a trabalhar com Interfaces...,[object Object],... ajuda com testes,[object Object]
Bases da mudança,[object Object]
UI,[object Object],Desacople,[object Object],SRP,[object Object],Patterns (MVC, MVVM, ...),[object Object]
Bases da mudança,[object Object]
Brownfield applications: dicas, técnicas e experiências
Brownfield applications: dicas, técnicas e experiências
Refactoring acesso a dados,[object Object],Isole o acesso a dados em um layer (DAL),,[object Object],Se não precisar de Transações não coloque! Lembre-se YAGNI,,[object Object],Otimização prematura de performance não é uma boa idéia,,[object Object],Refactoring de IF’s em SP’sé fácil, joins, aggregations é difícil, o que é lógica e o que é CRUD,,[object Object]
ORM,[object Object],Deixe o acesso de dado no automático,,[object Object],Não crie, use um pronto... Ou compre!,[object Object],Coopere com o DBA! “Dados pertencem a organização e não a sua aplicação”,[object Object]
Banco de dados,[object Object],Faz parte da sua app, certo?,[object Object],Você versiona? Como?,[object Object],É fácil de refazer? É feito no deploy de teste? ,[object Object],Use: Migrations,[object Object]
Uma nova idéia: CQRS, próxima palestra!,[object Object]
Bases da mudança,[object Object]
manter,[object Object]
Inspeção e adaptação...,[object Object],"Não se iluda em terminar um projeto, um projeto de software só acaba quando o programa é deletado dos computadores definitivamente e sai de uso, o código-fonte é apagado e todos os programadores são mortos.“,[object Object],Ted Neward,[object Object]
Brownfield applications: dicas, técnicas e experiências
Obrigado!,[object Object]

More Related Content

What's hot

ArchUnit-Garantindo a Integridade dos seus Padrões Arquiteturais em Java
ArchUnit-Garantindo a Integridade dos seus Padrões Arquiteturais em JavaArchUnit-Garantindo a Integridade dos seus Padrões Arquiteturais em Java
ArchUnit-Garantindo a Integridade dos seus Padrões Arquiteturais em JavaEdlaine Zamora
 
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!Robson Bittencourt
 
Testes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NETTestes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NETAlessandro Binhara
 
Java não é tão difícil quanto parece
Java não é tão difícil quanto pareceJava não é tão difícil quanto parece
Java não é tão difícil quanto parecejesuinoPower
 
Inovando na plataforma Java
Inovando na plataforma JavaInovando na plataforma Java
Inovando na plataforma JavaEteg
 
Meus 50 Cents sobre Teste de Software
Meus 50 Cents sobre Teste de SoftwareMeus 50 Cents sobre Teste de Software
Meus 50 Cents sobre Teste de SoftwareVanilton Pinheiro
 
Semana da Computação UFRJ - Testes Automatizados: bruxaria ou não?
Semana da Computação UFRJ - Testes Automatizados: bruxaria ou não?Semana da Computação UFRJ - Testes Automatizados: bruxaria ou não?
Semana da Computação UFRJ - Testes Automatizados: bruxaria ou não?Stefan Teixeira
 
Tester, pegue suas coisas, você está demitido
Tester, pegue suas coisas, você está demitidoTester, pegue suas coisas, você está demitido
Tester, pegue suas coisas, você está demitidoLeonardo Galani
 
React e reactividade Meetup Facebook Developer Circles
React e reactividade Meetup Facebook Developer CirclesReact e reactividade Meetup Facebook Developer Circles
React e reactividade Meetup Facebook Developer CirclesJosé Barbosa
 
Mtc docker - utilizando no seu dia a dia
Mtc   docker - utilizando no seu dia a diaMtc   docker - utilizando no seu dia a dia
Mtc docker - utilizando no seu dia a diaRafael Chiavegatto
 
Arquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarArquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarBetter Developer
 
Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?Maurício Aniche
 
Do código à produção com Gitlab (mundo python)
Do código à produção com Gitlab (mundo python)Do código à produção com Gitlab (mundo python)
Do código à produção com Gitlab (mundo python)Better Developer
 

What's hot (19)

ArchUnit-Garantindo a Integridade dos seus Padrões Arquiteturais em Java
ArchUnit-Garantindo a Integridade dos seus Padrões Arquiteturais em JavaArchUnit-Garantindo a Integridade dos seus Padrões Arquiteturais em Java
ArchUnit-Garantindo a Integridade dos seus Padrões Arquiteturais em Java
 
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!
 
Testes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NETTestes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NET
 
O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!
 
JUnit Experience
JUnit ExperienceJUnit Experience
JUnit Experience
 
Java não é tão difícil quanto parece
Java não é tão difícil quanto pareceJava não é tão difícil quanto parece
Java não é tão difícil quanto parece
 
Inovando na plataforma Java
Inovando na plataforma JavaInovando na plataforma Java
Inovando na plataforma Java
 
Meus 50 Cents sobre Teste de Software
Meus 50 Cents sobre Teste de SoftwareMeus 50 Cents sobre Teste de Software
Meus 50 Cents sobre Teste de Software
 
PHP Anti Patterns
PHP Anti PatternsPHP Anti Patterns
PHP Anti Patterns
 
Semana da Computação UFRJ - Testes Automatizados: bruxaria ou não?
Semana da Computação UFRJ - Testes Automatizados: bruxaria ou não?Semana da Computação UFRJ - Testes Automatizados: bruxaria ou não?
Semana da Computação UFRJ - Testes Automatizados: bruxaria ou não?
 
Tester, pegue suas coisas, você está demitido
Tester, pegue suas coisas, você está demitidoTester, pegue suas coisas, você está demitido
Tester, pegue suas coisas, você está demitido
 
React e reactividade Meetup Facebook Developer Circles
React e reactividade Meetup Facebook Developer CirclesReact e reactividade Meetup Facebook Developer Circles
React e reactividade Meetup Facebook Developer Circles
 
Mantendo o código saudável
Mantendo o código saudávelMantendo o código saudável
Mantendo o código saudável
 
Mtc docker - utilizando no seu dia a dia
Mtc   docker - utilizando no seu dia a diaMtc   docker - utilizando no seu dia a dia
Mtc docker - utilizando no seu dia a dia
 
Arquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarArquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudar
 
TDD - Test Driven Development com JAVA
TDD - Test Driven Development com JAVATDD - Test Driven Development com JAVA
TDD - Test Driven Development com JAVA
 
Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?
 
Do código à produção com Gitlab (mundo python)
Do código à produção com Gitlab (mundo python)Do código à produção com Gitlab (mundo python)
Do código à produção com Gitlab (mundo python)
 
Testes unitários e Mocks
Testes unitários e MocksTestes unitários e Mocks
Testes unitários e Mocks
 

Similar to Brownfield applications: dicas, técnicas e experiências

XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme ProgrammingRodrigo Branas
 
TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação Icaro Camelo
 
Sistemas para o Mundo Real
Sistemas para o Mundo RealSistemas para o Mundo Real
Sistemas para o Mundo RealLeandro Silva
 
Django Object factory
Django Object factoryDjango Object factory
Django Object factoryitalomaia
 
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...Thiago Dieb
 
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...Thiago Dieb
 
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...As Zone
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreamsJacqueline Abreu
 
Qualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMQualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMAdriano Bertucci
 
Introdução a DevOps e Continuous delivery agileday
Introdução a DevOps e Continuous delivery   agiledayIntrodução a DevOps e Continuous delivery   agileday
Introdução a DevOps e Continuous delivery agiledayCarlos Felippe Cardoso
 
Test driven development
Test driven developmentTest driven development
Test driven developmentclauvane1708
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshopguestd37c23
 

Similar to Brownfield applications: dicas, técnicas e experiências (20)

XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
Palestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnitPalestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnit
 
Como desenvolver-software
Como desenvolver-softwareComo desenvolver-software
Como desenvolver-software
 
Tdd na veia
Tdd na veiaTdd na veia
Tdd na veia
 
PHPZEIRO: Adote um framework
PHPZEIRO: Adote um frameworkPHPZEIRO: Adote um framework
PHPZEIRO: Adote um framework
 
TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação
 
Sistemas para o Mundo Real
Sistemas para o Mundo RealSistemas para o Mundo Real
Sistemas para o Mundo Real
 
Django Object factory
Django Object factoryDjango Object factory
Django Object factory
 
Anti-patterns
Anti-patternsAnti-patterns
Anti-patterns
 
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
 
Inovando na Plataforma Java
Inovando na Plataforma JavaInovando na Plataforma Java
Inovando na Plataforma Java
 
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
 
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
Introdução ao XP
Introdução ao XPIntrodução ao XP
Introdução ao XP
 
Qualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMQualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALM
 
Introdução a DevOps e Continuous delivery agileday
Introdução a DevOps e Continuous delivery   agiledayIntrodução a DevOps e Continuous delivery   agileday
Introdução a DevOps e Continuous delivery agileday
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshop
 
Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016
 

More from Emmanuel Gomes Brandão (16)

3 way's a base do DevOps no Azure DevOps
3 way's a base do DevOps no Azure DevOps3 way's a base do DevOps no Azure DevOps
3 way's a base do DevOps no Azure DevOps
 
VS2019 Launch - VS com DevOps
VS2019 Launch - VS com DevOpsVS2019 Launch - VS com DevOps
VS2019 Launch - VS com DevOps
 
DevOps para Open Source com Azure DevOps
DevOps para Open Source com Azure DevOpsDevOps para Open Source com Azure DevOps
DevOps para Open Source com Azure DevOps
 
DevOps para Enterprises
DevOps para EnterprisesDevOps para Enterprises
DevOps para Enterprises
 
7Masters - Automação de testes
7Masters - Automação de testes7Masters - Automação de testes
7Masters - Automação de testes
 
DevOps em Enterprises: problemas
DevOps em Enterprises: problemasDevOps em Enterprises: problemas
DevOps em Enterprises: problemas
 
Jornada para o DevOps
Jornada para o DevOpsJornada para o DevOps
Jornada para o DevOps
 
Three ways a base do DevOps no VSTS
Three ways a base do DevOps no VSTSThree ways a base do DevOps no VSTS
Three ways a base do DevOps no VSTS
 
Saia do Brownfield com Refactoring
Saia do Brownfield com RefactoringSaia do Brownfield com Refactoring
Saia do Brownfield com Refactoring
 
Saia do Brownfield com Refactoring
Saia do Brownfield com RefactoringSaia do Brownfield com Refactoring
Saia do Brownfield com Refactoring
 
DevOps: Muito mais cultura do que ferramentas
DevOps: Muito mais cultura do que ferramentasDevOps: Muito mais cultura do que ferramentas
DevOps: Muito mais cultura do que ferramentas
 
DevOps Mitos, Cultura e Futuro
DevOps Mitos, Cultura e FuturoDevOps Mitos, Cultura e Futuro
DevOps Mitos, Cultura e Futuro
 
DevOps (Provocações)
DevOps (Provocações)DevOps (Provocações)
DevOps (Provocações)
 
Git Rebase, reescrevendo o seu histórico
Git Rebase, reescrevendo o seu históricoGit Rebase, reescrevendo o seu histórico
Git Rebase, reescrevendo o seu histórico
 
Integrando Jenkins em um pipeline com VSTS... e Azure
Integrando Jenkins em um pipeline com VSTS... e AzureIntegrando Jenkins em um pipeline com VSTS... e Azure
Integrando Jenkins em um pipeline com VSTS... e Azure
 
MS Enterprise Library
MS Enterprise LibraryMS Enterprise Library
MS Enterprise Library
 

Brownfield applications: dicas, técnicas e experiências

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 23.
  • 24.
  • 25.
  • 29.
  • 30.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 48.