34
Testes Automatizados com Banco de Dados Helves Domingues e Paulo Cheque  12/02/2009   Verão2009

Testes Automatizados com Banco de Dados - ccsl.ime.usp.brccsl.ime.usp.br/agilcoop/files/TestesAutomatizados-4-1-BancoDe... · Desvantagens: Ambiente não ... Qual o custo das desvantagens

Embed Size (px)

Citation preview

Testes Automatizados com Banco de Dados

Helves Domingues e Paulo Cheque 

12/02/2009   Verão2009

2

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

Stored ProceduresTriggers

SQLDesign => Manutenção e EvoluçãoMapeamento ORMSegurança

3

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

Modelagem de dados evolutivaTestes do banco de dadosGerência de configuração ( SVN, CVS, GIT, etc )Refatoração do banco de dados

4

PreocupaçõesCompartilhamento da basePermissões: Schemas, CRUDExecução concorrente do testeMuitos sistemas utilizando a mesma baseSistemas legadosConexão – Rede ­ Distribuição: DesempenhoReplicaçãoAuditoria

5

Ambiente de TesteBancos de Dados CompartilhadosBancos de Dados LocaisBancos de Dados em Memória

6

Bancos de Dados Compartilhados Vantagens:

Dados reais de usuáriosAmbiente mais próximo do realDados já existentes: Diversas situações prontas

 Desvantagens:Ambiente não controlado para testesProblemas com permissõesPreocupação com dados existentesPreocupação com dados criados pelos testesLentidão

7

Bancos de Dados Locais•Vantagens:

Ambiente controlado para testesMelhor desempenho

•Desvantagens:Custo de preparação dos dadosQuerys adicionaisDados criados por desenvolvedores, não usuáriosTestes de aceitação?Preocupação com dados criados pelos testesLicenças

8

Bancos de Dados em Memória•Vantagens:

DesempenhoAmbiente controlado para testes

•Desvantagens:Ambiente diferente da realidadeCusto de preparação dos dadosQuerys adicionaisDados criados por desenvolvedores, não usuáriosTestes de aceitação?Limitações: Stored Procedures, Triggers...

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?

10

EstratégiasAmbiente do Desenvolvedor:

 Controlador de versões Scripts Banco de Dados individual

11

EstratégiasAmbientes, bancos de dados e transições

12

EstratégiasTransição para o ambiente de Integração

13

PadrõesOrganização:

Testcase Superclass Ex: GrailsUnitTestCase

Test Utility Method Test Helper

Database Sandbox: 1 por desenvolvedorTransaction Rollback TeardownTable Truncation Teardown

14

+ PadrõesGenerated Values

IDsTimestampAleatórios

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

CreditCardGenerator.generate(CreditCardFactory.getMasterCard())

15

Anti­padrõesTestes frágeisDados/Ambientes não controladosIDs fixosLentosSujeira na base de dados

16

Anti­padrões

17

Sistema Sob Teste... Database Connectivity  (DBC)

ODBC, JDBC ...Frameworks para queries

Spring­JDBC ...Object­Relational Mapping

HibernateActiveRecord

Stored Procedures ­ Triggers

18

DBCErros de strings

ConversãoValores nulos

Pouco encapsulamentoCódigo repetido

ConexãoTransações

19

20

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 ...

22

23

24

25

ORM: MapeamentosMapeamentos: 

1­1, 1­N, N­N

Herança:Tabela únicaTabela por tipo

Listas, mapas ...

26

ORM: FacilidadesCascata de Insert, Update e Delete

Carregamento de objetos: Preguiçosa, ansiosa

Cache

EventosBefore/After: insert / update / delete / load

27

28

ORM: FrameworksErros / LimitaçõesGramática SQL específica para um BDParticularidades dos bancos

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

  @GeneratedValue(strategy = GenerationType.SEQUENCE)  // Funciona no MySQL?

29

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

TablePerClass, SingleTable...

30

Stored ProceduresTestes internos nos bancosTestes no nível da aplicação

Stored Procedure TestFacilidadeMenor controleEntrada e Saída

31

TriggersDelayReplicaçãoBD em comum? Múltiplos usuários?Múltiplos desenvolvedores?ValidaçãoValores gerados

ALTER TABLE ENABLE/DISABLE TRIGGER

32

DesempenhoQuerys:

Junções (joins) lentasConsultas pesadasDezenas 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.

33

SegurançaSQLInjection I e II

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

Estourar memória: 

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

Erros nos drivers, bases...