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.
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:
- CppTest: <http://cpptest.sourceforge.net>
- csUnit: <http://www.csunit.org>
- Eclipse: <http://www.eclipse.org>
- JMeter: <http://jakarta.apache.org/jmeter>
- JSUnit: <http://www.jsunit.net>
- JUnit: <http://www.junit.org>
- Selenium: <http://www.seleniumhq.org/>
- SUnit: <http://sunit.sourceforge.net>
- TestNG: <http://testng.org/doc/>
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>
Exemplo de teste automatizado com o JUnit |
Nenhum comentário:
Postar um comentário