Eu trabalho na equipe de gerenciamento de lançamentos em uma grande empresa de internet. Usamos essencialmente o processo que você descreveu acima e escolhemos esse processo propositalmente. Em nossa metodologia, o estadiamento serve como um mecanismo de ramificação para um nível final de teste na produção.
Obviamente, você quer fazer todos os testes antes de ir para 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, é virtualmente 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 muitos milhares de usuários atingindo seus servidores, as coisas falham em maneiras estranhas e difíceis de prever.
Então, aqui está o que fazemos:
- Desenvolvimento
- inclui integração contínua e testes automatizados
- teste de lançamento
- meu grupo analisa o lançamento em si
- revisando os registros de instalação
- teste de reversão
- controle de qualidade
- teste de aceitação do usuário
Esse é o ponto em que nos dividimos entre o teste e a produção. Nós usamos um modelo de trem para lançamentos, com um novo trem começando a cada poucas semanas. Até trens numerados vão para os servidores de teste (que estão em produção). Os trens numerados ímpares não.
Entre os trens pares, os desenvolvedores têm a capacidade de enviar alterações individuais para os servidores de teste ( após essas alterações foram testadas pelo controle de qualidade, é claro). Isso permite que eles validem que seu software funciona como esperado em um ambiente de produção real. Isto é geralmente reservado para os componentes que são considerados de alto risco, não empurramos cada pedacinho para a preparação.
Então, todo mundo entende que quando o próximo trem começa, ele vai acabar com o que está nos servidores de teste e os coloca de volta na linha de base do trem. Os desenvolvedores garantem que suas alterações entraram no trem ou decidiram que ainda não estão prontos para uso geral. Nesse caso, essas alterações são apagadas nos servidores de teste.
Para resumir, a resposta curta (pelo menos para nós) é que é impossível testar completamente sistemas complexos em QA. O estadiamento fornece uma maneira segura de realizar testes de produção limitados.
Em uma nota relacionada, aqui estão meus slides de uma apresentação . Acabei de falar sobre como funciona o nosso processo de lançamento.