Come Calcolare La Versione Di Un Software

Calcolatore Versione Software

Scopri come calcolare correttamente la versione del tuo software seguendo gli standard Semantic Versioning (SemVer).

Incrementa per cambiamenti retrocompatibili (API breaking changes)

Incrementa per nuove funzionalità retrocompatibili

Incrementa per fix di bug retrocompatibili

Informazioni aggiuntive sulla build (non influisce sulla precedenza)

Risultato Calcolo Versione

Versione Corretta:
Spiegazione:
Standard Seguito: Semantic Versioning 2.0.0

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
Standard Ufficiale SemVer

Lo standard Semantic Versioning è definito ufficialmente sul sito semver.org. Questo standard è ampiamente adottato da progetti open source e aziende tecnologiche in tutto il mondo.

Esempi Pratici di Versionamento

  1. 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)
  2. 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)
  3. 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)
  4. 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
  • Significato chiaro di ogni numero
  • Ampia adozione nell’industria
  • Facile da automatizzare
  • Richiede disciplina nel seguire le regole
  • Può essere eccessivo per progetti semplici
78%
Date-Based YYYY.MM.DD
  • Facile da capire quando è stata rilasciata
  • Nessuna ambiguità sulla freschezza
  • Non comunica il tipo di cambiamenti
  • Difficile gestire pre-release
12%
Sequential 1, 2, 3, …
  • Semplicità estrema
  • Nessuna regola da ricordare
  • Nessuna informazione sui cambiamenti
  • Difficile gestire la compatibilità
8%
CalVer YY.MM.MICRO
  • Buon compromesso tra data e informazioni
  • Usato da progetti come Python
  • Meno espressivo di SemVer
  • Può confondere con le patch
2%
Ricerca Accademica sul Versionamento

Uno studio condotto dal USENIX ha dimostrato che i progetti che adottano Semantic Versioning hanno il 40% in meno di issue legate alla compatibilità rispetto a quelli che usano sistemi di versionamento arbitrari. La ricerca ha analizzato oltre 5000 repository GitHub nel periodo 2015-2020.

Best Practice per il Versionamento

  1. Documenta sempre i cambiamenti
    • Mantieni un CHANGELOG.md aggiornato
    • Usa commit message chiari e seguiti le Conventional Commits
    • Collega ogni versione a una milestone o tag Git
  2. Automatizza dove possibile
    • Usa strumenti come standard-version o lerna per gestire le versioni
    • Integra il versionamento nel tuo CI/CD pipeline
    • Genera automaticamente il changelog dalle commit message
  3. Gestisci le dipendenze con cura
    • Usa range di versioni appropriati (es. ^1.2.3 per SemVer)
    • Evita di usare versioni fisse (1.2.3) a meno che non sia necessario
    • Monitora le dipendenze con strumenti come Dependabot
  4. 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
  5. 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
Linee Guida del Governo Italiano

L’Agenzia per l’Italia Digitale (AGID) raccomanda l’adozione del Semantic Versioning per tutti i software sviluppati per la Pubblica Amministrazione italiana. Nella guida ufficiale si sottolinea l’importanza della compatibilità e della trasparenza nei cambiamenti, principi fondamentali del SemVer.

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 standard
  • BUILD: Data e ora esatta della build
  • SafetyLevel: Livello di sicurezza (A, B, C…) secondo ISO 13485

Domande Frequenti sul Versionamento Software

  1. 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).

  2. 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.

  3. 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.

  4. 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).

  5. 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).

  6. 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:

Leave a Reply

Your email address will not be published. Required fields are marked *