domingo, 23 de março de 2014

Testes de Regressão: Manuais ou Automáticos?



A questão que surge em cada fase do desenvolvimento é que os testes de regressão após cada iteração levam muito tempo, e muitas vezes a funcionalidade que está a ser validada não sofreu alterações. Consequentemente, a possibilidade de existirem defeitos é muito baixa. Como resultado natural, chegamos a uma ideia de automatizar todos os cenários de regressão e em detrimento dos testes manuais de regressão. As vantagens são evidentes:

  • os testes automatizados são mais rápidos do que os manuais ;
  • os testes automatizados podem ser realizados em qualquer momento;
  • os testes automatizados são muito precisos;
  • a automatização pode ser utilizada em quase todos os processos de teste;
  • pode-se criar relatórios com base nos resultados da automatização.

Mas, infelizmente, a automatização dos testes de regressão tem muitas armadilhas que raramente são discutidas.

Antes de começar a automatizar testes de regressão é necessário resolver algumas questões: 
  • Que funcionalidade deve ser coberta pelos testes;
  • Definir a arquitectura dos testes automáticos;
  • Escolher uma ferramenta para automatizar de testes de regressão.
Vamos ver situações reais na prática. Na fase de mudança de testes manuais para testes automatizados, tive um projecto onde eu tinha que testar o registo de dois tipos de contas para um site em 43 domínios, consoante país. Era um autêntico inferno. O cliente não se preocupava com a qualidade da informação apresentada. Os requisitos eram os seguintes:
  • as contas são criadas sem erros fatais ;
  • os dados introduzidos coincidem com os valores que são exibidos nas configurações após a criação.
Depois de duas execuções percebi que era demais. Na altura, só conseguia ver que o número de campos de registo é diferente em alguns países e também tinha alguma experiência em programação em C#. Havia a possibilidade de automatizar os testes regressão e não hesitei. Pedi a um amigo familiarizado com automatização para descrever e mostrar como se escrevem testes. Depois de muitas perguntas, tentativas e erros, nasceu um teste simples de navegação. Descobri locators e web drivers Selenium - e eis que, todos os domínios utilizavam os mesmos locators. Pouco mais tinha para fazer: executar última regressão manual da minha vida em todos os domínios e preencher a tabela com os correspondentes campos e domínios. Outra sessão de regressão manual - um longo processo para fechar o círculo - e tudo parecia terminado.

Gozei cada uma das regressões seguintes. Pude assistir a algumas séries de TV enquanto executava a regressão. E, por sinal, cada uma demorava apenas o tempo de um episódio. Enquanto eu costumava gastar cerca de 4 a 5 horas em testes de registos nos 43 domínios, os testes de regressão automatizados demoravam 40 a 45 minutos.

Considerando isto, podemos chegar à conclusão nº1: para ver as vantagens da automatização de testes, devemos começar com os testes mais frequentes, que geralmente são positivos, e que devem ser executados após cada release.

Isso continuou durante várias releases até que a empresa decidiu oficialmente automatizar a maioria das funcionalidades. E como o cliente não era muito conhecedor em testes de automatização decidimos automatizar toda e qualquer coisa que caísse no âmbito do meu conhecimento de automatização de testes.

Como resultado, cobrimos quase todo o sistema com testes automáticos. Tudo estaria bem, mas depois de qualquer correcção alguns testes começavam a falhar. Na maioria dos casos, isso acontecia porque tínhamos grandes scripts que tinham muitos passos:

·         Num primeiro passo do teste o sistema era colocado num determinado estado; quando o erro surgia no segundo passo, já não tinha sentido executar os restantes passos;
·         Cenários longos contêm muito código e acções como estas; como resultado, repetir os primeiros passos podia fazer com que muitos testes falhassem.
·         Devido à repetição do código, os testes automáticos validam o mesmo ponto muitas vezes, o que provoca um aumento desnecessário da duração dos testes.

Com base nisso, podemos chegar à conclusão nº 2: cenários demasiado longos devem ser executados manualmente, pois consome-se muito tempo a escrevê-los e estes podem falhar devido a pequenos bugs ou erros de menor importância.

Vamos considerar uma outra situação muito interessante. O cliente pediu testes automáticos, como é habitual, e solicitou que apresentássemos alguns exemplos. Ele aprovou a ideia, e alguns dias depois adicionamos automatização de testes ao planeamento. Mas os nossos programadores atrasaram-se e, os testers tiveram que escrever testes automáticos com base numa versão provisória. Dois dias depois os programadores concluíram o trabalho, mas mais da metade dos testes automáticos falhou.

Conclusão nº 3: nunca começar a escrever testes automatizados, sem que exista uma versão estável.

Há pouco tempo atrás, tivemos uma situação engraçada. Tínhamos recebido um pedido de testes automáticos a um site e tudo tinha de ser feito rapidamente. Tudo correu melhor do que nunca. Algumas semanas depois, o cliente enviou uma carta reclamando que os testes não funcionaram. Percebemos que ele tinha iniciado um redesenho do site e todos os testes tinham falhado. Isto ensinou-me a fazer testes estáveis.

Portanto, a conclusão n º 4 é: quando for possível, usar os locators de modo que os elementos possam ser encontrados após pequenas mudanças.

Assim, as vantagens de testes manuais vêem-se claramente: não dependem de nada e podem ser feitos em qualquer momento. Prescindir dos testes manuais não vai trazer nada de bom. Testes manuais e automáticos estão inter-relacionados e complementam-se; cada um tem vantagens e desvantagens. Antes de pensar em automatizar cenários de regressão devemos avaliar o tempo a escrever os dois tipos de testes e o apoio destes. E lembre-se que os especialistas em testes manuais geralmente ganham menos do que aqueles que têm competências em automatização de testes.

Como sempre, é tudo uma questão de dinheiro. Se a automatização de cenários de teste de regressão economiza dinheiro sem perder a qualidade do produto, então pode-se alargar o leque de cenários automatizados, elevando a qualidade do produto e reduzindo custos. O ponto de equilíbrio é uma decisão de cada um de nós e depende da experiência e das preferências pessoais.

--------------------------------


domingo, 9 de março de 2014

Tipos de Testers

Traduzido e adaptado por João Fialho.



Comportamento: Mede qualidade, fala de qualidade, impõe qualidade, pune aqueles que não têm qualidade
"Inimigos" favoritos: Gestores de Projecto, Programadores e por vezes outros Testers
Frase preferida: Qualidade, Qualidade e Qualidade
Notas: Apenas focados em qualidade. Perfeccionista. Designados por polícias da qualidade. Exigem qualidade em todas as fases dos projectos. Este perfil vive, respire e dorme a pensar em qualidade.




Comportamento: Quando encontra um erro entra em pânico, esbraceja, grita e deita lágrimas de horror
"Inimigos" favoritos: Developers
Frase preferida: “Não dá, não dá, não dá! Não funciona!”
Notas: Atitude exagerada quando encontra algum bug, seja um bug com pouca ou muita criticidade.




Comportamento: Ri-se, brinca, atira piadas e diverte-se com o seu trabalho
"Inimigos" favoritos: Test Team Leaders
Frase preferida: “Sabes o que era capaz de ser giro?”
Notas: Trabalha para fazer um bom trabalho mas também para se divertir com aquilo que está a fazer. Após horas de trabalho, este perfil consegue manter a boa disposição e mandar uma boa piada.
Cria dados de teste engraçados.
A sua maneira de ser, pode transparecer para outras áreas alguma falta de rigor ou de qualidade.




Comportamento: Encontra bugs de forma instantânea, está no lugar certo à hora certa
"Inimigos" favoritos: Gestores de Projecto, Developers e outros Testers
Frase preferida: “Eu não vou à procura de bugs, eles é que me encontram”
Notas: Assim que começam a testar uma aplicação que já foi testada, encontram bugs imediatamente.
Assim que eles mexem em alguma coisa encontram logo problemas.
Todos os testers, em algum momento ou em algum projecto, usufruem desta magia.
Poucos testers conseguem ter esta capacidade permanentemente.




Comportamento: Ao encontrar bugs dá murros na mesa, pontapés na cadeira, grita e revolta-se.
"Inimigos" favoritos: Developers e Gestores de Projeto
Frase preferida: “I'm gonna put my fist through it”
Notas: Má atitude quando encontra bugs. Pior ainda quando é obrigado a registá-lo ou a verificar que a correcção não resolveu o problema.
Detesta programadores gestores de projecto e utilizadores finais.
Dá um murro na mesa quando ouve os programadores a perguntar “Isto é realmente um bug?”.




Comportamento: Para encontrar bugs explora todos os caminhos possíveis, normalmente usa phones, toma montes de notas e efectua testes pouco usuais.
"Inimigos" favoritos: Tester com o perfil “The Checklister”
Frase preferida: “Este teste parece-me interessante”
Notas: Exploram a aplicação à procura de cenários interessantes e reagem à medida que vão sendo devolvidas informações pelo sistema, alterando os seus casos de teste originais.
A capacidade inventiva que colocam na identificação dos bugs encontrados, originam bugs dificeis de identificar e de corrigir.
Este perfil testa qualquer coisa em qualquer estado, não estando limitado a nenhuma checklist.
Atribuem pouca importância aos casos de testes pré-definidos.




Comportamento: Verifica e valida constantemente, sejam bugs, correções ou regressão.
"Inimigos" favoritos: Tester com o perfil “The Explorer”
Frase preferida: “Mas no caso de teste não diz para validarmos isso”
Notas: Perfil com dois extremos.
Por um lado temos o tester inexperiente que apenas executa tarefas pré-definidas de forma robotizada, não colocando em causa nem os testes nem a aplicação. (esta é a visão que leva as pessoas a acreditar que todos os testes podem e devem ser automatizados).
Por outro lado temos o tester que utiliza checklist’s para efectuarem validações específicas e essenciais numa determinada fase do projeto.
Utiliza checklists para armazenar informações e recolher métricas.
A sua “Praia” são os testes de regressão.




Comportamento: Ri-se bastante, conversa muito, aprecia o seu trabalho e diverte-se com ele.
"Inimigos" favoritos: Praticamente não tem “inimigos”
Frase preferida: “Vamos fumar um cigarro e falar sobre isso”
Notas: Todas as equipas devem ter um.
Não gosta de monotonia nem de rotinas.
Organizam eventos e são bons a quebrar o gelo entre as equipas.
É sem dúvida o Manager dos coffee breaks e dos jantares de equipa.
Por vezes, precisa de um abanão para não se deixar entusiamar em demasia com as actividades extra laborais.




Comportamento: Tudo é automatização e automatizável
"Inimigos" favoritos: Manual Testers
Frase preferida: “Eu não posso efectuar essa tarefa utilizando esta ferramenta?”
Notas: Vivem para automatizar e automatizam tudo.
Falam com um programador e agem como um tester.
Este perfil normalmente sabe um pouco de tudo, usando um leque alargado de ferramentas, tem habilidade natural para construir código aliada a uma compreensão orientada aos testes.
Quando está restringido a apenas uma ferramenta, perdem a chama que poderiam ter, uma vez que estão limitados à resolução de um conjunto restrito de problemas.





Comportamento: Incialmente está um pouco confuso sobre o que deve realmente fazer um Tester
"Inimigos" favoritos: Testers séniores
Frase preferida: “Não percebo nada de testes, estou apenas a dar uma ajuda”
Notas: Um Drafter é normalmente alguém de outra equipa que integra a equipa de testes.
Por vezes, as equipas de gestão inserem estes elementos em equipas de testes porque pensam que todos podem efectuar testes de software. Outras vezes são inseridos apenas para ajudar.
Alguns deles têm a tendência a continuar a desempenhar funções de tester ao longo da sua carreira e percebem que tem essa aptidão.
Normalmente a aquisição de novos testers é feita através desta experiência.
A partir do momento em que o Drafter começa a defender como requisito fundamental do seu trabalho a qualidade de um sistema, e começa a levantar questões difíceis de resolver, passa a ser assumidamente um Tester.

------------------------------------
Texto original: Tester Types ( Rob Lambert)


segunda-feira, 24 de fevereiro de 2014

Aumentar a eficiência dos Testes de Regressão


Os testes de regressão são essenciais, pois visam encontrar falhas no software após alterações de código, mudanças de ambiente ou apoio à finalização (release) de um produto.

Com os testes de regressão também se pretende garantir a confiança do utilizador de que a nova versão do produto é melhor do que a anterior. Embora muitas empresas ainda ignorem a sua necessidade e deixem de executar testes após a finalização do produto, esta fase de testes não deve ser menosprezada.

Seguem-se cinco formas possíveis para executar testes de regressão sobre um produto de software.

1. Executar todos os testes existentes

Isto significa que todos os Casos de Teste desenhados e executados anteriormente devem ser executados após a finalização do produto. No entanto, se todos estes são manuais, os testers vão ter um enorme volume de trabalho. Provavelmente, não existem tempo nem recursos disponíveis para isso. Na maioria dos casos, é impossível realizar 100% dos testes planeados.

2. Executar testes de alto risco

Neste método, devemos ter em consideração os testes que apresentam o maior valor para os utilizadores e para o negócio. A maioria destes testes foca-se nas funcionalidades e as actividades mais frequentes dos utilizadores e do negócio. Não é exagero afirmar que com mudanças no produto, os processos-chave do negócio também podem mudar. Sugerimos que se atribua 30-40% do tempo total de regressão para os testes de risco elevado (dependendo de outras coisas que devem ser testadas).

3. Testar funcionalidades mais propensas a bugs

As funcionalidades mais complexas são aquelas onde é mais provável que se encontre maior quantidade de bugs.
Geralmente a complexidade inclui cálculos complicados e integração de diversas aplicações. As funcionalidades que têm um registo histórico de muitos defeitos também devem ser classificadas neste grupo.

4. Testes Exploratórios

Neste tipo de testes vamos desenhando o Caso de Teste à medida que o vamos executando. No decorrer da construção e execução de testes exploratórios podemos identificar problemas que nos levam a executar outros testes.

5. Automatização de Testes

Podemos reduzir a quantidade de testes a executar manualmente se recorrermos à automatização. Para a execução rápida, devemos usar ferramentas que reduzam significativamente o tempo de execução dos testes. No entanto, é importante prever algum tempo para o desenvolvimento de scripts de automatização. Também devemos ter presente que se houver mudanças no ambiente é muito provável que esses scripts precisem de ser actualizados.

Estes 5 métodos podem ser usados na execução de testes de regressão de forma a garantir a qualidade do software a entregar.

-------------------------------------

quarta-feira, 19 de fevereiro de 2014

Testes de Regressão: cinco ideias chave



Os testes de regressão são realizados para garantir a correcção de bugs não têm impacto sobre o funcionamento do produto; para isso procuramos novos bugs no software já testado. Por outro lado, é importante executar testes de regressão sempre que se introduzem alterações na Base de Dados ou nos programas, quando se corrigem bugs e quando se muda para uma rede ou sistema operativo diferente.

Seguidamente apresentam-se 5 passos para ajudar à realização sistemática de testes de regressão.

Passo 1

Prever algum tempo para execução de testes. Como o tempo é o primeiro constrangimento de todos os testers, estes devem ser suficientemente experientes para conseguir avaliar todas as áreas do software num curto espaço de tempo.

Passo 2

Corrigir todos os factores envolvidos. Há casos em que, mesmo com os defeitos corrigidos, o produto não funciona como pretendido. Isso geralmente deve-se a uma incapacidade do programador para corrigir os problemas que estão na raiz dos defeitos, corrigindo apenas os problemas secundários. Portanto, é fundamental para identificar todos os factores que provocam o problema e corrigi-los antes dos outros.

Passo 3

Ter cuidado com os bugs corrigidos. Por vezes, quando os programadores corrigem certos bugs, pode acontecer que novos bugs passem despercebidos. Por isso, quando se executam testes de regressão, os testers devem estar cuidadosamente atentos.

Passo 4

Concentre-se em aspectos funcionais. Durante os testes de regressão apenas devem ser considerados os aspectos que afectam a funcionalidade da aplicação. Aspectos estéticos são igualmente importantes; no entanto, na maioria dos casos, não devemos gastar tempo com eles.

Passo 5

Construa o seu conjunto de testes de regressão. Criar esse conjunto é útil para identificar os bugs quando o software é novamente testado.

Siga estas cinco ideias chave para assegurar que não perde nada durante a execução de testes de regressão.

------------------------------

Traduzido e adaptado de: A QuickGuide To Regression Testing