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

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 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
 
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
 
#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 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...
 
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...
 
#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