34
Testes Automatizados e Bancos de Dados Paulo Cheque ([email protected]) Cursos de Verão 2010 Licença: Creative Commons: Attribution-Share Alike 3.0 Unported http://creativecommons.org/licenses/by-sa/3.0/

Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

  • Upload
    lynga

  • View
    218

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

Testes Automatizados eBancos de Dados

Paulo Cheque ([email protected])

Cursos de Verão 2010

Licença: 

Creative Commons: Attribution­Share Alike 3.0 Unported

http://creativecommons.org/licenses/by­sa/3.0/

Page 2: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

2

Por quê testar BDs? Dados => $ Lógica

Stored Procedures Triggers

SQL Design => Manutenção e Evolução Mapeamento ORM Segurança

Page 3: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

3

Por quê testar BDs? O que é banco de dados evolutivos?

Modelagem de dados evolutiva Gerência de configuração ( SVN, CVS, GIT etc ) Refatoração do banco de dados Testes do banco de dados

Page 4: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

4

Preocupações Compartilhamento da base Permissões: Schemas, CRUD Execução concorrente do teste Muitos sistemas utilizando a mesma base Sistemas legados Conexão – Rede ­ Distribuição: Desempenho Replicação Auditoria

Page 5: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

5

Ambiente de Teste

Bancos de Dados Compartilhados Bancos de Dados Locais Bancos de Dados em Memória

Page 6: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

6

Bancos de Dados Compartilhados

 Vantagens:

Dados reais de usuários Ambiente mais próximo do real Dados já existentes: Diversas situações prontas

 Desvantagens:

Ambiente não controlado para testes Problemas com permissões Preocupação com dados existentes Preocupação com dados criados pelos testes Lentidão

Page 7: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

7

Bancos de Dados Locais Vantagens:

Ambiente controlado para testes Melhor desempenho

Desvantagens:

Custo de preparação dos dados Querys adicionais Dados criados por desenvolvedores, não usuários (**) Preocupação com dados criados pelos testes Licenças

Page 8: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

8

Bancos de Dados em Memória

Vantagens:

Desempenho Ambiente controlado para testes

Desvantagens:

Ambiente diferente da realidade Custo de preparação dos dados Querys adicionais Dados criados por desenvolvedores, não usuários (**) Limitações: Stored Procedures, Triggers...

Page 9: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

9

Perguntas

É possível escolher o ambiente de testes? O que é necessário testar? Onde estão os erros? Qual o custo das desvantagens e o benefício das 

vantagens?

Page 10: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

10

Estratégias Ambiente do Desenvolvedor:

 Controlador de versões  Scripts  Banco de Dados individual

Page 11: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

11

Estratégias Ambientes, bancos de dados e transições

Page 12: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

12

Estratégias Transição para o ambiente de Integração

Page 13: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

13

Padrões

Organização: Testcase Superclass

Ex: GrailsUnitTestCase Test Utility Method Test Helper

Database Sandbox: 1 por desenvolvedor Transaction Rollback Teardown Table Truncation Teardown

Page 14: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

14

+ Padrões

Generated Values IDs Timestamp

Aleatórios

new Pessoa(IDGenerator.uniqueID()).save()

CreditCardGenerator.generate(CreditCardFactory.getVisa())

Page 15: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

15

Antipadrões

Testes frágeis Dados/Ambientes não controlados IDs fixos Lentos Sujeira na base de dados

Page 16: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

16

Antipadrões

Page 17: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

17

Sistema Sob Teste

... Database Connectivity  (DBC) ODBC, JDBC ...

Frameworks para queries Spring­JDBC ...

Object­Relational Mapping Hibernate ActiveRecord

Stored Procedures ­ Triggers

Page 18: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

18

DBC

Erros de strings Conversão Valores nulos

Pouco encapsulamento Código repetido

Conexão Transações

Page 19: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

19

Page 20: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

20

Page 21: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

21

Object-Relational Mapping (ORM)

Tipos

Validações Min, max, range, null, vazios, padrão, precisão

Conversões: Tipos primivos ou objetos

Metadados: XML, Anotações, Convenções ...

Page 22: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

22

Page 23: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

23

Page 24: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

24

Page 25: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

25

ORM: Mapeamentos Mapeamentos: 

1­1, 1­N, N­N

Herança: Tabela única Tabela por tipo

Listas, mapas ...

Page 26: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

26

ORM: Facilidades

Cascata de Insert, Update e Delete

Carregamento de objetos:  Preguiçosa, ansiosa

Cache

Eventos Before/After: insert / update / delete / load

Page 27: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

27

Page 28: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

28

ORM: Frameworks

Erros / Limitações Gramática SQL específica para um BD Particularidades dos bancos

Exemplo Hibernate:  @GeneratedValue(strategy = GenerationType.AUTO)

  @GeneratedValue(strategy = GenerationType.SEQUENCE)

  // Funciona no MySQL?

Page 29: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

29

ORM: Problemas Reflexão (entidades com construtor básico...) Entidades serializáveis Metadados corretos? Mapeamento bi­direcional sem dono? Representa o design do BD? 

TablePerClass, SingleTable...

Page 30: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

30

Stored Procedures

Testes internos nos bancos Testes no nível da aplicação

Stored Procedure Test Facilidade Menor controle Entrada e Saída

Page 31: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

31

Triggers

Delay Replicação BD em comum? Múltiplos usuários? Múltiplos desenvolvedores? Validação Valores gerados

ALTER TABLE ENABLE/DISABLE TRIGGER

Page 32: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

32

Desempenho Querys:

Junções (joins) lentas Consultas pesadas Dezenas de milhões de registros

Conexão: Pool de conexões, # de threads e Timeout

Para resolver: Coletar o plano de acesso e realizar melhorias de desempenho.

Page 33: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

33

Segurança

SQLInjection

....'; DROP TABLE Tabela; ­­

Estourar memória: 

select * from Tabela where x = ' ' or 1 = 1

Erros nos drivers, bases...

Page 34: Testes Automatizados e Bancos de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · 3 Por quê testar BDs? O que é banco de dados evolutivos?

    34

Contato

http://www.agilcoop.org.br

http://ccsl.ime.usp.br

[email protected]

Licença: 

Creative Commons: Attribution­Share Alike 3.0 Unported

http://creativecommons.org/licenses/by­sa/3.0/