Trabalho na equipe de gerenciamento de lançamentos de uma empresa de internet muito grande. Usamos essencialmente o processo descrito acima e escolhemos esse processo de propósito. Em nossa metodologia, a preparação serve como um mecanismo de ramificação para um nível final de teste na produção.
Obviamente, você deseja fazer todos os testes antes de iniciar a produção, mas em um ambiente grande e complexo com muitos usuários, esse é um objetivo muito difícil de alcançar. Em particular, é praticamente impossível carregar adequadamente o software de teste no controle de qualidade. O teste funcional é muito mais fácil de automatizar do que o teste de carga. Quando você tem milhares de usuários acessando seus servidores, as coisas falham de maneira estranha e difícil de prever.
Então, aqui está o que fazemos:
- Desenvolvimento
- inclui integração contínua e testes automatizados
- teste de liberação
- meu grupo analisa o lançamento em si
- revendo logs de instalação
- reversão de teste
- QA
- Testes de aceitação do usuário
Esse é o ponto em que nos ramificamos entre preparação e produção. Usamos um modelo de trem para lançamentos, com um novo trem iniciando a cada poucas semanas. Até os trens numerados vão para os servidores intermediários (que estão em produção). Trens numerados ímpares não.
Entre os trens pares, os desenvolvedores têm a capacidade de enviar alterações individuais aos servidores de teste ( depois que essas alterações foram testadas pelo controle de qualidade, é claro). Isso permite que eles validem que seu software tenha o desempenho esperado em um ambiente de produção real. Geralmente, isso é reservado para os componentes que são considerados de maior risco; não levamos cada pedacinho para a preparação.
Então, todo mundo entende que, quando o próximo trem par for iniciado, ele eliminará o que está nos servidores de preparo e os colocará de volta na linha de base do trem. Os desenvolvedores garantem que as alterações entrem em ação ou decidem que ainda não estão prontos para uso geral. Nesse caso, essas alterações são apagadas nos servidores de teste.
Em resumo, a resposta curta (pelo menos para nós) é que é impossível testar completamente sistemas complexos no controle de qualidade. A preparação fornece uma maneira segura de realizar testes de produção limitados.
Em uma nota relacionada, aqui estão meus slides de uma apresentação que acabei de dar sobre como nosso processo de lançamento funciona.