Simple Science

Ciência de ponta explicada de forma simples

# Informática# Engenharia de software

Enfrentando Testes Intermitentes em Aplicações Web

Uma nova abordagem pra reduzir a instabilidade nos testes de UI através da geração automática de esperas.

― 7 min ler


Consertando Testes de UIConsertando Testes de UIInstáveisconfiabilidade e eficiência dos testes.Esperas automáticas melhoram a
Índice

Aplicativos web precisam de testes pra garantir que funcionem como esperado. Uma forma importante de fazer isso é usando testes de ponta a ponta, que conferem todo o fluxo de trabalho de um aplicativo. Isso significa simular como os usuários reais interagiriam com o aplicativo pra ver se tudo rola tranquilo. Mas, muita gente sabe que esses testes podem, às vezes, dar resultados inconsistentes. Essa inconsistência é o que chamamos de "flakiness".

Testes flakys são um baita problema porque podem passar uma vez e falhar na próxima, mesmo que nenhuma alteração tenha sido feita no código. Isso pode levar a confusão e perda de tempo pros desenvolvedores tentando descobrir o que deu errado. Uma razão comum pra flakiness é a ordem imprevisível em que o código de teste e o código real do aplicativo web são executados. Esse problema é bem notável em testes que checam a interface do usuário (UI).

O Problema da Flakiness em Testes de UI

A flakiness baseada em UI é um desafio e tanto. Os testes precisam saber exatamente quando os elementos da UI estão prontos pra próxima ação. Isso pode ser complicado porque o código que roda os testes nem sempre entende como a interface do usuário se comporta. Muitas vezes, quando um comando é executado, ele provoca mudanças na UI que podem não acontecer de imediato. Se um comando de teste avança antes que a UI esteja totalmente atualizada, o teste pode falhar sem aviso.

Nos tempos antigos, alguns desenvolvedores tentaram corrigir a flakiness adicionando delays nos scripts de teste. Esses delays esperavam um tempo fixo antes de rodar o próximo comando. Este método muitas vezes significava esperar mais do que o necessário, o que resultou em testes mais lentos.

A Necessidade de Melhores Esperas

Dada as dificuldades com longos delays fixos, uma abordagem mais eficaz seria esperar só o tempo necessário pra UI atualizar. É aí que entra a ideia de "esperas explícitas". Em vez de esperar um tempo definido, as esperas explícitas checam condições específicas que precisam ser atendidas antes de seguir pro próximo passo. Isso pode economizar um monte de tempo e fazer os testes rodarem mais suaves.

Porém, decidir quando e onde adicionar essas esperas pode ser muito difícil pros desenvolvedores. Eles muitas vezes têm que adivinhar manualmente onde a flakiness pode ocorrer ou quais condições deveriam estar em vigor antes de seguir. Isso gera a possibilidade de erro humano e complica o processo de escrever testes.

Solução Proposta: Geração Automática de Esperas

Pra enfrentar esses desafios, sugerimos uma nova técnica que pode adicionar automaticamente essas esperas explícitas nos lugares certos. A ideia é monitorar as mudanças na UI do navegador quando os comandos são executados e usar essa informação pra decidir quando esperar.

Como Funciona

  1. Gravando Mudanças: O primeiro passo é observar as mudanças que acontecem no Modelo de Objeto de Documento (DOM), que representa a estrutura da página web. Quando um comando é executado, ele pode causar várias mudanças no DOM. Ao rastrear essas mudanças usando uma ferramenta, conseguimos coletar informações sobre o que tá rolando em tempo real.

  2. Gerando Condições de Espera: Uma vez que temos essa informação, podemos criar condições específicas que precisam ser atendidas antes que o próximo comando seja executado. Por exemplo, se um comando atualiza um elemento da UI, a condição de espera pode checar se esse elemento tem o valor esperado antes de seguir.

  3. Implementando as Esperas: Por fim, a ferramenta insere automaticamente as condições de espera geradas no código de teste original. Isso significa que os desenvolvedores podem focar em construir seus aplicativos sem se preocupar com testes flakys atrapalhando seu progresso.

Avaliação da Eficácia

Pra ver o quão bem nossa solução funciona, testamos em 122 testes flakys diferentes de vários projetos do mundo real. Olhamos pra sete projetos populares, e os resultados foram promissores. Nosso método conseguiu resolver uma alta porcentagem dos testes flakys enquanto reduzia significativamente o tempo perdido em comparação ao uso de simples esperas fixas.

Resultados

  1. Comandos Flakys: Descobrimos que muitos comandos nos testes eram flakys. Isso significa que um alto número deles pode causar resultados inconsistentes durante os testes.

  2. Sobrecarga de Tempo de Execução: Comparamos nosso método com esperas implícitas tradicionais. Enquanto esperas implícitas costumam desacelerar o processo de testes no geral, nosso método manteve a sobrecarga de tempo de execução bem mais baixa. Isso é crucial em ambientes de desenvolvimento onde tempo é ouro.

  3. Taxa de Correção: Nossa solução conseguiu corrigir quase todos os testes flakys (taxa de sucesso de 98%), enquanto métodos tradicionais forneceram resultados menos consistentes.

Vantagens da Nova Abordagem

As vantagens da nossa técnica de geração automática de esperas incluem:

  1. Eficiência: Os testes rodam significativamente mais rápido, já que as esperas são adicionadas só quando realmente necessárias. Não tem mais necessidade de delays desnecessários.

  2. Maior Precisão: Com condições específicas sendo checadas, a flakiness dos testes é bastante reduzida. Isso significa que os desenvolvedores podem confiar mais nos seus testes.

  3. Menos Trabalho Manual: Ao automatizar o processo de inserção de esperas, os desenvolvedores economizam tempo e reduzem a chance de erro humano nos seus scripts de teste.

Desafios e Limitações

Embora essa solução mostre um grande potencial, ainda existem alguns desafios a considerar:

  1. Complexidade dos Aplicativos Web: Alguns aplicativos web são bem complexos, e as interações dentro deles podem levar a comportamentos inesperados. Isso pode dificultar o rastreamento preciso de mudanças e a determinação das melhores condições de espera.

  2. Limitações do Framework: A implementação atual suporta principalmente frameworks de teste populares como Selenium e Cypress. Ampliar isso pra suportar outros frameworks seria um passo essencial.

  3. Integração com Bibliotecas de Terceiros: Alguns testes flakys podem surgir de problemas não relacionados a mudanças de UI, como problemas em bibliotecas de terceiros. Nosso método foca principalmente em monitorar mudanças no DOM e pode não considerar mudanças de estado interno nessas bibliotecas.

Trabalho Futuro

Olhando pra frente, há várias caminhos pra melhorias futuras:

  1. Suporte a Mais Frameworks: Expandir a ferramenta pra funcionar com frameworks de teste adicionais permitiria que mais desenvolvedores se beneficiassem dessa solução.

  2. Colaboração com a Indústria: Trabalhar ao lado de grandes empresas que gerenciam aplicativos web complexos pode fornecer insights mais profundos sobre desafios do mundo real e refinar ainda mais a ferramenta.

  3. Coleta de Dados Mais Ampla: Coletar mais dados de vários projetos pode ajudar a tornar a ferramenta ainda mais eficaz, treinando-a pra reconhecer diferentes tipos de comportamentos de UI.

Conclusão

Os desafios impostos pelos testes flakys em aplicativos web podem atrasar o desenvolvimento e causar confusão. Ao gerar automaticamente esperas explícitas, podemos tornar os testes de ponta a ponta na web muito mais confiáveis e eficientes. Isso não só ajuda os desenvolvedores a economizar tempo, mas também aumenta a confiança no processo de testes. Embora existam obstáculos a serem superados, o potencial para um ciclo de desenvolvimento mais tranquilo é evidente.

Fonte original

Título: WEFix: Intelligent Automatic Generation of Explicit Waits for Efficient Web End-to-End Flaky Tests

Resumo: Web end-to-end (e2e) testing evaluates the workflow of a web application. It simulates real-world user scenarios to ensure the application flows behave as expected. However, web e2e tests are notorious for being flaky, i.e., the tests can produce inconsistent results despite no changes to the code. One common type of flakiness is caused by nondeterministic execution orders between the test code and the client-side code under test. In particular, UI-based flakiness emerges as a notably prevalent and challenging issue to fix because the test code has limited knowledge about the client-side code execution. In this paper, we propose WEFix, a technique that can automatically generate fix code for UI-based flakiness in web e2e testing. The core of our approach is to leverage browser UI changes to predict the client-side code execution and generate proper wait oracles. We evaluate the effectiveness and efficiency of WEFix against 122 web e2e flaky tests from seven popular real-world projects. Our results show that WEFix dramatically reduces the overhead (from 3.7$\times$ to 1.25$\times$) while achieving a high correctness (98%).

Autores: Xinyue Liu, Zihe Song, Weike Fang, Wei Yang, Weihang Wang

Última atualização: 2024-02-15 00:00:00

Idioma: English

Fonte URL: https://arxiv.org/abs/2402.09745

Fonte PDF: https://arxiv.org/pdf/2402.09745

Licença: https://creativecommons.org/licenses/by/4.0/

Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.

Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.

Mais de autores

Artigos semelhantes