Data como número da versão do software

43

Os desenvolvedores de software normalmente não usam data como número da versão, embora o formato AAAAMMDD (ou suas variações) pareça sólido o suficiente para usar. Há algo de errado com esse esquema? Ou se aplica apenas a "tipos" limitados de software (como produções internas)?

Donotalo
fonte
4
Em alguns casos, pode estar tudo bem, mas esse esquema não lida com ramificações ou correções de códigos antigos. Dê uma olhada nos comentários desta resposta .
MikMik
8
Você quer dizer como no Windows 95 ou no MS Office 2010?
Mouviciel 19/01/12
2
Se seu objetivo é impedir a criação de duas versões no mesmo dia, isso é o que acontece.
Jeffo
2
@JeffO A adição de HHmmSS também pode permitir vários lançamentos por dia.
precisa saber é o seguinte
5
Muitas vezes, várias versões principais são mantidas em paralelo, basicamente porque os novos recursos tendem a trazer novos bugs. O 2012.01 é melhor que o 2011.11, ou é apenas uma variante de patch de segurança da sua linha 2003.06 de suporte a longo prazo?
Steve314

Respostas:

16

Isso é algo que você terá que examinar de dois ângulos diferentes, pois precisa levar em conta as necessidades do usuário e as do software e desenvolvedores.

Em geral, seus clientes não se importarão muito com o número de versão do software, desde que saibam que estão executando algo mais recente (por exemplo, o Produto 2012 é mais recente que o Produto 2010) e que eles sabem disso está atualizado se houver patches que possam ser implantados (por exemplo, Produto 2012, Atualização 10). Como tal, do ponto de vista da marca do cliente, costumo preferir uma versão nomeada (por exemplo, Windows XP, Windows Vista) seguida por um número de sequência estrito de patches que podem ser instalados pelos usuários.

No entanto, escrever um software que verifique as coisas fáceis para o usuário tende a tornar o código muito mais difícil de escrever. Portanto, eu tendem a preferir o Major.Minoresquema de versão simples , apenas porque você pode fazer uma comparação simples de números para verificar se algo está atualizado, como a seguir:

// Check to see if we can handle the file version
if (this.Version < fileVersion) {
   throw new UnsupportedFileException("The file version is " + fileVersion.toString() + " which is not supported");
}
// Do stuff ...

Para colocar isso em um pouco de contexto, geralmente não me importo com o tamanho do número menor (isto é, 1.1024), o que permite que o sistema acima continue funcionando com êxito. Geralmente, os números de revisão são de interesse apenas para o desenvolvimento interno e eu realmente nem os vi afetar coisas muito além de apenas fornecer um número adicional para acompanhar.

No entanto, os dois esquemas acima realmente não se aplicam apenas a ambientes em que a implantação contínua está sendo usada (ou seja, Stack Exchange), que é onde eu tendem a preferir algum tipo de data seguida por um número de revisão, como parece ser usado no Stack Exchange sites. O motivo para isso é que as versões mudam com muita frequência no ambiente de implantação contínua e você pode ter várias versões do código ativadas no mesmo dia, o que justifica o número da revisão e a data atual é tão boa quanto qualquer outra para resolver problemas. ainda mais. Em teoria, você pode usar o número da revisão para tudo, mas o uso da data atual permite acompanhar internamente os principais marcos que podem facilitar a discussão.

rjzii
fonte
3
Também temos implantação contínua e usamos uma versão principal + a data. É simplesmente a maneira mais fácil de acompanhar o que está acontecendo. Francamente, é mais fácil consultar o controle de versão para extrair os arquivos de origem para uma determinada data do que precisar constantemente marcar arquivos e consultar dessa maneira.
NotMe
50

O problema do uso de uma data é que as especificações são escritas com base nos números contados, e não na data em que é devido.

"Esta parte da funcionalidade deve estar na versão 1. A outra parte da funcionalidade está na versão 2."

Você não pode se referir a uma data nas especificações, pois a data de lançamento pode ser perdida.

Se você não possui um processo formal que precise de diferentes releases identificados previamente, o uso de datas é bom; você não precisa adicionar outro número à mistura.

É improvável que os números de versão contenham datas, pois seu contexto está vinculado a especificações. É provável que os
números de compilação contenham datas, pois seu contexto está vinculado a quando a compilação ocorreu.

StuperUser
fonte
6
Eu argumentaria que os recursos geralmente são transferidos de um release para outro e, portanto, qualquer documentação fornecida a um cliente que "o recurso x estará no release 2" também está fadada ao fracasso.
NotMe
@ChrisLively Absolutamente. A documentação especulativa e uma linguagem como "será" em vez de "esperado" podem ser muito dolorosas. Um bom proprietário de produto definirá as expectativas certas e planejará de forma realista.
StuperUser
2
@NotMe Right. Uma especificação que planeja versões e números de lançamentos além de algumas semanas antes está basicamente fadada a estar errada, a menos que você esteja disposto a adiar o lançamento até que os recursos desejados estejam completos. Mas a tendência atual é lançar com freqüência, de preferência em uma programação regular, o que significa que você tem pouca idéia de quais recursos estarão presentes em quais lançamentos.
Jules
27

Embora essa abordagem tenha benefícios como você descreveu, existem algumas desvantagens se você usar a data como um número de versão:

  • As versões baseadas em data são simples. Com a v2.1.3, você pode ver o número da versão, o número da sub-versão e o número da sub-versão. Com 20110119, você só pode ver quando foi escrito. Você pode agrupar suas versões baseadas em data por mês, mas ainda assim não lhe diz nada. Você pode ter vários meses lentos de correção de bugs e duas semanas de codificação pesada, resultando em uma versão principal. Datas não informam isso, números de versão regulares informam.

  • Se você realmente precisa alterar a versão diariamente e, possivelmente, o número da versão, isso pode indicar que você não possui um processo de lançamento adequado, mas todo mundo muda bastante as coisas e as promove nos servidores de produção sempre que quiserem. Nesse caso, você tem um problema com o processo e o uso de um esquema de número de versão diferente não o solucionará.

Goran Jovic
fonte
3
Ter vários lançamentos por dia não equivale a ter um problema de lançamento. O que pode indicar é que você tem um grande projeto, no qual várias pessoas / grupos estão trabalhando constantemente para liberar atualizações. Podem ser correções ou simplesmente aprimoramentos.
NotMe
Além disso, as versões baseadas em data não são mais "simples" que "2.1.3". Nem têm significado sem contexto. Para a maioria dos videocassetes, retirar um conjunto de arquivos por data geralmente é mais confiável do que retirar por um rótulo. Pela simples razão de que as pessoas às vezes esquecem de carimbar um conjunto específico de arquivos com um rótulo de versão, enquanto o VCS nunca esquece de marcar data / hora na atualização.
NotMe
12

As versões são frequentemente usadas para transmitir informações sobre a diferença entre uma versão específica do software e a versão anterior. Por exemplo, se você atualizar de 1,0 para 2,0 da Acme, essa será uma grande atualização, em teoria, com grandes mudanças.

Uma atualização de 1.0 para 1.1, por outro lado, é uma atualização menor e, em teoria, realiza pequenas alterações incrementais e correções de bugs.

Seria difícil representar isso em um formato de data, embora você possa usar uma mistura. Por exemplo, v1.0.YYYY.MMDD

JohnL
fonte
2
Veja como a Mozilla mudou recentemente o manuseio dos números de versão. Os números das principais versões costumavam ficar para sempre, agora parece que há uma nova versão principal a cada poucos meses. Por quê? - quando não aumentavam o número da versão principal, muitas pessoas realmente não acreditavam que houvesse novos recursos.
precisa saber é o seguinte
Sim, o Chrome também possui um esquema de versão bizarro - acho que eles terão problemas em um ano ou dois quando lançarem a versão 21474836478.0. (Ok, eu exagerei um pouco, mas eles atingirão o ponto de número estúpido eventualmente).
precisa saber é
2
@ JohnL: Não acredito que o usuário médio do Chrome se importe com a versão principal. O aplicativo se atualiza automaticamente e "parece" permanecer o mesmo, apesar de muitas alterações terem sido feitas.
Spoike
@ Spike: Verdadeiro. Eu me preocupo principalmente porque uso o Secunia PSI, que verifica se você possui as versões mais recentes. Ele está sempre me dizendo que o Chrome 15.x é fim-de-vida ou alguma coisa
johnl
Obviamente, os números de versão do padrão RSS são apenas mentais.
precisa saber é
10

Sem repetir boas idéias de outras respostas, tenho um problema em mente que ainda não foi abordado.

Se você fizer uma bifurcação, entre uma versão mais antiga para compatibilidade com versões anteriores e uma nova versão para uma modernização incompatível, não poderá distingui-las por meio dos números de versão.

Por exemplo, o kernel do Linux foi bifurcado por volta do ano 2000 no antigo ramo 2.4.x, que provavelmente ainda é suportado hoje e conta como 2.4.199, enquanto a nova versão é 2.6 por muitos e muitos anos e é 2.6.32 para sistemas mais antigos, mas 3.2 para os kernels mais novos.

Se você tiver documentação sobre seus lançamentos, duplicará as informações e informará às pessoas que a versão 20120109 chegou em 2012 em 01/09. Mh. Mas, se houver uma detecção de bug de última hora e um release atrasado por uma semana, mas a documentação, onde o nome é mencionado, já estiver pronta, talvez impressa, as informações da imprensa serão lançadas e assim por diante. Agora você tem uma discrepância problemática, se a versão 20120109 chegou em 13/01/2012.

No SQL, a questão de saber se os IDs devem conter informações semânticas tem sido discutida com frequência, e o resultado é sempre: evite isso como o inferno! Você está criando uma dependência desnecessária. Não pode ser benéfico.

O Ubuntu com seu esquema 04/10 teve seu problema em 2006, quando a versão 6.04 foi atrasada e tornou-se 6.06. No ano 3000, em breve haverá o próximo problema! :)

Usuário desconhecido
fonte
1
O kernel Linux da série 2.4 mais recente é o 2.4.31 de 01 de junho de 2005 , embora você possa corrigi-lo gradualmente para 2.4.32-pre3 usando um patch de 09 de agosto de 2005 . Atualmente, os kernels oficiais dastable série mais recente são 2.6.32.54 (12-01-2012) e 3.1.10 (18-01-2012).
um CVn
6

Existem muitos pacotes de software que realmente usam a data como uma versão. O Ubuntu vem à mente, onde a versão deles é YY.MM. E os números de compilação dos produtos Microsoft Office também são uma codificação da data de compilação. Jeff Atwood escreveu uma postagem no blog Coding Horror sobre a numeração de versões , incluindo esta recomendação:

Sempre que possível, use datas simples em vez de números de versão, principalmente nos nomes públicos dos produtos. E se você absolutamente, positivamente, deve usar números de versão internamente, faça-os de qualquer maneira: codifique a data da construção em algum lugar do seu número de versão.

Na minha opinião, não importa, desde que você seja consistente e possa ir de um número de versão de compilação (seja o que for) e recuperar todos os artefatos que foram incorporados nessa compilação a partir do seu sistema de controle de versão. Os usuários geralmente não se importam com as informações da versão, mas com a funcionalidade fornecida pelo sistema. As informações de versão são apenas de valor real para os desenvolvedores.

Thomas Owens
fonte
4

Use o controle de versão semântico - dessa forma, você terá uma idéia do tipo de alteração que está sendo feita entre as versões sem precisar inspecionar o código: http://semver.org/

EZ Hart
fonte
3

Usar números de versão é uma maneira de mostrar quão GRANDE a alteração é

Por exemplo, 2.4.3 pode significar que a versão 2 é a principal alteração em todo o sistema. .4 é uma pequena atualização. e o último 0,3 é uma pequena correção de bug para essa versão. Dessa forma, é facilmente reconhecível o quanto mudou entre cada versão.

Dito isto, ainda vejo muitas pessoas usarem datas ou números de revisão do SCM como números de versão, desde que você tenha uma maneira de rastrear o suporte às notas de lançamento e à documentação do que estava no escopo desse lançamento, não há nenhum problema real.

Daveo
fonte
3

Algumas boas respostas aqui já, mas eu gostaria de salientar um caso em que o uso de datas faz todo sentido: pequenas bibliotecas ou trechos de código em que o código provavelmente será atualizado com freqüência, mas em pequenos pedaços sem uma única versão que diferencie dramaticamente a anterior 1.

Em outras palavras, estou falando de situações em que não há um "número da versão" real, mas basicamente uma espécie de despejo de repositório quase diário.

Quando me deparei com esse tipo de coisa, geralmente aprecio a escolha, pois é mais útil saber que estou usando um script / lib relativamente atual, em vez de uma versão específica.

UncleZeiv
fonte
3

Datas como número de versão são boas para marketing. Se as pessoas estiverem usando o "Windows NT 5.0", talvez não percebam que é obsoleto. Mas se as pessoas ainda estiverem usando o "Windows 2000", saberão instantaneamente que é um sistema operacional de 12 anos e serão incentivadas a atualizar.

No entanto, torna mais difícil distinguir entre atualizações "principais" e "secundárias".

dan04
fonte
1
E o marketing ajuda a vender ;)
c69 20/01
Por que os usuários precisam ou "são incentivados" a atualizar, se o software atende às suas necessidades (incluindo o fornecimento de um nível de segurança adequado)?
um CVn
3
Como o suporte foi descartado e você para de receber atualizações de segurança.
johnl
3

Problema ao usar datas como números de versão

As respostas aqui são boas, mas não vi ninguém abordar essa preocupação com o uso de datas: O usuário não pode determinar com que frequência as modificações foram feitas.

O que estou tentando dizer é que posso dizer que o Windows 3.1 e o Windows 7 estão distantes ... e talvez sejam incompatíveis. O Windows 95 e o Windows 2000 não me dizem nada além do ano em que o produto foi introduzido.

Por exemplo, com Python, eu sei que a versão 2.7.2 evoluiu da 2.4.6. Se eu olhar mais, vejo que a versão 2.4.6 foi lançada em 19 de dezembro de 2008; e essa versão 2.7.2 foi lançada em 11 de junho de 2011. A partir disso, posso formar uma opinião sobre a estabilidade (ou seja, a frequência de lançamento) de um produto.

Se, em vez disso, o Python usasse datas de lançamento, não sei como esses produtos podem ser conectados. Mais confusão resultaria, porque o Python 3.1.4 também foi lançado em 11 de junho de 2011 (o mesmo que o Python 2.7.2).

Em resumo, não acho que, por si só, a versão de data seja valiosa.

TheGeeko61
fonte
2

Não gosto dessa ideia, por razões já descritas por outros. Basta usar o esquema major.minor.bugfix - existe uma razão pela qual a maioria das pessoas faz dessa maneira.

Mas faça o que fizer: escolha um esquema de nomeação de versão e cumpra-o . Não faça isso como o Windows, onde eles mudam o esquema a cada lançamento. E não faça isso como o Android, onde cada versão possui um número de versão da API (8), um número de versão destinado ao marketing (2.2) e um nome estúpido (Froyo).

Mike Baranczak
fonte
1

Data como uma versão

Se o seu produto não for vendido, basta usar a data e provavelmente será útil. Se você o vender e atualizar para os clientes, eles desejam comprar um modelo com um conjunto específico de recursos. É muito mais fácil vendê-los em uma atualização, se este modelo tiver um nome claro, não importa realmente o que é, mas, por exemplo, ninguém compra o Ford 20 de janeiro de 2012, eles querem o modelo Kia. O mesmo vale para o software. Dar um nome e uma versão rígidos ao modelo significa que ele possui recursos diferentes dos anteriores. Para mim, apenas uma data não faz isso, diz que eu fiz isso na época, não pode ter novos recursos.

Esquema que usamos

Não afirmei que nosso sistema cria uma marca clara, como acima. Agora usamos um esquema de quatro partes. Um número de versão, estado, data e soma de verificação.

1200_GLD_120120_F0D1

Isso pode se estender por cima, mas permite que tenhamos várias versões da compilação para a versão 1200 que nossos engenheiros podem usar e que as diferenciamos por data. O estado diz às pessoas se é uma versão de teste interno, compilação de patches do cliente ou release gold. A soma de verificação é nova, permite que um engenheiro ou cliente verifique se realmente baixou o correto da nossa distribuição.

Então, podemos ter uma sequência de

1200_TST_120110_EF45
1200_GLD_120120_F0D1
1201_FIX_120125_123E
1201_TST_120130_31A5
1201_TST_120131_FDFD

Normalmente, nos referimos apenas aos principais números de versão ao cliente, ou seja, "12", mas um cliente receberá a versão mais recente em ouro de 12, ou seja, 1200_GLD_120120_F0D1, a menos que precise da correção.

David Allan Finch
fonte
1

Digamos que alguns clientes usem a versão dois do seu produto, e alguns atualizaram para a versão três, e essa atualização não é uma decisão tomada de ânimo leve.

Digamos que a última versão da versão dois seja a 2.3.2 e a versão três seja a 3.0.3. Agora você encontra uma vulnerabilidade que precisa absolutamente ser corrigida, e libera 2.3.3 e 3.0.4 no mesmo dia. Você pode ver como a data de lançamento é totalmente irrelevante? Você pode ter parado de trabalhar na versão dois em 2013 e só lançou algumas correções essenciais desde então. A data é irrelevante em comparação com o número da versão.

gnasher729
fonte
-1

Eu acho que funciona muito bem. Eu o uso em alguns softwares internos (aaaa.mm.dd) e em alguns softwares de código aberto lançados.

Pode não funcionar em todos os casos.

Scott Whitlock
fonte
Nesse caso, podemos ver "Seu novo ano!" feliz Ano Novo...!
Yousha Aleayoub
-2

Tecnicamente, não pode usar a data para o número da versão, mas pode mostrar o número da data para o cliente. Por exemplo, macOS 16.7.23 --- significa que: 23/7/2016

Eu acho que a tecnologia não é o problema, o problema é que Como se sente? Se você usar um número de data que possa tornar o software vivo, vivo, como um homem com o número de aniversário.

O número do edifício se parece com a máquina, a máquina, sem vida, sem vida.

Kanglando
fonte