Cadastre-se Revistas DevMedia Cursos
 

Space de Arilo Cláudio Dias Neto
Busca Autor


Últimas 20 atualizações de Arilo Cláudio Dias Neto

Artigo - Artigo Engenharia de Software 24 - Automatizando Testes Funcionais em Aplicações Web

Esse artigo faz parte da revista Engenharia de Software 24 edição especial. Clique aqui para ler todos os artigos desta edição



Validação, Verificação & Teste

Automatizando Testes Funcionais em Aplicações Web

Utilizando a Ferramenta Selenium para execução de Testes Funcionais

 

De que se trata o artigo:

Neste artigo iremos apresentar a implementação de uma estratégia de teste funcional utilizando uma ferramenta, Selenium IDE, para automação da execução e re-execução dos testes.

 

Para que serve:

O artigo demonstra na prática a ferramenta Selenium IDE para automação de teste funcional usando uma estratégia de teste do tipo capture-replay, contextualizada ao domínio de aplicações web.

 

Em que situação o tema útil:

O tema é útil para os desenvolvedores e engenheiros de software que planejam aplicar a automação de testes no desenvolvimento de aplicações web.

 

 

Nos artigos anteriores escritos para a ES Magazine, nos preocupamos em discutir os conceitos básicos sobre Teste de Software e apresentar uma estratégia que possibilita a geração de casos de teste de software a partir de casos de uso já especificados. Tal estratégia seria aplicada no nível de teste de software, representando um tipo de técnica de teste funcional, onde o sistema é tratado em uma visão macroscópica e sua avaliação é feita sem considerar detalhes internos de implementação.

No entanto, apesar de ser totalmente viável, a aplicação desta estratégia de teste quando realizada manualmente representa um grande esforço para um projeto de software. Com isso, pensar em mecanismos para automação dos testes consiste em pensar em mecanismo para reduzir o esforço desta atividade no contexto geral de um projeto de software.

É importante termos em mente que automação por si só não resulta em redução de esforço nos testes ou aumento da qualidade desta atividade. A automação simplesmente torna automática algumas tarefas do processo de testes, mas ela não faz milagres. Como assim? Uma ferramenta de testes apenas automatiza o nosso conhecimento técnico sobre teste de software. Sendo assim, se não tivermos conhecimento técnico adequado sobre teste de software, o conjunto de casos de teste gerado para avaliar nosso sistema não terá cobertura ou qualidade suficiente, de forma que a ferramenta irá apenas automatizar a execução do conjunto de testes inadequados, ou seja, não termos qualquer ganho com isso.

Se tivermos um processo de teste bem definido e um bom conhecimento sobre estratégias de teste, a automação pode trazer grandes benefícios a um projeto de software. Nesse contexto, neste artigo iremos apresentar a implementação de uma estratégia de teste funcional apresentada no artigo “Planejamento de Testes a partir de Casos de Uso” publicado na edição 6 da ES Magazine utilizando uma ferramenta, Selenium IDE, para automação da execução e re-execução dos testes.

Estratégias de Teste de Software

Durante o desenvolvimento de um software, diversas estratégias para teste podem ser aplicadas. De acordo com PRESSMAN (2005), essas estratégias podem ser categorizadas da seguinte forma:

·         Baseadas em implementação: utiliza o código como elemento para a geração dos testes. É uma atividade cara, sob o ponto de vista de recursos necessários para a sua realização, e bastante complexa quando o tamanho do código se torna bastante grande. É totalmente dependente de apoio ferramental;

·         Baseadas em especificação: utiliza um documento de especificação como base para geração dos testes. Assim, tenta-se cobrir as imposições e restrições descritas nos requisitos estabelecidos para o sistema. A automação da geração dos testes nesse caso é mais complicada, caso não se tenha um formalismo para a elaboração da especificação do sistema;

·         Baseadas em modelos: é uma subcategoria de estratégias baseada em especificação. Utiliza modelos desenvolvidos ao longo do processo de desenvolvimento que representam o comportamento ou estrutura do software como base para a geração dos testes. Facilita a geração automática dos testes, porem é completamente dependente da facilidade para a construção do modelo adotado e de sua qualidade (corretude).

 

Cada estratégia apresentada possui sua aplicabilidade, vantagens e desvantagens. Não é propósito deste artigo discutir qual seria a estratégia mais adequada. Ao longo deste artigo iremos adotar uma estratégia de geração de testes baseada em especificação, representada pelos casos de uso de um sistema. Assim, partiremos desta informação para a geração de casos e procedimentos (roteiros) de teste, seguindo uma estratégia de teste funcional.

Teste funcional representa uma categoria de técnicas de teste em que o componente de software a ser testado é abordado como se fosse uma caixa-preta, ou seja, não se considera o comportamento interno do mesmo (Figura 1). Dados de entrada são fornecidos, o teste é executado e o resultado obtido é comparado a um resultado esperado previamente conhecido. Haverá sucesso no teste se o resultado obtido for igual ao resultado esperado. O componente de software a ser testado pode ser um método, uma função interna, um programa, um componente, um conjunto de programas e/ou componentes ou mesmo uma funcionalidade. A técnica de teste funcional é aplicável a todos os níveis de teste, seja teste de sistema, aceitação, integração ou unidade.

 

Figura 1. Técnica de Teste Funcional (caixa-preta).

 

Um dos mecanismos para facilitar a realização de testes funcionais é pensar na automação de algumas tarefas que compõem o processo de testes. Esse é o assunto da próxima seção.

Automação dos Testes

Automação dos testes consiste no uso de algum apoio computacional, ferramentas, para controlar a execução dos testes, a comparação dos resultados e comportamentos obtidos com a execução dos testes em relação aos resultados e comportamentos esperados, a configuração das pré-condições dos testes e outras atividades do controle dos testes e relato de seus resultados (KALOWA e HUIZINGA, 2007). Comumente, a automação dos testes envolve automatizar um processo manual já estabelecido em uma organização que utiliza um processo de testes formalizado.

Apesar de os testes manuais poderem encontrar muitos defeitos em um software, essa tarefa é complexa, desgastante e consome muito tempo. Além disso, ela pode não ser tão efetiva em revelar alguns tipos de falhas em um software.

A automação dos testes é um processo de escrever um programa computacional para realizar testes que, caso contrário, seriam feitos manualmente. Uma vez que os testes foram automatizados, eles podem ser executados rapidamente, logicamente que proporcionalmente à quantidade de casos de teste a serem executados. Este representa, na maioria dos casos, o método de teste com custo mais efetivo para produtos que possuem uma longa vida, com muitas manutenções, pois pequenas modificações em certas partes do software ao longo de sua vida podem fazer com que outras partes do software que estariam funcionando anteriormente deixem de funcionar.

Existem duas abordagens gerais para automação dos testes:

·         Testes dirigidos a código: as interfaces para classes, módulos ou bibliotecas são testadas com uma larga variedade de argumentos de entrada para validar se os resultados que estão sendo retornados estão corretos;

·         Teste de Interface (em inglês, Graphical User Interface, ou simplesmente GUI): um framework de teste gera eventos de interface do usuário tais como digitação de teclas ou cliques do mouse, e observa as mudanças que ocorrem na interface do usuário. Assim, podemos validar se o comportamento observado do software após tais eventos estão corretos.

 

Uma forma de gerar casos de teste automaticamente é utilizando a estratégia de Teste Baseado em Modelos (ver Nota 1), que adota modelos representando o sistema para geração de casos de teste, porém existem outras estratégias interessantes.

 

Nota 1. Teste Baseado em Modelos

Teste Baseado em Modelos (TBM) consiste em uma estratégia de teste na qual casos de teste são derivados totalmente ou parcialmente de um modelo que descreve algum aspecto (ex: funcionalidade, segurança, desempenho, etc.) de um software (UTTING e LEGEARD, 2007). Para sua utilização, é necessário que o comportamento ou estrutura do software (ou parte deles) tenha sido formalizado através de modelos com regras bem definidas (ex: métodos formais, máquinas de estado finito, diagramas UML, dentre outros).

 

A estratégia de TBM normalmente inclui diferentes níveis de abstração, um modelo comportamental/estrutural do software, o relacionamento entre modelos e código, uma tecnologia para geração dos casos de teste, a importância dos critérios de seleção dos testes (algoritmos para geração dos casos de teste) e uma discussão do que pode ou não ser automatizado durante os testes (PRETSCHNER, 2005).

 

O quê automatizar, quando automatizar ou até mesmo se é necessário de fato automatizar são decisões cruciais que a equipe de teste deve tomar. Selecionar as funcionalidades corretas do software para automação é um fator essencial para determinar o sucesso da automação. Automatizar funcionalidades instáveis ou funcionalidades que estão sofrendo alterações constantes deve ser evitado (MARICK, 2010).

Neste artigo, iremos focar apenas em teste de interface, como veremos com mais detalhe na continuidade deste artigo.

Importância da Automação dos Testes

Uma das principais características das atividades de teste de software, assim como a atividade de desenvolvimento de software em geral, é o fato de ser realizada por pessoas, e consequentemente passível de erros. A famosa frase “errar é humano” é o fato que nos leva a desejar testes automatizados. Diversos problemas relacionados aos testes a serem aplicados em um software podem ser evitados a partir da automação desta atividade, dentre os quais:

·         Dados de entrada de teste incorretos, informando valores ou tipos de dados inválidos;

·         Não perceber um comportamento incorreto do software a um certo evento;

·         Reportar os resultados dos testes incorretamente;

·         Esquecer de executar alguns casos de teste;

·         Esquecer de executar alguma pré-condição para execução dos testes;

·         Alteração na execução da sequência de casos de teste, o que poderia levar a execução dos testes a um fracasso.

 

Além de evitar os problemas causados por eventuais falhas humanas, a automação dos testes pode ainda nos proporcionar:

·         Uma forma de armazenar conhecimento sobre o domínio do projeto ou sobre as funcionalidades que compõem o sistema, minimizando a dependência pelas pessoas que compõem o projeto;

·         Garantir a acurácia dos relatórios de teste, pois são gerados de forma automática e sempre seguindo um mesmo padrão;

·         Velocidade na execução dos testes, pois uma vez projetado, sua execução é automática e pode não depender de intervenção humana;

·         Realizar teste em momentos específicos e sempre que necessário, por exemplo, podemos optar por sempre executar os testes a cada modificação no sistema com um esforço baixo, pois os testes já estariam prontos para serem executados;

·         Simplificação nos testes de regressão, pois os testes podem ser repetidos sempre que a equipe de teste julgar necessário com pouco esforço;

·         Possibilidade de testar o sistema com diferentes conjuntos de dados, pois o processo de geração e/ou execução é realizado por um computador, de forma que é mais simples gerar e utilizar nos testes diferentes combinações de dados.

 

Na seção seguinte iremos focar no tipo de automação de teste que iremos seguir neste artigo: teste de interface.

Teste de Interface (Graphical User Interface [GUI] Testing)

Muitas ferramentas de automação provêm funcionalidades de gravar a execução de um software e rodar esta gravação que permitem aos usuários interativamente “filmar” as ações do usuário e repeti-la quantas vezes quiser, comparando os resultados e comportamentos obtidos com aqueles esperados. A vantagem desta abordagem, chamada capture-replay, é que ela requer pouco ou nenhum desenvolvimento de software. Nesta abordagem, uma ferramenta de teste grava as entradas de teste como se estivesse sendo submetido ao software que está sendo testado. Os casos de entrada armazenados podem então ser usados para reproduzir os testes posteriormente. Esta abordagem pode ser aplicada a qualquer aplicação que possua uma interface de usuário gráfica. No entanto, a dependência dessas funcionalidades representa mais problemas de confiabilidade e manutenibilidade. Alterar o nome de um botão ou movê-lo para outra parte da tela pode requerer que os testes tenham que ser regravados. A abordagem capture-replay também muitas vezes acrescenta atividades irrelevantes ou registra incorretamente algumas atividades. Isso são limitações reais desta abordagem, mas ainda assim ela possui bastante aplicabilidade em projetos de software.

Uma variação deste tipo de ferramenta seriam as ferramentas para teste de aplicações web. Neste caso, a interface são as páginas web. Este tipo de ferramenta também requer pouco ou nenhum desenvolvimento de software. No entanto, o framework para testes pode utilizar diferentes técnicas pois ele está lendo HTML em vez de eventos de janela de aplicações.

Por fim, outra variação de automação de testes sem scripts que não usa a ideia de capture-replay, em vez disso constrói um modelo da aplicação a ser testada e então permite ao testador criar casos de teste simplesmente editando os parâmetros e condições de teste. Esta abordagem pode ser aplicada a qualquer software baseado em interfaces.

As ferramentas de automação de teste mais conhecidas podem ser caras, apesar de já existirem diversas ferramentas gratuitas e com um bom conjunto de funcionalidades de apoio à automação dos testes. Por isso, é importante realizar uma análise de custo-benefício no momento de escolher as ferramentas a serem aplicadas em um projeto. A Tabela 1 apresenta uma lista com algumas das ferramentas de automação mais utilizadas.

 

Nome

Empresa

URL

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
04/05/2010 18:32:00





 

Doutor em Engenharia de Sistemas e Computação formado na COPPE/UFRJ e possui o certificado de Implementador do modelo MPS. Possui 7 anos de experiência em análise, desenvolvimento e teste de software. É editor técnico da Revista SQL Magazine, gerenciada pelo Grupo DevMedia.
Arquivo de atualizações
 2010

Estatísticas do Autor:
Número de posts: 4
 
DevMedia Group - Tel: (21) 3382-5038 - www.devmedia.com.br
Todos os Direitos Reservados a DevMedia Group