Introdução ao Versionamento Semântico (SemVer)
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:
- MAJOR (referente a versão principal): Este número é modificado quando ocorrem mudanças que afetam diretamente a compatibilidade com versões anteriores.
- 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.
- 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:
- Comunicação clara: O entendimento sobre o impacto de atualizações no software ficam mais claros.
- Compatibilidade de dependências: Outras equipes ou projetos a entender se podem atualizar uma biblioteca ou software sem que ele quebre.
- 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:
- Incrementação do MAJOR deve ser feita quando ocorrer mudanças incompativeis com versões anteriores de um projeto.
- Exemplo: Remoção de uma função pública que era usada em diferentes partes do mesmo código.
- Incrementação do MINOR deve ser feita quando novas funcionalidades são implementadas, mas sem quebrar o sistema já existente.
- Exemplo: Implementação de uma nova API que faz um complemento as APIS existnetes.
- Incrementação do PATCH deve ser feita para correção de bugs ou implementação de melhorias que não alterem as funcionalidades.
- 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:
- Versão inicial: Após o lançamento do sistema a primeira versão estável é a 1.0.0.
- Correção de bugs: Descobrimos um erro e o corrigimos. A nova versão será 1.0.1.
- Nova funcionalidade: Adicionamos suporte para uma nova API. A versão agora é a 1.1.0.
- 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).
- Veja o exemplo do grupo CyanogenMod: https://cyanogenmodroms.com/release-versioning/
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:
- Gerenciadores de dependências
- npm (Javascript/Node.js)
- pip (Python)
- Maven (Java)
- Automação de releases:
- 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:
- Documente as alterações feitas no código: Isso pode ser feito com um arquivo CHANGELOG.
- Procure seguir as convenções: Não pule números ou criar versões não sequenciais.
- Faça teste das mudanças implementadas: Garanta os testes adequados de uma nova versão antes que a mesma seja lançada.
Conclusão
[editar | editar código-fonte]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.
Referências
[editar | editar código-fonte]- Documentação do SemVer: https://semver.org
- Um guia básico ao SemVer: https://opensource.com/article/19/2/semantic-versioning