14 de julho
Geral
363 visualizações

Versionamento semântico 2.0.0

Versionamento semântico 2.0.0 (ou Semantic Versioning 2.0.0) propõe regras e requerimentos para atribuição de versão de programas. Se trata de uma tentativa de resolução do problema de versionamento de software denominado “inferno de dependências”, que ocorre quando uma version lock impede que o projeto prossiga com segurança e integridade. Versionamento semântico implica diretamente no controle por numeração, na garantia de compatibilidade do pull request ao considerar os tipos de modificação que os softwares sofrem durante seu desenvolvimento e eventuais atualizações.

Version lock

Ocorre quando a restrição de atualização de uma dependência (um pacote de terceiros) impede que o projeto prossiga com segurança e integridade.

Controle por numeração

versionamento-semantico-2

MAJOR MINOR PATCH PRE-RELEASE
[+Evolução de API] [+Nova funcionalidade] [+Coreção de BUG] [+Aviso de Incompatibilidade]
por mudanças incompatíveis com a versão anterior por funcionalidades implementadas compatíveis com a versão atual MAJOR por resolução de bugs compatível com a MINOR ativa sinalização de não cumprimento do padrão de compatibilidade (ex: prefixos -alpha, -beta)

Exemplos

Determinado software interpreta cliques em tela por piscar de olhos, através de um óculos de realidade virtual (VR). O programa do óculos VR é suportado em sistema operacional Android v. 6.0.0, e necessita de um navegador Chrome na versão igual ou superior a v. 48.0.0, o que sinaliza que qualquer versão do chrome acima de v. 48.0.0 garante suporte ao programa do óculos.

Em um segundo caso, surgiu uma atualização do navegador com 5 novas funcionalidades (MINOR), e a versão mais atual passa a ser v. 48.5.0. Nesse caso, a atualização do navegador pode ser feita manualmente pela sobreposição direta, movendo os arquivos da versão 48.5.0 para a pasta onde estão os arquivos da versão 48.0.0 e autorizando a substituição.

Git e Github

Projetos versionados com git dependem de alguma padronização de nome que represente as funcionalidades e determinado momento, dada a constância de incrementos submetidos. Para isso existe a numeração sequencial. Sem uma padronização de sequência, seria impossível saber a ordem dos incrementos, gerando complicações na localização de código já produzido e dificultando rollbacks de emergência.

Dependências de software (vendors)

A gestão de dependências é notável em Frameworks onde as dependências (vendors) são gerenciadas de forma automatizada. Uma ferramenta como NPM ou Composer realiza a leitura de um arquivo de configuração (json ou xml), e obtém as versões especificadas em tal arquivo de um repositório na web. Isso faz com que seja dispensável o transporte das vendors em migrações, uma vez que podem ser obtidos com um comando.

Especificação autorada por Tom Preston-Werner. Leia a versão original (em inglês).

Propósito do versionamento semântico

O desenvolvimento iterativo e incremental exige muito com relação à cooperação, organização e segurança no desenvolvimento de software. Adotar a regra de versionamento semântico significa etiquetar conjuntos de mudanças (pull-requests), de modo análogo a gavetas de um arquivo. É possível otimizar, hoje mesmo, o desenvolvimento de suas aplicações com semantic versioning 2.0:

  • Centralização de trabalhos;
  • Segurança para integrações;
  • Organização para trabalho em equipe;
  • Etiquetagem/backup dos trabalhos.

Você já passou por problemas com versionamento? Sugere alguma mudança? Compartilhe com a gente nos comentários! Ah, ainda sobre construção de software, vale a pena ler o post sobre APIs RESTlike e RESTful.


Comentários:

  • RESTlike e RESTFUL | Matteus Barbosa: […] versionamento consistente. Você já conhece o versionamento semântico? Também escrevi um post sobre o assunto. […]

Complementar, contribuir, comentar!

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *


Um pouco sobre o autor

Matteus Barbosa - Desenvolvedor Web
Interessado por negócios e tecnologia, sou formado em sistemas de informação pela PUC e atuo como consultor de aplicações web, resolvendo problemas de negócios relacionados a conciliação bancária e plataformas de ensino a maior parte do tempo. Me interessa documentação de qualidade, casos de sucesso e networking. Agreguei valor para os negócios onde contribuí. Entre os próximos objetivos, busco experiências de desenvolvimento internacional.