SlideShare a Scribd company logo
1 of 23
Download to read 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?
• Definir um plano de ação
• Code Smell e Anti Patterns
• Refatorar 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 ele ainda funciona para as necessidades de alguém, embora
tecnologia ou metodologia mais eficiente já esteja disponível.
• Falta de manutenção regular.
• Falta de testes.
• Sistema "preso" a uma plataforma mais antiga.
• Dependencia 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
• 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 ousados e desnecessários.
• Código, variáveis e constantes não usadas.
• Código duplicado e Código comentado.
• Formulários e DataModulos 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 nas “uses”.
• Mover para uses da 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
• Menu 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 teste de falha por vez.
Exemplos
• Criando Projeto de Testes.
• Organizando código que utiliza componentes de terceiros.
• Extraindo código de Formulários e DataModulos.
• Criando um Adapter.
• Testando código de banco de dados
• Extrair SQL
• DataModules
• 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
• Extrair SQL dos fontes
• Extrair regra de negócio de formulários e data modules
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

More Related Content

What's hot

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
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizadosThiago Ghisi
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de SoftwareMaurício Aniche
 
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
 
Testes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de TestesTestes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de TestesPaulo César M Jeveaux
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareDextra Sistemas / Etec Itu
 
Desenvolvimento orientado a testes - TDD
Desenvolvimento orientado a testes - TDDDesenvolvimento orientado a testes - TDD
Desenvolvimento orientado a testes - TDDwashingtonlslima
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDDPHP Day Curitiba
 
Tecnicas Para Planejamento E Execucao De Testes De Software
Tecnicas Para Planejamento E Execucao De Testes De SoftwareTecnicas Para Planejamento E Execucao De Testes De Software
Tecnicas Para Planejamento E Execucao De Testes De Softwaremarthahuback
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do MantraDionatan default
 
Programe a eficácia do seu código
Programe a eficácia do seu códigoPrograme a eficácia do seu código
Programe a eficácia do seu códigoAna Claudia Nogueira
 

What's hot (19)

TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
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
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de Software
 
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
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Testes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de TestesTestes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de Testes
 
TDD
TDDTDD
TDD
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de software
 
Desenvolvimento orientado a testes - TDD
Desenvolvimento orientado a testes - TDDDesenvolvimento orientado a testes - TDD
Desenvolvimento orientado a testes - TDD
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
 
Tecnicas Para Planejamento E Execucao De Testes De Software
Tecnicas Para Planejamento E Execucao De Testes De SoftwareTecnicas Para Planejamento E Execucao De Testes De Software
Tecnicas Para Planejamento E Execucao De Testes De Software
 
Introdução a TDD
Introdução a TDDIntrodução a TDD
Introdução a TDD
 
Tdd na veia
Tdd na veiaTdd na veia
Tdd na veia
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 
Programe a eficácia do seu código
Programe a eficácia do seu códigoPrograme a eficácia do seu código
Programe a eficácia do seu código
 

Similar to TDD com Código Legado

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
 
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
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaRogerio Fontes
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesCamilo Ribeiro
 
Projeto de Sistemas - Aula002
Projeto de Sistemas - Aula002Projeto de Sistemas - Aula002
Projeto de Sistemas - Aula002Cláudio Amaral
 
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
 
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
 
TDD - Desenvolvimento Dirigido a Testes
TDD - Desenvolvimento Dirigido a TestesTDD - Desenvolvimento Dirigido a Testes
TDD - Desenvolvimento Dirigido a TestesNetto Cavalcante
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atechcesarcneto
 
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
 
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
 
Desenvolvimento Orientado a Testes
Desenvolvimento Orientado a TestesDesenvolvimento Orientado a Testes
Desenvolvimento Orientado a TestesAndre Carlucci
 
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
 
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
 

Similar to TDD com Código Legado (20)

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...
 
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
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis Uberlândia
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Codigo limpo.pptx
Codigo limpo.pptxCodigo limpo.pptx
Codigo limpo.pptx
 
Projeto de Sistemas - Aula002
Projeto de Sistemas - Aula002Projeto de Sistemas - Aula002
Projeto de Sistemas - Aula002
 
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...
 
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
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Introdução ao XP
Introdução ao XPIntrodução ao XP
Introdução ao XP
 
RealDay: Introduction to TDD
RealDay: Introduction to TDDRealDay: Introduction to TDD
RealDay: Introduction to TDD
 
TDD - Desenvolvimento Dirigido a Testes
TDD - Desenvolvimento Dirigido a TestesTDD - Desenvolvimento Dirigido a Testes
TDD - Desenvolvimento Dirigido a Testes
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
 
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
 
Teste automatizados e tdd
Teste automatizados e tddTeste automatizados e tdd
Teste automatizados e tdd
 
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
 
Desenvolvimento Orientado a Testes
Desenvolvimento Orientado a TestesDesenvolvimento Orientado a Testes
Desenvolvimento Orientado a Testes
 
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
 
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...
 

Recently uploaded

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 

Recently uploaded (9)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 

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? • Definir um plano de ação • Code Smell e Anti Patterns • Refatorar 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 ele ainda funciona para as necessidades de alguém, embora tecnologia ou metodologia mais eficiente já esteja disponível. • Falta de manutenção regular. • Falta de testes. • Sistema "preso" a uma plataforma mais antiga. • Dependencia 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 • 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 ousados e desnecessários. • Código, variáveis e constantes não usadas. • Código duplicado e Código comentado. • Formulários e DataModulos 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 nas “uses”. • Mover para uses da 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 • Menu 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 teste de falha por vez.
  • 20. Exemplos • Criando Projeto de Testes. • Organizando código que utiliza componentes de terceiros. • Extraindo código de Formulários e DataModulos. • Criando um Adapter. • Testando código de banco de dados • Extrair SQL • DataModules • 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 • Extrair SQL dos fontes • Extrair regra de negócio de formulários e data modules
  • 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