SemVer - Versionamento de Código: Princípios e Práticas
Tags: webdev, semver, programming, braziliandevs
Published: 2024-06-18 23:18:15

## 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](https://semver.org/lang/pt-BR/)) 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_ 😂