Pontos Principais
- Os testes de regressão são diferentes dos outros tipos de testes;
- Existem vários tipos de testes de regressão e diferentes razões para usar diferentes abordagens;
- Ao configurar uma estratégia para testes de regressão é importante considerar o contexto e outros fatores;
- Há uma ampla gama de métodos e abordagens para o teste de regressão;
- Diferentes metodologias requerem abordagens diferentes para testes de regressão.
Custoso e demorado, o teste de regressão é um ponto de dor irritante para toda a equipe de entrega. Felizmente, é possível torná-lo menos doloroso e mais eficiente. Para isso, deve-se elaborar uma estratégia de teste de regressão eficiente, cobrindo completamente as necessidades do produto e garantindo a qualidade a um custo ótimo. Isso requer uma compreensão da natureza dos testes de regressão, sua motivação, e as formas de realizá-lo.
Razões para usar os testes de regressão
Uma regressão de software é um defeito que aparece após um determinado evento (por exemplo, um patch de software ou atualização). Os testes de regressão garantem que as mudanças recentes no código deixem o resto do código intacto, impedindo assim a regressão do software.
A mudança é o conceito-chave do teste de regressão. Os motivos dessas mudanças geralmente se enquadram em quatro grandes categorias:
- Nova funcionalidade. Esta é a razão mais comum para executar testes de regressão. O código antigo e novo devem ser totalmente compatíveis. Quando os desenvolvedores introduzem um novo código, eles não se concentram completamente na sua compatibilidade com o código existente. Os testes de regressão devem encontrar possíveis problemas.
- Revisão de funcionalidade. Em alguns casos, os desenvolvedores revisam a funcionalidade existente, e descartam ou editam alguns recursos. Em tais situações, os testes de regressão verificam se o recurso em questão foi removido ou editado sem danos ao restante da funcionalidade.
- Integração. Neste caso, os testes de regressão garantem que o produto do software seja executado perfeitamente após a integração com outro produto.
- Correções de erros. Surpreendentemente, os esforços dos desenvolvedores para corrigir os erros encontrados podem gerar ainda mais erros. A correção de bugs requer a alteração do código-fonte, que, por sua vez, exige o re-teste e os testes de regressão.
É importante entender a diferença entre esses dois tipos de testes. Retestar os casos de testes de funcionalidades que tiveram bugs reportados: os engenheiros de testes executam os casos de testes novamente para verificar os status dos erros (corrigido, não corrigido, etc.). Quando ainda há erros, a equipe de desenvolvimento recebe um relatório de erros para depuração adicional. Após a depuração, a equipe de testes executa os testes de regressão para assegurar que o aplicativo ainda funciona como previsto.
Tipos de testes de regressão
As razões para executar testes de regressão permitem distinguir três tipos dessa técnica de testes. Os tipos de testes de regressão são:
- Nova correção de erros: certificar que um erro encontrado recentemente foi corrigido com sucesso.
- Antiga correção de erros: certificar de que um erro, encontrado e resolvido, não surgiu novamente.
- Efeito secundário: verificar que as recentes correções de erros não prejudicaram as funcionalidades antigas.
Estratégia de testes de regressão: fatores básicos
Tendo analisado as razões para executar testes de regressão e seus tipos, podemos prosseguir com a elaboração de uma estratégia de testes de regressão efetiva. Ao projetar uma estratégia de testes de regressão, a equipe se concentra em dois fatores:
- Natureza do produto. Este é o fator chave para a escolha de uma estratégia de testes de regressão relevante, e um planejamento de testes de regressão cuidadoso. Por exemplo, a abordagem para testar uma landing page e um portal profissional abrangente irá diferir significativamente. Enquanto que para um teste de regressão de uma landing page usa-se principalmente casos de teste de UI e usabilidade, para um portal pode-se empregar vários casos de testes para segurança, desempenho, testes de compatibilidade, e muito mais.
- Escala do produto. Os produtos de grande, média, e pequena escala exigem uma abordagem diferente para os testes de regressão. Para um produto pequeno, uma única rodada de testes de regressão manual pode ser suficiente, enquanto que para produtos médios e grandes com funcionalidades complexas, testes de regressão tanto manual quanto automatizado geralmente podem ser executados.
Esses fatores permitem às equipes de testes selecionar abordagens e métodos adequados de testes de regressão.
Métodos de testes de regressão
Os testes de regressão segue dois métodos de implementação: manual e automatizado.
- Regressão manual
O teste de regressão manual é o método básico para cada produto, independentemente da metodologia (waterfall, Agile, e outros). Um conjunto de testes de regressão reside em casos de testes que descrevem áreas da aplicação que passaram por mudanças recentes e suas áreas adjacentes. Este tipo de teste sempre precede a automação, sendo, em alguns casos, ainda mais eficiente do que o último. Por exemplo, é impossível escrever scripts de testes para testar áreas de aplicativos adjacentes à parte do código que foi alterada.
O teste de regressão manual revela-se eficiente nos estágios iniciais do processo de entrega do produto. Para um produto em que trabalhamos, um aplicativo de processamento de imagem no iOS, o teste de regressão manual ajudou a detectar vários bugs ao dificultar a UX do aplicativo. O aplicativo não conseguia renderizar imagens corretamente e travou quando o usuário alterou a orientação da tela.
Ainda assim, as equipes de testes procuram automatizar os testes de regressão. O principal problema com o teste de regressão manual é que ele consome muito tempo e esforço. Para produtos complexos, executar um conjunto de testes de regressão repetidamente dificulta inevitavelmente a concentração de um engenheiro de testes e seu desempenho. Assim, em tais casos, as equipes preferem recorrer à automação.
- Regressão automatizada
O teste de regressão automatizado é típico para projetos de médio e grande porte (seis meses ou mais) no estágio em que o projeto está estável (não são esperadas alterações críticas na lógica de negócios e UI). Com um planejamento de teste de regressão completo, a automação reduz os esforços que uma equipe de testes gasta em tarefas tediosas e repetitivas, e poupa tempo para testes que requerem opinião humana, como testes exploratórios e testes UX.
No entanto, atualmente as equipes geralmente iniciam a automação do teste de regressão nos estágios iniciais. Isso funciona bem para o desenvolvimento ágil, no qual as equipes devem implantar um produto pelo menos semanalmente e não sobra tempo para fazer testes de regressão manual. Comunicando-se com toda a equipe (stakeholders, gerentes, analistas de negócio) e estudando o documento de caso de uso, os testadores podem entender as necessidades das partes interessadas, a lógica do negócio do produto e os resultados esperados para os testes. A tarefa principal na automação precoce é escolher o framework de teste. Ele deve fornecer scripts fáceis e manutenção de testes de baixo custo. A infraestrutura criada pode ser reutilizada para futuros produtos, acelerando a automação de testes.
Em certos casos, a automação pode ajudar a detectar erros que não foram encontrados por testes de regressão manual. Os erros que aparecem aleatoriamente são o exemplo mais ilustrativo. Quando testamos o aplicativo de processamento de imagem descrito anteriormente, a automação ajudou a detectar vários erros aleatórios graças aos tempos de espera dos testes automatizados. Se um script não rodava no tempo limite, ele era marcado como tendo falhado. Como resultado, o mesmo script era executado várias vezes até que ele passasse, e em certo ponto, os erros aleatórios apareciam.
Abordagens de testes de regressão
Os testes de regressão fornecem duas possíveis abordagens de implementação:
- Regressão total
Esta abordagem de testes de regressão compreende todos os casos de testes de regressão cobrindo o produto na íntegra. As equipes de QA geralmente o realizam nos estágios finais do processo de entrega do produto ou antes das releases principais. A regressão total também é usada quando o produto requer mudanças significativas funcionais ou não funcionais, ou quando essas alterações afetam o código original. Felizmente, as equipes de testes não precisam escrever um conjunto completo de testes de regressão sempre que necessário. Eles costumam revisar conjuntos de testes funcionais, não funcionais, de unidades, e de integração, e escolher casos de testes que encontrem repetidamente erros ao longo do processo de entrega do produto. Esses casos de testes constituem um conjunto de testes de regressão.
Embora demorado e tedioso, esta abordagem de retestar tudo é eficaz, pois ajuda a descobrir possíveis problemas em toda a aplicação. No entanto, esse tipo de teste não faz sentido quando feito com frequência. As equipes costumam executá-lo antes de mudar o ambiente de desenvolvimento. Consideremos o aplicativo de processamento de imagem que já mencionamos. O aplicativo foi originalmente desenvolvido para iOS 8, então a equipe usou XCode6 IDE. Mais tarde, o cliente pediu para habilitar os usuários para executar o produto em dispositivos mais recentes com o iOS 9. Isso exigiu uma transição para outra IDE - XCode 7. Após a transição, os engenheiros de testes tiveram que executar testes de regressão completos para garantir que todos os recursos desenvolvidos no XCode 6 continuem funcionando.
O teste de regressão total também pode ser exigido especificamente pelo cliente quando ele quer uma garantia sobre a estabilidade do produto e sua capacidade de satisfazer suas necessidades.
- Regressão parcial
O teste de regressão parcial testa a parte modificada de um produto e as áreas adjacentes que podem ter sido afetadas. As equipes de testes usam estratégias específicas para garantir que os testes de regressão parcial gerem bons resultados. A principal estratégia aqui é uma abordagem baseada em risco. Os engenheiros de testes destacam as áreas de aplicação que podem ser afetadas pelas recentes alterações de código e selecionam os casos de testes relevantes do conjunto de testes.
Uma equipe de controle de qualidade pode ir mais longe e aplicar a abordagem baseada em risco para um conjunto de testes de regressão quando o produto adquire novos recursos de qualquer tipo. Esta técnica reduz significativamente o tempo dos testes e o esforço, e é outra boa opção para testes de regressão iterativos para o processo de entrega de produtos Agile, quando as equipes estão sob a pressão do tempo. A regressão parcial também ajuda a reconsiderar o conjunto completo de testes de regressão para o estágio de desenvolvimento final e descartar os casos de teste obsoletos.
A escolha de uma abordagem depende do escopo das mudanças, da metodologia e do estágio do processo de entrega do produto. Em nossa prática de testes, aderimos aos testes de regressão parcial com base em risco sempre que possível.
Testes de regressão em metodologias populares
A metodologia de desenvolvimento de produto é um dos principais fatores a serem considerados ao escolher uma estratégia de testes de regressão adequada. Na metodologia waterfall, os testes são introduzidos quando o produto está totalmente desenvolvido. Na metodologia waterfall os testes geralmente feitos em três estágios:
- Testar tudo. A equipe de testes começa a trabalhar e executa todos os conjuntos de testes ou scripts que eles desenvolveram para cobrir o produto. Quando os testes terminam, a equipe entrega os relatórios de erros à equipe de desenvolvimento, que então corrige os erros.
- Estabilização. Quando os erros são corrigidos (supostamente), a equipe de testes executa os testes de regressão para verificar as correções de bugs e suas áreas adjacentes. A estabilização pode levar muito tempo, pois as correções de erros geralmente geram novos erros. A equipe de testes precisa avaliá-los em termos de gravidade (crítica, alta, média ou trivial). Quando o produto tem erros críticos e altos, a equipe de desenvolvimento prossegue com outra rodada de correção de erros.
- Testes de regressão. Quando os erros mais críticos são corrigidos, e a estabilização não encontra mais erros do tipo, a equipe de testes executa os testes de regressão completos para fazer as alterações finais ao produto.
Assim, a estabilização e a regressão total são uma parte crítica e demorada dos testes na metodologia waterfall.
No desenvolvimento ágil, os testes de regressão geralmente estão nos dois subtipos mencionados anteriormente: regressão parcial (iteração) cobrindo os recursos desenvolvidos durante a iteração e as áreas adjacentes, e regressão completa (alta) realizada antes das grandes releases e implantação. No entanto, para ser eficiente, o conjunto de testes de regressão requer manutenção: a equipe de testes deve adicionar novos casos de testes relevantes e excluir os obsoletos oportunamente. Esta abordagem reduz significativamente o tempo e esforço gasto neste tipo de teste tedioso sem comprometer a qualidade do produto.
Independentemente da metodologia que eles seguem waterfall ou Agile), as equipes de produtos podem escolher certas abordagens de otimização.
Otimizando os testes de regressão: Kanban e DevOps
A abordagem Kanban consiste em usar um quadro para o produto, que ajuda a visualizar claramente o trabalho e acompanhar o progresso e as melhorias. Desta forma, cada membro da equipe pode estimar sua carga de trabalho, relacioná-la com o trabalho da equipe, definir prazos, e garantir a eficiência. No waterfall, o Kanban ajuda a estimar o tempo necessário para a estabilização e planejar os esforços de teste com mais cuidado. No Agile, o Kanban board ajuda a selecionar casos de testes para regressão de iteração e pontos críticos para regressão completa.
O DevOps é composto por integração contínua (IC), entrega contínua (EC) e implantação contínua. Esta abordagem depende fortemente da automação: uma pequena parte do código é enviada para o repositório, no qual a IC garante a integração automática das partes do código em um build. Em seguida, o build é enviado para o ambiente de testes (EC), e os testadores executam testes automatizados. Essa abordagem minimiza significativamente os problemas relacionados à regressão, o que acelera os testes e a implantação em projetos Agile.
Testes de regressão e outros tipos de testes
Um produto de software tem características funcionais e não funcionais. As alterações no código podem afetar ambos os tipos, assim como os testes de regressão.
Testes funcionais de regressão
Os testes funcionais validam os requisitos do cliente e a lógica do negócio, bem como a especificação do produto e verifica se o aplicativo funciona conforme o esperado. O objetivo dos testes de regressão neste caso é verificar se as mudanças recentes não quebraram ou travaram os recursos funcionais já existentes.
Testes não-funcionais de regressão
Os testes de regressão também podem ser parte dos esforços dos testes não funcionais. Os tipos mais comuns de esforços de testes não funcionais que requerem testes de regressão são:
- Testes de UI
UI (interface) é o que os usuários vêem ao executar um aplicativo. Este tipo de teste envolve a verificação de que os menus, ícones, barras, janelas de diálogo, etc., são exibidos corretamente. Os testes de UI garantem a aparência do aplicativo, que muitas vezes predetermina a popularidade do produto.
Os testes de regressão para UI podem ser necessários quando a funcionalidade do produto cresceu, e vários novos elementos de UI podem causar confusão entre os usuários. Num esforço para melhorar a UX (experiência do usuário), os product owners e os BAs (analistas de negócios) analisam a aplicação e decidem quais funções antigas podem ser fundidas com as novas, e quais podem ser completamente substituídas. Quaisquer alterações envolvem alterações de código que exigem testes de regressão.
Isso aconteceu com o aplicativo móvel iOS em que trabalhamos. O aplicativo teve vários lançamentos e, em algum momento, as barras laterais do aplicativo não cobriram mais as funcionalidades críticas adicionadas recentemente. Então, o product owner decidiu atualizar as funções da barra. Então, testes de regressão descobriram que a UI se misturou. Em vez de desempenhar as principais funções da aplicação, a barra lateral apresentava funções de pouca importância, enquanto a funcionalidade principal não estava facilmente disponível.
- Testes de compatibilidade
Este tipo de teste verifica o quão fácil é usar o produto em vários sistemas de hardware e / ou operação. Assim, os tipos básicos de testes de compatibilidade incluem testes entre navegadores e entre plataformas. Dependendo do produto, as equipes de testes podem realizar testes de regressão de compatibilidade para diferentes configurações.
- Testes de segurança
Os testes de segurança detectam as vulnerabilidades de um aplicativo para hackers externos e examina a qualidade do código na perspectiva de segurança. Esta é a abordagem mais comum para os testes de segurança. No entanto, para aplicações web que exigem alto nível de segurança (aplicações médicas, aplicações bancárias, etc.), os testes de segurança também possuem autorização do usuário. Esses aplicativos oferecem acesso baseado em função. Um caso típico é uma aplicação web hospitalar, na qual os médicos têm acesso aos dados relacionados às suas atividades de trabalho e nada mais. Se os direitos forem alterados para uma outra função ou para funcionários demitidos, os engenheiros de testes executam testes de segurança de regressão para garantir que os direitos de acesso para o resto dos empregados permaneçam intactos.
- Testes de localização e internacionalização
Esses tipos de testes geralmente são executados quando um aplicativo é global. Os testes de localização verificam se o aplicativo se comporta de acordo com as normas culturais aceitas na região alvo, e exibe corretamente informações em idiomas suportados. Os testes de internacionalização verifica se o aplicativo funciona corretamente, independentemente da região, idioma, ou especificidades culturais.
Surpreendentemente, esses tipos de testes também podem envolver testes de regressão. Por exemplo, um dos nossos produtos visava cobrir uma grande audiência. Portanto, ele suportava vários idiomas. Uma empresa de tradução forneceu as traduções. Ao executar os testes de regressão funcional, a equipe de testes também prestou atenção na exibição correta das informações em vários idiomas. Às vezes, as traduções foram apagadas como resultado de esforços de desenvolvimento, ou seja, devido a alterações de código. Assim, a equipe começou a realizar testes de localização de regressão para verificar se os esforços de desenvolvimento não afetaram os recursos não funcionais existentes.
Resumindo
A melhor maneira de lidar com os testes de regressão é projetar uma estratégia de testes apropriada. Esta estratégia compreende três elementos principais:
- Métodos de testes (proporção adequada de regressão manual e automática)
- Abordagem de testes de regressão (distribuição de regressão total e parcial no processo de entrega do produto)
- Conjunto de testes de regressão de qualidade. O conjunto pode envolver tanto casos de testes funcionais como não funcionais, desde que cubram os recursos que foram alterados durante uma determinada etapa do processo de entrega do produto
As especificidades do produto governadas pelas necessidades das partes interessadas são a chave para escolher a estratégia de teste de regressão apropriada. Outro fator importante é a escala do produto (pequeno, médio, e grande). Uma boa estratégia para testes de regressão reduz o tempo de testes e o esforço, e melhora a qualidade do produto, tornando-o totalmente correspondente às necessidades do cliente.
Sobre a autora
Tatiana Bessonova é líder e engenheira de testes funcionais, com 14 anos de experiência em projetos waterfall e ágil. Experiente em 11 domínios, Tatiana aplica amplamente suas excelentes habilidades analíticas e de abordagem comercial prática para projetos desafiadores nas áreas de Saúde, Manufatura, Entretenimento, Varejo, e muito mais.