As práticas de implementação contínua – CD (Continuous Deployment) são fundamentais no mundo digital, principalmente em empresas inovadoras com foco em time to market e criação de produtos. A esteira de publicação destas empresas realiza então o deploy de releases automático em produção.
Os testes canários (ou testes A/B) habilitam essas funcionalidades para um grupo controlado de usuários, mantendo em produção duas comunidades (A/B) para minimizar, por exemplo, o risco de negócio em liberar novas releases para comunidades de usuários.
Talvez seja necessário um experimento em um número reduzido de usuários para decidir se aquela funcionalidade será mantida ou removida.
Há estratégias para escolher a liberação da nova versão, desde a liberação interna para funcionários da própria empresa, até usuários escolhidos com base em seu perfil ou informações demográficas.
A aceitação da funcionalidade vai direcionando o aumento de infraestrutura e dos usuários para este ambiente.
E assim, possibilitam os testes A/B por restringir as novas funcionalidades a um grupo reduzido de usuários. Um ponto de atenção para o uso dos testes canários é a gestão de várias versões da aplicação em produção.
A empresa (Electronic Arts Inc.) divulgou um caso de sucesso utilizando teste A/B na página de pré-vendas do jogo SimCity 5.
Após remover um banner promocional da página, aumentou em 43% as conversões de venda.
O padrão de desenho Feature Toggles é uma técnica que pode ser utilizada para essas implementações, permitindo que os times modifiquem o comportamento do sistema sem alteração de código.
A proposta é ter uma alternativa para a manutenção de vários branches de código fonte (features branches), e assim conseguir manipular a funcionalidade em tempo de execução.
Na figura abaixo, elaborada por Martin Fowler, inicia-se pela inclusão dos toggle points no código-fonte para manipular o comportamento da funcionalidade.
O toggle router determina o estado delas, considerando o toggle context. O toogle configuration controla o toggle router naquele ambiente.