SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
TDD com Código Legado
Cesar Romero, Trier Sistemas, Desenvolvedor Sênior
cesarliws@gmail.com / @cesarliws
Sobre o Apresentador
• Cesar Romero Silva
• Programador Analista Sênior e Lider Técnico
Trier Sistemas - Tubarão SC
• MVP Embarcadero - Delphi
• Programador Delphi desde 1996
• Graduação em Ciências Contábeis
• Pós Graduação em Software Orientado a Objetos
Agenda
• TDD com Código Legado.
• O que é Código Legado?
• O que é TDD?
• Refatorar ou Reescrever?
• Como definir um plano de ação.
• Code Smell e Anti Patterns.
• Refatorar somente com Testes.
• Exemplos.
TDD com Código Legado
O que é Código Legado?
The 5 people in your organization that grow legacy code
O que é Código Legado?
Wikipedia
É um método, tecnologia, computador ou aplicação que continua sendo usado, tipicamente por
que ainda funciona para as necessidades de alguém, embora tecnologia ou metodologia mais
eficiente já esteja disponível.
• Motivos
• Falta de manutenção regular.
• Falta de testes.
• Sistema "preso" a uma plataforma mais antiga.
• Dependência de bibliotecas de terceiros que não são mais mantidas.
• Código fonte total ou parcial não está mais disponível.
O que é Código Legado?
Código legado é o código que alguém tem medo de alterar, por que ele
pode quebrar.
Código legado não está relacionado com a idade, você pode escrever código
legado desde o início de um projeto.
O que é TDD?
• Test Driven Development
Desenvolvimento Dirigido a Testes.
O que é TDD?
Kent Beck recebe o crédito como inventor do TDD, ainda assim, ele afirma que
ele só redescrobriu o TDD.
Existem referências de técnicas de desenvolvimento utilizando técnicas
descritas exatamente como TDD em várias situações no passado:
• Report of The Nato Software Engineering Conference (1968).
• The Humble Programmer, Edsger W. Dijkstra (1972).
• De acordo com Craig Larman e Victor Basili, no início dos anos 1960, a IBM executou um
projeto para a NASA, usando técnicas equivalentes a TDD.
• Digital Computer Programming D.D. McCracken, 1957
You won’t believe how old TDD is
O que é TDD?
Test Driven Design
O teste é valioso, mas o desenvolvimento incremental de uma arquitetura
ideal, como efeito colateral do teste não tem preço.
Allen Holub - Dr. Dobb's
• Design Dirigido a Testes, pois o TDD auxilia no design do código.
Refatorar ou Reescrever?
Refatorar
• Refatorar sem testes = insegurança.
• Nunca se sabe onde o código vai quebrar.
• Alterações no banco de dados podem gerar erros inesperados no sistema.
• Código dependente de rotinas complexas e não documentadas.
• Código que depende de bibliotecas ou componentes de versão antiga ou
descontinuados.
• Referências inválidas.
Refatorar ou Reescrever
Reescrever
• Reescrever Sistema = alto custo.
• Se for escrito sem testes, vai nascer legado.
• Se não foi bem feito da primeira vez, por que seria agora?
• Deve ter uma boa justificativa:
• Mudança de tecnologia para suportar novas plataformas ou versão mais
recente da mesma plataforma.
Definir um plano de ação
• Crie uma branche para o refactory.
• Crie um projeto de testes.
• Definir Metas:
• Definir como o seu projeto deve ser organizado.
• Definir o padrão de formatação.
• Definir o padrão para nome.
• Definir quais componentes são essenciais e quais devem ser
removidos/substituídos.
• Não adicione um conjunto de componentes a não ser que ele seja
realmente necessário.
Definir um plano de ação
• Analytics
• Identificar que partes do sistema seu cliente usa.
• Cobertura
• Nem sempre é necessário ter uma cobertura de testes completa.
• Classes e métodos públicos devem ser testados.
• Métodos usados internamente pela classe devem ser movidos para
private ou protected.
Definir um plano de ação
Por onde começar
• Remover todos Warnings e Hints do projeto.
• Remover código morto.
• Comentários, componentes não usados e desnecessários.
• Código, variáveis e constantes não usadas.
• Código duplicado e Código comentado.
• Formulários e DataModules não usados.
Definir um plano de ação
Por onde começar
• Renomear identificadores para ter um código mais claro.
• Se você não consegue descrever uma classe ou um método em uma
sentença, então há muita responsabilidade .
• Remover dependências - units não usadas.
• Mover para implementation as units de dependências que não são usadas
na interface.
• Utilize ferramentas para refactory e para identificar código morto.
Definir um plano de ação
Utilize ferramentas para refactory e para identificar código morto.
• Peganza Pascal Analyzer
• MMX - ModelMaker Code Explorer
• Refactor do Delphi, CnWizards, GExperts, TMS FixInsight
Code Smell e Anti Patterns
Code Smell
• É qualquer sintoma no código que possivelmente indica um problema
maior.
Coding Horror - Code Smell
O que são Anti Patterns?
• É tudo que que fazemos repetidamente e que produz algum resultado
negativo.
Common AntiPatterns
Software Development AntiPatterns
Refatorar com Testes
• Somente altere código que está em produção com testes.
• Se não houver testes, antes de alterar o código escreva os testes.
• Se houver dependências, isole o código sem alterar.
• Utilize “Adapters” para manter a integração entre as partes.
• Correção de Bugs
• Para cada problema reportado, deve haver um teste reproduzindo o
problema.
• Foco em apenas um falha por vez, um teste que falha reproduzindo o
erro é o suficiente.
Exemplos
• Criando Projeto de Testes.
• Organizando código que utiliza componentes de terceiros.
• Extraindo regra de negócio de Formulários e DataModulos.
• Criar Adapter, se necessário.
• Extrair SQL.
• Mover componentes de acesso a Banco de Dados para DataModules.
• Criar testes para código de banco de dados, instruções SQL.
• Testando procedures e functions.
Exemplos
• Separar configuração de inicialização de parâmetros do sistema.
• Mover parâmetros do sistema para o banco de dados.
• Remover código do .DPR.
Exemplos
Hands ON - FireDAC Getting Started SQLite
• Melhorias
• Abrir o banco automaticamente
• Backlog - Débito Técnico
• Separar componentes de acesso ao banco de dados
• Extrair SQL do código do formulário
• Extrair regra de negócios
• Remover units não utilizadas
• Extrair Strings
• Remover "with"
• Padronizar nome das units
• Padronizar nome dos componentes
C:UsersPublicDocumentsEmbarcaderoStudio19.0SamplesObject PascalDatabaseFireDACSamplesGetting Started
Perguntas
https://github.com/cesarliws/CodeRageBrasil2018
Referências
• cesarliws@gmail.com / @cesarliws
• The 5 people in your organization that grow legacy code
https://zeroturnaround.com/rebellabs/the-5-people-in-your-organization-that-grow-legacy-code
• Wikipedia
http://en.wikipedia.org/wiki/Legacy_system
• You won’t believe how old TDD is
https://arialdomartini.wordpress.com/2012/07/20/you-wont-believe-how-old-tdd-is
• Test-Driven Design - Allen Holub - Dr. Dobb's
http://www.drdobbs.com/architecture-and-design/test-driven-design/240168102
Referências
• Coding Horror - Code Smell
https://blog.codinghorror.com/code-smells
• Common AntiPatterns
https://myadventuresincoding.wordpress.com/2010/06/16/common-antipatterns
• Software Development AntiPatterns
https://sourcemaking.com/antipatterns/software-development-antipatterns
Referências
• Peganza Pascal Analyzer
http://www.peganza.com/index.html
• MMX - ModelMaker Code Explorer
http://www.modelmakertools.com/code-explorer/index.html
• Refactor do Delphi
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Refactoring_Code
• CnWizards
http://www.cnpack.org/index.php?lang=en
• GExperts
http://www.gexperts.org
• TMS FixInsight
https://www.tmssoftware.com/site/fixinsight.asp

Mais conteúdo relacionado

Mais procurados

Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...minastestingconference
 
Test-Driven Develpment - TDD
Test-Driven Develpment - TDDTest-Driven Develpment - TDD
Test-Driven Develpment - TDDKleber Bernardo
 
Introdução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosIntrodução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosDionatan default
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDDPHP Day Curitiba
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesCamilo Ribeiro
 
Facilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHPFacilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHPPedro Chaves
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"thiagobapt
 
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
 
CNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliveryCNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliverySamanta Cicilia
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsSamanta Cicilia
 
DevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeDevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeKamilla Queiroz Xavier
 
[DevOps Summit]Importância de testes automatizados para sustentar Continuous...
[DevOps Summit]Importância de testes automatizados para sustentar Continuous...[DevOps Summit]Importância de testes automatizados para sustentar Continuous...
[DevOps Summit]Importância de testes automatizados para sustentar Continuous...Samanta Cicilia
 
Teste de software, na visão de um desenvolvedor
Teste de software, na visão de um desenvolvedorTeste de software, na visão de um desenvolvedor
Teste de software, na visão de um desenvolvedorAndré Phillip Bertoletti
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes AutomatizadosSamanta Cicilia
 
Minas Testing Conference 2016 - Testes de Carga com Locust
Minas Testing Conference 2016 - Testes de Carga com LocustMinas Testing Conference 2016 - Testes de Carga com Locust
Minas Testing Conference 2016 - Testes de Carga com LocustStefan Teixeira
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de softwareHeider Lopes
 

Mais procurados (20)

Introdução ao XP
Introdução ao XPIntrodução ao XP
Introdução ao XP
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
 
Test-Driven Develpment - TDD
Test-Driven Develpment - TDDTest-Driven Develpment - TDD
Test-Driven Develpment - TDD
 
Introdução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosIntrodução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anos
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Facilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHPFacilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHP
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"
 
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
 
CNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliveryCNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous Delivery
 
TDD
TDDTDD
TDD
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOps
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
DevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeDevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a Qualidade
 
[DevOps Summit]Importância de testes automatizados para sustentar Continuous...
[DevOps Summit]Importância de testes automatizados para sustentar Continuous...[DevOps Summit]Importância de testes automatizados para sustentar Continuous...
[DevOps Summit]Importância de testes automatizados para sustentar Continuous...
 
Teste de software, na visão de um desenvolvedor
Teste de software, na visão de um desenvolvedorTeste de software, na visão de um desenvolvedor
Teste de software, na visão de um desenvolvedor
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados
 
Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016
 
Minas Testing Conference 2016 - Testes de Carga com Locust
Minas Testing Conference 2016 - Testes de Carga com LocustMinas Testing Conference 2016 - Testes de Carga com Locust
Minas Testing Conference 2016 - Testes de Carga com Locust
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software
 

Semelhante a TDD com Código Legado

Projeto de Sistemas - Aula002
Projeto de Sistemas - Aula002Projeto de Sistemas - Aula002
Projeto de Sistemas - Aula002Cláudio Amaral
 
Aula Modelos de Processos Tradicionais para Desenvolvimento de Software
Aula Modelos de Processos Tradicionais para Desenvolvimento de Software Aula Modelos de Processos Tradicionais para Desenvolvimento de Software
Aula Modelos de Processos Tradicionais para Desenvolvimento de Software Cloves da Rocha
 
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...Thiago Barradas
 
Aula - Modelos de Processos de Desenvolvimento de Software / Mobile App
Aula - Modelos de Processos de Desenvolvimento de Software / Mobile AppAula - Modelos de Processos de Desenvolvimento de Software / Mobile App
Aula - Modelos de Processos de Desenvolvimento de Software / Mobile AppCloves da Rocha
 
Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Thiago Barradas
 
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsComo automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsRafael Salerno de Oliveira
 
Sonarqube
SonarqubeSonarqube
SonarqubeCDS
 
SonarQube
SonarQubeSonarQube
SonarQubeCDS
 
Desenvolvendo software com qualidade e agilidade
Desenvolvendo software com qualidade e agilidadeDesenvolvendo software com qualidade e agilidade
Desenvolvendo software com qualidade e agilidadeDiogo Augusto Pereira
 
Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Renato Groff
 
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...Renato Groff
 
REFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADE
REFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADEREFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADE
REFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADEAlexsander Camargo
 
FES_SENAIPR_Processos.pdf
FES_SENAIPR_Processos.pdfFES_SENAIPR_Processos.pdf
FES_SENAIPR_Processos.pdfFChico2
 
InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...
InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...
InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...iMasters
 

Semelhante a TDD com Código Legado (20)

Projeto de Sistemas - Aula002
Projeto de Sistemas - Aula002Projeto de Sistemas - Aula002
Projeto de Sistemas - Aula002
 
Aula Modelos de Processos Tradicionais para Desenvolvimento de Software
Aula Modelos de Processos Tradicionais para Desenvolvimento de Software Aula Modelos de Processos Tradicionais para Desenvolvimento de Software
Aula Modelos de Processos Tradicionais para Desenvolvimento de Software
 
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
Clean Code: Por um mundo com códigos melhores - The Developers Conference - P...
 
Aula - Modelos de Processos de Desenvolvimento de Software / Mobile App
Aula - Modelos de Processos de Desenvolvimento de Software / Mobile AppAula - Modelos de Processos de Desenvolvimento de Software / Mobile App
Aula - Modelos de Processos de Desenvolvimento de Software / Mobile App
 
DSDM
DSDMDSDM
DSDM
 
Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017
 
Outras Metodologias Ágeis Parte 2
Outras Metodologias Ágeis Parte 2Outras Metodologias Ágeis Parte 2
Outras Metodologias Ágeis Parte 2
 
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsComo automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
 
Sonarqube
SonarqubeSonarqube
Sonarqube
 
Apresentação testes white box
Apresentação testes white boxApresentação testes white box
Apresentação testes white box
 
SonarQube
SonarQubeSonarQube
SonarQube
 
Desenvolvendo software com qualidade e agilidade
Desenvolvendo software com qualidade e agilidadeDesenvolvendo software com qualidade e agilidade
Desenvolvendo software com qualidade e agilidade
 
Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016
 
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
 
Métricas de Código
Métricas de CódigoMétricas de Código
Métricas de Código
 
Codigo limpo.pptx
Codigo limpo.pptxCodigo limpo.pptx
Codigo limpo.pptx
 
REFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADE
REFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADEREFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADE
REFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADE
 
FES_SENAIPR_Processos.pdf
FES_SENAIPR_Processos.pdfFES_SENAIPR_Processos.pdf
FES_SENAIPR_Processos.pdf
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...
InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...
InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...
 

TDD com Código Legado

  • 1. TDD com Código Legado Cesar Romero, Trier Sistemas, Desenvolvedor Sênior cesarliws@gmail.com / @cesarliws
  • 2. Sobre o Apresentador • Cesar Romero Silva • Programador Analista Sênior e Lider Técnico Trier Sistemas - Tubarão SC • MVP Embarcadero - Delphi • Programador Delphi desde 1996 • Graduação em Ciências Contábeis • Pós Graduação em Software Orientado a Objetos
  • 3. Agenda • TDD com Código Legado. • O que é Código Legado? • O que é TDD? • Refatorar ou Reescrever? • Como definir um plano de ação. • Code Smell e Anti Patterns. • Refatorar somente com Testes. • Exemplos.
  • 5. O que é Código Legado? The 5 people in your organization that grow legacy code
  • 6. O que é Código Legado? Wikipedia É um método, tecnologia, computador ou aplicação que continua sendo usado, tipicamente por que ainda funciona para as necessidades de alguém, embora tecnologia ou metodologia mais eficiente já esteja disponível. • Motivos • Falta de manutenção regular. • Falta de testes. • Sistema "preso" a uma plataforma mais antiga. • Dependência de bibliotecas de terceiros que não são mais mantidas. • Código fonte total ou parcial não está mais disponível.
  • 7. O que é Código Legado? Código legado é o código que alguém tem medo de alterar, por que ele pode quebrar. Código legado não está relacionado com a idade, você pode escrever código legado desde o início de um projeto.
  • 8. O que é TDD? • Test Driven Development Desenvolvimento Dirigido a Testes.
  • 9. O que é TDD? Kent Beck recebe o crédito como inventor do TDD, ainda assim, ele afirma que ele só redescrobriu o TDD. Existem referências de técnicas de desenvolvimento utilizando técnicas descritas exatamente como TDD em várias situações no passado: • Report of The Nato Software Engineering Conference (1968). • The Humble Programmer, Edsger W. Dijkstra (1972). • De acordo com Craig Larman e Victor Basili, no início dos anos 1960, a IBM executou um projeto para a NASA, usando técnicas equivalentes a TDD. • Digital Computer Programming D.D. McCracken, 1957 You won’t believe how old TDD is
  • 10. O que é TDD? Test Driven Design O teste é valioso, mas o desenvolvimento incremental de uma arquitetura ideal, como efeito colateral do teste não tem preço. Allen Holub - Dr. Dobb's • Design Dirigido a Testes, pois o TDD auxilia no design do código.
  • 11. Refatorar ou Reescrever? Refatorar • Refatorar sem testes = insegurança. • Nunca se sabe onde o código vai quebrar. • Alterações no banco de dados podem gerar erros inesperados no sistema. • Código dependente de rotinas complexas e não documentadas. • Código que depende de bibliotecas ou componentes de versão antiga ou descontinuados. • Referências inválidas.
  • 12. Refatorar ou Reescrever Reescrever • Reescrever Sistema = alto custo. • Se for escrito sem testes, vai nascer legado. • Se não foi bem feito da primeira vez, por que seria agora? • Deve ter uma boa justificativa: • Mudança de tecnologia para suportar novas plataformas ou versão mais recente da mesma plataforma.
  • 13. Definir um plano de ação • Crie uma branche para o refactory. • Crie um projeto de testes. • Definir Metas: • Definir como o seu projeto deve ser organizado. • Definir o padrão de formatação. • Definir o padrão para nome. • Definir quais componentes são essenciais e quais devem ser removidos/substituídos. • Não adicione um conjunto de componentes a não ser que ele seja realmente necessário.
  • 14. Definir um plano de ação • Analytics • Identificar que partes do sistema seu cliente usa. • Cobertura • Nem sempre é necessário ter uma cobertura de testes completa. • Classes e métodos públicos devem ser testados. • Métodos usados internamente pela classe devem ser movidos para private ou protected.
  • 15. Definir um plano de ação Por onde começar • Remover todos Warnings e Hints do projeto. • Remover código morto. • Comentários, componentes não usados e desnecessários. • Código, variáveis e constantes não usadas. • Código duplicado e Código comentado. • Formulários e DataModules não usados.
  • 16. Definir um plano de ação Por onde começar • Renomear identificadores para ter um código mais claro. • Se você não consegue descrever uma classe ou um método em uma sentença, então há muita responsabilidade . • Remover dependências - units não usadas. • Mover para implementation as units de dependências que não são usadas na interface. • Utilize ferramentas para refactory e para identificar código morto.
  • 17. Definir um plano de ação Utilize ferramentas para refactory e para identificar código morto. • Peganza Pascal Analyzer • MMX - ModelMaker Code Explorer • Refactor do Delphi, CnWizards, GExperts, TMS FixInsight
  • 18. Code Smell e Anti Patterns Code Smell • É qualquer sintoma no código que possivelmente indica um problema maior. Coding Horror - Code Smell O que são Anti Patterns? • É tudo que que fazemos repetidamente e que produz algum resultado negativo. Common AntiPatterns Software Development AntiPatterns
  • 19. Refatorar com Testes • Somente altere código que está em produção com testes. • Se não houver testes, antes de alterar o código escreva os testes. • Se houver dependências, isole o código sem alterar. • Utilize “Adapters” para manter a integração entre as partes. • Correção de Bugs • Para cada problema reportado, deve haver um teste reproduzindo o problema. • Foco em apenas um falha por vez, um teste que falha reproduzindo o erro é o suficiente.
  • 20. Exemplos • Criando Projeto de Testes. • Organizando código que utiliza componentes de terceiros. • Extraindo regra de negócio de Formulários e DataModulos. • Criar Adapter, se necessário. • Extrair SQL. • Mover componentes de acesso a Banco de Dados para DataModules. • Criar testes para código de banco de dados, instruções SQL. • Testando procedures e functions.
  • 21. Exemplos • Separar configuração de inicialização de parâmetros do sistema. • Mover parâmetros do sistema para o banco de dados. • Remover código do .DPR.
  • 22. Exemplos Hands ON - FireDAC Getting Started SQLite • Melhorias • Abrir o banco automaticamente • Backlog - Débito Técnico • Separar componentes de acesso ao banco de dados • Extrair SQL do código do formulário • Extrair regra de negócios • Remover units não utilizadas • Extrair Strings • Remover "with" • Padronizar nome das units • Padronizar nome dos componentes C:UsersPublicDocumentsEmbarcaderoStudio19.0SamplesObject PascalDatabaseFireDACSamplesGetting Started
  • 24. Referências • cesarliws@gmail.com / @cesarliws • The 5 people in your organization that grow legacy code https://zeroturnaround.com/rebellabs/the-5-people-in-your-organization-that-grow-legacy-code • Wikipedia http://en.wikipedia.org/wiki/Legacy_system • You won’t believe how old TDD is https://arialdomartini.wordpress.com/2012/07/20/you-wont-believe-how-old-tdd-is • Test-Driven Design - Allen Holub - Dr. Dobb's http://www.drdobbs.com/architecture-and-design/test-driven-design/240168102
  • 25. Referências • Coding Horror - Code Smell https://blog.codinghorror.com/code-smells • Common AntiPatterns https://myadventuresincoding.wordpress.com/2010/06/16/common-antipatterns • Software Development AntiPatterns https://sourcemaking.com/antipatterns/software-development-antipatterns
  • 26. Referências • Peganza Pascal Analyzer http://www.peganza.com/index.html • MMX - ModelMaker Code Explorer http://www.modelmakertools.com/code-explorer/index.html • Refactor do Delphi http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Refactoring_Code • CnWizards http://www.cnpack.org/index.php?lang=en • GExperts http://www.gexperts.org • TMS FixInsight https://www.tmssoftware.com/site/fixinsight.asp