Download - Testando aplicações DataSnap
1
Testando Aplicações DataSnap
Andreano Lanusse
Technical Lead Evangelist, Developer Relations
2
Agenda
• Arquitetura• Melhores Práticas• Testes baseados em Teste Unitário• Demo
3
Multicamada - Conceito
• Divisão da aplicação em N camadas, geralmente são divididas em:
– Banco de dados– Regras de Negócios (Servidor de Aplicação)– Interface Cliente
• Vantagens deste modelo– Fácil manutenção da aplicação– Aplicação cliente contém configurações mínimas ou quase zero– Mínima atualização da aplicação cliente– Performance distribuída no servidor de banco de dados e de aplicação– Redução de custo no investimento de hardware– Alta performance entre Cliente e Servidor de Aplicação, suportando até
conexões Dial-Up
4
DataSnap Arquitetura
TCP/IP transport
JSON/RPC messaging layer
DataSnap Server
Existing DelphiRDMs, No-COMServerModules
• Middle-tier database driver deployment • Connection Pooling
• Statement, MetaData Caching
Delphi
Connection/Session management and RPC dispatching
Database Accelerator
Remote/ServerData Modules
Server Methods
DBX / ADO.NET
Method Parameters:• Table readers• DB connection• Scalar values
Delphi / C++
Plain Objects
Delphi/C++DBX Client
ADO.NETASP/Desktop
5
DataSnap Server
DSServer gerencia a criação e tempo de vida dos transports e server classes
Transport(socket/http) gerencia a criação e tempo de vida das threads
ServerClass publica os server methods para chamada dinãmica dos métodos
ObjectPooling
Gerenciamento de memória - Lyfe Cicle
Server (Singleton) Todos os clientes compartilham uma única instância da classe servidora.Session (Statefull) Cada cliente tem sua instância da classe no servidorInvocation (Stateless) Novas instâncias de server class são criadas para cada chamada de um server method.
Server Module contém server methods, funciona como um TRemoteDataModule, Suporta IAppServer
6
DataSnap Client
App Cliente
SQLServerMethodClasses ProxyDSProviderConnection
Desktop/Web
DBX ADO.NETDBXClientRESTfull
Server Container
FILTER
Classes Proxy e Teste Unit Test
7
Testes - Caixa Preta vs Caixa Branca
• Caixa Preta– Executados de maneira funcional, onde o testador não tem contado direto com o
código do sistema, entende-se o sistema como uma caixa onde ao inserir valores de entrada, retorna valores de saída, geralmente estes testes são realizados por uma equipe específica de teste, que utiliza a especificação dada pelo cliente para fazer o roteiro de casos de teste.
• Caixa Branca– Realizados diretamente no código e geralmente são feitos pelo implementador
do sistema, um exemplo deste tipo de teste são os testes de unidade (unit testing).
8
Testes
• Teste de Unidade Caixa Branca• Teste de Integração Caixa Branca e Preta• Teste Funcional Caixa Preta• Teste de Aceitação Caixa Preta• Teste de Regressão Caixa Branca e Preta• Teste de Cobertura Caixa Branca e Preta
• A partir do entendimento mais aprofundado sobre cada tipo de teste, é que pode-se obter uma forma mais prática e técnica de testar cada parte do sistema, a fim de garantir uma maior qualidade do software.
9
DataSnap – Teste de Unidade (Unit Testing)
• Delphi está integrado com Dunit• Classes Proxy são facilmente integradas a Unit Test• Unit Test funciona como uma aplicação cliente• Unit Test em Delphi é a melhor opção, permite testar
todos os tipos de retorno• Você pode criar Unit Test em Java, PHP e outras
linguagens, mas estará limitado a testar métodos baseados em JSON (RESTfull)
• Deve ser criado pelo desenvolvedor
10
Unit Test – Dados
• Utilizar dados mais próximos de produção• Fontes de dados:
– Banco de Dados– XML
XML Banco de dados
Elimina variáveis de ambientes, arquivo local e nada mais
Considerar servidor, rede e outras variáveis externas
Difícil manutenção, gerar dados de produção como arquivo XML
Fácil manutenção (backup/restore)
Alta Performance, leitura de arquivos locais
Vai depender do banco de dados
11
Dicas Server Methods e Data Modules
• Server Methods– Gerar teste unitário com base nas classes proxies– Adequar os métodos para os testes– Para cada server methods não necessariamente um método de teste– Métodos de testes por funcionalidade
• Data Modules– Envolvem DataSetProvider + SQLQuery, que não se encaixa neste modelo de
testes– Trabalhoso para codificar, tendo que investir muito tempo do desenvolvedor– Teste Funcional irá cobrir as áreas de testes onde Data Modules são utilizados
12
Build automatizado e Integração Continua
• Delphi e MSBuild– Extensão .dproj está no formato padrão msbuild– Múltiplas configurações de build no projeto– Executado através de linha de comando
• Teste Unitário– Integrado ao Delphi– Opção de execução GUI ou linha de comando
• Algumas ferramentas para unificar e automatizar o processo de build
– Final Builder http://www.finalbuilder.com/– Hudson http://wiki.hudson-ci.org/
13
Demo
• Teste Unitário em aplicação DataSnap simples• Teste Unitário baseado em dados dinâmicos• Teste Unitário e cenários diversos• Teste Unitário em aplicações DataSnap complexas
14
Perguntas
• EDN – Embarcadero Developer Network– http://edn.embarcadero.com/br (Artigos e Vídeos)
• Trial Download– http://www.embarcadero.com/downloads
• Código fonte disponível para download– http://cc.embarcadero.com/Item/27391
15
Dados para Contato
• Email:[email protected]
• Blog:http://www.andreanolanusse.com
• Twitter:http://twitter.com/andreanolanusse