Monkey Tests: Conceito, Origem, Objetivos e Aplicação
Monkey Testing é uma técnica de testes de software na qual a aplicação é testada através de testes aleatórios e não estruturados, de forma a simular o comportamento de um "macaco" que utiliza o software sem ter qualquer conhecimento prévio ou plano de como o fazer.
O principal objetivo deste tipo de testes é detectar falhas que possam acontecer em cenários imprevistos ou não cobertos pelos testes convencionais.
Origem
O termo "Monkey Testing" deriva da ideia de que se dermos um teclado a um macaco, este irá pressionar as teclas de forma aleatória e inconsciente. Este conceito foi adoptado pelo mundo dos testes de software, baseando-se na ideia de executar acções aleatórias e observar como o software reage.
Surgiram assim como uma forma complementar aos testes tradicionais, conseguindo identificar problemas que poderiam ser esquecidos ou nem sequer previstos durante o desenvolvimento e execução dos testes planeados.
Curiosidade
Embora a origem do nome "monkey" seja incerta, alguns acreditam que o nome tem a ver com o teorema do macaco infinito, que afirma que um macaco que pressiona teclas aleatoriamente em um teclado de máquina de escrever por um período infinito de tempo quase certamente digitará um texto dado, como as obras completas de William Shakespeare.
Outros acreditam que o nome vem da aplicação clássica do Mac OS "The Monkey", desenvolvido por Steve Capps antes de 1983. Este usava ganchos de journaling para alimentar eventos aleatórios em programas Mac e também era usado para testar bugs no MacPaint.
Principal Objetivo
O principal objetivo dos Monkey Tests é descobrir falhas inesperadas ou comportamentos anómalos, que não seriam identificados com os métodos de teste mais estruturados e tradicionais.
E isto consegue-se ao fazer o seguinte:
Simular a utilização real: reproduzir a forma como um utilizador comum ou um utilizador mal-intencionado pode interagir com o software.
Identificar problemas de robustez: verificar a robustez e a estabilidade da aplicação sob condições imprevisíveis.
Revelar cenários não planeados: através da exposição de falhas que não foram antecipadas pelos casos de teste tradicionais.
Utilização prática
O Monkey Testing é mais utilizado em:
Aplicações Móveis, pois a variedade de dispositivos e a natureza imprevisível das interações dos utilizadores pode levar a falhas não previstas.
Sistemas com interação humana intensa, pois estes utilização aplicações que têm interfaces gráficas complexas e dependem fortemente da interação do utilizador.
Ambientes de desenvolvimento ágil, nos quais a necessidade de testes rápidos e frequentes pode beneficiar de um teste não estruturado e aleatório.
Resultados Esperados
Os resultados esperados incluem:
Detecção de erros, pois serão identificadas falhas e bugs que não tinham sido ainda detectados pelos testes estruturados.
Comportamento anómalo, através da observação de comportamentos estranhos ou inesperados no software.
Crashes e falhas, com a identificação de condições que levam a crashes ou falhas do sistema.
Principais beneficiários
Os principais interessados na aplicação prática dos Monkey Tests são:
Software QA, ao utilizarem estes testes para complementar os testes tradicionais e garantir a robustez do software.
Programadores, que beneficiam da identificação precoce de falhas inesperadas, permitindo que as mesmas possam ser corrigidas antes do lançamento.
Gestores de projetos, interessados em garantir que o produto é robusto e livre de falhas críticas que possam afetar a experiência do utilizador final.
Exemplos de Monkey Testing
Aplicações Móveis
Utilizar ferramentas que simulam toques, swipes e interações aleatórias, para testar a interface e a resposta da aplicação.
Aplicações Web
Enviar requests HTTP aleatórios para os endpoints de uma API, para verificar como é que o sistema lida com entradas inesperadas.
Ferramentas de Monkey Testing
MonkeyRunner: Uma ferramenta do Android para testes automatizados em aplicações móveis.
Chaos Monkey: Uma ferramenta da Netflix que desactiva aleatoriamente instâncias de serviços em produção, para testar a resiliência do sistema.
Monkey Test Tool (MST): Utilizada para testes aleatórios em aplicações Android.