- A Airbnb conseguiu migrar automaticamente cerca de 3.500 arquivos de teste baseados em Enzyme para React Testing Library (RTL)
- Um trabalho originalmente estimado em 1,5 ano foi concluído com LLM e um pipeline de automação em apenas 6 semanas, atualizando 3,5 mil arquivos de teste
- Alta taxa de sucesso na automação com validação automática, loops de retry, prompts dinâmicos e composição de contexto em larga escala
- No fim, 97% de todos os arquivos foram convertidos automaticamente, e o restante foi finalizado manualmente para chegar a 100%
- Com base nessa experiência, a empresa planeja expandir para tarefas de migração mais complexas e ferramentas de desenvolvimento baseadas em LLM
Migração em larga escala de testes com LLMs na Airbnb
Contexto
- Desde 2020, a Airbnb usa React Testing Library (RTL) em novos testes e iniciou a transição a partir do Enzyme
- Como o Enzyme acessa profundamente implementações internas, essa abordagem não se encaixa na filosofia moderna do React, o que levou à necessidade de remoção gradual
- Uma remoção simples geraria lacunas na cobertura de testes, então era necessário converter preservando intenção e cobertura
Estratégia de migração
1. Validação e refatoração baseadas em etapas
- Os arquivos foram organizados em um pipeline baseado em estados, no qual cada etapa só avança após passar pela validação correspondente
- Em caso de falha, o LLM era chamado para tentar corrigir; exemplos de etapas:
remoção do enzyme → ajuste do jest → aprovação em lint/tsc → marcação de conclusão
- Centenas de arquivos podiam ser processados em paralelo; arquivos simples eram resolvidos rapidamente, enquanto os complexos eram tratados de forma gradual
2. Loops de retry e prompts dinâmicos
- Etapas com falha eram executadas novamente até o limite máximo de tentativas
- A cada tentativa, mensagens de erro e o arquivo corrigido eram incluídos no prompt, fornecendo feedback ao LLM
- A maior parte dos arquivos de dificuldade simples a média foi resolvida em até 10 tentativas
3. Expansão do contexto do prompt
- Arquivos complexos não eram resolvidos com retries simples, então a equipe mudou para uma abordagem com contexto mais rico
- Foram montados prompts de até 100 mil tokens, incluindo:
- código-fonte do componente em questão
- teste Enzyme existente
- testes vizinhos e exemplos (few-shot prompting)
- estilo interno da equipe e padrões comuns
- O ponto central era selecionar arquivos relevantes e de boa qualidade; mais importante do que a redação do prompt era "o que incluir"
4. De 75% a 97%: melhoria sistemática
- Após converter 75% com automação, 900 arquivos entre os 25% restantes estavam em estado de falha
- A equipe repetiu análise e melhoria dos problemas:
- coletar problemas em comum nos arquivos com falha
- selecionar amostras representativas (5 a 10 arquivos)
- melhorar prompts/scripts
- aplicar testes às amostras e tentar novamente no conjunto completo
- Após 4 dias de repetição, a taxa de conclusão automática chegou a 97%
Os 3% restantes foram tratados manualmente
- Alguns arquivos que falharam mesmo após mais de 100 tentativas foram corrigidos manualmente com base no resultado da refatoração automática
- Ainda assim, graças à automação, a finalização exigiu esforço mínimo
Resultados e impacto
- Na primeira execução da automação, 75% da migração foi concluída em 4 horas
- Após 4 dias de melhorias iterativas, 97% da automação foi concluída
- Incluindo o restante do trabalho manual, toda a transição foi concluída em 6 semanas
- O Enzyme foi totalmente removido, preservando a intenção e a cobertura dos testes
- Mesmo considerando o custo da API de LLM e os recursos de engenharia, a abordagem foi muito mais eficiente do que o trabalho manual
Próximos passos
- Com base nessa experiência, a empresa iniciará automações de transformação de código em escala ainda maior com uso de LLM
- Também está explorando a aplicação em refatorações complexas e mudanças estruturais
Ainda não há comentários.