# Versione (sviluppo software)

In informatica, ma soprattutto nello sviluppo software, la versione (di un software, programma o applicazione) corrisponde a un determinato stato nello sviluppo di un software secondo l'uso del versioning (lett. "versionamento"). Secondo il Grand dictionnaire terminologique, il versionnage (equivalente francese dell'inglese versioning) è quel processo (nello sviluppo), di mantenimento, di una versione di qualsiasi software in modo che possa essere facilmente recuperata, anche dopo che sono state rilasciate e implementate versioni più recenti.

## Versioning semantico

Il versioning semantico (Semantic Versioning), abbreviato come SemVer, è uno schema di numerazione delle versioni per il software che stabilisce regole e requisiti su come i numeri di versione vengono assegnati e incrementati.
È stato introdotto formalmente da Tom Preston-Werner, nonostante venisse utilizzato fin da prima della sua formalizzazione, ed è ampiamente utilizzato nella comunità dello sviluppo software.
Il numero di versione in SemVer è composto da tre segmenti: MAJOR.MINOR.PATCH. Ogni segmento ha un significato specifico:
* Versione MAJOR: Si incrementa quando vengono introdotte modifiche incompatibili all'API. Questo indica che la nuova versione potrebbe non essere retrocompatibile con la versione precedente.
* Versione MINOR: Si incrementa quando vengono aggiunte nuove funzionalità in modo retrocompatibile. Ciò significa che il codice che funzionava con la versione precedente dovrebbe continuare a funzionare con quella nuova.
* Versione PATCH: Si incrementa per correzioni di bug retrocompatibili. Indica che la nuova versione è retrocompatibile e contiene principalmente correzioni per problemi presenti nella versione precedente.
Inoltre, SemVer consente versioni di pre-rilascio e metadati di build:
* Versione di pre-rilascio: Un trattino seguito da una serie di identificatori separati da punti, indicando una versione di pre-rilascio. Ad esempio, "1.0.0-alpha.1".
* Metadati di build: Un segno più seguito da una serie di identificatori separati da punti, indicando metadati di build. Ad esempio, "1.0.0+20130313144700".
Seguendo Semantic Versioning, sviluppatori e utenti possono rapidamente capire la natura dei cambiamenti in una release software, semplificando la gestione delle dipendenze e la determinazione della compatibilità.

## Versioni preliminari

Durantente il corso della vita di un software, vengono sviluppate e pubblicate più versioni dello stesso: alcune di queste sono preliminari (come le versioni alfa e beta) e spesso rimangono inaccessibili al pubblico – tranne che per eventuali (alfa o beta) testing.

## Release

Le versioni – chiamate in questo caso release (lett. "rilascio") – successive alla messa in vendita o diffusione del software, sono associate a un numero o, in certi casi, ad un nome identificativo.
Convenzionalmente, si distinguono release maggiori, dette major release, quando le differenze dalla release precedente riguardano sostanziali evoluzioni delle funzionalità del software, non retrocompatibili, e release minori, dette minor release, quando le differenze riguardano principalmente correzioni di malfunzionamenti del software (bug) o comunque aggiunta di nuove funzionalità retrocompatibili.