A nova arquitetura do DataSnap permite disponibilizar regras de negócios através de Server Methods, esta arquitetura facilita a integração com frameworks de testes, com isso podemos automatizar os testes a cada nova versão dos servidores DataSnap, durante esta apresentação vamos aprender como implementar testes em projetos DataSnap.
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
8. Scalar valuesDelphi DBX / ADO.NET Delphi / C++ Connection/Session management and RPC dispatching JSON/RPC messaging layer TCP/IP transport Delphi/C++ DBX Client ADO.NET ASP/Desktop
9. DataSnap Server Transport(socket/http) gerencia a criação e tempo de vida das threads ServerClass publica os servermethods para chamada dinãmica dos métodos DSServer gerencia a criação e tempo de vida dos transports e server classes Object Pooling Gerenciamento de memória - LyfeCicle Server (Singleton) Todos os clientes compartilham uma única instância da classe servidora. Session (Statefull) Cada cliente tem sua instância da classe no servidor Invocation (Stateless) Novas instâncias de serverclass são criadas para cada chamada de um servermethod. Server Module contém servermethods, funciona como um TRemoteDataModule, Suporta IAppServer
10. DataSnap Client App Cliente FILTER DBX ADO.NET DBXClient RESTfull Desktop/Web SQLServerMethod Classes Proxy DSProviderConnection Classes Proxy e Teste UnitTest Server Container
11. 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 (unittesting).
12. 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.
13. DataSnap – Teste de Unidade (UnitTesting) Delphi está integrado com Dunit Classes Proxy são facilmente integradas a UnitTest UnitTest funciona como uma aplicação cliente UnitTest em Delphi é a melhor opção, permite testar todos os tipos de retorno Você pode criar UnitTest em Java, PHP e outras linguagens, mas estará limitado a testar métodos baseados em JSON (RESTfull) Deve ser criado pelo desenvolvedor
14. UnitTest – Dados Utilizar dados mais próximos de produção Fontes de dados: Banco de Dados XML
15. 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
16. 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/
17. 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
18. 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
19. Dados para Contato Email:Andreano.Lanusse@embarcadero.com Blog:http://www.andreanolanusse.com Twitter:http://twitter.com/andreanolanusse
Hinweis der Redaktion
Server connectionsMiddle-tier connectivity solutionSingle client side driver (100% Object Pascal)DB vendor clients installed on middle tierEnables middle tier connection, command caching.Easy to create new transports (ie Http(s), SSL/TLS, etc)Server Method Memory ManagementTDSServerClass.LifeCycle property controls the creation and destruction of server class instancesTDSLifeCycle.Server. Singleton. All clients share single server class instance.TDSLifeCycle.Session. Statefull. Each client has its own server class instance.TDSLifeCycle.Invocation. Stateless. New server class instance is created for every invocation of a server method.TDSServerClass events OnCreateInstance and OnDestroyInstance can be used for custom server class instance lifecycle managementServer methodsRemote method invocation for DelphiSimple. No IDL, just regular Delphi methodsPublic methods on any TPersistent class including TServerModule and TRemoteDataModule
TSQLServerMethod componentSimilar to TSQLStoredProcAllows server method to be used like a stored procStrongly typed client classesClient proxy generator that provides strongly typed classes to call server methodsTDSProviderConnection componentDS2009 replacement for TDCOMConnection, TSocketConnection, etc
Os testes de caixa-preta mais comuns são o teste funcional e o teste de aceitação, que é semelhante ao teste funcional, a diferença é que esse teste é executado diretamente pelo cliente. Há também os testes mistos, que tanto são de caixa-branca quanto de caixa-preta, que são os testes de regressão e de integração.Os testes de regressão devem ser realizados sempre que o sistema sofrer alterações consideráveis que podem gerar bugs, geralmente é necessário re-executar todo o roteiro de teste criado para o teste funcional, desde que o sistema não seja muito grande.O teste de integração é importante para garantir que os dados não se perdem entre a camada de apresentação e a camada de negócio. Para realizar estes testes é necessário que o testador verifique tanto os documento de design de baixo nível como de alto nível.Há também um teste muito importante, que é o teste de cobertura ou estrutural, este teste tem a finalidade de verificar se o roteiro de teste executado, tanto nos testes de unidade quanto nos testes funcionais, estão abrangendo 100% do código implementado. Há ferramentas que auxiliam na execução destes testes, como por exemplo, um plugin para o Eclipse IDE, o EmmaCoverage.