SlideShare uma empresa Scribd logo
Por: Ismael Soares
Objetivo Problema e Solução (Abordagem Tradicional e Ágil)‏ Refactoring e Database Refactoring Categorias de Refactoring Database Dificuldades Processos de Refactoring Database Exemplos práticos Conclusão Agenda
Apresentar os conceitos de refatoração em banco de dados, o chamado  Database Refactoring  e apresentar alguns exemplos práticos. Objetivo
Após colocar em produção, como fazer os banco de dados evoluírem facilmente de acordo com os novos requisitos? Pergunta
Ou de forma mais específica, quem consegue mudar o nome de uma coluna do BD hoje e implantar essa alteração em produção amanhã? Pergunta
Abordagem Tradicional Análise... Análise... Análise........... Análise Schema da base está disponível mais cedo e é isso que os desenvolvedores irão utilizar. E se houver mudanças???  Problema e Solução
Problema e Solução Modelo Cascata (Waterfall)‏ Desenvolvimento (Vários Meses ou Anos)‏ Testes  (Dias)‏ Entrega Planejamento, Análise, Modelagem (Vários Meses)‏ Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Precisa Alterar o  Modelo e agora?
Abordagem Ágil Processo Iterativo e Incremental Feedback Rápido Constante Inspeção e Adaptação Agile DBA Problema e Solução
Problema e Solução Idéia Abrangente Solução Iterativa e Incremental (Espiral) Iteração 01 (2 a 4 semanas)‏ (Planejamento, Modelagem, Desenvolvimento, Testes)‏ Tabela Tabela Tabela Tabela Software Iteração 02 (2 a 4 semanas)‏ (Planejamento, Modelagem, Desenvolvimento, Testes)‏ Software Tabela Tabela Tabela Tabela Iteração 03 (2 a 4 semanas)‏ (Planejamento, Modelagem, Desenvolvimento, Testes)‏ Tabela Tabela Tabela Tabela Software Iteração 04 (2 a 4 semanas)‏ (Planejamento, Modelagem, Desenvolvimento, Testes)‏ Software Tabela Tabela Tabela Tabela
“ Processo de alteração de um sistema de software de modo que o comportamento externo do código não mude, mas que sua estrutura interna seja melhorada.” “ É uma forma disciplinada de aperfeiçoar código que minimiza a introdução de falhas.” (Martin Fowler 2004)‏ O que é Refactoring?
“ É quando uma simples mudança no esquema de uma base de dados melhora a sua concepção (projeto), embora mantendo simultaneamente a sua semântica.” (Scott W. Ambler 2006)‏ O que é Data Base Refactoring?
“ Mudança disciplinada na estrutura de uma base de dados que não modifica sua semântica, porém melhora seu projeto e minimiza a introdução de dados inconsistentes.” (Fabrízio de Royes Mello 2009)‏ O que é Data Base Refactoring?
Mudanças nas estruturas de tabelas e/ou view’s. Mudar uma coluna de tabela. Dividir uma coluna em duas, etc. Categorias de Refactoring Databases
Melhoria na qualidade da informação. Fazendo uma coluna não-nula para garantir que ela  sempre conterá um valor ou a aplicação de um formato  comum para uma coluna para garantir a consistência. Categorias de Refactoring Databases
Melhorias para garantir a integridade dos dados. Adicionar uma trigger para exclusão em cascata. Adicionar um chave estrangeira, etc. Categorias de Refactoring Databases
Uma mudança que melhora a forma global em que programas  externos interagem com um banco de dados. Substituição de uma operação de Java existentes em uma  biblioteca de código compartilhado por um procedimento  armazenado no banco de dados. Tê-lo como um procedimento armazenado torna disponível para aplicações não Java. Categorias de Refactoring Databases
Uma mudança para um método (um procedimento armazenado, função armazenado ou gatilho) que melhora a sua qualidade. Renomeando um procedimento armazenado para tornar mais fácil de entender. Categorias de Refactoring Databases
Uma mudança no seu esquema de banco de dados que muda a sua semântica. Adicionar um coluna numa tabela existente. Categorias de Refactoring Databases
Database Refactoring  é mais difícil que  Code Refactorings  porque além de manter o comportamento também deve manter as informações. Dificuldades
Dificuldades
Scott Ambler (Julho 2006): 95,7% consideram dados como bens  corporativos. 40,3% possuem bateria de testes para BD 61,9% possuem problemas com dados em produção. 18% sem estratégia para corrigi-los. 33% a estratégia é não deixar ficar pior Dificuldades
Dificuldades
As mais conhecidas são: DBUnit DBM Data Generator NDbUni Ounit Quest Unit Tester TSQLUnit Dificuldades
Single-Database Application (Modelo Simples) BD Sistema Dificuldades
Multi-Application Database (Modelo complexo) Quanto maior o acoplamento mais dificil é a refatoração! Dificuldades BD Sistema A Sistema desconhecido Outros BD Testes de Integração Hibernate Interfaces Externas
Encapsulamento do acesso ao banco de dados. Como resolver o acoplamento?
Existe necessidade de refatorar? Escolher o refactoring mais apropriado Depreciar o esquema original Testar antes, durante e depois Modificar o esquema Migrar os dados Modificar código externo Executar testes de regressão Versionar seu trabalho Anunciar o refactoring Processos de Refactoring Databases
SandBox (caixa de  areia)  é um ambiente de teste que isola as mudanças de código não testado no contexto do desenvolvimento de software, incluindo o desenvolvimento Web e controle de revisão. É uma espécie de branch específico para testes. Cada desenvolvedor  que irá trabalhar no projeto deve ter um sandBox . Cada sandBox possui uma cópia do BD inteiro. SandBox
Devemos levar em conta três considerações: A  refatoração é essencial? O dba ou arquiteto deve ter uma visão corporativa e técnica para dizer qual o melhor  esquema para atender as necessidades da empresa. É necessário fazer a mudança agora? Deve-se avaliar se este é o momento certo para fazer a refatoração.  É preciso medir o “ tamanho do  gigante”. Além disso, devemos avaliar qual é o risco que corremos se precisarmos voltar para o  esquema  anterior depois de alguns dias.  Valerá apenas o esforço? Deve-se avaliar os valores e impactos que a refatoração trará. Os profissionais estão  qualificados? Qual ou quanto é o custo benefício? Antes de começar...
Exemplo de Database Refactoring
Exemplo de Database Refactoring
“ Mal cheiros” são sintomas para refatorar: –   Colunas multi-uso –  Tabelas multi-uso –  Dados redundantes –  Tabelas com muitas colunas –  Tabelas com muitas linhas –  Colunas “espertas” –  Resistência a mudanças O que refatorar?
Ao fazer refactoring é de importante que a semântica seja mantida, ou seja, o esquema deve ser melhorada mas para o usuário, isto precisa ser transparente. Exemplo: Imagine que em uma tabela de cliente o número do telefone seja um varchar no seguinte formato:  (416) 555-1234 , e será alterado para numérico:  4165551234. Mantendo a semântica
O que testar? Testar o esquema Testar a forma que a aplicação utiliza o esquema do banco Validar a migração dos dados Testar o código de programas externos Test-Driven Development (TDD)
Test-Driven Development (TDD)
Testes  do esquema Procedures e triggers:   podem ser testados com o código que será usado após as alterações. Integridade referencial:  também precisa ser testado, principalmente quando faz exclusão em cascata.  Definição de views:  views costumam implementar lógica de negócio interessante. Será que a filtragem lógica está selecionando os dados corretamente? Você recebe de volta o número correto de linhas? Você está retornando as colunas corretas?  Valores default:  colunas muitas vezes têm valores padrão definidos para eles. Os valores padrões estão sendo utilizados de fato? (Alguém poderia ter removido acidentalmente esta parte da definição da tabela.) Invariantes de dados:   colunas têm freqüentemente invariantes, implementada sob a forma de restrições, definido por eles. Por exemplo, uma coluna de número pode ser limitada a que contém os valores de 1 a 7. Estes invariantes devem ser testados. Test-Driven Development (TDD)
Testes de migração dos dados Todos os registros foram migrados? Houve perda de informações? Nas refatorações de formatos, os registros continuam  com a mesma informação? Exemplo : na coluna antiga o telefone estava formatada como:  114104-3333, depois da refactoring deve ficar 1141043333. As referencias de integridade continuam apontando para o registro correto? Exemplo: O número  de telefone 555-1234 referencia o cliente Fulano da Silva, na refactoring foi adicionado um ID para este telefone 1234567. Test-Driven Development (TDD)
Testes do código de programas externos Quais são os programas que serão afetados com a refactoring do seu banco? Todos programas externos devem possuir um suíte de testes de regressão, para garantir que o esquema final poderá aplicado nos mesmos. Os impactos só poderão ser avaliados com a quebra dos testes, dependo da complexidade  e arquitetura (tamanho dos sistemas). Test-Driven Development (TDD)
Modificando o esquema
Modificando o esquema
Existem algumas vantagens em trabalhar com pequenos scripts: Controle:  não existe mágica! Muitos scripts serão criados manualmente, isto requer muito controle. Simplicidade:  por ser focado, os scripts de alterações são mais fáceis de manter  do que scripts que compreende várias etapas. Exatidão:  possibilita aplicar cada refatoração, na devida ordem, ao seu esquema de banco de dados de modo a evoluir-lo de uma forma definida. Refactorings pode basear-se uns aos outros. Versionamento:  cada desenvolvedor pode trabalhar no seu próprio sandbox , alterando de forma incremental os scripts.  Modificando o esquema
Migração dos dados
O controle dos artefatos do banco de dados devem ser tratados da mesma forma que os do código fonte. “ Release Notes” - associar o número dos scripts da refatoração com a alteração realizada. Artefatos de controle de versão incluem o seguinte:   Todos os scripts criados Dados usados nos testes e geração de códigos Casos de testes Documentações  Modelos Controle de versionamento
O banco de dados é um recurso compartilhado, portanto, todos os envolvidos precisam ser informados. A refatoração pode ser informada através de um simples email ou listas com as alterações na ordem. Devem ser informados os prazos para se refatorar os códigos dos sistemas externos. Não publique as alterações prematuramente, aguarde até o fluxo de alterações tenha acabado. Anunciando o Refactoring
1. Fazer um backup do BD 2. Executar os testes de regressão Antes, é preciso garantir que tudo está funcionando Se falhar, pode ser melhor abortar 3. Implantar as alterações nas aplicações 4. Implantar as alterações no BD 5. Executar os testes de regressão 6. Desfazer, caso necessário Falhas sérias nos testes de regressão Utilize os backups do passo 1 Desfaça as alterações nas aplicações 7. Anunciar a implantação •  A refatoração não está completa até a remoção do esquema depreciado Processos de implantação
Refactoring Databases é uma técnica de implementação de banco de dados. Facilita a adição de novas funcionalidades. Possibilita uma melhoria contínua. Torna a base de dados mais fáceis de entender e usar. Melhora a produtividade global do desenvolvimento. Técnica moderna que acompanha  metodologias de desenvolvimento ágil. Conclusão
Ambler, Scott W., Pramod J. Sadalage (2006). Refactoring Databases: Evolutionary Databases Design. New York: Addison Wesley Professional.  http://www.ambysoft.com/books/refactoringDatabases.html   Ambler, Scott W., Pramod J. Sadalage (2006). Refactoring Databases: The Process. http://www.simple-talk.com/sql/database-administration/refactoring-databases-the-process/   Ambler, Scott W. (2007). Presentation Databases Refactoring. http://www.infoq.com/presentations/ambler-database-refactoring   Ambler, S. W. (2003). Agile Databases Techniques: Effective Strategies for the Agile Software Developer. New York: John Wiley & Sons.  www.ambysoft.com/agileDatabasesTechniques.html Sato, Danilo e Ferreira, João Eduardo (2007).  Banco de Dados Ágeis e Refatoração .  Curso de Verão 2007 - IME/USP .  http://ccsl.ime.usp.br/agilcoop/files/4-BDs-Ageis.pdf Bibliografia
Perguntas
Agradecimentos

Mais conteúdo relacionado

PDF
Aula04 3
PPT
Banco de Dados Ágeis e Refatoração
PDF
Sample Master Laboratory Information Management System Portuguese Edition
PPTX
ODI Series - Treinamento
ODP
Database refactoring postgresql_consegi2010
PDF
Gerência de configuração ágil
PDF
Introdução à Qualidade e Testes Ágeis de Software
PDF
Geb - Acceptance Test
Aula04 3
Banco de Dados Ágeis e Refatoração
Sample Master Laboratory Information Management System Portuguese Edition
ODI Series - Treinamento
Database refactoring postgresql_consegi2010
Gerência de configuração ágil
Introdução à Qualidade e Testes Ágeis de Software
Geb - Acceptance Test

Destaque (20)

PPTX
Java one
PPTX
Refactoring Data base parte 2
PDF
Introdução ao EasyTest
KEY
SPED no Sistema Bluesoft
PDF
Svn e processos de controle de código
PDF
Habilidade sensorial em Equipes Auto-Organizáveis
PDF
Product Owner na prática
PDF
Como você testa seu software
PDF
Inove suas retrospectivas
PPTX
Java one
KEY
O que vi na QCon 2012 São Paulo
PDF
Emoções do Lider
PDF
Novidades Groovy 2.0
PDF
Conceitos Historias do Usuario
PDF
Equipes auto organizaveis
PDF
Padrões de deploy para DevOps e Entrega Contínua
PDF
Refactoring Databases - parte 1
PDF
Clareza nos objetivos
PDF
Quando a tecnologia se torna um problema
PDF
Os testes ainda vao salvar sua pele
Java one
Refactoring Data base parte 2
Introdução ao EasyTest
SPED no Sistema Bluesoft
Svn e processos de controle de código
Habilidade sensorial em Equipes Auto-Organizáveis
Product Owner na prática
Como você testa seu software
Inove suas retrospectivas
Java one
O que vi na QCon 2012 São Paulo
Emoções do Lider
Novidades Groovy 2.0
Conceitos Historias do Usuario
Equipes auto organizaveis
Padrões de deploy para DevOps e Entrega Contínua
Refactoring Databases - parte 1
Clareza nos objetivos
Quando a tecnologia se torna um problema
Os testes ainda vao salvar sua pele
Anúncio

Semelhante a Refactoring Databases (20)

ODP
Refatoração Banco de Dados (Agileweekend2009)
ODP
Database Refactoring com PostgreSQL PGDay RS 2009
PDF
Tutorial Database Refactoring
ODP
Database Refactoring PostgreSQL Urcamp Alegrete 2009
PDF
Ténicas de Database Refactoring para ambientes 24x7
PDF
Refactoring Databases - Estrategias
PDF
PgDay Brasília - boas práticas na otimização de projetos de banco de dados
PPT
Refactory Worshop
PPT
Alterações na Base de Dados
PDF
Meu DBA não é ágil, e agora?
PDF
Agile DBA. Meu DBA não é ágil, e agora?
PDF
[MTC 2021] Conversa sobre shift left - Douglas Cardoso
PDF
sfCon 2012 - Conceitos de Engenharia Reversa aplicados na migração de sistema...
PDF
Bad Smells em Bancos de Dados
PDF
TDD com Código Legado - "Atualizado"
DOCX
C # banco de dados
PDF
Database Refactoring- Manoel Pimentel
PDF
[Agile brazil2014] Bad Smells em Bancos de Dados
PPT
Interoperabilidade entre bancos de dados
PPT
Interoperabilidade entre bancos de dados
Refatoração Banco de Dados (Agileweekend2009)
Database Refactoring com PostgreSQL PGDay RS 2009
Tutorial Database Refactoring
Database Refactoring PostgreSQL Urcamp Alegrete 2009
Ténicas de Database Refactoring para ambientes 24x7
Refactoring Databases - Estrategias
PgDay Brasília - boas práticas na otimização de projetos de banco de dados
Refactory Worshop
Alterações na Base de Dados
Meu DBA não é ágil, e agora?
Agile DBA. Meu DBA não é ágil, e agora?
[MTC 2021] Conversa sobre shift left - Douglas Cardoso
sfCon 2012 - Conceitos de Engenharia Reversa aplicados na migração de sistema...
Bad Smells em Bancos de Dados
TDD com Código Legado - "Atualizado"
C # banco de dados
Database Refactoring- Manoel Pimentel
[Agile brazil2014] Bad Smells em Bancos de Dados
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
Anúncio

Mais de Ismael (20)

PDF
TDC 2020 - Trilha de Management 3.0 e Gestão Ágil
PDF
Introducao ao Pensamento Sistemico
PDF
Testes de unidade alem do basico
PDF
Bluesoft Culture
PDF
Como dar e receber feedbacks
PDF
Eficiencia de fluxo
PDF
Como você testa seu software TDC 2017
PDF
Como ter Entregas Frequentes
PDF
JUnit 5 vs JUnit 4
PDF
Conceitos por trás do Ágil
PDF
Boas Praticas de Testes, Bad Smell e Outros Macetes
PDF
8 passos para mudança de John Kotter
PDF
Curva da Mudança Kubler-Ross
PDF
DevCamp 2016
PDF
7 Caracteristicas de um bom Lider Agil
PDF
Law of demeter
PDF
Junit Lambda
PDF
Feedback dos Testes
PDF
Truques da mente
PDF
Just groovy
TDC 2020 - Trilha de Management 3.0 e Gestão Ágil
Introducao ao Pensamento Sistemico
Testes de unidade alem do basico
Bluesoft Culture
Como dar e receber feedbacks
Eficiencia de fluxo
Como você testa seu software TDC 2017
Como ter Entregas Frequentes
JUnit 5 vs JUnit 4
Conceitos por trás do Ágil
Boas Praticas de Testes, Bad Smell e Outros Macetes
8 passos para mudança de John Kotter
Curva da Mudança Kubler-Ross
DevCamp 2016
7 Caracteristicas de um bom Lider Agil
Law of demeter
Junit Lambda
Feedback dos Testes
Truques da mente
Just groovy

Último (11)

PPTX
Utilizando code blockes por andre backes
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Arquitetura de computadores - Memórias Secundárias
PPTX
Mecânico de Manutenção de Equipamentos.pptx
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Eng. Software - pontos essenciais para o início
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
Utilizando code blockes por andre backes
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Manejo integrado de pragas na cultura do algodão
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Arquitetura de computadores - Memórias Secundárias
Mecânico de Manutenção de Equipamentos.pptx
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Eng. Software - pontos essenciais para o início
Viasol Energia Solar -Soluções para geração e economia de energia

Refactoring Databases

  • 2. Objetivo Problema e Solução (Abordagem Tradicional e Ágil)‏ Refactoring e Database Refactoring Categorias de Refactoring Database Dificuldades Processos de Refactoring Database Exemplos práticos Conclusão Agenda
  • 3. Apresentar os conceitos de refatoração em banco de dados, o chamado Database Refactoring e apresentar alguns exemplos práticos. Objetivo
  • 4. Após colocar em produção, como fazer os banco de dados evoluírem facilmente de acordo com os novos requisitos? Pergunta
  • 5. Ou de forma mais específica, quem consegue mudar o nome de uma coluna do BD hoje e implantar essa alteração em produção amanhã? Pergunta
  • 6. Abordagem Tradicional Análise... Análise... Análise........... Análise Schema da base está disponível mais cedo e é isso que os desenvolvedores irão utilizar. E se houver mudanças??? Problema e Solução
  • 7. Problema e Solução Modelo Cascata (Waterfall)‏ Desenvolvimento (Vários Meses ou Anos)‏ Testes (Dias)‏ Entrega Planejamento, Análise, Modelagem (Vários Meses)‏ Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Precisa Alterar o Modelo e agora?
  • 8. Abordagem Ágil Processo Iterativo e Incremental Feedback Rápido Constante Inspeção e Adaptação Agile DBA Problema e Solução
  • 9. Problema e Solução Idéia Abrangente Solução Iterativa e Incremental (Espiral) Iteração 01 (2 a 4 semanas)‏ (Planejamento, Modelagem, Desenvolvimento, Testes)‏ Tabela Tabela Tabela Tabela Software Iteração 02 (2 a 4 semanas)‏ (Planejamento, Modelagem, Desenvolvimento, Testes)‏ Software Tabela Tabela Tabela Tabela Iteração 03 (2 a 4 semanas)‏ (Planejamento, Modelagem, Desenvolvimento, Testes)‏ Tabela Tabela Tabela Tabela Software Iteração 04 (2 a 4 semanas)‏ (Planejamento, Modelagem, Desenvolvimento, Testes)‏ Software Tabela Tabela Tabela Tabela
  • 10. “ Processo de alteração de um sistema de software de modo que o comportamento externo do código não mude, mas que sua estrutura interna seja melhorada.” “ É uma forma disciplinada de aperfeiçoar código que minimiza a introdução de falhas.” (Martin Fowler 2004)‏ O que é Refactoring?
  • 11. “ É quando uma simples mudança no esquema de uma base de dados melhora a sua concepção (projeto), embora mantendo simultaneamente a sua semântica.” (Scott W. Ambler 2006)‏ O que é Data Base Refactoring?
  • 12. “ Mudança disciplinada na estrutura de uma base de dados que não modifica sua semântica, porém melhora seu projeto e minimiza a introdução de dados inconsistentes.” (Fabrízio de Royes Mello 2009)‏ O que é Data Base Refactoring?
  • 13. Mudanças nas estruturas de tabelas e/ou view’s. Mudar uma coluna de tabela. Dividir uma coluna em duas, etc. Categorias de Refactoring Databases
  • 14. Melhoria na qualidade da informação. Fazendo uma coluna não-nula para garantir que ela sempre conterá um valor ou a aplicação de um formato comum para uma coluna para garantir a consistência. Categorias de Refactoring Databases
  • 15. Melhorias para garantir a integridade dos dados. Adicionar uma trigger para exclusão em cascata. Adicionar um chave estrangeira, etc. Categorias de Refactoring Databases
  • 16. Uma mudança que melhora a forma global em que programas externos interagem com um banco de dados. Substituição de uma operação de Java existentes em uma biblioteca de código compartilhado por um procedimento armazenado no banco de dados. Tê-lo como um procedimento armazenado torna disponível para aplicações não Java. Categorias de Refactoring Databases
  • 17. Uma mudança para um método (um procedimento armazenado, função armazenado ou gatilho) que melhora a sua qualidade. Renomeando um procedimento armazenado para tornar mais fácil de entender. Categorias de Refactoring Databases
  • 18. Uma mudança no seu esquema de banco de dados que muda a sua semântica. Adicionar um coluna numa tabela existente. Categorias de Refactoring Databases
  • 19. Database Refactoring é mais difícil que Code Refactorings porque além de manter o comportamento também deve manter as informações. Dificuldades
  • 21. Scott Ambler (Julho 2006): 95,7% consideram dados como bens corporativos. 40,3% possuem bateria de testes para BD 61,9% possuem problemas com dados em produção. 18% sem estratégia para corrigi-los. 33% a estratégia é não deixar ficar pior Dificuldades
  • 23. As mais conhecidas são: DBUnit DBM Data Generator NDbUni Ounit Quest Unit Tester TSQLUnit Dificuldades
  • 24. Single-Database Application (Modelo Simples) BD Sistema Dificuldades
  • 25. Multi-Application Database (Modelo complexo) Quanto maior o acoplamento mais dificil é a refatoração! Dificuldades BD Sistema A Sistema desconhecido Outros BD Testes de Integração Hibernate Interfaces Externas
  • 26. Encapsulamento do acesso ao banco de dados. Como resolver o acoplamento?
  • 27. Existe necessidade de refatorar? Escolher o refactoring mais apropriado Depreciar o esquema original Testar antes, durante e depois Modificar o esquema Migrar os dados Modificar código externo Executar testes de regressão Versionar seu trabalho Anunciar o refactoring Processos de Refactoring Databases
  • 28. SandBox (caixa de  areia)  é um ambiente de teste que isola as mudanças de código não testado no contexto do desenvolvimento de software, incluindo o desenvolvimento Web e controle de revisão. É uma espécie de branch específico para testes. Cada desenvolvedor que irá trabalhar no projeto deve ter um sandBox . Cada sandBox possui uma cópia do BD inteiro. SandBox
  • 29. Devemos levar em conta três considerações: A refatoração é essencial? O dba ou arquiteto deve ter uma visão corporativa e técnica para dizer qual o melhor esquema para atender as necessidades da empresa. É necessário fazer a mudança agora? Deve-se avaliar se este é o momento certo para fazer a refatoração. É preciso medir o “ tamanho do gigante”. Além disso, devemos avaliar qual é o risco que corremos se precisarmos voltar para o esquema anterior depois de alguns dias. Valerá apenas o esforço? Deve-se avaliar os valores e impactos que a refatoração trará. Os profissionais estão qualificados? Qual ou quanto é o custo benefício? Antes de começar...
  • 30. Exemplo de Database Refactoring
  • 31. Exemplo de Database Refactoring
  • 32. “ Mal cheiros” são sintomas para refatorar: – Colunas multi-uso – Tabelas multi-uso – Dados redundantes – Tabelas com muitas colunas – Tabelas com muitas linhas – Colunas “espertas” – Resistência a mudanças O que refatorar?
  • 33. Ao fazer refactoring é de importante que a semântica seja mantida, ou seja, o esquema deve ser melhorada mas para o usuário, isto precisa ser transparente. Exemplo: Imagine que em uma tabela de cliente o número do telefone seja um varchar no seguinte formato: (416) 555-1234 , e será alterado para numérico: 4165551234. Mantendo a semântica
  • 34. O que testar? Testar o esquema Testar a forma que a aplicação utiliza o esquema do banco Validar a migração dos dados Testar o código de programas externos Test-Driven Development (TDD)
  • 36. Testes do esquema Procedures e triggers: podem ser testados com o código que será usado após as alterações. Integridade referencial: também precisa ser testado, principalmente quando faz exclusão em cascata. Definição de views: views costumam implementar lógica de negócio interessante. Será que a filtragem lógica está selecionando os dados corretamente? Você recebe de volta o número correto de linhas? Você está retornando as colunas corretas? Valores default: colunas muitas vezes têm valores padrão definidos para eles. Os valores padrões estão sendo utilizados de fato? (Alguém poderia ter removido acidentalmente esta parte da definição da tabela.) Invariantes de dados: colunas têm freqüentemente invariantes, implementada sob a forma de restrições, definido por eles. Por exemplo, uma coluna de número pode ser limitada a que contém os valores de 1 a 7. Estes invariantes devem ser testados. Test-Driven Development (TDD)
  • 37. Testes de migração dos dados Todos os registros foram migrados? Houve perda de informações? Nas refatorações de formatos, os registros continuam com a mesma informação? Exemplo : na coluna antiga o telefone estava formatada como: 114104-3333, depois da refactoring deve ficar 1141043333. As referencias de integridade continuam apontando para o registro correto? Exemplo: O número de telefone 555-1234 referencia o cliente Fulano da Silva, na refactoring foi adicionado um ID para este telefone 1234567. Test-Driven Development (TDD)
  • 38. Testes do código de programas externos Quais são os programas que serão afetados com a refactoring do seu banco? Todos programas externos devem possuir um suíte de testes de regressão, para garantir que o esquema final poderá aplicado nos mesmos. Os impactos só poderão ser avaliados com a quebra dos testes, dependo da complexidade e arquitetura (tamanho dos sistemas). Test-Driven Development (TDD)
  • 41. Existem algumas vantagens em trabalhar com pequenos scripts: Controle: não existe mágica! Muitos scripts serão criados manualmente, isto requer muito controle. Simplicidade: por ser focado, os scripts de alterações são mais fáceis de manter do que scripts que compreende várias etapas. Exatidão: possibilita aplicar cada refatoração, na devida ordem, ao seu esquema de banco de dados de modo a evoluir-lo de uma forma definida. Refactorings pode basear-se uns aos outros. Versionamento: cada desenvolvedor pode trabalhar no seu próprio sandbox , alterando de forma incremental os scripts. Modificando o esquema
  • 43. O controle dos artefatos do banco de dados devem ser tratados da mesma forma que os do código fonte. “ Release Notes” - associar o número dos scripts da refatoração com a alteração realizada. Artefatos de controle de versão incluem o seguinte: Todos os scripts criados Dados usados nos testes e geração de códigos Casos de testes Documentações Modelos Controle de versionamento
  • 44. O banco de dados é um recurso compartilhado, portanto, todos os envolvidos precisam ser informados. A refatoração pode ser informada através de um simples email ou listas com as alterações na ordem. Devem ser informados os prazos para se refatorar os códigos dos sistemas externos. Não publique as alterações prematuramente, aguarde até o fluxo de alterações tenha acabado. Anunciando o Refactoring
  • 45. 1. Fazer um backup do BD 2. Executar os testes de regressão Antes, é preciso garantir que tudo está funcionando Se falhar, pode ser melhor abortar 3. Implantar as alterações nas aplicações 4. Implantar as alterações no BD 5. Executar os testes de regressão 6. Desfazer, caso necessário Falhas sérias nos testes de regressão Utilize os backups do passo 1 Desfaça as alterações nas aplicações 7. Anunciar a implantação • A refatoração não está completa até a remoção do esquema depreciado Processos de implantação
  • 46. Refactoring Databases é uma técnica de implementação de banco de dados. Facilita a adição de novas funcionalidades. Possibilita uma melhoria contínua. Torna a base de dados mais fáceis de entender e usar. Melhora a produtividade global do desenvolvimento. Técnica moderna que acompanha metodologias de desenvolvimento ágil. Conclusão
  • 47. Ambler, Scott W., Pramod J. Sadalage (2006). Refactoring Databases: Evolutionary Databases Design. New York: Addison Wesley Professional. http://www.ambysoft.com/books/refactoringDatabases.html   Ambler, Scott W., Pramod J. Sadalage (2006). Refactoring Databases: The Process. http://www.simple-talk.com/sql/database-administration/refactoring-databases-the-process/   Ambler, Scott W. (2007). Presentation Databases Refactoring. http://www.infoq.com/presentations/ambler-database-refactoring   Ambler, S. W. (2003). Agile Databases Techniques: Effective Strategies for the Agile Software Developer. New York: John Wiley & Sons. www.ambysoft.com/agileDatabasesTechniques.html Sato, Danilo e Ferreira, João Eduardo (2007). Banco de Dados Ágeis e Refatoração . Curso de Verão 2007 - IME/USP . http://ccsl.ime.usp.br/agilcoop/files/4-BDs-Ageis.pdf Bibliografia