Calcolatore Versione Software
Scopri come calcolare correttamente la versione del tuo software seguendo gli standard Semantic Versioning (SemVer).
Risultato Calcolo Versione
Guida Completa: Come Calcolare la Versione di un Software
Il calcolo corretto delle versioni del software è fondamentale per mantenere la compatibilità, comunicare chiaramente le modifiche agli utenti e seguire le best practice dell’industria. Questa guida approfondita ti spiegherà tutto ciò che devi sapere sul Semantic Versioning (SemVer), lo standard più diffuso per la gestione delle versioni del software.
Cos’è il Semantic Versioning?
Il Semantic Versioning (o SemVer) è un sistema di versionamento che assegna un significato specifico a ogni numero nella versione del software. Una versione SemVer ha questo formato:
MAJOR.MINOR.PATCH
- MAJOR: Incrementato quando vengono introdotte modifiche retrocompatibili (breaking changes)
- MINOR: Incrementato quando vengono aggiunte nuove funzionalità retrocompatibili
- PATCH: Incrementato quando vengono corretti bug retrocompatibili
Ad esempio, la versione 2.5.3 indica:
- Major version 2 (potenziali breaking changes rispetto alla 1.x)
- Minor version 5 (5 rilasci con nuove funzionalità dalla major 2)
- Patch version 3 (3 fix di bug dall’ultima minor)
Quando Incrementare Ogni Numero di Versione
| Tipo di Modifica | Numero da Incrementare | Esempio | Impatto |
|---|---|---|---|
| Breaking changes (cambiamenti retrocompatibili) | MAJOR | 1.2.3 → 2.0.0 | Gli utenti devono aggiornare il loro codice |
| Nuove funzionalità retrocompatibili | MINOR | 1.2.3 → 1.3.0 | Gli utenti possono beneficiare delle nuove features senza modifiche |
| Fix di bug retrocompatibili | PATCH | 1.2.3 → 1.2.4 | Correzioni di sicurezza o bug senza nuovi features |
Pre-release e Build Metadata
Il formato SemVer completo include anche informazioni opzionali per pre-release e build metadata:
MAJOR.MINOR.PATCH-PRERELEASE+BUILD
- PRERELEASE (es.
1.0.0-alpha.1): Indica una versione non stabile. I separatori possono essere-o. - BUILD (es.
1.0.0+20231015): Informazioni sulla build specifica, non influisce sulla precedenza delle versioni
Esempi Pratici di Versionamento
-
Scenario 1: Stai sviluppando un’API e introduci un nuovo endpoint che non rompe la compatibilità con le chiamate esistenti.
- Versione corrente: 1.2.3
- Nuova versione: 1.3.0 (incremento MINOR)
-
Scenario 2: Corregge un bug di sicurezza nella gestione delle password senza aggiungere nuove funzionalità.
- Versione corrente: 1.2.3
- Nuova versione: 1.2.4 (incremento PATCH)
-
Scenario 3: Modifichi il formato di risposta di un’endpoint API esistente, rendendolo incompatibile con le versioni precedenti.
- Versione corrente: 1.2.3
- Nuova versione: 2.0.0 (incremento MAJOR)
-
Scenario 4: Rilascio una versione beta con nuove funzionalità sperimentali.
- Versione corrente: 1.2.3
- Nuova versione: 1.3.0-beta.1
Confronto tra Differenti Sistemi di Versionamento
| Sistema | Formato | Vantaggi | Svantaggi | Adozione (%) |
|---|---|---|---|---|
| Semantic Versioning | MAJOR.MINOR.PATCH |
|
|
78% |
| Date-Based | YYYY.MM.DD |
|
|
12% |
| Sequential | 1, 2, 3, … |
|
|
8% |
| CalVer | YY.MM.MICRO |
|
|
2% |
Best Practice per il Versionamento
-
Documenta sempre i cambiamenti
- Mantieni un
CHANGELOG.mdaggiornato - Usa commit message chiari e seguiti le Conventional Commits
- Collega ogni versione a una milestone o tag Git
- Mantieni un
-
Automatizza dove possibile
- Usa strumenti come
standard-versionolernaper gestire le versioni - Integra il versionamento nel tuo CI/CD pipeline
- Genera automaticamente il changelog dalle commit message
- Usa strumenti come
-
Gestisci le dipendenze con cura
- Usa range di versioni appropriati (es.
^1.2.3per SemVer) - Evita di usare versioni fisse (
1.2.3) a meno che non sia necessario - Monitora le dipendenze con strumenti come Dependabot
- Usa range di versioni appropriati (es.
-
Comunica chiaramente le modifiche
- Evidenzia i breaking changes nelle note di rilascio
- Fornisci guide di migrazione per le major version
- Usa @deprecated nei commenti del codice per le API obsolete
-
Testa la compatibilità
- Mantieni test di regressione per le versioni precedenti
- Usa flag di feature per le nuove funzionalità
- Considera di mantenere più versioni major contemporaneamente
Errori Comuni da Evitare
-
Incrementare la major per ogni rilascio
Alcuni team incrementano sempre la major per “sicurezza”, ma questo svaluta il significato dei numeri di versione e confonde gli utenti.
-
Usare la patch per nuove funzionalità
Le nuove features, anche piccole, dovrebbero sempre incrementare la minor version, non la patch.
-
Saltare versioni
Passare da 1.2.3 direttamente a 2.0.0 senza una 1.3.0 può confondere gli utenti che si aspettano una minor version intermedia.
-
Non documentare i breaking changes
Anche se incrementi correttamente la major, devi documentare chiaramente cosa è cambiato per aiutare gli utenti a migrare.
-
Usare versioni come “1.0” per indicare stabilità
La versione 1.0 non ha un significato speciale in SemVer. La stabilità dovrebbe essere comunicata attraverso altri canali.
-
Ignorare le pre-release
Le versioni alpha/beta sono utili per ricevere feedback prima del rilascio stabile. Non saltarle per fretta.
Strumenti Utili per il Versionamento
| Strumento | Descrizione | Lingua/PIattaforma | Link |
|---|---|---|---|
| standard-version | Automatizza il versionamento e la generazione del changelog | Node.js | GitHub |
| Lerna | Gestisci versioni di multiple packages (monorepo) | Node.js | Sito Ufficiale |
| Bumpversion | Strumento semplice per incrementare le versioni | Python | GitHub |
| semver.org | Validatore online per versioni SemVer | Web | Sito Ufficiale |
| Renovate | Automatizza gli aggiornamenti delle dipendenze | Multi-lingua | Sito Ufficiale |
Casistica Avanzata
Versionamento di Librerie vs Applicazioni
Il Semantic Versioning è particolarmente importante per le librerie, dove altri sviluppatori dipendono dalla stabilità delle tue API. Per le applicazioni (es. app mobile o web app), dove l’utente finale non integra direttamente il tuo codice, puoi considerare approcci diversi:
-
Applicazioni Mobile:
- Version code (numero progressivo per il Play Store)
- Version name (visibile all’utente, es. 2.1.0)
- Spesso si usa MAJOR.MINOR senza patch
-
SaaS/Web Apps:
- Versioni interne per il team (es. build number)
- Versioni pubbliche semplificate (es. “Winter 2023”)
- Spesso si omette il patch per gli utenti finali
-
Sistemi Embedded:
- Spesso si usa un numero di firmware (es. FW1.03)
- Può includere informazioni sull’hardware compatibile
Versionamento in Ambienti Regolamentati
In settori come quello medico o aerospaziale, dove la tracciabilità è critica, si spesso adottano sistemi ibridi:
PRODUCT-MAJOR.MINOR.PATCH+BUILD[.SafetyLevel]
Esempio: MEDDEV-2.1.0+20231015.A
Dove:
PRODUCT: Identificativo del prodotto (richiesto da FDA/CE)MAJOR.MINOR.PATCH: SemVer standardBUILD: Data e ora esatta della buildSafetyLevel: Livello di sicurezza (A, B, C…) secondo ISO 13485
Domande Frequenti sul Versionamento Software
-
D: Posso usare più di 3 numeri (es. 1.2.3.4)?
R: No, lo standard SemVer prevede solo MAJOR.MINOR.PATCH. Se hai bisogno di più livelli, considera di usare le pre-release (es. 1.2.3-beta.4).
-
D: Cosa fare se introduco un breaking change ma anche nuove funzionalità?
R: Incrementa la MAJOR e azzera MINOR e PATCH (es. da 1.2.3 a 2.0.0). Le nuove funzionalità sono incluse nella nuova major version.
-
D: Come gestire versioni per diversi sistemi operativi?
R: Usa la build metadata (es. 1.2.3+windows.1, 1.2.3+linux.1). In alternativa, considera pacchetti separati.
-
D: È obbligatorio partire da 1.0.0?
R: No, puoi partire da 0.x.y per indicare che il software è in sviluppo iniziale (0.y.z è riservato per lo sviluppo iniziale).
-
D: Come gestire versioni per estensioni/plug-in?
R: Segui il SemVer del progetto principale se possibile, oppure usa un prefisso (es. myplugin-v1.2.3).
-
D: Cosa fare se sbaglio a versionare?
R: Se la versione è già stata pubblicata, rilascia una nuova versione che corregge l’errore. Ad esempio, se hai erroneamente rilasciato un breaking change come 1.2.0 invece di 2.0.0, rilascia subito una 2.0.0 con le stesse modifiche.
Conclusione
Il corretto versionamento del software è una competenza essenziale per ogni sviluppatore e team di prodotto. Seguendo lo standard Semantic Versioning non solo comunichi chiaramente il tipo di cambiamenti introdotti, ma facilitai anche:
- La gestione delle dipendenze per gli utenti del tuo software
- La manutenzione a lungo termine del progetto
- La collaborazione tra team diversi
- L’automatizzazione dei processi di deploy
- La trasparenza verso gli utenti finali
Ricorda che il versionamento non è solo una convenzione tecnica, ma un linguaggio comune che permette a sviluppatori, sistemisti e utenti finali di comprendere l’evoluzione del software senza dover analizzare ogni singola riga di codice cambiata.
Per approfondire, consulta:
- La specifica ufficiale SemVer
- Il libro “Software Release Practice Patterns” di O’Reilly
- Le linee guida NIST sulla gestione delle vulnerabilità nel software