DEV Community

Cover image for SemVer - Versionamento de Código: Princípios e Práticas
Thiago Honorato
Thiago Honorato

Posted on

SemVer - Versionamento de Código: Princípios e Práticas

Introdução*

O versionamento de código é um componente crucial no desenvolvimento de software, facilitando a comunicação entre desenvolvedores e usuários sobre as mudanças e melhorias feitas em um projeto. Entre os diferentes sistemas de versionamento, o Semantic Versioning (SemVer) se destaca pela sua clareza e consistência. Este artigo explora os princípios do SemVer, suas regras e práticas recomendadas para sua implementação.

O Que é SemVer?

Semantic Versioning (Versionamento Semântico) é um sistema de versionamento que utiliza uma convenção específica de numeração para indicar mudanças no software. O padrão SemVer foi criado por Tom Preston-Werner, cofundador do GitHub, e é descrito na especificação semver.org.

O formato básico do SemVer é MAJOR.MINOR.PATCH, onde cada número representa um tipo específico de mudança no software:

  • MAJOR: Incrementado quando há mudanças incompatíveis com versões anteriores.
  • MINOR: Incrementado quando funcionalidades são adicionadas de forma compatível com versões anteriores.
  • PATCH: Incrementado quando correções de bugs compatíveis com versões anteriores são realizadas.

Princípios do SemVer

O SemVer se baseia em alguns princípios fundamentais:

  1. Transparência: Facilita a comunicação das mudanças de forma clara e previsível.
  2. Compatibilidade: Ajuda a garantir a compatibilidade entre diferentes versões de um software.
  3. Estabilidade: Proporciona um caminho estruturado para evoluir o software sem quebrar a funcionalidade existente.

Regras do SemVer

A especificação SemVer define um conjunto claro de regras para incrementar os números de versão:

  1. Mudança MAJOR (1.x.x a 2.x.x):

    • Alterações incompatíveis com versões anteriores.
    • Exemplo: Remoção de uma função pública, alteração de comportamento existente que pode quebrar o código que depende dessa funcionalidade.
  2. Mudança MINOR (1.1.x a 1.2.x):

    • Adição de novas funcionalidades de forma retrocompatível.
    • Exemplo: Adição de uma nova função que não altera o comportamento das funções existentes.
  3. Mudança PATCH (1.1.1 a 1.1.2):

    • Correções de bugs que são compatíveis com versões anteriores.
    • Exemplo: Correção de um bug que não altera a API pública.

Exemplos Práticos

Vamos considerar um projeto fictício ExemploLib:

  • Versão 1.0.0: Primeira versão estável. Inclui funcionalidades básicas.
  • Versão 1.1.0: Adiciona uma nova função sem alterar as existentes. Incrementa o MINOR.
  • Versão 1.1.1: Corrige um bug na função existente. Incrementa o PATCH.
  • Versão 2.0.0: Remove uma função e altera outra de forma incompatível com versões anteriores. Incrementa o MAJOR.

Práticas Recomendadas

Para utilizar o SemVer de forma eficaz, siga estas práticas recomendadas:

  1. Documentação Clara: Documente todas as mudanças de versão, especialmente aquelas que incrementam o MAJOR.
  2. Commit e Tags: Utilize sistemas de controle de versão como Git para criar commits claros e tags de versão.
  3. Testes Automatizados: Implementar uma suíte de testes automatizados para garantir que mudanças MINOR e PATCH não introduzam regressões.
  4. Planejamento de Releases: Planeje as versões MAJOR de forma cuidadosa, considerando o impacto nas dependências e nos usuários do software.

Conclusão

O versionamento semântico, ou SemVer, oferece uma abordagem estruturada e previsível para o gerenciamento de versões de software. Ao aderir às regras e princípios do SemVer, desenvolvedores podem garantir uma evolução ordenada do software, minimizando o risco de interrupções e maximizando a transparência e a confiabilidade. Implementar o SemVer não é apenas uma boa prática técnica, mas também uma maneira eficaz de comunicar mudanças aos usuários e colaboradores do projeto.

*Desculpe pela brincadeira com a imagem 😂

Top comments (0)