Teste em Ambiente Cliente-Servidor: Uma Estratégia e um Estudo de Caso - Parte 2
RESUMO Devido à complexidade da tecnologia dos sistemas com arquitetura cliente-servidor, muitos pesquisadores têm apontado que o teste deve ser conduzido de uma maneira diferente. Este conjunto de artigos apresenta a ETACS, uma Estratégia de Teste de Software para Ambiente Cliente-Servidor. A ETACS foi aplicada em um estudo de caso real com o objetivo de melhorar a qualidade do sistema, minimizar os custos e validar a estratégia. Este artigo trata da estratégia propriamente dita. Palavras chaves: estratégia de teste, teste cliente-servidor, estudo de caso. INTRODUÇÃO No artigo anterior (BB nº 114 de Outubro 2001) foi apresentado um resumo da importância do teste e dos trabalhos encontrados na literatura que formaram a base para a estratégia de teste proposta para o ambiente cliente-servidor. Além dos trabalhos descritos no artigo anterior, a ETACS também levou em consideração um estudo empírico realizado através da análise de informações obtidas através de uma pesquisa realizada em uma empresa que utiliza tecnologia cliente-servidor. Com a finalidade de levantar a situação da atividade de teste realizada nos sistemas dentro desta empresa foi elaborado um questionário e distribuído para 138 pessoas, das quais 35% responderam, entre gerentes e coordenadores, analistas e líderes de projeto e programadores e técnicos de suporte. O objetivo é verificar a eficiência e os problemas existentes para a realização do teste. As respostas coletadas foram analisadas estatisticamente e o resumo das principais conclusões que serviram como base para a ETACS são apresentadas a seguir:
Com isso, conclui-se que é imprescindível a elaboração de uma estratégia de teste para auxiliar essa atividade na empresa. ESTRATÉGIA PROPOSTA Esta seção descreve a metodologia ETACS (Estratégia de Teste de Software para Ambiente Cliente-Servidor). Ela considera os resultados da pesquisa descrita na seção anterior e os pontos positivos de diferentes estratégias encontradas na literatura e abordadas no primeiro artigo desta série. Voltada para ambiente cliente-servidor 3 camadas, utiliza a abordagem de ciclo de vida de desenvolvimento de software iterativo e caso de uso para capturar e definir os requisitos funcionais do sistema de software [1], [3]. A Figura 1 mostra um esquema da visão global e estática da ETACS dentro das etapas de desenvolvimento do software, apresentadas resumidamente na seqüência.
1. Etapa inicial Essa etapa é também conhecida como modelagem de negócio, em que, para efeito da atividade de teste, são definidas apenas as estimativas de custo. Para que possa ser gerada esta estimativa de custo, outras informações do sistema são necessárias além da definição do problema. Portanto, nessa etapa são geradas várias informações que propiciam entendimento sobre o projeto de sistema que deverá ser desenvolvido, do qual a estimativa de custo de teste deve fazer parte. Essas informações são utilizadas como entrada de dados para gerar o plano de teste, que é descrito a seguir.
2. Plano de teste Depois de levantadas as informações iniciais que propiciam entendimento suficiente sobre o problema, conforme descrito na etapa inicial, pode-se iniciar a construção do plano de teste. É necessário que algumas questões importantes para o projeto tenham sido especificadas e bem definidas para se iniciar a atividade de teste propriamente dita, apesar da preocupação inicial com os custos e recursos do teste levantada na etapa anterior. A estratégia propõe que o plano de teste contenha os itens especificados abaixo:
3. Projeto de casos de teste A partir dos casos de uso e requisitos podem ser extraídos casos de teste e, posteriormente, dependendo do critério e técnica selecionados, adicionados casos de teste mais adequados, pois cada critério e tipo de teste determina como são gerados os casos de teste e indica coberturas. Quanto mais próximo do período de implementação, mais casos de teste podem ser adicionados para cobrir os critérios selecionados. Devem ser especificados os critérios de satisfação para cada tipo de teste (critérios de cobertura), quando não estiverem implícitos. A elaboração dos casos de teste não muda por causa do ambiente cliente-servidor para a maioria dos critérios tradicionais. A arquitetura afeta principalmente os testes de sistema. 4. Execução dos casos de teste No ciclo de vida iterativo [4], é na fase de construção ou implementação que se concentra o maior esforço e tempo de teste. Só que para o ambiente cliente-servidor tem um detalhe a mais. Executa-se o teste de unidade para o componente, função ou método, testa-se este componente integrando-o com partes maiores e submetem-se essas partes integradas a um teste de sistema, como segurança, carga, desempenho, etc. Os testes devem ser executados dentro e fora do horário de pico, para considerar o tráfego de rede e a sobrecarga do gerenciador de base de dados. Devem ser isoladas as camadas de apresentação, de negócio e de dados, e muitas vezes para isso são construídos stubs e drivers, mesmo nos testes de unidade. Deve-se construir um acesso direto ao banco e comparar os resultados. Deve ser construída uma maneira diferente de acessar a camada de negócio, alterando os tipos das chamadas da interface. 5. Avaliação dos casos de testes implementados Analisando-se os dados, se for constatado algum defeito, ou mesmo alguma falha no ambiente, ou retorna-se ao passo anterior - execução dos casos de teste - e realiza-se o teste de regressão após a correção do problema; ou surge até mesmo a necessidade de projetar novos casos de teste, para atingir alguma camada específica, retornando para o passo de projeto de caso de teste. De acordo com as métricas estabelecidas e critérios de cobertura, pode-se verificar se os casos de teste aplicados foram suficientes para atingir a cobertura necessária para cada critério. Se não foram suficientes, novos casos de teste devem ser gerados. Importante: implementar um ou dois casos de uso, um incluindo consulta pesada e outro, um cadastro pesado. Testar aspectos de segurança, desempenho, integridade, carga e estresse para validar a arquitetura antes de construir o sistema inteiro. Esses casos de uso devem ser selecionados pelo analista que conhece bem o negócio para extrair casos de usos não muito complexos e que contemplem necessidade de vários tipos de teste para avaliar a arquitetura. 6. Documentação dos casos de teste e resultados obtidos
É importante que se tenha documentado todos os casos de teste utilizados para cada caso de uso, pois, se algum dia for necessário fazer alguma manutenção pode-se refazer esses testes. Deve ser definido um diretório centralizado para essa documentação. Informações a serem documentadas: uma descrição de como foram efetuados os testes, os resultados obtidos e em que condição. Dessa forma, também é possível manter um registro do benefício gerado a partir dos testes e, de sua utilidade para que se possa justificar custos e acompanhar a evolução do desenvolvimento. É uma tarefa importante e que acompanha cada etapa dessa estratégia. CONCLUSÃO Este é segundo artigo de uma série que faz parte da elaboração da estratégia adaptada para o ambiente cliente-servidor. O teste é muito importante para a garantia da qualidade dos sistemas produzidos ou gerenciados por qualquer empresa. O teste é necessário, para que se atinjam os níveis mais altos de qualidade e o grau de certificação que toda empresa almeja e para que seus produtos sejam formalmente testados, com critério. Um teste feito ao acaso estará fadado a um desastre quase inevitável. O planejamento não é a garantia de que tudo correrá tranqüilamente, mas é um passo necessário que aumenta muito as chances de sucesso. Para a expectativa da utilização de uma ferramenta que auxilie a execução dos testes a ETACS procura relacionar ferramentas disponíveis comercialmente que podem auxiliar esta tarefa embora possa ser executada sem o auxílio de uma. A natureza distribuída do ambiente cliente-servidor com toda a sua complexidade torna o teste do sistema mais difícil e representa um grande desafio e avanço na área de teste de software. A ETACS propõe que os requisitos sejam levantados através de casos de uso, que sejam estabelecidas prioridades, as quais apenas indicam quão criterioso deve ser o teste e, dependendo destas características, das prioridades definidas, das sugestões propostas por Mosley para cada camada e dos critérios de testes apontados na literatura, que sejam identificados os critérios de teste mais adequados. No ambiente cliente-servidor, uma grande dificuldade do teste é a divisão em camadas, o que aumenta a complexidade do software e dificulta a atividade de teste. A ETACS propõe que, nos testes de unidade, utilizando técnicas e critérios convencionais, executem-se testes para componentes, métodos e funções que sejam mais complexas e cujo grau de prioridade seja ALTO. Testes de integração devem ser feitos conforme a necessidade e complexidade do sistema e os componentes devem ser testados a partir do término do desenvolvimento dos primeiros casos de uso com teste de estresse, performance, integridade e segurança. Esses testes são feitos com as três camadas e, quando os resultados são duvidosos, devem-se isolar as camadas. Para isso, muitas vezes, é necessário construir stubs e drivers. Dessa forma, os testes serão feitos bem no começo, quando ainda não há pressão quanto ao tempo e podem ser encontrados os problemas com desempenho e até mesmo decidir por outra arquitetura. Uma vez que uma das grandes dificuldades apontadas de realizar teste nesta arquitetura é o desempenho no ambiente real, com muita carga de dados e muitos usuários. A falta de teste próprio para desempenho pode tornar um projeto recém concluído um fracasso ou necessitado de manutenção. Por isso, nesse tipo de arquitetura, os testes de segurança, integridade e performance são altamente recomendados e devem ser feitos no início do projeto, com uns cinco casos de uso, selecionados por alguém do negócio, para que a arquitetura seja validada o quanto antes. Com a documentação, proposta pela ETACS, é possível analisar os benefícios de realizar a atividade de teste para justificar tempo no cronograma de projetos futuros. Outro detalhe é a recomendação de utilização de ferramentas para auxílio nos testes mais críticos, como estresse e carga, minimizando o trabalho repetitivo e aproveitando melhor o tempo pois os testes podem ser programados. Referências
[1] JACOBSON, I.; BOOCH, G.; RUMBAUGH, J. The unified software development process reading. Massachusetts: Addison-Wesley, 1999. 463 p. [2] KARLSSON, J. Software requirements prioritizing. In: INTERNATIONAL CONFERENCE ON REQUIREMENTS ENGINEERING, 2., 1996, Colorado. Proceedings... Los Alamitos: IEEE CSP, 1996. 6 p. [3] KRUCHTEN, P. A Rational development process: white paper. Disponível em: <http://www.rational.com/products/rup/prodinfo/whitepapers/>. Acesso em: abr. 2001 [4] MOSLEY, D. J. Client server software testing on the desktop and the web. Indianapolis: Prentice Hall, 2000. [5] PRESSMAN, R. S. Software engineering: a practitioner's approach. 4. ed. New York: McGraw-Hill, 1997. |