QA

by Agile.Inc Agile.Inc Nenhum comentário

Você sabe qual a diferença do QA Tradicional e do QA Ágil?

Entenda como o papel do Analista de Testes ou QA é determinante para a qualidade de produtos digitais

Por Rodrigo Matola
Pessoa digitando num computador

A maneira como desenvolvemos produtos está mudando constantemente. Atualmente empresas em todo mundo estão adotando o desenvolvimento ágil de produtos, utilizando alguns de seus frameworks (Scrum, Kanban, Lean…).

Essa nova maneira de trabalho afeta todos os cargos tradicionais, incluindo Analistas de Testes, ou QA (Quality Assurance).

Neste artigo, vamos falar de uma maneira básica sobre as diferenças entre QAs tradicionais e QAs Ágeis, além de um breve conceito sobre agilidade e o framework Scrum.

Contexto tradicional x Contexto ágil

Em um contexto tradicional, os passos do projeto são planejados com antecedência, antes do seu início. O escopo é definido e não pode ser alterado após iniciado o desenvolvimento. Qualquer mudança requer uma aprovação e um novo contrato entre as partes. A data de entrega também é definida.

Para passar de um estágio para o próximo, é necessário inspeção e aprovação. Esse contexto também é chamado de cascata (waterfall), e geralmente segue o modelo da figura abaixo:

No modelo ágil, o software é entregue em pequenos pedaços, geralmente já funcionais, em um prazo que varia de uma semana a um mês, no caso do framework Scrum. Com estes pequenos incrementos funcionais, é possível se adaptar rapidamente a mudanças. Ser ágil não é ser rápido, mas ser adaptativo!

QA tradicional

Com base a figura acima, vemos que os testes só acontecem no quarto estágio do projeto. Nesta etapa, o software está praticamente pronto.

Geralmente, no contexto tradicional, QAs não têm contato direto com os desenvolvedores. Nesta situação, QAs praticamente caçam bugs, às vezes sendo a quantidade de bugs encontrados, uma medida de desempenho.

Nestas circunstâncias, somente QAs são responsáveis pela qualidade do produto. São eles  que garantem que os requisitos foram atendidos corretamente. Qualquer erro no software, ou não conformidade com os requisitos, a responsabilidade é exclusiva da pessoa QA.

O Manifesto dos Testes

O Manifesto Ágil foi criado por um grupo de pessoas que queriam mudar a maneira de como softwares eram desenvolvidos. Alguns anos depois, seguindo os passos do Manifesto Ágil, foi criado o Manifesto dos Testes:

  • Testar por todas as etapas MAIS QUE testar no final;
  • Prevenir bugs MAIS QUE encontrar bugs;
  • Testar o entendimento MAIS QUE checar funcionalidades;
  • Construir o melhor sistema MAIS QUE quebrar o sistema;
  • Time responsável pela qualidade MAIS QUE responsabilidade exclusiva de QAs.

QA Ágil

Pegando como referência o Manifestos dos Testes, vamos aqui descrever um pouco de como deve ser o comportamento de QAs Ágeis. Assim como no Manifesto Ágil, valoriza-se mais o item à esquerda que o item à direita – não é uma substituição, você vai continuar fazendo o que está à direita, entretanto, vai priorizar a esquerda (não confundir com política ok!?). Sendo assim, o QA Ágil deve:

Testar por todas as etapas [mais que] testar no final

Os testes devem começar já na reunião de planejamento. A partir dos critérios de aceite definidos, já é possível pensar nos casos/cenários de testes que serão feitos. 

Se o time já tem mentalidade voltada a testes e realizam TDD, BDD ou outra técnica, é hora de combinar a divisão dos testes (aplicação da pirâmide ou outra estratégia); definir o que vale a pena ser automatizado; como será a integração contínua, etc.

Também é recomendado que QAs façam code review e pair programming. Muitos bugs e inconsistências podem ser pegos durante o desenvolvimento somente observando o código, o que leva ao próximo tópico…

Prevenir bugs [mais que] encontrar bugs

Com os testes sendo feitos durante o desenvolvimento, a chance de um bug ir para produção é muito menor. Nessa fase a correção do bug pode ser imediata, pois o time de desenvolvimento está trabalhando na funcionalidade.

Dependendo do conhecimento, no momento que o bug é descoberto, a própria pessoa QA pode corrigi-lo.

Testar o entendimento [mais que] checar funcionalidades

A qualidade vai além de verificar se o software funciona como foi descrito. Isso pode ser feito por um robô.

Qualidade também engloba o entendimento da necessidade do usuário e garantir que essa necessidade é realmente o que o usuário precisa. Para isso o usuário também deve participar junto com o time no desenvolvimento, dentro do possível.

Construir o melhor sistema [mais que] quebrar o sistema

Como parte de um time, apontar defeitos e encontrar meios de quebrar o sistema vai contra o objetivo de entregar o melhor software possível. Temos que ter em mente que um software sem defeitos, nem sempre significa um software de qualidade.

O melhor sistema é aquele que resolve as dores de seus usuários. Trabalhe para isso.

Leia também: O que é de fato a Transformação Digital?

Time responsável pela qualidade [mais que] responsabilidade exclusiva de QAs

Colocar a responsabilidade da qualidade em apenas uma pessoa ou área é isentar outras pessoas envolvidas no processo de qualquer problema que será identificado. 

Todos que fazem parte, direta ou indiretamente, do desenvolvimento de uma solução devem ser responsáveis por entregar o melhor possível dentro do seu papel.

QAs podem não ser desenvolvedores no sentido de serem a pessoa que codifica a aplicação, mas desenvolvem testes e fazem parte do time de desenvolvimento. Todos que contribuem com o desenvolvimento do produto, incluindo designers/UX, são desenvolvedores e devem se responsabilizar pela qualidade do que vai ser entregue.

Trabalho em conjunto

Como o time é responsável pela qualidade, QAs devem estar presentes em todas as etapas do desenvolvimento, ajudando o time a entregar o melhor produto. A figura abaixo mostra como, em cada etapa da Sprint, QAs podem contribuir com suas próprias responsabilidades e ajudando membros do time.

E também, como parte do time:

  • ajudam a descobrir o produto certo;
  • colaboram para especificar;
  • pensam em exemplos;
  • refinam as especificações criadas pelo time;
  • automatizam as especificações;
  • ajudam a manter a Integração Contínua;
  • ajudam a manter a Documentação Viva atualizada e acessível.

QAs tradicionais x QAs Ágeis

Resumindo em tópicos as diferenças entre QAs tradicionais e QAs Ágeis são:

Além disso, QAs Ágeis:

  • estão sempre aprendendo novas habilidades e tecnologias, se adaptando a mudanças;
  • praticam comunicação clara e efetiva, colaborando com pessoas técnicas e não técnicas;
  • entendem do negócio, defendem o produto e colaboram com o cliente;
  • disseminam a cultura de qualidade e cuidam da saúde do time;
  • promovem e obtém feedbacks, tendo coragem de expor o que errado e elogiando o que está certo;
  • se mantém simples e auto-organizado, não dependendo de instruções para realizar suas atividades;
  • gostam do que fazem 🙂

E você, está no contexto tradicional ou ágil? Se no tradicional, gostaria de ir para o ágil? Se no ágil, faz o foi descrito no texto ou já está além? Deixe um comentário aqui!

by Agile.Inc Agile.Inc Nenhum comentário

A importância da Pirâmide de Testes para a qualidade de softwares

O risoto de sobras é uma ótima analogia para explicar de forma didática a relevância da pirâmide de testes para os stakeholders

Por Rodrigo Matola

Às vezes é difícil para um stakeholder que não técnico entender a importância de testar bem uma funcionalidade antes de colocar a aplicação em produção. Sempre ouvia: “eu entendi a importância da pirâmide de testes, mas preciso lançar isso ao final da próxima Sprint. Se colocar testes unitários vai demorar mais pra entregar, eles não são prioridade”.

Com isso, pensei em algumas analogias para poder explicar a pirâmide de testes e sua importância durante o desenvolvimento de um produto digital. Vamos falar agora do “risoto de sobras”!

Como fazer um risoto de sobras

Lembro muito bem do risoto que minha mãe e tias preparavam no dia seguinte de alguma festa, principalmente as de fim de ano, na casa da minha falecida avó, com as sobras. Eu gostava ainda mais quando o risoto ia ao forno.

Entretanto, fazer esse risoto é bem simples. Com a ajuda de mais duas pessoas, no mínimo, para formar um time de 3 e otimizar o processo. Pode chamar mais, se quiser, mas é recomendável que o time não ultrapasse 9 pessoas. Siga essas instruções:

– Faça uma nova panela de arroz e misture com o arroz que sobrou (e que não dá pra todos comerem);

– Pegue as sobras das carnes de porco, peru, chester, tender e todas as outras disponíveis. Desfie e misture no arroz;

– Pegue todas as outras sobras, pique em pequenos pedaços. Misture na mistura anterior;

– Coloque queijo parmesão ralado por cima e leve ao forno até gratinar.

Agora vamos começar as analogias…

Colocando em produção

Ao servir o risoto, cada pessoa a mesa faz o “download” para o seu prato. Aí começam as reclamações: “Tá com gosto azedo”; “Isso tá estragado!”; “Eu achei doce”; “Doce? Minha parte estava extremamente salgada!”. 

Cada pessoa relata um bug diferente. Você terá que jogar o risoto fora e tomou um prejuízo grande, já que terá que pedir comida pra família toda agora sairá caro… Mas antes, como stakeholder, você quer descobrir o que deu errado. Mas como descobrir o que está errado dentro dessa mistura toda?

Aplicando a pirâmide de testes

Voltando ao desenvolvimento de produtos digitais, após a analogia contada acima, podemos entender o quanto é importante o processo de testes para garantir a qualidade do produto final. Para isso, podemos elencar:

Testes unitários

Voltando no tempo, até o momento da montagem da equipe, para evitar que o ocorrido contado anteriormente aconteça, cada participante do seu time deveria provar o ingrediente antes de colocá-lo no risoto. O teste unitário de cada item deve ser realizado primeiro. Esses testes mostrariam que o arroz que foi deixado fora da geladeira, estaria azedo e que a carne de porco estava estragada, por exemplo.

Os testes unitários servem justamente para testar a menor parte de um sistema. No risoto, testaria se cada ingrediente estava bom para ser adicionado. Num código, testa-se cada unidade (função, objeto, entre outros) está se comportando e respondendo como deveria frente a vários cenários.

Testes de integração

Mesmo que cada unidade esteja pronta e de acordo com as especificações passadas é preciso também verificar se, quando colocados juntos, eles combinam, ou seja, se integram.

Voltando a analogia do risoto de sobras, vamos primeiro pegar a reclamação que “o risoto estava muito salgado”. É preciso ir testando a quantidade de sal até que ela fique ideal. Apesar do sal ter passado no teste unitário de validade, no de integração ele retornou um valor muito maior que o esperado, que “quebrou” o risoto.

Já na reclamação do muito doce, foi pedido que se colocasse azeitonas pretas. Mas, a pessoa que ficou encarregada dessa parte não conhecia bem o negócio e colocou uvas-passas. O teste unitário passou, apesar de ter sido desenvolvido errado, mas no de integração não passaria. Nesse caso, o teste unitário deve ser refeito.

Testes funcionais e exploratórios

Mesmo que a azeitona preta se integre bem com o arroz, por exemplo, talvez não “funcione” se misturar outro ingrediente junto. A cada incremento do risoto (software) é preciso testar se está “funcionando” como o esperado. Se alguém resolve colocar castanhas ou amendoim no risoto simplesmente porque gosta, apesar de funcionar e ficar gostoso, outros convidados podem não gostar ou terem alergia.

No mundo de softwares, pode ser que alguém tenha feito uma implementação diferente da que estava na especificação ou até invente uma. Com os testes funcionais é possível identificarmos isso. 

Como extensão, se alguém deixou passar um pedaço de osso, somente um teste exploratório iria detectar. Nesse caso, o erro estaria em uma parte específica do risoto (código) que somente um usuário na mesa (produção) iria achar.

Testes de regressão

Também devemos “testar” (provar) o risoto a cada implementação. Ao adicionar sal, teste para ver se ficou salgado. Teste a consistência do arroz para ver se precisa de mais água e cozinhar mais.E coloque o sal e a água aos poucos. Se colocar uma quantidade fixa desses ingredientes, pode ficar salgado, virar uma canja ou ficar cru.

Trazendo esse exemplo para o desenvolvimento de softwares, teste-o por completo a cada nova implementação. E não faça implementações gigantescas, como colocar a quantidade final de sal e água juntos, por exemplo. Faça pequenos e constantes lançamentos, de somente uma funcionalidade, pois se der algo errado, fica mais fácil de consertar.

Testes de aceitação

Por último, deve ser realizado testes com o produto completo antes de ser servido. Não é aconselhável uma só pessoa testar, mesmo que tenha especificações detalhadas, pois o produto final será consumido por várias pessoas. Quanto mais pessoas provarem (testarem), mais qualidade seu produto final terá!

No caso do risoto, não é viável fazer um teste automatizado (utilizando uma análise química, por exemplo). Os testes tem que ser manuais e exploratórios, mas no caso de um software, os testes podem (e devem) ser automatizados, deixando os manuais para cenários que não valem a pena o esforço de automação.

Conclusão

Esse exemplo do risoto de sobras é uma maneira diferente que usamos para explicar a pirâmide de testes para pessoas sem base de programação, a importância de dividir e, principalmente, fazer testes durante o ciclo de desenvolvimento e não apenas no final.

Testar cada elemento de um produto digital antes de oferecer ao público pode realmente demorar um pouco mais. Entretanto, assegura que o produto tenha uma melhor qualidade e que os clientes finais fiquem mais satisfeitos.

Gostou do texto? Tem dúvidas sobre o processo de automação de testes? Deixe seu comentário aqui!

Ainda tem dúvidas de como implementar esses testes, marque um bate-papo conosco, nós podemos te ajudar!

 

Por que os processos Ágeis não estão ajudando na Transformação Digital?

Top