O Dropbox executa aproximadamente 35 mil builds e milhões de testes automatizados todos os dias. Alguns destes podem falhar devido a mudanças no código, sendo que algumas dessas falhas podem acontecer esporadicamente. Manualmente desabilitar esses testes, reverter commits e notificar os responsáveis pelas falhas, é algo difícil de fazer em escala. O Athena foi construído para automatizar essas ações; ele notifica os responsáveis pelo testes que falharam, de forma determinística; já os que falharam por instabilidade são colocados em quarentena. Isso sem reverter os commits que quebraram.
O ciclo de commits inicia com os testes "pré-submit", mesclados com a branch master, seguido pelos testes "post-submit". A categoria post-submit tem testes caros, tais como os de interface gráfica. Testes nesta última categoria, eles podem falhar devido a fatores de ambiente, como tempo, data e infraestrutura; ou por conta de características próprias do código, como concorrência e geração de números aleatórios. (Anteriormente, o Dropbox costumava ter uma equipe rotativa que revertia as mudanças.) O InfoQ falou com Utsav Shah, engenheiro de software no DropBox, para conhecer mais detalhes sobre o Athena.
O Athena usa um algoritmo para determinar se um teste está instável. Testes post-submit que falham diversas vezes em um período de tempo são marcados, e o código passa para o próximo passo. Testes que continuam falhando são executados para determinar se a falha é instável ou realmente uma falha no código. O Athena pode também identificar, no commit, onde o teste está começando a falhar. O sistema reduz a sobrecarga operacional no Dropbox ao colocar esses testes em quarentena automaticamente. Shah indica que o Athena "monitora a maioria dos testes para todos os serviços (de backend, frontend) no Dropbox. Não são monitorados ainda os testes para desktop ou aplicações móveis".
Image used with permission.
A integração contínua (CI) é usada por toda a Dropbox, apesar das estratégias de publicação mudarem de acordo com os serviços. Segundo Shah:
Há muitos serviços de backend pertencentes a equipes específicas e há uma aplicação web principal responsável pelo dropbox.com. Exigimos que todos os testes relevantes estejam OK, para permitir a implantação de cada serviço, com exceção para sites não acessíveis ou serviços experimentais. Alguns proprietários de serviços preferem a implantação contínua de todos os serviços; outros preferem um deploy manual.
O Athena tem uma interface gráfica que pode ser usada para monitorar o estado dos testes e trazer mais visibilidade para os desenvolvedores, como Shah explica:
Mostramos os indicadores de progresso para cada teste e o resultado de sua execução em diferentes commits, e se o limite inferior e superior confirmam onde o teste teria quebrado; então, se um usuário estiver com pressa, pode detectar e resolver o problema ele mesmo.
Quanto ao monitoramento do próprio sistema Athena, Stah comenta que ainda é preciso trabalhar mais nisso:
Temos testes unitários que usamos para simular nosso sistema interno de CI, que ajudam a capturar regressões na lógica de negócio, como um bug em um bisect (divisão entre commits para encontrar o commit que introduziu o bug). Temos testes de integração no sistema de CI para verificar se as garantias da API foram cumpridas. Isso captura a maioria dos problemas.
Nossos serviços de orquestração têm alertas que são automaticamente gerados, capturando a maioria dos problemas básicos. Porém, ainda não investimos em monitoramentos customizados em tempo real. O sistema geralmente funciona bem, a menos que haja um problema no sistema de CI, e nesses casos geralmente sabemos o que aconteceu. A falta de monitoramento às vezes tem causado problemas, quando certas APIs estão lentas e geram timeouts. Pensamos em adicionar alguns alertas básicos para tratar esses casos.
O roadmap do Athena inclui funcionalidades para a reversão automática do commit que está quebrando, além de uma extensão para testes no desktop. Ainda não há planos para abrir o código para a comunidade, devido a dependências internas.
Veja mais sobre o Athena no post original do Dropbox.