# Versionamento

Na informática, o versionamento de software é o processo de atribuir um nome único ou uma númeração única para indicar o estado de um programa de computador. Esses números são geralmente atribuídos de forma crescente e indicam o desenvolvimento de melhorias ou correção de falhas no software.
Software modernos são constantemente construídos usando dois esquemas de versionamento distintos: um número interno de versão, que pode ser incrementado diversas vezes por dia (para controlar o número de revisões), e uma versão de lançamento, que usualmente se altera com menos frequência (como um versionamento semântico ou um codinome).

## Esquemas de versionamento

Diversas formas diferentes de versionamento são atualmente utilizadas para distinguir diferentes versões de um software. A presença constante da computação no dia-a-dia das pessoas, levou esses esquemas a serem utilizados em contextos fora da computação (como ocorre em Escola 2.0 e Indústria 4.0, geralmente sugerindo uma progressão tecnológica).

### Identificação sequencial

No esquema de identificação sequencial, cada versão lançada é associada a um identificador único que consiste em uma ou mais sequências de números ou letras. Este é o único ponto em comum dessa forma de organização, pois a quantidade de sequências utilizadas, o significado de cada sequência e a forma de incremento das sequências varia constantemente de software para software.

#### Baseado na significatividade da mudança

Em alguns esquemas, os identificadores sequenciais são utilizados para informar a significância das mudanças entre as versões lançadas. As mudanças são classificadas por nível de significatividade e a decisão de qual sequência deve se alterar é baseada na significatividade das mudanças em relação à versão anterior. Dessa forma, a primeira sequência é alterada apenas quando ocorrer mudanças significativas, enquanto as sequências subsequentes representam mudanças com significatividade decrescente.
Dependendo da forma de organização, a significatividade da mudança pode ser determinada pelo número de linhas de código alteradas, quantidade de pontos de função adicionados ou removidos, potencial impacto a consumidores (em termos do trabalho requerido para se adaptar à próxima versão), risco de falhas ou de mudanças de comportamento inesperadas, nível de mudanças no leiaute visual, quantidade de novos recursos ou qualquer outro atributo que os desenvolvedores do produto julgue significativo, incluindo eventuais necessidade de associar uma impressão relativa de evolução do produto como estratégia de marketing.

#### Versionamento semântico

O versionamento semântico (em inglês Semantic versioning, ou SemVer) é atualmente o esquema de versionamento mais conhecido e utilizado nessa categoria e utiliza uma sequência de três números (MAJOR.MINOR.PATCH) e opcionalmente um rótulo de pré-lançamento ou metadados. Nesse esquema, são sempre levadas em conta se as mudanças são compatíveis ou não com versões anteriores. De acordo com o versionamento semântico, devemos incrementar o número
* MAJOR sempre que ocorrerem mudanças não compatíveis com versões anteriores;
* MINOR quando há adição de funcionalidade compatível com versões anteriores; e
* PATCH para todos os outros tipos de mudanças, incluindo ajustes de bugs, também compatíveis com versões anteriores.
A presença de um rótulo de pré-lançamento (-alpha, -beta) indica riscos substanciais, assim como um número majoritário zero (0.y.z), pois normalmente indica que o software não se encontra finalizado (em desenvolvimento) e pode conter mudanças com qualquer nível de impacto (altíssimo risco).

### Data de lançamento

Muitos projetos utilizam um esquema de versionamento baseado na data de lançamento, chamado CalVer (do inglês Calendar Versioning, literalmente Versionamento pelo Calendário). Ubuntu Linux é um exemplo de projeto que utiliza o CalVer: o Ubuntu 18.04, por exemplo, foi lançado em Abril de 2018. Este formato tem a vantagem de ser facilmente relacionável à cronogramas de desenvolvimento e suporte. Alguns jogos também utilizam datas para o versionamento, como ocorre no Street Fighter EX, que durante a inicialização exibe a data de lançamento seguida da região (ex.: 961219 ASIA, indicando a versão asiática lançada em 19 de dezembro de 1996).