Saltar para o conteúdo

Introdução ao Versionamento Semântico (SemVer)

Fonte: Wikiversidade

O que é Versionamento Semântico?

[editar | editar código-fonte]

Trata-se de um sistema composto por numeração de versões que é muito utilizado em projetos de software. Seu propósito é auxiliar desenvolvedores e equipes a comunicar as mudanças em um projeto de maneira clara e previsível.

Descrição de cada numeral no sistema SemVer

[editar | editar código-fonte]

O sistema SemVer utiliza o seguinte formato: MAJOR.MINOR.PATCH (por exemplo: 1.0.0). Neste sistema, cada número tem um significado específico detalhado abaixo:

  1. MAJOR (referente a versão principal): Este número é modificado quando ocorrem mudanças que afetam diretamente a compatibilidade com versões anteriores.
  2. MINOR (referente a versão secundária): Este número é incrementado quando novas funcionalidades são implementadas, mas mantendo a compatibilidade com versões anteriores.
  3. PATCH (referente a correção): Este número é incrementado quando bugs são corrigidos ou melhorias internas são implementadas, de modo que em ambos os casos a compatibilidade não é alterada.

Por que o SemVer é importante?

[editar | editar código-fonte]

Dentre as principais vantagens do sistema de versionamento semântico pode-se citar:

  1. Comunicação clara: O entendimento sobre o impacto de atualizações no software ficam mais claros.
  2. Compatibilidade de dependências: Outras equipes ou projetos a entender se podem atualizar uma biblioteca ou software sem que ele quebre.
  3. Automação de pipelines: As ferramentas de CI/CD, bem como os gerenciadores de dependências utilizam padrões SemVer para decidir como integrar novas versões.

Como funciona o SemVer?

[editar | editar código-fonte]

Para o MAJOR temos as seguintes regras:

  1. Incrementação do MAJOR deve ser feita quando ocorrer mudanças incompativeis com versões anteriores de um projeto.
    1. Exemplo: Remoção de uma função pública que era usada em diferentes partes do mesmo código.
  2. Incrementação do MINOR deve ser feita quando novas funcionalidades são implementadas, mas sem quebrar o sistema já existente.
    1. Exemplo: Implementação de uma nova API que faz um complemento as APIS existnetes.
  3. Incrementação do PATCH deve ser feita para correção de bugs ou implementação de melhorias que não alterem as funcionalidades.
    1. Exemplo: Corrigir um erro de validação ou melhorar o desempenho de uma função.

Exemplo prático

[editar | editar código-fonte]

Suponha que estejamos fazendo um sistema de gestão acadêmica. Temos as seguintes situações:

  1. Versão inicial: Após o lançamento do sistema a primeira versão estável é a 1.0.0.
  2. Correção de bugs: Descobrimos um erro e o corrigimos. A nova versão será 1.0.1.
  3. Nova funcionalidade: Adicionamos suporte para uma nova API. A versão agora é a 1.1.0.
  4. Mudança incompatível: Decidimos mudar o comportamento de uma função já existente, quebrando a compatibilidade com a versão atual. A nova versão será a 2.0.0.

Regras adicionais do SemVer

[editar | editar código-fonte]
  • Versões 0.x.y. (por exemplo: 0.1.0) são consideradas instáveis, ou seja, mudanças podem ocorrer a qualquer momento e não há garantia de compatibilidade.
  • Versões de pré-lançamento podem ser marcadas com sufixos como - alpha, -beta ou -rc (release candidate).

Ferramentas que suportam SemVer

[editar | editar código-fonte]

Como este sistema de versionamento é usado de maneira ampla na cena de desenvolvimento de software, temos um bom conjunto de ferramentas que suportam sua aplicação, como listado abaixo:

  1. Gerenciadores de dependências
    1. npm (Javascript/Node.js)
    2. pip (Python)
    3. Maven (Java)
  2. Automação de releases:
    1. Neste caso temos ferramentas como o semantic-release, que ajudam a gerar versões baseadas em mudança de código de modo automático.

Boas práticas ao usar SemVer

[editar | editar código-fonte]

Abaixo seguem algumas boas práticas ao usar esta semântica de versionamento:

  1. Documente as alterações feitas no código: Isso pode ser feito com um arquivo CHANGELOG.
  2. Procure seguir as convenções: Não pule números ou criar versões não sequenciais.
  3. Faça teste das mudanças implementadas: Garanta os testes adequados de uma nova versão antes que a mesma seja lançada.

O Versionamento Semântico é uma prática indispensável quando se fala de Engenharia de Software. Tal prática promove clareza, previsibilidade e facilita a colaboração de código entre as equipes envolvidas. Sua adoção é um importante passo para garantir código de qualidade e a manutenção do mesmo a longo prazo.

  1. Documentação do SemVer: https://semver.org
  2. Um guia básico ao SemVer: https://opensource.com/article/19/2/semantic-versioning