Quale "convenzione di denominazione delle versioni" usi? [chiuso]


107

Convenzioni di denominazione di versioni diverse sono adatte a progetti diversi? Cosa usi e perché?

Personalmente, preferisco un numero di build in esadecimale (ad es. 11BCF), che dovrebbe essere incrementato molto regolarmente. E poi per i clienti un semplice numero di versione a 3 cifre, ovvero 1.1.3.

1.2.3 (11BCF) <- Build number, should correspond with a revision in source control
^ ^ ^
| | |
| | +--- Minor bugs, spelling mistakes, etc.
| +----- Minor features, major bug fixes, etc.
+------- Major version, UX changes, file format changes, etc.

Risposte:


45

Raramente mi trovo completamente d'accordo con Jeff Atwood, ma tendo a seguire la sua opinione sulla convenzione .NET sulla numerazione delle versioni .

(Versione principale). (Versione secondaria). (Numero di revisione). (Numero di build)

Il più delle volte, per i progetti personali, trovo che questo sia eccessivo. Le poche volte in cui ho lavorato a progetti sostanziali come i motori di ricerca in C # mi sono attenuto a questa convenzione e sono stato in grado di usarlo come tracker interno in modo efficace.


1
Questo tende a seguire il modello che ho visto usato con successo in molti progetti, grandi o piccoli. È molto efficace.
luis.espinal,

1
In che modo "dovrebbe essere il numero di build" correlato a "identificativo del changeset (hash)"? Fa parte dell'hash, incrementale o qualcos'altro?
Jace Browning,

@Jace, dove lavoro usiamo Mercurial e andiamo via dal numero del changeset. Effettuiamo sempre il push / pull da un singolo repository, quindi il numero non è univoco per il checkout specifico. Abbiamo quindi [major]. [Minor]. [Changeset] di conseguenza (sebbene i numeri maggiori e minori siano spesso più di marketing che indicativi di progressi dall'ultima versione).
Wai Ha Lee,

Se si chiama ToString () su una struttura di versione .NET, la build sarà il 3 ° numero, non la revisione. Come puoi vedere con questo script PowerShell:$version = New-Object System.Version 1, 2, 3, 4; $version.ToString(); $version.Build;
Joel McBeth,

"Numero di build" implica che si tratta solo di piccole modifiche come la correzione di bug? Qualche nuova funzionalità dovrebbe avere almeno il proprio numero di revisione?
Kyle Delaney,

90

La versione semantica ( http://semver.org/ ) merita una menzione qui. È una specifica pubblica per uno schema di versioning, sotto forma di [Major].[Minor].[Patch]. La motivazione di questo schema è di comunicare il significato con il numero di versione.


Sorpreso, questo non sta ottenendo più amore.
Mark Canlas,

Ero un po 'in ritardo alla festa ... Ho aggiunto questa risposta 9 mesi dopo la domanda originale. ;-)
M. Dudley,

Sembra che questo sia lo stesso della politica Rational Versioning di RubyGems che ho menzionato di seguito, solo meglio formalizzata.
Ken Bloom,

@MarkCanlas non ottiene più amore perché lega idee specifiche a ciò che costituisce una versione maggiore / minore / patch. Parla di API che è un po '... strano
Rudolf Olah il

5
SemVer è pensato per le API di versioning, non per il software rivolto all'utente: "Il software che utilizza il Versioning semantico DEVE dichiarare un'API pubblica". Quindi tecnicamente, non puoi usare SemVer senza un'API pubblica. Tuttavia, potrebbe avere senso adottare qualcosa di simile a SemVer per il versioning delle applicazioni rivolte all'utente.
Ajedi32

33

Non lo uso ma ho visto ed è una struttura interessante:

Year.Month.Day.Build

Auto spiegato.


4
E sai sempre quanto è fresco il tuo codice ..! :)
Lipis,

3
questo è anche simile ai numeri di versione di Ubuntu. Fanno gli esempi di year.month: 10.04 e 10.10
Brad Cupit,

5
Vale la pena ricordare che questo funziona bene solo per un sistema che o non ha problemi di compatibilità (un sito Web) o intrinsecamente ha sempre incompatibilità (una versione di Ubuntu).
jkerian

1
@jkerian, perché la compatibilità è importante per questo?
AviD

12
@AviD: Sono un po 'confuso sul perché lo stai chiedendo, dal momento che quasi tutte le altre risposte a questa domanda mostrano i sistemi di versione che includono informazioni sulla compatibilità. La scelta dipende dalle informazioni che si desidera registrare con i numeri di versione. Per i miei scopi, una data non ha praticamente alcun significato (iniziare da v1 e incrementare ogni build sarebbe un miglioramento). Ti sei mai ramificato? rilasci mai "nuova patch su vecchio codice" rilasciando "nuova versione"? Ma per qualcosa come un sito Web o un sistema operativo, un sistema basato sulla data sembra abbastanza appropriato.
jkerian

13

Provo ad usare la politica di Rational Versioning di RubyGems in cui:

  • Il numero di versione principale viene incrementato quando viene interrotta la compatibilità binaria
  • Il numero di versione secondario viene incrementato quando si aggiunge una nuova funzionalità
  • Il numero di build cambia per le correzioni di bug.

2
Questo è essenzialmente noto come Versioning semantico: semver.org
Patrice M.

2
@PatriceM. Grazie per aver condiviso quel link. semver.org non esisteva quando ho scritto quella risposta.
Ken Bloom,

10

Ecco un approccio molto dettagliato alla numerazione delle versioni:

  • N.x.K, dove Ne Ksono numeri interi. Esempi: 1.x.0, 5.x.1, 10.x.33. Utilizzato per build intermedie .
  • N.M.K, Dove N, Me Ksono numeri interi. Esempi: 1.0.0, 5.3.1, 10.22.33. Utilizzato per le versioni .
  • N.x.x, dove Nè intero. Esempio: 1.x.x. Utilizzato per le filiali di supporto .
  • N.M.x, dove Ne Msono numeri interi. Esempio: 1.0.x. Utilizzato per i rami di rilascio .

Ecco l'immagine per una semplice illustrazione dell'approccio alla numerazione delle versioni:

Numerazione delle versioni agile

PAsignifica pre-alfa A significa alfa B significa beta AR significa rilascio alfa BR significa rilascio beta RC significa rilascio candidato ST significa stabile

I vantaggi di tale approccio alla numerazione delle versioni sono i seguenti:

  • Rappresenta le specifiche del ciclo di vita dello sviluppo software agile .
  • Tiene conto delle specifiche della struttura del repository del codice sorgente .
  • Si spiega da sé per coloro che si sono abituati ai modelli. Ogni modello rappresenta artefatto diverso. Tali modelli possono essere facilmente analizzati e utilizzati per altri scopi, come il rilevamento dei problemi.
  • Set di modelli di versione, che di base per l'approccio di versione descritto può essere utilizzato per la raccolta di metriche e pianificazione .
  • Si concentra sui concetti di maturità e livello di qualità . Molto spesso numeri di versione come 1.0.0 vengono assegnati senza necessità (quando il software è in alpha profondo). L'approccio alla numerazione delle versioni presentato consente di stabilire diversi livelli di maturità. Nel caso più semplice avrà solo due livelli: intermedio build ( N.x.K) e release ( N.M.K). Rilascio significa che un pezzo di software con il numero di versione completo ( N.M.K) ha attraversato una sorta di processo di gestione della qualità all'interno della società / organizzazione / squadra del fornitore.
  • È una prova della natura agile sia dello sviluppo che dei test.
  • Incoraggia l'approccio modulare alla struttura e all'architettura del software.

C'è anche un diagramma più complesso che rappresenta l'approccio al versioning in dettaglio. Inoltre, potresti trovare utili diapositive di presentazione che descrivono la transizione all'approccio di versioning e l' applicazione SCMFViz che illustrano i principi di base dell'approccio di numerazione delle versioni. Le diapositive di presentazione spiegano anche perché è importante attenersi allo stesso approccio di versioning per tutta la vita del progetto software.

Personalmente il mio atteggiamento nei confronti dell'utilizzo della versione della data anziché dei numeri della versione reale presuppone che gli sviluppatori del software con versioni datate:

  • Non si sa nulla del ciclo di vita dello sviluppo del software . Lo sviluppo è di solito agile e iterativo. L'approccio alla numerazione delle versioni dovrebbe rappresentare la natura iterativa del processo di sviluppo del software.
  • Non preoccuparti della qualità del software . Il controllo e la garanzia della qualità sono agili e iterativi. Proprio come lo sviluppo. E il numero di versione dovrebbe essere la prova della natura agile e iterativa sia dello sviluppo che del controllo / garanzia della qualità.
  • Non preoccuparti dell'architettura o dell'idea della loro applicazione. Il numero di versione principale ( Nin N.M.K) è responsabile sia della soluzione architettonica sia del principio alla base dell'applicazione. Il numero di versione principale Ndeve essere modificato di conseguenza ai cambiamenti nell'architettura o ai cambiamenti delle idee e dei principi principali del suo funzionamento / funzionamento.
  • Non hanno il controllo sulla loro base di codice . Probabilmente c'è solo un ramo (tronco) ed è usato per tutto. Che personalmente non penso sia giusto in quanto incoraggia codebase a diventare una grande discarica.

Questo approccio potrebbe sembrare un po 'controverso, ma credo che questo sia il modo più semplice per fornire al software numeri di versione appropriati.


Primo collegamento in basso ...............
Pacerier

8

Per ogni versione principale che rilasci, non è raro avere una versione funzionante che la chiami internamente. Ad esempio, nel mio ultimo lavoro, abbiamo fatto riferimento a una versione principale con la seguente convenzione di denominazione ispirata a Ubuntu:

[condizione malata] [nome animale alliterativo]

Che ha dato nomi come " Limp Lamprey ", " Wounded Wombat " e " Asthmatic Anteater ".

Assicurati che a meno che non sia un nome davvero interessante che non perda per i tuoi clienti.


2
Sembra un uso inefficiente di tempo ed energia .............
Pacerier

10
Quindi stava lasciando quel commento, ma non ti ha fermato.
Jesse C. Slicer,

È di una grandezza intera in meno ......
Pacerier

7

Generation.Version.Revision.Build (9.99.999.9999)

La generazione cambia raramente. Solo una grande svolta sul prodotto: DOS -> Windows, reingegnerizzazione completa.

La versione prevede grandi cambiamenti incompatibili, nuove funzionalità, modifiche su alcuni paradigmi specifici sul software, ecc.

La revisione viene spesso eseguita (funzionalità minori e correzione di bug).

Build è informazione interna.


Buona idea. Da dove hai preso l'idea di "generazione"?
Pacerier

6

git describefornisce una piacevole estensione a qualunque convenzione di numerazione tu abbia scelto. È abbastanza facile incorporarlo nel processo di compilazione / packaging / distribuzione.

Supponiamo di nominare le versioni di rilascio con tag ABC (major.minor.maintenance). git describesu un determinato commit troverà l'antenato con tag più recente del commit, quindi controllerà il numero di commit da allora e l'abbreviazione SHA1 del commit:

1.2.3-164-g6f10c

Se sei effettivamente in una delle versioni, ovviamente, otterrai solo il tag (1.2.3).

Questo ha il piacevole vantaggio di farti sapere esattamente da quale fonte hai costruito, senza dover numerare ogni singola build.


2

Major.Minor.Public (build) [alpha / beta / trial], come "4.08c (1290)"

  • Con Major è il numero di versione principale (1, 2, 3 ...)
  • Minore è una versione minore di 2 cifre (01, 02, 03 ...). In genere la cifra delle decine viene incrementata quando vengono aggiunte nuove funzionalità significative, solo quelle per le correzioni di bug.
  • Essendo pubblico il rilascio pubblico della build (a, b, c, d, e), che è spesso diverso dalla versione secondaria se una versione secondaria non viene mai rilasciata come aggiornamento pubblico
  • build, ovvero il numero di build effettivo di cui tiene traccia il compilatore.
  • con TRIAL, ALPHA, BETA X o RC X aggiunti per quei casi speciali.

2

Preferisco i numeri di versione che assegnano un significato semantico. Finché è possibile utilizzare il numero di versione per tenere traccia dei bug segnalati con una versione particolare alle modifiche verificatesi nel codice sorgente (e nel sistema di gestione delle attività), probabilmente si sta utilizzando il metodo giusto.

Uso .NET, quindi sono bloccato con il sistema di numerazione delle versioni di .NET, ma provo a dare un significato semantico ai numeri così

major.minor.build.revision

  • major = (fino al progetto)
  • minor = (fino al progetto)
  • build = build number di Hudson (puoi usare TeamCity o TeamBuild, ecc. qui)
  • revisione = sovversione o revisione del bazar (a seconda del progetto e del suo utilizzo)

Ci assicuriamo sempre che il suo numero di versione sia visibile in qualche modo (con i nostri programmi basati su console batch è stampato sulla console e un file di registro, con le app Web nella barra dei menu in alto di solito)

In questo modo se i clienti segnalano problemi, possiamo usare il numero di versione per tracciare se stanno utilizzando l'ultima versione e quanti problemi abbiamo riscontrato con particolari versioni.

Si tratta di tracciabilità!


1

Usiamo Major.Minor.Build # .YYMMDD [suffisso], poiché di solito eseguiamo solo una build di produzione in un determinato giorno (ma usiamo il suffisso ab / c / d se ce n'è più di uno) e YYMMDD offre agli utenti / clienti / gestione un'indicazione dell'età della costruzione, dove il 6.3.1389 no.

I numeri maggiori aumentano con caratteristiche significative del prodotto (a pagamento).

I numeri minori aumentano con correzioni / miglioramenti (aggiornamento gratuito).

La build aumenta sempre; non tutte le navi costruiscono, quindi non è una progressione lineare.


1

I numeri di versione devono contenere informazioni sufficienti per evitare conflitti e correggere un bug con problemi di tipo di rilascio errati, ma non devono trasmettere informazioni aggiuntive non pertinenti.

Ad esempio, se usi la data in cui i clienti possono dire che hanno una versione precedente e le patch contro le vecchie versioni possono avere versioni confuse.

Personalmente mi piace il versioning semantico :

  • Le versioni sono Major. Minor.Patch
  • Patch aumenta ogni volta che rilasci una build.
  • Minor aumenta ogni volta che viene aggiunta una funzionalità compatibile con le versioni precedenti.
  • Major aumenta quando la nuova funzionalità non è compatibile con le versioni precedenti.
  • Quando Major== 0 sei in alpha / pre-release. Major> = 1 sono le tue versioni pubbliche.
  • I numeri più bassi vengono reimpostati su 0 ogni volta che si incrementa, quindi

    1.5.3-> 1.5.4(correzione di bug) -> 1.6.0(caratteristica minore) -> 2.0.0(modifica della rottura)

In questo modo se qualcuno sta usando, diciamo, la versione 1.5.3che potrebbe dire a colpo d'occhio che potrebbe aggiornare per 1.5.4ottenere le patch, che 1.6.0aggiungerebbe funzionalità e che non dovrebbe aggiornare 2.0.0(almeno senza gestire la modifica).


Semver funziona solo per le API. Non prodotti.
Pacerier

@Pacerier potresti spiegarmi perché?
Keith


@Pacerier ciò non significa che non è possibile utilizzare questo modello per la numerazione delle versioni.
Keith,

0
              1.0.0
                |
              1.0.1
                |
(pubblico 1.0) 1.0.2 -----
                | \
              2.0.0 1.1.0
                | |
              2.0.1 1.1.1 (pubblico 1.1)
                |
(pubblico 2.0) 2.0.2 -----
                | \
              3.0.0 2.1.0
                         |
                       2.1.1 (pubblico 2.1)
                         |
                       2.2.0
                         |
                       2.2.1

X.Y.Zè il nostro numero di versione interno. X.Yè il numero di versione pubblico, quello che ha un significato per i nostri clienti. Quando una X.Y.Zversione diventa pubblica, non ci sarà mai una X.Y.(Z+1)versione: la versione pubblica è sempre l'ultima della serie.

X viene incrementato quando viene rilasciata una versione principale.

Y viene utilizzato per i rami di manutenzione di tali versioni principali, solo per le correzioni di bug.

Zviene utilizzato internamente e non ha un significato fisso. Fino ad ora, creo una nuova Zversione quando penso che l'applicazione abbia una serie di funzionalità interessanti da mostrare ai non sviluppatori ed è relativamente stabile. In questo modo, posso mostrare una demo dell '"ultima versione valida conosciuta" dell'applicazione quando qualcuno lo chiede. In un prossimo futuro, ho intenzione di utilizzare le Zversioni numeriche per nominare un "target" di funzionalità, nel nostro bugtracker.

Come nota a margine, usiamo maven (con il releasecomando) per incrementare il numero di versione. Quindi, ci sono anche X.Y.Z-SNAPSHOTversioni (che indica qualsiasi versione tra X.Y.(Z-1)e X.Y.Z).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.