Banco de Dados  Ágeis e Refatoração SC1: Métodos Ágeis de Desenvolvimento de Software  www.agilcoop.org.br Danilo Sato & J...
Pergunta: <ul><li>Como fazer com que os bancos de dados evoluam de acordo com os novos requisitos, após colocá-los em prod...
Pergunta: <ul><li>Ou de forma mais específica, quem consegue mudar o nome de uma coluna do BD hoje e implantar essa altera...
Pergunta: <ul><li>Qual é o principal o problema para o desenvolvimento de BD Ágeis ? </li></ul>
Primeiro <ul><li>“ A HERANÇA MALDITA” </li></ul>
“ Problema”:Persistência de objetos <ul><li>Em linguagens de programação OO: </li></ul><ul><ul><li>Objeto  é uma instância...
Repositórios para Persistência <ul><li>A persistência precisa armazenar o estado dos objetos em algum repositório para fut...
Técnicas de Persistência <ul><li>A maioria dos projetos de desenvolvimento de software utiliza: </li></ul><ul><ul><li>a li...
Técnicas de Persistência <ul><li>Para superar este problema é importante conhecer: </li></ul><ul><ul><li>O processo de map...
Técnicas de Persistência - Força Bruta <ul><li>Força Bruta (mais comum): </li></ul><ul><ul><li>o código SQL é embutido no ...
Técnicas de Persistência - Força Bruta
Técnicas de Persistência – Classes de Dados <ul><li>Classes de Dados: </li></ul><ul><ul><li>SQL das classes de domínio são...
Técnicas de Persistência – Classes de Dados
Técnicas de Persistência – Framework <ul><li>Camada de Persistência Robusta (framework): </li></ul><ul><ul><li>O framework...
Técnicas de Persistência – Framework
Características da camada de Persistência <ul><li>As camadas de persistência devem permitir que desenvolvedores de aplicaç...
Situação Atual <ul><li>Scott Ambler (Julho 2006): </li></ul><ul><ul><li>95.7% consideram dados como bens corporativos ( as...
Disparidades <ul><li>Programadores vs. DBAs ? </li></ul><ul><li>Metodologias: </li></ul><ul><ul><li>Quando projetar? </li>...
Modelagem Evolutiva <ul><li>Modelo evolui com o conhecimento </li></ul><ul><li>N ão precisa acertar (e congelar) da primei...
Modelagem Evolutiva <ul><li>Ruby on Rails (active record) </li></ul><ul><ul><li>Scripts de migraç ão </li></ul></ul><ul><u...
Refatoraç ão de BD <ul><li>“ Pequena alteraç ão no BD para melhorar o design, preservando o comportamento e a semântica do...
Refatoraç ão de BD <ul><li>Dificuldade varia com acoplamento: </li></ul><ul><ul><li>Diversas aplicaç ões </li></ul></ul><u...
Refatoraç ão de BD <ul><li>Uma aplicaç ão acessando o BD </li></ul>
Refatoraç ão de BD <ul><li>V árias aplicações acessando o BD </li></ul>
Refatoraç ão de BD <ul><li>Uma refatoraç ão de BD pode exigir um período de transição: </li></ul>
Refatoraç ão de BD <ul><li>Exemplo: Renomear Coluna </li></ul>
Refatoração de BD <ul><li>O que N ÃO é uma refatoração: </li></ul><ul><ul><li>Alterar estrutura para estender o modelo </l...
Refatoraç ão de BD <ul><li>Categorias de Refatoraç ão: </li></ul><ul><ul><li>Estruturais </li></ul></ul><ul><ul><li>Qualid...
Refatoraç ão de BD <ul><li>“ Mal cheiros” s ão sintomas para refatorar </li></ul><ul><ul><li>Colunas multi-uso </li></ul><...
Processo de Refatoraç ão de BD <ul><li>Verificar se a refatoraç ão é apropriada </li></ul><ul><ul><li>A refatoração faz se...
Processo de Refatoraç ão de BD <ul><li>Testar antes, durante e depois </li></ul><ul><ul><li>Esquema do BD </li></ul></ul><...
Processo de Refatoraç ão de BD <ul><li>Executar os testes de regress ão </li></ul><ul><li>Armazenar as alteraç ões no repo...
Processo de Implantaç ão <ul><li>Fazer um backup do BD </li></ul><ul><li>Executar os testes de regress ão </li></ul><ul><u...
Processo de Implantaç ão <ul><li>Desfazer, caso necess ário </li></ul><ul><ul><li>Falhas sérias nos testes de regressão </...
Refatoraç ão Estrutural <ul><li>Cuidados: </li></ul><ul><ul><li>Evite ciclos em triggers </li></ul></ul><ul><ul><li>Trigge...
Exemplo: Mover Coluna
Refatoraç ão de Integridade Referencial <ul><li>Exemplo: Introduzir Trigger para Hist órico </li></ul>
Transformaç ão <ul><li>Exemplo: Introduzir Nova Coluna </li></ul>
Conclus ões <ul><li>É preciso quebrar barreiras culturais. </li></ul><ul><li>Aproximar programadores e DBAs. </li></ul><ul...
Epitáfio <ul><li>O sucesso de BD Ágéis está fortemente ligado a facilidade de evolução do modelo de dados. </li></ul><ul><...
Refer ências <ul><li>Livros: </li></ul><ul><ul><li>Scott Ambler e Pramod Sadalage, “Refactoring Databases: Evolutionary Da...
Refer ências <ul><li>Online: </li></ul><ul><li>http:// www.agiledata.org/essays/databaseRefactoring.html http:// www.agile...
Upcoming SlideShare
Loading in...5
×

Banco de Dados Ágeis e Refatoração

1,298

Published on

Published in: Technology
1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total Views
1,298
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
45
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Banco de Dados Ágeis e Refatoração

  1. 1. Banco de Dados Ágeis e Refatoração SC1: Métodos Ágeis de Desenvolvimento de Software www.agilcoop.org.br Danilo Sato & Jo ão Eduardo Ferreira IV Experimental Software Engineering Latin America Workshop
  2. 2. Pergunta: <ul><li>Como fazer com que os bancos de dados evoluam de acordo com os novos requisitos, após colocá-los em produção ? </li></ul>
  3. 3. Pergunta: <ul><li>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ã? </li></ul>
  4. 4. Pergunta: <ul><li>Qual é o principal o problema para o desenvolvimento de BD Ágeis ? </li></ul>
  5. 5. Primeiro <ul><li>“ A HERANÇA MALDITA” </li></ul>
  6. 6. “ Problema”:Persistência de objetos <ul><li>Em linguagens de programação OO: </li></ul><ul><ul><li>Objeto é uma instância de uma classe. </li></ul></ul><ul><ul><ul><li>Objetos têm estados (os valores de seus atributos). </li></ul></ul></ul><ul><ul><ul><li>Objetos têm comportamentos (seus métodos). </li></ul></ul></ul><ul><ul><li>Modelo de objetos é uma coleção de todas as definições de classes de uma aplicação. </li></ul></ul><ul><ul><li>As classes podem representar: </li></ul></ul><ul><ul><ul><li>Elementos de interfaces do usuário. </li></ul></ul></ul><ul><ul><ul><li>Recursos do sistema. </li></ul></ul></ul><ul><ul><ul><li>Eventos da aplicação. </li></ul></ul></ul><ul><ul><ul><li>Abstrações dos conceitos de negócio. </li></ul></ul></ul><ul><ul><ul><ul><li>Nomes significativos para pessoas de negócio não-técnicas. </li></ul></ul></ul></ul>
  7. 7. Repositórios para Persistência <ul><li>A persistência precisa armazenar o estado dos objetos em algum repositório para futuramente recuperá-los. </li></ul><ul><li>Os repositórios podem ser: </li></ul><ul><ul><li>Um BD relacional (mais comum). </li></ul></ul><ul><ul><li>Arquivos do sistema. </li></ul></ul><ul><ul><li>Um BD OO. </li></ul></ul>
  8. 8. Técnicas de Persistência <ul><li>A maioria dos projetos de desenvolvimento de software utiliza: </li></ul><ul><ul><li>a linguagem OO, tais como Java e C#. </li></ul></ul><ul><ul><li>o BD relacional para armazenar dados. </li></ul></ul><ul><li>O desenvolvimento de aplicações que usam linguagens OO e DB Relacional enfrentam o problema da incompatibilidade conceitual ( impedance mismatch ). </li></ul>
  9. 9. Técnicas de Persistência <ul><li>Para superar este problema é importante conhecer: </li></ul><ul><ul><li>O processo de mapeamento objeto-relacional. </li></ul></ul><ul><ul><li>Como implementar mapeamento objeto-relacional. </li></ul></ul><ul><ul><li>e fundamentalmente como tornar ágil a manutenção do mapeamento! </li></ul></ul>
  10. 10. Técnicas de Persistência - Força Bruta <ul><li>Força Bruta (mais comum): </li></ul><ul><ul><li>o código SQL é embutido no código-fonte das classes. </li></ul></ul><ul><ul><li>Vantagens: </li></ul></ul><ul><ul><ul><li>permite escrever códigos muito rapidamente </li></ul></ul></ul><ul><ul><ul><li>viável para pequenas aplicações ou protótipos. </li></ul></ul></ul><ul><ul><li>Desvantagens: </li></ul></ul><ul><ul><ul><li>Alto acoplamento entre as classes de domínio e o esquema do banco de dados. </li></ul></ul></ul><ul><ul><ul><li>Mudanças simples no BD (por exemplo, renomear uma coluna) resulta na manutenção do código-fonte. </li></ul></ul></ul>
  11. 11. Técnicas de Persistência - Força Bruta
  12. 12. Técnicas de Persistência – Classes de Dados <ul><li>Classes de Dados: </li></ul><ul><ul><li>SQL das classes de domínio são encapsuladas nas “classes de dados”. Exemplos: </li></ul></ul><ul><ul><ul><li>SP’s no BD representam objetos (substituindo as classes de dados) </li></ul></ul></ul><ul><ul><ul><li>ActiveX Data Objects (ADO). </li></ul></ul></ul><ul><ul><li>Vantagens: </li></ul></ul><ul><ul><ul><li>Eficiência na execução das funções de inserção e recuperação dos dados. </li></ul></ul></ul><ul><ul><li>Desvantagens: </li></ul></ul><ul><ul><ul><li>Recompilação das classes de dados quando pequenas mudanças são feitas no BD. </li></ul></ul></ul><ul><ul><ul><li>Recursos humanos consideráveis para implementação SQL. </li></ul></ul></ul>
  13. 13. Técnicas de Persistência – Classes de Dados
  14. 14. Técnicas de Persistência – Framework <ul><li>Camada de Persistência Robusta (framework): </li></ul><ul><ul><li>O framework mapeia objetos para bancos de dados relacionais, de maneira que as pequenas mudanças no esquema relacional não afetem o código orientado a objetos. </li></ul></ul><ul><ul><li>Vantagens: </li></ul></ul><ul><ul><ul><li>Programadores não precisam conhecer nada a respeito do esquema do BD relacional. </li></ul></ul></ul><ul><ul><ul><li>Permite que a empresa desenvolva aplicações de missão crítica e em larga escala. </li></ul></ul></ul><ul><ul><li>Desvantagem: </li></ul></ul><ul><ul><ul><li>Impacto no desempenho das aplicações. </li></ul></ul></ul>
  15. 15. Técnicas de Persistência – Framework
  16. 16. Características da camada de Persistência <ul><li>As camadas de persistência devem permitir que desenvolvedores de aplicação se concentrem no que eles sabem fazer melhor: desenvolver aplicações, sem ter a preocupação com o como os seus objetos serão armazenados. </li></ul><ul><li>Devem, também, permitir que administradores de banco de dados façam o que eles fazem melhor: </li></ul><ul><li>administrar bancos de dados, sem ter que se preocupar com a introdução acidental de erros nas aplicações existentes. </li></ul>
  17. 17. Situação Atual <ul><li>Scott Ambler (Julho 2006): </li></ul><ul><ul><li>95.7% consideram dados como bens corporativos ( assets ) </li></ul></ul><ul><ul><li>40.3% possuem bateria de testes para BD </li></ul></ul><ul><ul><li>61.9% possuem problemas com dados em produç ão </li></ul></ul><ul><ul><li>18% sem estratégia para corrigí-los </li></ul></ul><ul><ul><li>33% estratégia é não deixar ficar pior </li></ul></ul>
  18. 18. Disparidades <ul><li>Programadores vs. DBAs ? </li></ul><ul><li>Metodologias: </li></ul><ul><ul><li>Quando projetar? </li></ul></ul><ul><ul><li>Pr áticas de Teste </li></ul></ul><ul><li>Cultural </li></ul><ul><li>Generalistas vs. Especialistas </li></ul>
  19. 19. Modelagem Evolutiva <ul><li>Modelo evolui com o conhecimento </li></ul><ul><li>N ão precisa acertar (e congelar) da primeira vez </li></ul><ul><li>Alinhado com os desenvolvedores </li></ul><ul><li>Integração Contínua </li></ul><ul><li>Mudança de paradigma </li></ul><ul><li>Apoio de novas ferramentas </li></ul>
  20. 20. Modelagem Evolutiva <ul><li>Ruby on Rails (active record) </li></ul><ul><ul><li>Scripts de migraç ão </li></ul></ul><ul><ul><ul><li>API Ruby/SQL ou SQL </li></ul></ul></ul><ul><ul><ul><li>Alterações de avanço ( up ) e retrocesso ( down ) </li></ul></ul></ul><ul><ul><ul><li>Numerados sequencialmente </li></ul></ul></ul><ul><ul><li>Tabela para armazenar versão do BD </li></ul></ul><ul><ul><li>Tarefa rake para migrar a versão do BD </li></ul></ul><ul><ul><li>Gerenciamento de migraç ões em diferentes ambientes (Desenv. / Teste / Produção) </li></ul></ul>
  21. 21. Refatoraç ão de BD <ul><li>“ Pequena alteraç ão no BD para melhorar o design, preservando o comportamento e a semântica dos dados” </li></ul><ul><li>Refatorar o BD é mais difícil que código: </li></ul><ul><ul><li>Estrutura do BD </li></ul></ul><ul><ul><li>Dados </li></ul></ul><ul><ul><li>C ódigo dos sistemas que acessam o BD </li></ul></ul><ul><li>Dificuldade varia com acoplamento </li></ul>
  22. 22. Refatoraç ão de BD <ul><li>Dificuldade varia com acoplamento: </li></ul><ul><ul><li>Diversas aplicaç ões </li></ul></ul><ul><ul><li>Scripts de extração de dados </li></ul></ul><ul><ul><li>Scripts de importação de dados </li></ul></ul><ul><ul><li>Frameworks de persistência </li></ul></ul><ul><ul><li>Documentação </li></ul></ul>
  23. 23. Refatoraç ão de BD <ul><li>Uma aplicaç ão acessando o BD </li></ul>
  24. 24. Refatoraç ão de BD <ul><li>V árias aplicações acessando o BD </li></ul>
  25. 25. Refatoraç ão de BD <ul><li>Uma refatoraç ão de BD pode exigir um período de transição: </li></ul>
  26. 26. Refatoraç ão de BD <ul><li>Exemplo: Renomear Coluna </li></ul>
  27. 27. Refatoração de BD <ul><li>O que N ÃO é uma refatoração: </li></ul><ul><ul><li>Alterar estrutura para estender o modelo </li></ul></ul><ul><ul><li>Fazer alteraç ões grandes de uma vez </li></ul></ul><ul><li>Uma Transformação pode ou não mudar o comportamento </li></ul><ul><li>Podem ser um passo da Refatoração </li></ul><ul><li>Exemplo: Introduzir Coluna </li></ul>
  28. 28. Refatoraç ão de BD <ul><li>Categorias de Refatoraç ão: </li></ul><ul><ul><li>Estruturais </li></ul></ul><ul><ul><li>Qualidade de dados </li></ul></ul><ul><ul><li>Integridade Referencial </li></ul></ul><ul><ul><li>Arquiteturais </li></ul></ul><ul><ul><li>M étodo </li></ul></ul><ul><ul><li>Transformações (não são refatorações) </li></ul></ul>
  29. 29. Refatoraç ão de BD <ul><li>“ Mal cheiros” s ão sintomas para refatorar </li></ul><ul><ul><li>Colunas multi-uso </li></ul></ul><ul><ul><li>Tabelas multi-uso </li></ul></ul><ul><ul><li>Dados redundantes </li></ul></ul><ul><ul><li>Tabelas com muitas colunas </li></ul></ul><ul><ul><li>Tabelas com muitas linhas </li></ul></ul><ul><ul><li>Colunas “espertas” </li></ul></ul><ul><ul><li>Resist ência a mudanças </li></ul></ul>
  30. 30. Processo de Refatoraç ão de BD <ul><li>Verificar se a refatoraç ão é apropriada </li></ul><ul><ul><li>A refatoração faz sentido? </li></ul></ul><ul><ul><li>A mudança é necessária agora? </li></ul></ul><ul><ul><li>O esforço recompensa? </li></ul></ul><ul><li>Escolher a refatoração mais apropriada </li></ul><ul><ul><li>Os dados podem estar em outro lugar </li></ul></ul><ul><li>Depreciar o esquema original do BD </li></ul><ul><ul><li>Passo opcional </li></ul></ul><ul><ul><li>Analisar a necessidade e duraç ão da transição </li></ul></ul>
  31. 31. Processo de Refatoraç ão de BD <ul><li>Testar antes, durante e depois </li></ul><ul><ul><li>Esquema do BD </li></ul></ul><ul><ul><li>Migraç ão de dados </li></ul></ul><ul><ul><li>Aplicações que usam o BD </li></ul></ul><ul><li>Executar as alteraç ões: </li></ul><ul><ul><li>Modifique o esquema do BD </li></ul></ul><ul><ul><li>Faça as migraç ões necessárias </li></ul></ul><ul><ul><li>Refatore as aplicaç ões externas </li></ul></ul>
  32. 32. Processo de Refatoraç ão de BD <ul><li>Executar os testes de regress ão </li></ul><ul><li>Armazenar as alteraç ões no repositório </li></ul><ul><li>Anunciar a refatoração </li></ul><ul><ul><li>Atualizar documentaç ão </li></ul></ul><ul><ul><li>“ Release Notes ” é uma estratégia simples: </li></ul></ul><ul><ul><ul><li>Associa o n úmero dos scripts da refatoração com a alteração realizada </li></ul></ul></ul>
  33. 33. Processo de Implantaç ão <ul><li>Fazer um backup do BD </li></ul><ul><li>Executar os testes de regress ão </li></ul><ul><ul><li>Antes, é preciso garantir que tudo está funcionando </li></ul></ul><ul><ul><li>Se falhar, pode ser melhor abortar </li></ul></ul><ul><li>Implantar as alterações nas aplicações </li></ul><ul><li>Implantar as alterações no BD </li></ul><ul><li>Executar os testes de regressão </li></ul>
  34. 34. Processo de Implantaç ão <ul><li>Desfazer, caso necess ário </li></ul><ul><ul><li>Falhas sérias nos testes de regressão </li></ul></ul><ul><ul><li>Utilize os backups do passo 1 </li></ul></ul><ul><ul><li>Desfaça as alterações nas aplicações </li></ul></ul><ul><li>Anunciar a implantação </li></ul><ul><li>A refatoraç ão não está completa até a remoção do esquema depreciado </li></ul>
  35. 35. Refatoraç ão Estrutural <ul><li>Cuidados: </li></ul><ul><ul><li>Evite ciclos em triggers </li></ul></ul><ul><ul><li>Triggers podem ser afetados </li></ul></ul><ul><ul><li>Views podem ser afetadas </li></ul></ul><ul><ul><li>Stored Procedures podem ser afetadas </li></ul></ul><ul><ul><li>Outras tabelas podem ser afetadas </li></ul></ul><ul><ul><li>Defina o per íodo de transição </li></ul></ul>
  36. 36. Exemplo: Mover Coluna
  37. 37. Refatoraç ão de Integridade Referencial <ul><li>Exemplo: Introduzir Trigger para Hist órico </li></ul>
  38. 38. Transformaç ão <ul><li>Exemplo: Introduzir Nova Coluna </li></ul>
  39. 39. Conclus ões <ul><li>É preciso quebrar barreiras culturais. </li></ul><ul><li>Aproximar programadores e DBAs. </li></ul><ul><li>É possível trabalhar de forma evolutiva com banco de dados. </li></ul><ul><li>Ainda existem poucas ferramentas para a migração de dados. </li></ul><ul><li>A Refatoração não implica em mudanças drásticas nos modelos de dados. </li></ul>
  40. 40. Epitáfio <ul><li>O sucesso de BD Ágéis está fortemente ligado a facilidade de evolução do modelo de dados. </li></ul><ul><li>A evolução do modelo de dados implica em processos de migração e sincronização de dados. </li></ul><ul><li>A facilidade da migração dos dados depende do nível de abstração do modelo de dados. </li></ul>
  41. 41. Refer ências <ul><li>Livros: </li></ul><ul><ul><li>Scott Ambler e Pramod Sadalage, “Refactoring Databases: Evolutionary Database Design”, Addison-Wesley Professional, 2006 </li></ul></ul><ul><ul><li>Scott Ambler, “Agile Database Techniques”, Wiley Publishing, 2003 </li></ul></ul>
  42. 42. Refer ências <ul><li>Online: </li></ul><ul><li>http:// www.agiledata.org/essays/databaseRefactoring.html http:// www.agiledata.org/essays/agileDataModeling.html http://www.databaserefactoring.com/ </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×