Testes de software no modelo ágil - SoftDesign
Durante o desenvolvimento de um software podem surgir questionamentos no time sobre a responsabilidade pela qualidade e pela execução de testes de software. Em uma edição extraordinária do SoftDrops*, o agilista Raphael Rodrigues conversou com os colegas sobre como os testes podem ser realizados no modelo ágil por todo o time, compartilhando assim a responsabilidade com a qualidade.
Para iniciar a discussão, o conceito de teste de software foi definido como a avaliação do software contra os requisitos coletados dos usuários e as especificações do sistema – sendo composto por etapas de verificação e de validação. Nesse sentido, a verificação é necessária para avaliar se o que foi planejado realmente foi realizado; ou seja, se os requisitos e funcionalidades documentados foram implementados. Já a validação tem o objetivo de avaliar se o que foi entregue atende às expectativas do cliente; isso é, se os requisitos estão sendo implementados para atender a regra de negócio do cliente.
Quem pode realizar testes em um projeto?
Após a definição de conceitos, Raphael reforçou que, em um modelo ágil, todos os integrantes de um time podem realizar testes, além do Quality Assurance (QA). Isso é importante para evitar gastos desnecessários de energia e diminuir o tempo de desenvolvimento. O que irá mudar é o momento em que cada um realizará o teste dentro do ciclo.
No modelo ágil, os testes se tornaram maleáveis, de acordo com Raphael. Tradicionalmente, os comportamentos eram escritos e, posteriormente, o analista de testes os validava. Hoje em dia, não se define previamente todos os critérios de aceite, eles são definidos na medida em que o desenvolvimento evolui. Para tanto, existe uma preparação, onde o time pensa o que será testado. Neste momento, o QA escreve os processos do teste e o que poderá ser testado.
Níveis teste de software
Para que os testes possam ser realizados no modelo ágil, Raphael apresentou aos colegas o quadrante de testes ágeis. Confira abaixo:
A matriz divide os testes que suportam o time e os que analisam o produto, dividindo o foco em negócio ou tecnologia. Os testes que suportam o time auxiliam na compreensão e na qualidade dos requisitos e da estrutura; já os que analisam o produto são focados em melhorias, adicionando critérios, por exemplo.
No modelo ágil, podemos visualizar quais os tipos de teste que geram valor ao projeto que está sendo desenvolvido, como visto abaixo:
Como podemos perceber, a maior parte dos esforços devem ser direcionados para os testes de unidade, seguido da camada de integração, e o menor esforço seria na camada de User Interface (UI). Isso ocorre porque os testes de unidade são mais rápidos e baratos de automatizar, enquanto os testes de UI são feitos manualmente, ou requerem um grande esforço para automação.
Além disso, os testes unitários tem a vantagem de garantir uma boa regressão e de ter uma boa velocidade de resposta quando são integrados ao pipeline. Tendo em vista isso, fica claro que a qualidade é responsabilidade de todos, já que a construção dos testes deve ser feita por toda a equipe.
Compartilhando a responsabilidade dos testes
Podemos pensar da seguinte forma: ainda que o Analista de Qualidade (QA) seja o responsável por planejar o que será testado, ele não deve ser sobrecarregado executando todas as tarefas. Caso isso ocorra, a velocidade do projeto será impactada, pois os desenvolvedores ficarão parados aguardando a conclusão de um ciclo para iniciar o próximo.
Para evitar essa perda de velocidade, o QA pode escrever em conjunto com o Product Owner (PO) o comportamento da aplicação, além dos critérios de aceite – requisitos mínimos para uma aplicação funcionar – para que o desenvolvedor aplique o teste e, concluindo todas as etapas de suas tarefas, contribua para encerrar o ciclo mais rápido. Dessa forma, é possível evitar que o desenvolvedor tenha retrabalho com o seu código e há a garantia de que o QA permaneça focado em promover a qualidade do que está sendo desenvolvido.