Testadores Ágeis

Todo mundo sabe que agilidade é sobre testes. Muitos testes. Bem, mais ou menos. Geralmente quando falamos de testes em metodologias ágeis estamos falando de testes escritos pelo desenvolvedor enquanto escreve código, e estes têm dois objetivos: feedback e bom design.

Feedback se consegue ao executar os testes. Quando você escreve uma classe que quebra um teste você sabe que existe algo errado imediatamente. Bom design se dá porque nada alem do necessário é criado, alem de que as tecnologias atuais de testes exigem que seu código siga alguns bons princípios para que seja testável, como bom gerenciamento de dependências.

Existe, entretanto, outro tipo de teste, geralmente feito por um profissional especializado, que chamamos de QA (Quality Assurance). Este teste valida o software de um ponto de vista diferente. Muita gente se engana achando que testes de desenvolvedor são suficientes para validar um sistema. Obviamente que assim como nem todo sistema exige um web designer profissional especializado nem todo exige um profissional de testes, mas a maioria dos projetos que já participei tinham nisso um benefício.

Estava lendo o artigo do Jeff Paton, ex-colega ThoughtWorker, sobre isso e lembrei das minhas experiências com testadores em time ágeis. Mas primeiro talvez seja melhor contar sobre as experiências em times não-ágeis.

Eu trabalhei em uma empresa muito interessante mas com um processo muito estranho. A empresa tem orgulho de usar waterfall para desenvolver seus produtos, ninguém está autorizado a escrever uma linha de código sem escrever 8 documentos. Obviamente todos os projetos atrasam e obviamente o software tem uma qualidade deprimente, mas eles conseguem fazer dinheiro neste cenário –ainda que pagando um preço muito alto.

Teste é uma coisa séria nesta empresa. Os produtos estão sujeitos à regulamentação de telecomunicações de diversos paises, e cada funcionalidade tinha que ser testada de acordo. O fluxo de desenvolvimento era o típico de waterfall, nós desenvolvedores criávamos nossos sistemas (programas em C++ para plataformas UNIX diversas) e enviávamos uma tag do Subversion para a equipe de testes. O testador teoricamente já lera todas as especificações funcionai do produto e já tinha os casos de testes escritos e, talvez, implementados.

Era aí que a brincadeira começava. Na melhor das hipóteses o testador encontrava um bug, rejeitava o pacote (usando um maravilhoso sistema interno desenvolvido em Lótus Notes) e enviava de volta. O desenvolvedor corrigia e o pacote era retestado. Isso nunca acontecia. O que acontecia era:

  • O pacote era aprovado. O desenvolvedor, com o sistema já em produção, olhava o plano de testes por curiosidade e via que eles não testavam absolutamente nada de relevante, ninguém garantia a qualidade do treco
  • O pacote era rejeitado. O desenvolvedor olha ao motivo da rejeição e via que o que estava sendo testado nem de perto era o que o sistema deveria fazer. O testador Não entendeu o documento, muitas reuniões explicando tudo novamente e o pacote era retestado sem modificações
  • O pacote era recebido pelo testador com total surpresa. Era uma aplicação de linha de comando e o testador esperava uma aplicação com interface web, ou o testador esperava que o sistema usasse banco de dados e ele mantinha tudo em memória, ou…
  • O testador rejeitava o pacote porque não sabia como testa-lo. O desenvolvedor não pensava no testador, o testador não pensava no desenvolvedor.

Claro que todos os membros do escritório de projetos (já falei que tínhamos CMMI?) sabiam a solução para estes problemas e é claro que para eles a solução passava pela criação de mais documentos, de 1 a 5 dependendo de quem você perguntasse.

Nas equipes ágeis que trabalhei a coisa era diferente. O testador senta ao lado do desenvolvedor, e por vezes eles trabalham em pair programming (pair testing, provavelmente). O testador está envolvido em todas as tarefas, validando que o que o analista de negócios pede é entregue, que confirma com as premissas do projeto e etc.

Para fazer isso ele está envolvido na elaboração das user stories e, principalmente, dos critérios de aceite definidos nela. Seu trabalho é verificar que os critérios de aceite são obedecidos pela implementação e que eles fazem sentido em primeiro lugar.

Um profissional come site perfil não pode ser simplesmente um usuário. Ele tem que conhecer sobre metodologia de testes de software (um campo enorme por si só), sobre o domínio do sistema e sobre desenvolvimento. Idealmente o testador é um desenvolvedor e sabe criar suas ferramentas. Um testador deve ser capaz de escrever seu próprio programa usando Selenium RC, ou suas fixtures no Fit.

Infelizmente nem sempre isso acontece. Em muitas empresas o cargo de testador é delegado à pessoas que possuem um conhecimento técnico muito baixo e executam tarefas do tipo “aperte o botão e verifique se quebra o layout”. Neste caso os desenvolvedores podem prover as ferramentas para os testadores mas ainda assim eles devem ter capacidade de escrever os casos de testes usando a ferramenta sozinhos.

O papel do testador não é dizer que a aplicação está homologada, na maioria das vezes isso é apenas uma ilusão que gerentes gostam de cultivar. O papel do testador é garantir a qualidade dele submetendo à testes rígidos. Não é um aceite formal, o testador não é quem aprova o software –o analista de negócios ou seu equivalente aprova o software- ele faz parte do desenvolvimento deste.

Minha experiência diz que assim como trabalhar com testadores apertadores-de-botão não agrega nada ao produto alem de burocracia desnecessária, trabalhar com testadores de verdade no time é uma das melhores coisas que pode acontecer num projeto de software.

No meu projeto anterior os testadores chegaram ao time apenas como apertadores de parafusos. Eles clicavam na tela e verificavam que a informação correta era disponibilizada. Como nossa participação no projeto era facilitar a adoção de metodologias ágeis isso tinha que mudar. A primeira coisa foi a participação dos testadores na definição das histórias, eles trabalham junto com o analista de negócios e o usuário definindo critérios. Eles também participam do sign-off da história –quando ela é apresentada aos desenvolvedores que vão executa-la- e quando conclui a história o desenvolvedor az um walkthrough dela para o testador. Em todas as etapas eles agregam informação, questionam as praticas e, principalmente, garantem que o software final é testável.

Foi adicionado ao time de facilitadores um testador especialista em automação –um desenvolvedor exercendo função de QA, basicamente-, a função dele era disponibilizar ferramentas e disseminar seu uso. Com o tempo desenvolvemos uma Internal DSL em Ruby para controlar nossa ferramenta de teste, o Selenium RC. A ferramenta é utilizada por desenvolvedores nos nossos testes de aceitação que fazem parte do build e pelos testadores na hora de dizer que uma história está concluída.

Os resultados desta adoção são excelentes. Quando nossa parte no projeto –facilitar a adoção das praticas- acabou a pessoas estavam aptas à continuar o bom trabalho por si mesmas. Os desenvolvedores ainda criam as ferramentas mas a gerencia, vendo os benefícios, agendou cursos de Ruby e Selenium para a equipe de QA.

5 Responses to “Testadores Ágeis”

  1. GutoCosta says:

    Phillip,

    Excelente artigo. Atualmente trabalho em uma empresa que está implantando um processo de desenvolvimento baseado no RUP.
    Lendo seu texto (a parte de waterfall), vi que é exatamente o que acontece na equipe que trabalho. O testador, escreve um caso de teste baseado em um caso de uso, que é escrito somente porque faz parte da burocracia imposta pelo escritório de projetos, obviamente este UC “nas coxas” (como se diz na minha terra) não é nada bem escrito e é nele que a homologação é baseada. Sabe o que acaba acontecendo, um teste da interface com o usuário. Tem 1 ano que a equipe de teste foi montada, nunca vi eles encontrarem um bug relevante, a não ser interface fora do padrão, mensagens sem pontuação adequada. E algumas vezes bugs são encontrados pelo usuário final e a desculpa é sempre a mesma: “Isto não estava no Caso de Uso”. O testador não participa do desenvolvimento, apenas lê os documentos escritos pelo analista, acho que isso é um grande erro.
    Concordo plenamente com o que vc disse sobre não agregar valor. Pelo contrário, acaba gerando um desgaste na equipe que acaba trocando ícones e reescrevendo mensagens quando o sistemas está em homologação. E o pior, no relatório de bugs, isto tudo é computado como bug.
    Qual o valor agregado em uma equipe assim? Acho que quase 0.
    Valeu
    Parabéns pelo blog.

  2. [...] if (testadores = leitores de docs && apertadores de botão) assert false; Postado no 23, março, 2008 por samuelvalerio   Post interessante do Shoes sobre os testadores. Ele faz um comparativo, baseado em sua experiência, entre testadores ágeis e não ágeis.  Veja aqui! [...]

  3. leandro says:

    Texto interessantíssimo…
    Parabéns PS

  4. André Pinto says:

    É Phillip, salve-se quem puder!
    Atualmente vejo esses testes burocráticos feitos por alguém que nem conhece os requisitos do sistema… Alguns scripts prontos tais como: “Deixe todos os campos em branco e pressione salvar”, “Preencha o primeiro campo obrigatório e deixe os outros em branco”… MEU DEUS! QUE PERDA DE TEMPO E BUROCRACIA… A empresa em questão está no nível 2 do CMMI e rumo ao nível 3 em 2008. Muito bom isso, não??? (tom irônico)

    abs cara!

  5. Alvaroi says:

    CERTIFICAÇÂO DE TESTE SERÁ QUE VALE MESMO?
    Faço testes a 6 anos em uma multinacional CMMI5.
    Muitos processos….
    Tenho curso superior e gosto de estudar.
    Tenho algumas boas certificações, incluindo de teste e sou lider de equipe de teste.
    Porem fui fazer o exame para uma dessas duas mais “famosas” que tem por ai.
    A prova era facil demais!! Se não fechei a prova, foi perto.
    No fim preenchi aquele questionario e marquei NÃO na resposta da pergunta sobre se tinha feito algum curso preparatorio.
    O meu resultado na prova foi 60% mas não fui aprovado por que é ACIMA de 60%.
    Muito estralho viu, parecer ate que existe algo “esquisito” nestas certicações.
    Sem ela minha experiencial vale menos no mercado?
    Testo, faço carga, faço design, homologo, acompanho em
    produção, etc. Tudo fora do processo as vistas grossas da diretoria.
    O trabalho sai!
    Estes caras acham que com um sismples certificação (estas duas ai) vão pode ser melhor que quem não tem?
    testadores = leitores de docs && apertadores de botão
    Um barço a todos!

Leave a Reply