Domanda

Distribuisco software online e mi chiedo sempre se esiste un modo corretto per definire meglio i numeri di versione.

Supponiamo che A.B.C.D nelle risposte. Quando aumenti ciascuno dei componenti?

Usi altri trucchi per il numero di versione come D mod 2 == 1 significa che è solo una versione interna?

Hai versioni beta con i loro numeri di versione o hai versioni beta per numero di versione?

È stato utile?

Soluzione

Sto iniziando ad apprezzare la convenzione Year.Release [.Build] utilizzata da alcune app (ad esempio Perforce). Fondamentalmente dice solo l'anno in cui si rilascia e la sequenza entro quell'anno. Quindi 2008.1 sarebbe la prima versione, e se ne uscissi un altro dopo tre o tre mesi, passerebbe a 2008.2.

Il vantaggio di questo schema è che non è implicito " magnitudo " di rilascio, in cui si discute se una funzionalità sia abbastanza importante da giustificare un incremento della versione maggiore o meno.

Un extra opzionale è quello di taggare il numero di build, ma tende ad essere solo per scopi interni (ad esempio aggiunto a EXE / DLL in modo da poter ispezionare il file e assicurarsi che la build giusta sia lì).

Altri suggerimenti

A mio avviso, quasi tutti gli schemi di numeri di rilascio possono funzionare in modo più o meno sano. Il sistema su cui lavoro utilizza numeri di versione come 11.50.UC3, dove U indica Unix a 32 bit e C3 è un numero di revisione minore (fix pack); altre lettere vengono utilizzate per altri tipi di piattaforme. (Non consiglierei questo schema, ma funziona.)

Ci sono alcune regole d'oro che non sono state finora dichiarate, ma che sono implicite in ciò di cui le persone hanno discusso.

  • Non rilasciare la stessa versione due volte: una volta che la versione 1.0.0 è stata rilasciata a nessuno, non può mai essere ripubblicata.
  • I numeri delle versioni dovrebbero aumentare monotonicamente. Cioè, il codice nella versione 1.0.1 o 1.1.0 o 2.0.0 dovrebbe essere sempre successivo alla versione 1.0.0, 1.0.9 o 1.4.3 (rispettivamente).

Ora, in pratica, le persone devono rilasciare correzioni per le versioni precedenti mentre sono disponibili versioni più recenti - vedi GCC, ad esempio:

  • GCC 3.4.6 è stato rilasciato dopo 4.0.0, 4.1.0 (e AFAICR 4.2.0), ma continua la funzionalità di GCC 3.4.x anziché aggiungere le funzionalità extra aggiunte a GCC 4.x.

Quindi, devi costruire attentamente il tuo schema di numerazione delle versioni.

Un altro punto in cui credo fermamente:

  • Il numero della versione di rilascio non è correlato alla numerazione della versione del sistema CM (VCS), ad eccezione dei programmi banali. Qualsiasi software serio con più di un file sorgente principale avrà un numero di versione non correlato alla versione di ogni singolo file.

Con SVN, è possibile utilizzare il numero di versione SVN, ma probabilmente non cambierà in modo troppo imprevedibile.

Per le cose con cui lavoro, il numero di versione è una decisione puramente politica.

Per inciso, conosco il software che è passato attraverso le versioni dalla versione 1.00 alla 9.53, ma che poi è cambiato in 2.80. È stato un grave errore, dettato dal marketing. Certo, la versione 4.x del software è / era obsoleta, quindi non ha immediatamente creato confusione, ma la versione 5.x del software è ancora in uso e venduta e le revisioni hanno già raggiunto la 3.50. Sono molto preoccupato per quello che il mio codice che deve funzionare sia con 5.x (vecchio stile) che 5.x (nuovo stile) farà quando si verificherà l'inevitabile conflitto. Immagino che dovrò sperare che si adegueranno dilettatamente al passaggio a 5.x fino a quando il vecchio 5.x sarà davvero morto, ma non sono ottimista. Uso anche un numero di versione artificiale, come 9.60, per rappresentare il codice 3.50, in modo da poter eseguire test if VERSION > 900 sani, piuttosto che dover fare: if (VERSION >= 900 || (VERSION >= 280 && VERSION < 400), dove rappresento la versione 9.00 per 900. E poi c'è la modifica significativa introdotta nella versione 3.00.xC3 - il mio schema non riesce a rilevare le modifiche a livello di rilascio minore ... brontolare ... brontolare ...

NB : Eric Raymond fornisce Software Practice HOWTO inclusa la sezione (collegata) sulle versioni di denominazione (numerazione).

Di solito uso D come contatore di build (incremento automatico per compilatore) Incremento C ogni volta che una build viene rilasciata su & Quot; public & Quot; (non tutte le versioni vengono rilasciate) A e B sono usati come numero di versione maggiore / minore e modificati manualmente.

Penso che ci siano due modi per rispondere a questa domanda e non sono del tutto gratuiti.

  1. Tecnico: aumenta le versioni in base alle attività tecniche. Esempio: D è il numero di build, C è Iterazione, B è una versione minore, A è una versione principale. La definizione di versioni minori e maggiori è davvero soggettiva, ma potrebbe essere correlata a cose come i cambiamenti all'architettura sottostante.
  2. Marketing: incrementa le versioni in base a quante " nuove " oppure " utile " le funzionalità vengono fornite ai tuoi clienti. Puoi anche associare i numeri di versione a una politica di aggiornamento ... Le modifiche ad A richiedono che l'utente acquisti una licenza di aggiornamento, mentre altre modifiche no.

La linea di fondo, penso, sta trovando un modello che funziona per te e i tuoi clienti. Ho visto alcuni casi in cui le versioni pari sono versioni pubbliche e le versioni dispari sono considerate beta o versioni dev. Ho visto alcuni prodotti che ignorano C e D tutti insieme.

Quindi c'è l'esempio di Micrsoft, in cui l'unica spiegazione razionale ai numeri di versione per il .Net Framework è che è stato coinvolto il marketing.

La nostra politica:

  • A - Cambiamenti significativi (> 25%) o aggiunte in funzionalità o interfaccia.
  • B - piccole modifiche o aggiunte in funzionalità o interfaccia.
  • C - modifiche minori che rompere l'interfaccia.
  • D - correzioni a build che non cambia il interfaccia.

Le persone tendono a voler rendere questo molto più difficile di quanto non debba essere. Se il tuo prodotto ha un solo ramo di lunga durata, basta nominare le versioni successive in base al numero di build. Se hai una sorta di & Quot; correzioni di bug minori sono gratuite, ma devi pagare per le nuove versioni principali & Quot ;, quindi usa 1.0, 1.1 ... 1.n, 2.0, 2.1. .. ecc.

Se non riesci immediatamente a capire quali sono A, B, C e D nel tuo esempio, ovviamente non ne hai bisogno.

L'unico uso che io abbia mai fatto del numero di versione era in modo che un cliente potesse dirmi che stanno usando la versione 2.5.1.0 o qualsiasi altra cosa.

La mia unica regola è progettata per minimizzare gli errori nel riportare quel numero: tutti e quattro i numeri devono essere solo una cifra .

1.1.2.3

è ok, ma

1.0.1.23

non lo è. È probabile che i clienti riportino entrambi i numeri (verbalmente, almeno) come & Quot; one-one-two-three & Quot ;.

I numeri di build con incremento automatico spesso portano a numeri di versione come

1.0.1.12537

che non aiuta davvero.

Uno schema valido e non tecnico utilizza solo la data di costruzione in questo formato:

YYYY.MM.DD.BuildNumber

Dove BuildNumber è un numero continuo (elenco modifiche) o ricomincia da 1 ogni giorno.

Esempi: 2008.03.24.1 o 2008.03.24.14503

Questo è principalmente per le versioni interne, le versioni pubbliche vedrebbero la versione stampata come 2008.03 se non rilasci più spesso di una volta al mese. Le versioni di manutenzione vengono contrassegnate come 2008.03a 2008.03b e così via. Dovrebbero raramente andare oltre & Quot; c & Quot; ma se lo fa è un buon indicatore è necessario un migliore QA e / o procedure di test.

I campi della versione che vengono comunemente visualizzati dall'utente devono essere stampati in un " amichevole; Marzo 2008 " formato, riserva le informazioni più tecniche nella finestra di dialogo Informazioni o nei file di registro.

Il più grande svantaggio: la semplice compilazione dello stesso codice in un altro giorno potrebbe modificare il numero di versione. Ma puoi evitarlo utilizzando l'elenco delle modifiche del controllo della versione come ultimo numero e verificando quello per determinare se è necessario modificare anche la data.

Uso V.R.M ad es. 2.5.1

Le modifiche a V (versione) sono una riscrittura importante
Le modifiche R (revisione) sono nuove importanti funzionalità o correzioni di bug
Le modifiche M (modifica) sono correzioni minori (errori di battitura, ecc.)

A volte uso anche un numero di commit SVN alla fine.

È tutto veramente soggettivo alla fine della giornata e dipende solo da te / dalla tua squadra.

Dai un'occhiata a tutte le risposte già, tutte molto diverse.

Personalmente utilizzo Major.Minor.*.* - In cui Visual Studio inserisce automaticamente il numero di revison / build. Questo è usato anche dove lavoro.

Un buon schema di versioning intuitivo originato sul vecchio Mac OS è descritto nella presente nota tecnica di Apple: http://developer.apple.com/technotes/tn/tn1132.html

Mi piace Year.Month.Day. Quindi, v2009.6.8 sarebbe la " versione " di questo post. È impossibile duplicare (ragionevolmente) ed è molto chiaro quando qualcosa è una versione più recente. È inoltre possibile eliminare i decimali e renderlo v20090608.

Nel caso di una libreria, il numero di versione indica il livello di compatibilità tra due versioni e quindi la difficoltà di un aggiornamento.

Una versione con correzione di bug deve preservare la compatibilità binaria, di origine e di serializzazione.

Le versioni minori significano cose diverse per progetti diversi, ma di solito non hanno bisogno di preservare la compatibilità dei sorgenti.

I numeri di versione principali possono interrompere tutte e tre le forme.

Ho scritto di più sulla logica qui .

Nel mondo di github, è diventato popolare seguire Tom Preston-Werner " semver " specifica per i numeri di versione.

Da http://semver.org/ :

  

Dato un numero di versione MAJOR.MINOR.PATCH, incrementa:

     

Versione MAJOR quando si apportano modifiche API incompatibili, versione MINOR   quando si aggiunge funzionalità in modo compatibile con le versioni precedenti e PATCH   versione quando si apportano correzioni di bug compatibili con le versioni precedenti. addizionale   le etichette per i metadati pre-release e build sono disponibili come estensioni   nel formato MAJOR.MINOR.PATCH.

Per lo sviluppo interno, utilizziamo il seguente formato.

[Program #] . [Year] . [Month] . [Release # of this app within the month]

Ad esempio, se rilascerò l'applicazione n. 15 oggi, ed è il terzo aggiornamento di questo mese, allora la mia versione # sarà

15.2008.9.3

È totalmente non standard, ma è utile per noi.

Nelle ultime sei versioni principali, abbiamo usato M.0.m.b dove M è la versione principale, m è la versione minore e b è il numero di build. Le versioni così rilasciate includevano 6.0.2, 7.0.1, ..., fino alla 11.0.0. Non chiedere perché il secondo numero è sempre 0; L'ho chiesto più volte e nessuno lo sa davvero. Non abbiamo avuto un zero diverso da quando 5.5 è stato rilasciato nel 1996.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top