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
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
|
Nenhum comentário:
Postar um comentário