No modelo Tradicional de desenvolvimento de software, composto por fases bem definidas, o tester atuava apenas em sua fase específica, recebia como entrada em sua fase os artefatos da fase anterior, trabalhava “no seu quadrado” e gerava seu artefato que seria direcionado àlguma outra fase. No caso de bugs encontrados, as evidências obtidas retornariam para o time de desenvolvimento através de ferramentas específicas para essa comunicação.
O tester tradicional tinha em seu mindset:
- Procurar bugs
- Garantir o atendimento dos requisitos
- Resistência a mudanças
- Qualidade é responsabilidade do tester
- Trabalhar separado do time de desenvolvimento
- Teste é uma fase
- Teste é no final do desenvolvimento
O desenvolvimento ágil de software mudou completamente o mindset do tester e a forma como esse profissional trabalha. Ao contrário de como o tester via o processo de desenvolvimento de um produto, de forma apartada, isolada, no contexto ágil o tester passa a ser parte do time de desenvolvimento e seu mindset se transforma. Agora o tester trabalha na prevenção de bugs, garante que as expectativas do cliente sejam claras, aceita novas ideias, a qualidade é responsabilidade do time e o tester é parte dele e o teste é uma atividade do processo de desenvolvimento de software.
Toda essa mudança de postura e do trabalho desempenhado pelo profissional de testes está baseada na mudança de paradigma quanto ao desenvolvimento de software, que passou de um modelo em cascata ou Waterfall para o modelo Ágil. O modelo Ágil é composto por princípios, os quais são condensados no Manifesto Ágil e descritos por meio de quatro valores:
- Indivíduos e a interação entre eles mais que processos e ferramentas
- Software em funcionamento mais que documentação abrangente
- Colaboração com o cliente mais que negociação de contratos
- Responder a mudanças mais que seguir um plano
Para o agile tester, seu trabalho e sua postura dentro de um time de desenvolvimento também são guiados por princípios ágeis. Veremos cada um desses princípios.
1. Comunicação face-a-face
O Método mais eficiente e eficaz de transmitir informações para o time e dentro de um time de desenvolvimento. Diferentemente do modelo tradicional onde o tester não tinha acesso ao time de desenvolvimento, no Ágil, o tester é parte desse time, o coder está sentado ao seu lado e a comunicação basta ser face-a-face, eliminando a burocracia.
2. Feedback contínuo
Diz respeito à prática de testes automatizados, desde os testes unitários até os testes de interface, dentro da pirâmide de testes. Os testes automatizados proporcionam o feedback rápido (unitários e de serviço) e contínuo, sendo executados num ambiente de Integração Contínua. Incluindo a garantia de testes regressivos, que dá segurança na hora de fazer mudanças no software e passa confiança para o time de desenvolvimento em relação ao trabalho que está sendo desenvolvido.
3. Melhoria contínua
Buscar sempre trabalhar da melhor forma e entregar o melhor, em valor, para o cliente e para o usuário final. A melhoria contínua é tanto de processos quanto de pessoas. Times ágeis são focados em fazer sempre o melhor e para isso, utilizam, como no Scrum, os valores da transparência, inspeção e adaptação para melhorarem continuamente seu processo de desenvolvimento e a si mesmos como pessoas e profissionais.
4. Ter coragem
A coragem é fundamental para times ágeis. É preciso coragem para fazer alterações no software ou refatorar. Para mudar de paradigma, sair do mindset tradicional e migrar para o ágil, é preciso ter coragem. Compartilhar a responsabilidade, pedir ajuda, propor mudanças ou soluções, apontar problemas, permitir-se errar ou os outros errarem são exemplos para os quais é preciso ter esse princípio como base.
5. Entregar valor para o cliente
Para entregar valor para o cliente, o tester precisa estar próximo dele, entender suas necessidades e ajudá-lo a transformar suas necessidades em cenários de testes voltados ao negócio que servirão para a validação de uma entrega ao final de uma iteração. No desenvolvimento ágil, o tester atua tanto no time de desenvolvimento quanto no time de negócio, sendo o ponto de ligação entre os dois mundos. O tester consegue conversar com as pessoas de negócio, entender o negócio, levantar questões técnicas durante as explanações de negócio, fazer perguntas que levem ao melhor entendimento sobre cada regra de negócio ou feature debatida. Assim, o tester pode ajudar o time de desenvolvimento a desenvolver aquilo que atende à necessidade de negócio e a entregar o valor esperado pelo cliente, além de utilizar suas habilidades técnicas para suporte e construção de uma suíte de testes automatizados durante o desenvolvimento.
6. Manter simples
Este princípio para os testers é especialmente delicado, pois por meio de sua visão crítica e analítica, o tester consegue pensar em diversos cenários que podem ocorrer quando do uso do usuário e, consequentemente, o tester quer testar todos esses cenários. No entanto, dentro de uma iteração curta de desenvolvimento, nem sempre dá para se testar todos os cenários levantados. Com isso, é necessário simplificar, utilizando as ferramentas mais leves para realizar o trabalho e priorizar juntamente com o cliente e com o time de desenvolvimento qual a área de maior risco no desenvolvimento, onde se encontra o maior retorno para o cliente dentro das funcionalidades em desenvolvimento, onde se encontra a maior dor do cliente. São essas questões que guiarão o trabalho do tester para testar “apenas o suficiente” com as ferramentas e técnicas mais leves.
De acordo com a priorização será realizado o trabalho de testes. Manter simples ajuda o time de desenvolvimento a manter o foco no risco, maior retorno e dor para o cliente.
7. Responder a mudanças
Diferentemente do modelo tradicional de desenvolvimento onde o planejado no início era levado à cabo, muitas vezes deixando de considerar as mudanças ocorridas durante o período de desenvolvimento, no contexto de desenvolvimento ágil, o time precisa responder às mudanças que naturalmente ocorrem durante esse período. Assim, o tester precisa se adaptar e ter uma postura flexível para entender o contexto e ver como pode ajudar o time de desenvolvimento a entregar valor e software com qualidade durante as iterações. Aprender novas habilidades, manter-se atualizado com novas tecnologias, fazer pareamento, cuidar da saúde do time, são algumas das atitudes que um tester pode ter para responder às mudanças ocorridas durante o desenvolvimento do produto.
8. Auto-organização
Times ágeis são auto-organizáveis. O time se auto organiza para resolver um problema ou enfrentar um desafio da melhor forma, utilizando as habilidades de cada membro do time com a maior eficiência. E essa auto-organização emerge do próprio time. Essa característica é importante para o tester ágil, pois, como membro desse time, ele precisa ter essa visão e autonomia para se auto-organizar e também colaborar com o time no mesmo propósito.
9. Foco em pessoas
Agilidade tem muito mais a ver com humanidade do que com burocracia de processos, documentos e ferramentas. Ser ágil é muito mais ser humano do que ser metódico e procedural. Focar em pessoas é aplicar todos os outros princípios já mencionados e manter a proximidade com as pessoas envolvidas no desenvolvimento de um produto. É saber que todos têm o mesmo objetivo de sucesso e podem se ajudar para o alcançarem. Focar em pessoas é cuidar da saúde do time.
É muito bom trabalhar num ambiente colaborativo e com pessoas motivadas e felizes com seu papel. Parece utópico, mas é um ideal que podemos buscar e ver resultados concretos no dia a dia, desde que assim acreditemos e trabalhemos por alcançá-lo.
10. Divertir-se
Um tester ágil não pode ser o “chato” do time, aquele que só reclama e aponta os “bugs” e “acusa” os outros. Isso não tem nada a ver com Agile Testing. O tester ágil é alguém que consegue viver a partir desses princípios e colocando-os em prática, torna sua profissão atraente para o time, agrega valor ao time de desenvolvimento e ao produto. É alguém que passa confiança, que está preocupado com o bem-estar da equipe, com o valor entregue, com o desenvolvimento, com o produto e principalmente, com as pessoas envolvidas (clientes, time de desenvolvimento, usuário final). Quando o tester ágil e o time atingem essa maturidade, é divertido ser um tester. =)
Conclusão:
O tester deixa de ter uma atuação em uma fase de desenvolvimento apenas, como no modelo tradicional de desenvolvimento de software e passa a ter um papel atuante e fundamental para o desenvolvimento de um produto, desde o entendimento do negócio até a entrega do produto final. O tester passa a ter habilidades diferentes, tanto técnicas quanto de negócio e de desenvolvimento de produto. Ou seja, ser tester, no contexto ágil, vai muito além de “achar bugs”. Para isso, não é preciso, necessariamente, de um tester, temos várias ferramentas de monkey testing e outras que podem encontrar bugs em menos tempo, menor custo e maior velocidade do que uma pessoa. No entanto, para agregar valor ao desenvolvimento de um produto, agregar valor ao time de desenvolvimento e ser uma referência em qualidade, para isso o Agile Tester é fundamental dentro de um time ágil.
Ser um tester ágil é ser alguém que serve ao time, ao cliente, à empresa com suas habilidades e capacidade crítica e analítica, não fica apontando falhas ou erros de outros, mas busca soluções para os problemas.
Qual é sua visão ou experiência com Agile Testing? Trabalha em um time ágil? Fique à vontade para compatilhar nos campos abaixo. Até a próxima!