Blog > Testes exploratórios (Parte 2): Gestão de testes exploratórios

13/jan

Este artigo apresenta ao leitor uma introdução sobre testes exploratórios, seus benefícios e limitações. Ao longo do artigo é descrito o método de gestão de testes exploratórios chamado SBTM (Gerenciamento de Testes Baseado em Sessões). Além disso, são elencadas as principais ferramentas de apoio à execução e gestão de testes exploratórios.

Introdução

Teste exploratório é uma abordagem de testes ad hoc que enfatiza as habilidades do testador em tomar decisões sobre o que será testado durante a execução do teste ao invés de seguir um roteiro previamente planejado. Michael Bolton no artigo "Evolving Understanding About Exploratory Testing", descreve as principais características dos testes exploratórios:

  • O projeto, execução, interpretação e aprendizado são realizados pela mesma pessoa;
  • O projeto, execução, interpretação e aprendizado acontecem juntos, ao invés de serem executados em momentos diferentes no tempo;
  • O testador faz as suas escolhas sobre o que será testado, quando testar e como testar, ao invés de seguir cegamente um roteiro;
  • O testador enfoca em revelar novas informações sobre o produto, ao invés de confirmar coisas já conhecidas sobre o produto;
  • Tudo o que o testador aprendeu de novo durante o teste, incluindo o resultado do último teste, serve como subsídio para decidir o que será testado a seguir;
  • O testador pode usar qualquer tipo de ferramenta automática para apoiar o seu teste ou decidir não usar nenhuma ferramenta;
  • O testador pode variar diversos aspectos durante a execução dos seus testes, ao invés de repeti-los da mesma forma continuamente.

Nos últimos anos o uso de heurísticas tem sido o método comumente usado para tornar a geração de idéias de testes exploratórios uma disciplina mais sistemática. Com o objetivo de facilitar o entendimento e aprendizado das heurísticas, especialistas de todo mundo utilizam técnicas mnemônicas para compartilhar suas experiências em larga escala.

No entanto, teste exploratório sempre é associado a idéia de testes informais, aleatórios, superficiais e desorganizados, ou seja, os testadores encontram defeitos acidentalmente. Além disso, os defensores de abordagens de testes tradicionais apontam que a falta de mecanismos gestão é uma das principais limitações encontradas nos testes exploratórios. Para eles, o teste exploratório é uma caixa preta, onde não é possível planejar o escopo do que será testado, acompanhar o progresso do teste, gerar métricas e indicadores de cobertura, entre outras restrições.

Estas limitações são conhecidas pela comunidade que defende o uso de testes exploratórios. Quando o teste exploratório é executado sem nenhum planejamento mínimo, ele é chamado de teste exploratório freestyle. James Bach, no artigo “Exploratory Testing Explained”, destaca que o teste exploratório freestyle não se baseia em objetivos claros ou escopo do que será testado e produz como resultado apenas o registro dos defeitos encontrados durante a exploração.

Para compensar estas limitações, muitos especialistas em testes de software estão propondo diversos métodos para o gerenciamento dos testes exploratórios, tais como Thread Based Test Management, 8 Layer Model, SBTM, SBT Lite, entre outros. Este artigo apresentará a estrutura do método SBTM - Session Based Test Management (Gerenciamento de testes baseado em sessões) para a gestão de testes exploratórios.

Gerenciamento de testes baseado em sessões

Dentre os métodos de gestão de testes exploratórios existentes, o SBTM (Gerenciamento de testes baseado em sessões) é de longe o mais conhecido e documentado na literatura. No artigo “Session-Based Test Management“, Jon Bach, um dos seus idealizadores descreve o nascimento do método da seguinte forma (tradução livre): “A primeira coisa que notamos durante nossos esforços de reinventar o gerenciamento de teste exploratório foi que os testadores faziam diversas coisas durante o teste que não eram exatamente teste. Neste caso, se fosse necessário rastrear e controlar apenas o teste, seria necessário diferenciar teste das demais atividades. Em função disso, nasceu o gerenciamento por sessões. Cada sessão é composta por um período de tempo ininterrupto e obedece uma missão pré-definida, além disso, uma sessão deve produzir resultados tangíveis e revisáveis”.

De forma complementar, James Bach, irmão de Jon Bach e também idealizador do SBTM, descreve no artigo “Exploratory Testing Explained“ o método de gestão da seguinte forma: “o gerenciamento de teste baseado em sessões é um método de gestão projetado para tornar o teste exploratório auditável e mensurável”. Bach, resume as características básicas do método de gestão baseado em sessões da seguinte forma: “Em uma sessão de trabalho com um período pré-determinado de tempo, um testador explora o software para cumprir os objetivos de uma missão e ao final apresenta os resultados”.

Como podemos notar, em ambos os casos, a estrutura geral do gerenciamento de testes baseado em sessões contém os seguintes elementos principais: missão, sessão, testador e resultados. Nos próximos tópicos, vamos analizar detalhadamente cada um destes elementos e entender quais as vantagens do gerenciamento de testes baseado em sessões em comparação com o teste exploratório freestyle.

Missão

A missão determina o objetivo do exploratório de forma sucinta, como se fosse um caso de teste resumido. No entanto, a missão descreve o que deve ser testado (não como o teste deve ser realizado). Normalmente uma missão é descrita na hora da execução do teste exploratório, no entanto, ela pode ser escolhida dentre uma lista de missões pré-existentes (repositório de missões). É importante destacar que as missões não são estáticas. Ao longo do tempo elas são re-priorizadas e aperfeiçoadas (além disso, novas missões podem ser criadas ao longo do tempo). Muitas vezes, ao final de uma sessão de teste exploratório, novas idéias, oportunidades ou problemas encontrados pelo testador podem ser usados para a criação de novas missões. Em resumo, uma missão pode ser criada a partir de várias origens, tais como:

  • Reuniões/Conversas com usuários, desenvolvedores, gerentes, etc;
  • Estórias/Requisitos;
  • Itens do menu do software;
  • Defeitos;
  • Oportunidades percebidas durante uma sessão de teste exploratório;
  • Manuais/Regulamentos/Leis;
  • Softwares concorrentes/similares;
  • Versões antigas do mesmo software;
  • Heurísticas;
  • Brainstorms;
  • Feeling do testador;
  • Riscos;
  • Entre outros.

As missões não devem ser muito específicas (testes exploratórios com duração inferior a 45 minutos) ou muito genéricas (testes exploratórios com duração superior a 2 horas). No que tange o formato das missões, não existe um padrão ou consenso universal. No entanto, Elisabeth Hendrickson, no artigo "Exploratory Testing in an Agile Context", recomenda que as missões sejam escritas no seguinte formato:

  • Explore (uma estória, funcionalidade, área, risco, etc)
  • Com (recursos, restrições, heurísticas, táticas, etc)
  • Para (descobrir informações, obter respostas, atingir um objetivo)

Sessão

Uma sessão compreende um período ininterrupto de tempo com duração de cerca de 1 a 2 horas. Jon Bach, no artigo “How to Manage and Measure Exploratory Testing”, recomenda 90 minutos no máximo. Para Bach, sessões com menos de 45 minutos são classificadas como “Curta”, sessões com 90 minutos são classificadas como “Normal” e sessões com aproximadamente 2 horas são classificadas como “Longa”. O foco da sessão de teste exploratório é cumprir o objetivo de uma missão. Idealmente, para cada missão, deveria ser executada apenas uma sessão de teste exploratório. No entanto, podem ocorrer várias sessões de testes exploratórios para uma única missão.

De forma geral, o que ocorre durante uma sessão é responsabilidade do testador. Além de cumprir o objetivo da missão, é permitido explorar oportunidades, questões pendentes, ou qualquer coisa que o testador julgar relevante. Adicionalmente, durante a sessão o testador também investiga e registra defeitos, assim como, configura e prepara o ambiente de testes. Grosso modo, uma sessão é composta pelas seguintes atividades:

  • Preparação (Setup): Preparação do ambiente de testes, configuração de massa de dados, leitura de manuais, requisitos, diagramas, etc;
  • Especificação (Design): Definição (modelo mental) dos casos de testes (hipóteses) baseados em heurísticas, idéias, checklists, riscos, feeling, etc;
  • Execução (Execution): Execução propriamente dita do teste exploratório para demonstrar se as hipóteses/expectativas da missão foram atendidas (ou não);
  • Oportunidades (Opportunities): Tempo gasto em atividades/explorações/investigações que não estão no escopo da missão;
  • Relato de defeitos (Bug investigation/Report): Investigação e registro de defeitos.

Testador

Na abordagem clássica, os testes exploratórios não são definidos antecipadamente em um plano ou roteiro de testes, eles são dinamicamente projetados, executados e aprimorados durante a exploração com base na intuição, julgamento e experiência do testador. Dessa forma, uma vez dado ao testador uma missão de testes, é de sua responsabilidade usar os mecanismos e artifícios necessários para inventar, improvisar e, até mesmo, aplicar técnicas formais de projeto de casos de testes para determinar quais hipóteses e experimentos serão executados para demonstrar se a missão de testes foi atendida (ou não).

James Bach em 2003, no seu famoso artigo “Exploratory Testing Explained” afirma que o teste exploratório se torna mais interessante e sofisticado quando observado sob a ótica das habilidades do testador. O que torna o teste exploratório tão eficiente e eficaz são as habilidades do testador de ouvir, observar, pensar e relatar rigorosamente os testes sem a necessidade de instruções detalhadas. De maneira complementar, no artigo “Dynamics of Exploratory Testing”, Jon Bach descreve diversas habilidades que todo testador deveria ter para realizar testes exploratórios, como pode ser observado na listagem abaixo (tradução livre):

  • Navegar/Mapear: Tomar as suas próprias decisões sobre o que será testado e como será testado. Entender as necessidades dos clientes, os problemas que deverão ser resolvidos e assegurar aos clientes que o teste está focado nos objetivos;
  • Manipular: Fazer e gerenciar o contato com objeto do seu estudo (o sistema que está sendo testado). Configurar e interagir com o sistema. Projetar experimentos (testes) e estabelecer procedimentos para o ambiente/laboratório de testes;
  • Observar: Levantar dados empíricos sobre o objeto de estudo (o sistema que está sendo testado). Coletar diferentes tipos de dados ou dados de diferentes aspectos;
  • Modelar: Compor e trabalhar com modelos mentais sobre as funções que serão exploradas. Identificar dimensões, variáveis e fatores dinâmicos que são relevantes ao teste;
  • Conjeturar: Considerar possibilidades e probabilidades. Considerar múltiplas explicações para o mesmo fato;
  • Questionar: Identificar informações ausentes e elaborar perguntas de forma a encontrar as informações desejadas;
  • Registrar: Preservar informações sobre o processo de trabalho, progresso e descobertas. Tomar notas, categorizar e classificar;
  • Relatar: Relatar profissionalmente os resultadas das explorações de forma oral ou escrita;
  • Acessível: Acesso a recursos e ferramentas para apoiar a exploração. Acesso a pessoas que possam ajudar de alguma forma;
  • Focar (re-focar): Gerenciar o escopo, profundidade e natureza da atenção;
  • Desviar/Retomar: Permitir o desvio produtivo de um caminho para outros caminhos possíveis com o objetivo de explorar novas idéias que surjam em determinado momento. Identificar oportunidades sem perder o foco;
  • Refinar: Trabalhar rapidamente da melhor maneira de acordo com as circunstâncias. Revisar uma solução posteriormente de forma a refina-la, aprimora-la e corrigi-la;
  • Alternar: Alternar entre diferentes atividades ou perspectivas diferentes de forma a permitir um progresso mais rápido.

Com base no que foi exposto, podemos afirmar que uma parcela significativa do sucesso do teste exploratório gerenciado por sessões depende da experiência, intuição e julgamento do testador que irá conduzir a exploração. Dessa forma, se o teste exploratório for conduzido por profissionais experientes, muitos defeitos importantes serão encontrados rapidamente, já que é exigido menos planejamento e preparação (em comparação com estratégias tradicionais de testes).

Resultados

No gerenciamento de testes baseado em sessões, cada sessão de teste exploratório resulta em um conjunto de notas escritas que pode ser revisados por alguém (um líder de testes, um gerente, o cliente, etc). Esta é uma das características fundamentais que diferenciam esta abordagem de testes exploratórios em relação ao teste exploratório freestyle. Jon Bach, no artigo “How to Manage and Measure Exploratory Testing”, recomenda: “durante o teste exploratório o testador deve registrar os resultados no relatório da sessão”. Este relatório inclui a descrição da missão, o nome do testador, notas sobre o que foi testado, o ambiente de testes, arquivos de dados, defeitos encontrados, incidentes que precisam de investigação, entre outras informações.

Jon Bach, no artigo "Session-Based Test Management", afirma que o relatório da sessão deve conter algumas métricas básicas em relação a distribuição do tempo durante a exploração. Bach, recomenda o registro das métricas TBS. TBS é o acrônimo para as seguintes métricas:

  • (T) Test Execution/Design: Percentual do tempo total gasto na criação e execução dos testes exploratórios;
  • (B) Bug Investigation/Report: Percentual do tempo total gasto na investigação e relato de defeitos;
  • (S) Setup: Preparação: Percentual do tempo total gasto em prepação (estudo, configuração de hardware/software, outras atividades não relacionadas ao teste, etc).

No teste exploratório, os testadores são encorajados a investir parte do seu tempo em investigações de áreas não relacionadas ao escopo da missão. Este desvio do objetivo da missão é chamado de “Oportunidade”. Para fins de registro, é recomendado que seja relatado o tempo gasto em oportunidades (em comparação ao tempo total gasto na exploração dos objetivos da missão).

Ao final de uma sessão, o testador deverá apresentar o relatório da sessão e as métricas TBS para o líder de testes. Esta prestação de contas tem o objetivo de dar visibilidade em relação ao que foi explorado, os problemas encontrados e os próximos passos. Jon Bach, no artigo "How to Manage and Measure Exploratory Testing”, recomenda que a reunião de prestação de contas siga a estrutura descrita pelo acrônimo PROOF:

  • (P) Past (passado): O que aconteceu durante a sessão?;
  • (R) Results (resultados): Quais resultados foram obtidos durante a sessão?;
  • (O) Obstacles (obstáculos): Quais obstáculos atrapalharam a exploração?;
  • (O) Outlook (previsão/perspectiva): O que ainda falta fazer?;
  • (F) Feelings (sentimentos): Como o testador se sente (em relação ao teste ou a qualidade do sistema)?

Ferramentas de apoio

Com vimos anteriormente, o teste exploratório depende exclusivamente da criatividade, intuição e julgamento do testador. Em função disso, o teste exploratório não pode ser automatizado. No entanto, o testador pode fazer uso de ferramentas para apoiar a gestão do teste exploratório. Ao invés de usar planilhas ou arquivos, o testador pode utilizar ferramentas especializadas em gestão de testes exploratórios para descrever as missões, registrar o status das sessões, apontar métricas, entre outros recursos. Dentre as ferramentas mais conhecidas, podemos citar:

Adicionalmente, o testador pode fazer uso de ferramentas para registrar as evidências da execução do teste exploratório. As evidências podem ser capturadas por meio do registro de comentários, vídeos e imagens. Dentre as ferramentas existentes, podemos destacar as seguintes:

Conclusão

Desde sua criação há cerca de 10 anos atrás, o teste exploratório vem paulatinamente conquistando espaço dentro das empresas. No entanto, a carência de métodos de gestão e ferramentas de apoio sempre foi um entrave para o uso de testes exploratórios em larga escala.

Neste cenário, o SBTM (Gerenciamento de testes baseado em sessões) foi um divisor de águas para a comunidade de testes em função de ser um método de gestão leve e fácil de aplicar. Além disso, o SBTM permite o controle sem o peso da burocracia comum a métodos de gestão tradicionais.

POSTS RELACIONADOS

AGENDA

CURSOS RELACIONADOS