Uma jornada de descobertas e aprendizado com testes exploratórios
Conheça as técnicas de testes exploratórios e aplique como um profissional
Na sua trajetória, provavelmente você foi desafiado a testar um software desconhecido e com base no que aprendeu, utilizando softwares similares, deve ter desenhado um caminho a ser explorado. Durante o percurso deve ter tomado notas sobre o que encontrou e aprendeu sobre o software. Este é o ciclo que compõe os testes exploratórios, você desenha e executa os testes com base na sua experiência, interpreta os resultados e aprende no processo.
Para James Bach e Michael Bolton, precursores do termo testes exploratórios, testar é um processo de avaliar um produto, aprendendo sobre ele através de exploração e experimentação, o que inclui questionamento, estudo, modelagem, observação, inferência, verificação de saída, etc.
Testes exploratórios possuem uma natureza empírica e criativa, porém você pode fazer o uso de técnicas para orientar seus testes. Vamos discuti-las a seguir.
Hipótese
O pesquisador Lee Copeland propôs testes com base na criação de uma hipótese. O ciclo é bem prático, a partir da hipótese criada são planejados os cenários de teste para comprovar se ela é verdadeira ou não; e ao executar os testes você analisa os resultados encontrados com base na hipótese. É importante lembrar que estamos usando cenários de testes que não possuem entradas e saídas definidas, permitindo a pessoa que testa ter liberdade para explorar o cenário proposto. Você poderia criar a seguinte hipótese para um software web moderno onde geralmente há muitas camadas de elementos, cada qual com o seu propósito com por exemplo:
Hipótese 1: O menu superior do software web moderno deve ser apresentado à frente de todos os outros elementos flutuantes na tela de dashboard.
Cenário 1: Realizar scroll na tela com menus flutuantes em foco.
Histórico de Falhas
Quando as falhas que ocorreram no software são conhecidas, pode-se utilizar a técnica de testes exploratórios com base no histórico de falhas. É comum que falhas encontradas durante o desenvolvimento de software sejam registradas em uma ferramenta de gestão de bugs, servindo como base para a realização de novos testes como por exemplo:
O código-fonte do software X está sendo melhorado pelo time de desenvolvedores e é de conhecimento do(a) QA que o software X possui um histórico de falhas crítico no cálculo da funcionalidade Y; ciente desse histórico, o(a) QA utilizando o mesmo raciocínio de quando a falha foi identificada anteriormente, ele(a) explora os módulos do software X validando se existem outras falhas similares, dessa forma mitigando que a mesma falha ou similares ocorram novamente.
Heurísticas
A pessoa que testa pode aprimorar seus testes exploratórios tornando-os mais estruturados com o uso de heurísticas. Trata-se de processos cognitivos que ajudam a encontrar respostas em condições de incerteza. Seus modelos são concisos e fundamentados a partir de princípios de como testar um software em um contexto específico.
Para melhor compreensão do uso desta técnica vou exemplificar a heurística criada pela Karen Nicole Johnson para testes de regressão, que é composta por 6 características e forma o mnemônico RCRCRC.
[R]ecent
- Foram criadas novas funcionalidades no software?
- Foram adicionadas novas áreas no código?
- Quais testes devo executar para mitigar riscos nas alterações novas?
[C]ore
- Quais funcionalidades são essenciais neste software e devem permanecer funcionando?
- Quais testes devo executar para mitigar impactos nas funcionalidades essenciais?
[R]isk
- Quais áreas do software e/ou do código apresentam maior vulnerabilidade a riscos?
[C]onfiguration
- Qual parte do código depende de configuração de ambiente?
- Quais testes devo executar com base em ambiente?
[R]epaired
- Qual parte do código foi alterada pela correção do defeito?
- Essa correção impacta em outras partes do código?
- Essa correção impacta em outras funcionalidades do software?
- Quais testes devo realizar com base nos defeitos corrigidos?
[C]hronic
- Quais partes do código e/ou funcionalidades possuem histórico de falhas?
- Quais testes exploratórios deve realizar com base no histórico de falhas?
Oráculos
O uso das heurísticas nos ajuda a entendermos o que testar, já com o uso de princípios heurísticos de um oráculo podemos identificar possíveis inconsistências no software. James Bach, junto com Michael Bolton, criaram um conjunto de princípios de oráculo que formam o mnemônico (F)EW HICCUPPS. Cada letra representa a letra inicial de um dos princípios: Familiarity, Explainability, World, History, Image, Comparable Products, Claims, User’s Desires, Product, Purpose, Statutes.
Memorizar e praticar esses princípios pode ajudar você a otimizar a forma de reconhecer inconsistências e dar mais credibilidade a seu relatório de incidentes ou sessão, ao relacionar a inconsistência encontrada com o princípio do oráculo, exemplo:
Ao executar um teste exploratório guiado pelo princípio heurístico Statutes (Estatutos) você espera que o software seja consistente com uma lei e/ou regulamento. Os princípios do oráculo direcionam o seu teste e ajudam a encontrar comportamentos distintos do esperado e também a descreve-los de maneira concisa.
Testes Baseados em Sessão
E para finalizar temos os testes baseados em sessão, criados por Jon e James Bach, com o objetivo de tornar testes exploratórios mais amigáveis para a gestão de projetos. Essa metodologia é composta por uma sessão, um charter e um relatório.
A sessão é o tempo definido para a execução dos testes, conhecida também como timebox, sendo recomendado de 45 até 90 minutos.
Os charters são criados para documentar os testes; a seguir conheça o modelo de charter proposto pela pesquisadora Elizabeth Hendrickson:
Explore uma funcionalidade, um módulo
Com o uso de uma técnica, uma ferramenta
Para descobrir (Quais informações espero encontrar?)
Durante a execução do charter você pode anotar os resultados identificados no relatório de sessão, que contêm informações sobre o charter como:
- Horário de início da sessão;
- Quem realizou o teste;
- Tempo dedicado para finalizar cada etapa (execução, investigação, configuração, charter e oportunidade);
- Imagens da tela adicionadas para evidenciar a inconsistência;
- Criação de bugs;
- Registro de dúvidas para serem verificadas após finalizar a sessão.
Este artigo foi criado com o propósito de compartilhar com a comunidade o que tenho aprendido e praticado nas mentorias do Júlio de Lima e em tantas outras leituras complementares de referências da área de testes de software.
Lembre-se que nenhuma técnica de testes exploratórios é completa por si só, por este motivo você pode combinar diferentes técnicas para obter melhores resultados como por exemplo: usar duas heurísticas durante uma sessão, usar o modelo de charter enquanto explora o software com base em uma hipótese ou histórico de falhas.
Espero que as técnicas de testes exploratórios apresentadas aqui demonstrem o valor de sua aplicação no seu dia a dia.
Referências
- Teste Explorátorio 3.0 de James Bach e Michael Bolton (texto original) https://www.satisfice.com/blog/archives/1509
- Teste Explorátorio 3.0 de James Bach e Michael Bolton (traduzido por Rafael Bandeira) https://medium.com/artigos-traduzidos-do-rapid-software-testing/teste-explorat%C3%B3rio-3-0-6abfb8042b2b
- Artigo de Karen Nicole Johnson sobre a heurística RCRCRC http://karennicolejohnson.com/2009/11/a-heuristic-for-regression-testing/
- Vídeo do Julio de Lima sobre teste exploratório – descubra quando usar, quais são as formas de uso e como documentar. https://www.youtube.com/watch?v=CoTsVixyQlo
- Vídeo de Elisabeth Hendrickson sobre seu livro Explore It! https://www.youtube.com/watch?v=9FKY1Is0lgs
- Oráculo (traduzido por Rafael Bandeira) https://medium.com/artigos-traduzidos-do-rapid-software-testing/few-hiccupps-7b54fc1b36bc
- Heurísticas de teste de software: o que são e seus benefícios https://medium.com/revista-tspi/heur%C3%ADsticas-de-teste-de-software-o-que-s%C3%A3o-e-seus-benef%C3%ADcios-4a59996ca1ec
- Mentoria em testes de software — módulo 8: Identificando o que testar https://programa.juliodelima.com.br/
#exploratorytesting