domingo, 17 de maio de 2020

Automação de Testes

Testes automatizados

Testes automatizados são programas ou scripts simples que exercitam funcionalidades do sistema sendo testado e fazem verificações automáticas nos efeitos colaterais obtidos. A grande vantagem desta abordagem é a de que todos os casos de teste podem ser fácil e rapidamente repetidos a qualquer momento e com pouco esforço.

A reprodução de um teste automatizado inúmeras vezes, em situações específicas, garante que passos importantes não sejam esquecidos, e isto, sem dúvida, evitará uma situação indesejável.

Além disso, como os casos para verificação são descritos através de um código interpretado por um computador, é possível criar situações de testes bem mais elaboradas e complexas do que as realizadas manualmente, possibilitando qualquer combinação de comandos e operações. A magnitude dos testes pode também ser facilmente alterada. Por exemplo, é trivial simular centenas de usuários acessando um sistema ou inserir milhares de registros em uma base de dados, o que não é factível com testes manuais.

Fonte: Kalakruthi

Uma prática comum no passado (até a década de 1990) era criar uma função de teste em cada módulo ou classe do sistema que continha algumas simulações de uso da unidade. O problema desta prática estava na falta de organização, já que o código adicional era misturado ao próprio sistema afetando a legibilidade do código. Por isso, surgiram os frameworks, que auxiliam e padronizam a escrita de testes automatizados, facilitando o isolamento do código de teste do código da aplicação.

De acordo com Lages (2010), a escolha dos testes automatizados candidatos, ou seja, os mais críticos, deve ser realizada com base no planejamento de um projeto de automação. O autor afirma que apesar de não existir uma categorização amplamente difundida, a experiência tem mostrado que os testes candidatos são normalmente agrupados nestas quatro áreas:

  • Smoke tests ou testes de fumaça, em que um conjunto mínimo de testes é selecionado com o objetivo de validar um build antes do início de um ciclo de testes.
  • Testes de regressão: os testes são selecionados com o objetivo de executar o reteste de uma funcionalidade ou da aplicação inteira.
  • Funcionalidades críticas: os testes são selecionados com o objetivo de validar as funcionalidades críticas que podem trazer riscos ao negócio.
  • Tarefas repetitivas: os testes são selecionados com o objetivo de reduzir o envolvimento dos testadores em atividades manuais repetitivas e suscetíveis a erros, tais como cálculos matemáticos, simulações, processamentos, comparações de arquivos ou dados etc.

Vidal (2017, p. 220) afirma que

[...] a automação dos testes exige a complementação do modelo com os requisitos de software configuration management (SCM) e quality assurance (QA), pois estes requisitos incorporam qualidade e já deixam a infraestrutura preparada para suportar os testes automatizados e de regressão.

Quando executar os testes automatizados

Existem testes rápidos e alguns mais demorados para serem realizados. A definição de prioridades é essencial para o sucesso na execução dos testes automatizados. Mas deve-se tratar esta questão com cuidado, pois o custo da criação dos testes automatizados normalmente pode ser bem maior do que a dos testes manuais, principalmente por causa da estrutura por trás deste ambiente.

É importante ressaltar, ainda, que executar testes com frequência é fundamental. É mais vantajoso executar baterias pequenas e frequentes de testes do que uma rara e grande bateria. Além disso, as baterias de testes que não são executadas com frequência podem se tornar obsoletas, correndo o risco de ficarem desatualizadas e, consequentemente, não acompanharem a evolução natural dos componentes relacionados.

Ainda é importante destacar que quanto mais obsoleto se torna um teste, mais caro fica, comprometendo recursos e podendo, no momento mais importante, não atender aos objetivos dos testadores. Também a não execução periódica pode causar acúmulos de erros ou falhas que podem tornar a implementação de melhorias incompatível com o cumprimento de prazos estabelecidos.

Há softwares gratuitos que podem ser utilizados, oferecendo uma base ou referência para a execução de testes automatizados de software. Alguns exemplos, em ordem alfabética, são:

Além destas ferramentas, também existem linguagens específicas que podem ser usadas, como:

  • DOM (document object model), que é uma linguagem para permitir que programas acessem e modifiquem dinamicamente objetos de um documento HTML: <http://www.w3.org/DOM/>
  • XPath - XML path language é uma linguagem para identificar trechos específicos de um arquivo XML: <http://www.w3.org/TR/xpath>
Para ilustrar o uso de uma destas ferramentas, consideremos um exemplo para aplicações Java com o auxílio do JUnit. Os testes são organizados em casos de teste definidos através de anotações Java @Test antes da definição de cada método de teste. O framework também possui uma gama de métodos auxiliares para comparar os efeitos colaterais esperados com os obtidos, tais como assertEquals, que compara a igualdade do conteúdo de objetos, assertSame, que compara se duas referências se referem ao mesmo objeto, e assertNull,que verifica se uma dada referência é nula, entre outros.
Exemplo de teste automatizado com o JUnit
Fonte: <ime.usp.br>

Nenhum comentário:

Postar um comentário