Testando Aplicações DataSnapAndreano LanusseTechnical Lead Evangelist, Developer Relations
AgendaArquiteturaMelhores PráticasTestes baseados em Teste UnitárioDemo
Multicamada - ConceitoDivisão da aplicação em N camadas, geralmente são divididas em:Banco de dadosRegras de Negócios (Servidor de Aplicação)Interface ClienteVantagens deste modeloFácil manutenção da aplicaçãoAplicação cliente contém configurações mínimas ou quase zeroMínima atualização da aplicação clientePerformance distribuída no servidor de banco de dados e de aplicaçãoRedução de custo no investimento de hardwareAlta performance entre Cliente e Servidor de Aplicação, suportando até conexões Dial-Up
DataSnap ArquiteturaDataSnap ServerServer MethodsDatabase Accelerator Middle-tier database driver deployment
 Connection Pooling
 Statement, MetaData CachingRemote/ServerData ModulesPlain ObjectsExisting DelphiRDMs, No-COMServerModulesMethod Parameters: Table readers
 DB connection
 Scalar valuesDelphiDBX / ADO.NETDelphi / C++Connection/Session management and RPC dispatchingJSON/RPC messaging layerTCP/IP transportDelphi/C++DBX ClientADO.NETASP/Desktop
DataSnap ServerTransport(socket/http) gerencia a criação e tempo de vida das threadsServerClass publica os servermethods para chamada dinãmica dos métodosDSServer gerencia a criação e tempo de vida dos transports e server classesObjectPoolingGerenciamento de memória - LyfeCicleServer (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 serverclass são criadas para cada chamada de um servermethod.Server Module contém servermethods, funciona como um TRemoteDataModule, Suporta IAppServer
DataSnap ClientApp ClienteFILTERDBX ADO.NETDBXClientRESTfullDesktop/WebSQLServerMethodClasses ProxyDSProviderConnectionClasses Proxy e Teste UnitTestServer Container
Testes - Caixa Preta vs Caixa BrancaCaixa PretaExecutados 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 BrancaRealizados 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).
TestesTeste de Unidade  Caixa BrancaTeste de Integração  Caixa Branca e PretaTeste Funcional  Caixa PretaTeste de Aceitação  Caixa PretaTeste de Regressão  Caixa Branca e PretaTeste de Cobertura  Caixa Branca e PretaA 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.
DataSnap – Teste de Unidade (UnitTesting)Delphi está integrado com DunitClasses Proxy são facilmente integradas a UnitTestUnitTest funciona como uma aplicação clienteUnitTest em Delphi é a melhor opção, permite testar todos os tipos de retornoVocê 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
UnitTest – DadosUtilizar dados mais próximos de produçãoFontes de dados:Banco de DadosXML
Dicas Server Methods e Data ModulesServer MethodsGerar teste unitário com base nas classes proxiesAdequar os métodos para os testesPara cada server methods não necessariamente um método de testeMétodos de testes por funcionalidadeData ModulesEnvolvem DataSetProvider + SQLQuery, que não se encaixa neste modelo de testesTrabalhoso para codificar, tendo que investir muito tempo do desenvolvedorTeste Funcional irá cobrir as áreas de testes onde Data Modules são utilizados

Testando aplicações DataSnap

  • 1.
    Testando Aplicações DataSnapAndreanoLanusseTechnical Lead Evangelist, Developer Relations
  • 2.
  • 3.
    Multicamada - ConceitoDivisãoda aplicação em N camadas, geralmente são divididas em:Banco de dadosRegras de Negócios (Servidor de Aplicação)Interface ClienteVantagens deste modeloFácil manutenção da aplicaçãoAplicação cliente contém configurações mínimas ou quase zeroMínima atualização da aplicação clientePerformance distribuída no servidor de banco de dados e de aplicaçãoRedução de custo no investimento de hardwareAlta performance entre Cliente e Servidor de Aplicação, suportando até conexões Dial-Up
  • 4.
    DataSnap ArquiteturaDataSnap ServerServerMethodsDatabase Accelerator Middle-tier database driver deployment
  • 5.
  • 6.
    Statement, MetaDataCachingRemote/ServerData ModulesPlain ObjectsExisting DelphiRDMs, No-COMServerModulesMethod Parameters: Table readers
  • 7.
  • 8.
    Scalar valuesDelphiDBX/ ADO.NETDelphi / C++Connection/Session management and RPC dispatchingJSON/RPC messaging layerTCP/IP transportDelphi/C++DBX ClientADO.NETASP/Desktop
  • 9.
    DataSnap ServerTransport(socket/http) gerenciaa criação e tempo de vida das threadsServerClass publica os servermethods para chamada dinãmica dos métodosDSServer gerencia a criação e tempo de vida dos transports e server classesObjectPoolingGerenciamento de memória - LyfeCicleServer (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 serverclass são criadas para cada chamada de um servermethod.Server Module contém servermethods, funciona como um TRemoteDataModule, Suporta IAppServer
  • 10.
    DataSnap ClientApp ClienteFILTERDBXADO.NETDBXClientRESTfullDesktop/WebSQLServerMethodClasses ProxyDSProviderConnectionClasses Proxy e Teste UnitTestServer Container
  • 11.
    Testes - CaixaPreta vs Caixa BrancaCaixa PretaExecutados 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 BrancaRealizados 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.
    TestesTeste de Unidade Caixa BrancaTeste de Integração  Caixa Branca e PretaTeste Funcional  Caixa PretaTeste de Aceitação  Caixa PretaTeste de Regressão  Caixa Branca e PretaTeste de Cobertura  Caixa Branca e PretaA 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 – Testede Unidade (UnitTesting)Delphi está integrado com DunitClasses Proxy são facilmente integradas a UnitTestUnitTest funciona como uma aplicação clienteUnitTest em Delphi é a melhor opção, permite testar todos os tipos de retornoVocê 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 – DadosUtilizardados mais próximos de produçãoFontes de dados:Banco de DadosXML
  • 15.
    Dicas Server Methodse Data ModulesServer MethodsGerar teste unitário com base nas classes proxiesAdequar os métodos para os testesPara cada server methods não necessariamente um método de testeMétodos de testes por funcionalidadeData ModulesEnvolvem DataSetProvider + SQLQuery, que não se encaixa neste modelo de testesTrabalhoso para codificar, tendo que investir muito tempo do desenvolvedorTeste Funcional irá cobrir as áreas de testes onde Data Modules são utilizados

Notas do Editor

  • #4 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
  • #5 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
  • #9 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.