Galera, minha dúvida não é técnica, é mais conceitual.
Trabalho numa empresa que faz software público, e temos vários projetos.
Um desses projetos é subdividido em vários módulos, por exemplo:
Projeto
– core
– modulo 1
– modulo 2
Os módulos usam o core. Cada módulo é um projeto. Usamos EJB e JSF com Eclipselink.
Basicamente, fechamos versões por módulo, só que sempre temos problemas ao subir versões antigas em bancos novos. Queria saber como as outras empresas tratam esse lance de versão.
Pra subir uma versão antiga da aplicação, é importante que o banco de dados esteja, também, na versão antiga. Existem várias formas de se conseguir isso, indo de um simples dump do schema a mecanismos de migração (como as migrations do Rails).
Quanto a como são geradas as versões, varia muito. O Java, por exemplo, mudou de 1.4 pra 5 por estratégia de marketing (o mesmo com o kernel do linux quando foi pra versão 3). A linha que é seguida geralmente é esta:
Versão X.Y.Z, onde:
X: mudanças maiores, na estrutura, com menor comprometimendo com a compatibilidade, é geralmente chamada de major version
Y: mudanças menores e quase sempre compatíveis entre si dentro de uma mesma versão X ou requisitando mudanças pequenas, é geralmente chamada de minor version
Z: correções de bug, geralmente chamada de patch
Com essa linha, por exemplo, mudanças no banco que alterem drasticamente o aplicativo (relacionamentos, colunas novas, etc.) teriam o número X diferente e mudanças menos drásticas (tamanho de campos, por exemplo) teriam o número X igual e o Y diferente.
Também é comum usar os sufixos:
a: versão alfa
b: versão beta
rc: versão candidata (release candidate)
r: versão distribuída (release), pode vir acompanhada de um número definindo um patch (ou um conjunto deles) aplicado à versão
Não sei se é mais ou menos isso que você tem dúvida.
Eu costumo versionar os schemas do banco junto com o fonte da aplicação. Quando ela vai pra produção, eu costumo versionar scripts de migração. Não costumo usar ferramentas (até porque faz tempo que não estou envolvido diretamente no desenvolvimento de aplicações), mas já ouvi falar de uma chamada Flyway, me pareceu interessante.
Flyway é bem legal, pois nele vc têm controle de todos os scripts versionados no projeto e quando é feito um deploy o próprio flyway fica com a responsabilidade de verificar qual versão do script se encontra no banco e assim fazer as mudanças no banco para que os ambientes de desenvolvimento, teste e produção estejam com a msm estrutura, além de trabalhar com versionamento fica melhor o controle para saber quem fez oq, oq mudou, que dia e hr…