Ambiente focado no desenvolvimento do código. Nesse ambiente é onde as novas features
são desenvolvidas e testadas de uma forma facil e rápida. Os testes implementados nesse ambiente são de tipo unitário e de integração.
As configurações de segurança e rede são muito flexíveis para favorecer o desenvolvimento e teste de forma fluida. O acesso às branches
de desenvolvimento costuma a ser liberado para todos os desenvolvedores já que o risco de afetar o produto final é mínimo. Os dados usados no banco de dados são dados fake
e o proprio banco pode ser derrubado e levantado de novo sem prejuizio quantas vezes quiser.
Podemos diferenciar o ambiente de desenvolvimento local (máquina do desenvolvedor) e o ambiente de desenvolvimento remoto, normalmente aprovisionado com os requerimentos basicos, já que unicamente é acessado por desenvolvedores do projeto.
No ambiente de testes, o software é testado imitando o comportamento final o máximo possivel. Esses testes são do tipo End-toEnd
e são desenvolvidos, automatizados e avaliados pela equipe de Quality Assurance (caso exista no projeto). Tudo nesse ambiente deve ser igual ao ambiente de produção: configurações de hardware, SO, segurança, rede e banco de dados, para que os testes consigam represantar fielmente o funcionamento real do software.
Nesse ambiente ganham importancia as ferramentas testes automatizados como cypress e de monitoramento de software como Sentry. A equipe de QA deve ter uma comunicação continua com a equipe de desenvolvimento para que qualquer bug
ou issue
achado possa ser resolvido no ambiente de desenvolvimento e ser promovido de novo para o ambiente de testes.
O ambiente de produção é o conjunto de hardware e ferramentas destinadas a executar o software desenvolvido para o usuario final. Nesse ambiente, é esperado que o código funcione sem nenhum bug
(o que raramente acontece).
No caso de uma aplicação web, os servidores de produção devem ser capazes de manter o serviço live
ou funcionando para que o acesso dos usuarios não seja interrumpido em nenhum momento. Isso pode ser feito com orquestradores como Kubernetes
caso seu aplicativo seja containerizado.
O deploy
ou lançamento de novas versões do software no ambiente de produção deve ser feito com muito cuidado para não afetar a experiencia do usuario principalmente em casos como os aplicativos móveis, já que um usuario com uma versão antiga do aplicativo deveria ter suporte da mesma forma que um com a ultima versão.
Um software "em produção" pode ser armazenado em um datacenter, em varios deles para melhorar a redundância ou em serviços na nuvem
como AWS ou GCloud.