Upload
vuongthu
View
216
Download
0
Embed Size (px)
Citation preview
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
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?
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())
17
Sistema Sob Teste... Database Connectivity (DBC)
ODBC, JDBC ...Frameworks para queries
SpringJDBC ...ObjectRelational Mapping
HibernateActiveRecord
Stored Procedures Triggers
21
ObjectRelational 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 ...
26
ORM: FacilidadesCascata de Insert, Update e Delete
Carregamento de objetos: Preguiçosa, ansiosa
Cache
EventosBefore/After: insert / update / delete / load
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 bidirecional 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...
34
Contato
http://www.agilcoop.org.br