Hangi “sürüm adlandırma kuralını” kullanıyorsunuz? [kapalı]


107

Farklı sürüm adlandırma kuralları farklı projeler için uygun mudur? Ne kullanıyorsunuz ve neden?

Şahsen ben onaltılık (örneğin 11BCF) bir yapı numarası tercih ederim, bu çok düzenli olarak artırılmalıdır. Ve sonra müşteriler için basit bir 3 haneli sürüm numarası, yani 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.

Yanıtlar:


45

Kendimi nadiren Jeff Atwood ile tamamen aynı fikirdeyken buluyorum, ancak .NET'in sürüm numaralandırması sözleşmesi hakkındaki görüşlerini takip etme eğilimindeyim .

(Büyük versiyon). (Küçük versiyon). (Revizyon numarası). (Yapı numarası)

Kişisel projeler için değil, çoğu zaman bunu fazla abartılı buluyorum. Birkaç kez C # 'daki arama motorları gibi önemli projeler üzerinde çalıştım ve bu sözleşmeye katıştım ve etkili bir şekilde dahili bir izleyici olarak kullanabildim.


1
Bu, büyük veya küçük birçok projede başarılı bir şekilde kullandığım modeli takip etme eğilimindedir. Çok etkili.
luis.espinal,

1
"Yapı numarası" nın "değişiklik kümesi tanımlayıcısı (karma)" ile nasıl bir ilişkisi / olması gerekir? Bu karma, artımlı veya başka bir şeyin parçası mı?
Jace Browning,

Çalıştığım yer olan @Jace, Mercurial kullanıyor ve değişiklik kümesi numarasını kapatıyoruz. Sadece tek bir havuza girer / çekeriz, bu nedenle numara belirli bir ödeme için benzersiz değildir. Daha sonra buna göre [büyük]. [Küçük]. [Değişiklik] var.
Wai Ha Lee,

.NET Sürüm yapısında ToString () öğesini çağırırsanız, derleme değil, yapı 3 numaralı olacaktır. Bu powershell betiği ile görebileceğiniz gibi:$version = New-Object System.Version 1, 2, 3, 4; $version.ToString(); $version.Build;
Joel McBeth

"Derleme numarası", hata düzeltmeleri gibi sadece küçük düzeltmeler anlamına mı geliyor? Yeni bir işlevsellik en azından kendi revizyon numarasını almalı mı?
Kyle Delaney

90

Anlamsal Sürüm Oluşturma ( http://semver.org/ ) burada bir sözü hak ediyor. Şeklinde bir versiyonlama şeması için halka açık bir şartnamedir [Major].[Minor].[Patch]. Bu program için motivasyon sürüm numarası ile anlam iletmektir.


Bunun daha fazla sevilmemesi şaşırtıcıydı.
Mark Canlas

Partiye biraz geç kaldım ... Bu cevabı orijinal sorudan 9 ay sonra ekledim. ;-)
M. Dudley

Görünüşe göre bu, aşağıda bahsettiğim RubyGems Rational Versioning politikası ile aynı olacak ve sadece daha iyi biçimlendirilmiş olacak.
Ken Bloom,

@ MarkCanlas daha fazla sevilemez çünkü ana / küçük / yama sürümünü neyin oluşturduğuna özel fikirler ekler. Tuhaf olan API'ler hakkında konuşuyor ... garip
Rudolf Olah

5
SemVer, kullanıcının karşı karşıya kaldığı bir yazılım değil, API'lerin sürümleri içindir: "Anlamsal Sürümleme kullanan yazılımlar genel bir API bildirmelidir." Teknik olarak, SemVer'ı genel bir API olmadan kullanamazsınız. Ancak, kullanıcının karşılaştığı uygulamaların sürümleri için SemVer'e benzer bir şey benimsemek anlamlı olabilir.
Ajedi32

33

Kullanmıyorum ama gördüm ve ilginç bir yapı:

Year.Month.Day.Build

Kendini açıkladı.


4
Ve her zaman kodun ne kadar taze olduğunu biliyorsun ..! :)
Lipis

3
bu aynı zamanda Ubuntu'nun sürüm numaralarına da benzer. Yıl yaparlar. Örnekler: 10.04 ve 10.10
Brad Cupit 13:10

5
Bunun yalnızca uyumluluk sorunu olmayan (bir web sitesi) veya doğal olarak her zaman uyumsuzluğa sahip (bir ubuntu sürümü) bir sistem için iyi çalıştığını belirtmekte fayda var.
jkerian

1
@jkerian, uyumluluk neden bunun için önemli?
AviD

12
@AviD: Bunu neden sorduğum konusunda biraz kafam karıştı, çünkü bu sorunun hemen her cevabı uyumluluk bilgisi içeren versiyon sistemlerini gösteriyor. Seçiminiz, sürüm numaralarınızla hangi bilgileri kaydetmek istediğinize bağlıdır. Amaçlarım için, bir tarihin temelde anlamı yoktur (sadece v1'den başlamak ve her yapının arttırılması bir gelişme olacaktır). Hiç dallandın mı? "yeni sürüm" çıkarırken hiç "eski koddaki yeni düzeltme ekini" yayımladınız mı? Ancak, bir web sitesi veya işletim sistemi gibi bir şey için, tarih tabanlı bir sistem oldukça uygun görünüyor.
jkerian


10

Sürüm numaralandırmasına çok hassas bir yaklaşım:

  • N.x.K, nerede Nve Ktamsayılar. Örnekler: 1.x.0, 5.x.1, 10.x.33. Ara yapılar için kullanılır .
  • N.M.KNerede N, Mve Ktam sayılardır. Örnekler: 1.0.0, 5.3.1, 10.22.33. Bültenleri için kullanılır .
  • N.x.x, Ntamsayı nerede . Örnek: 1.x.x. Destek dalları için kullanılır .
  • N.M.x, nerede Nve Mtamsayılar. Örnek: 1.0.x. Dalları açmak için kullanılır .

Sürüm numaralandırma yaklaşımının basit gösterimi için resim:

Çevik sürüm numaralandırması

PAanlamına gelir ön-alfa A anlamına gelir alfa B anlamına gelir p AR anlamına alfa-salım BR anlamına gelir , beta-salım RC anlamına sürüm adayı ST anlamına stabil

Bu tür sürüm numaralandırma yaklaşımının avantajları şunlardır:

  • Çevik yazılım geliştirme yaşam döngüsünün özelliklerini temsil eder .
  • Kaynak kod havuz yapısının özelliklerini dikkate alır .
  • Öyle açıklayan öz desenleri alıştım olanlar için. Her desen farklı eseri temsil eder. Bu tür desenler, sorun izleme gibi başka amaçlarla kolayca ayrıştırılabilir ve kullanılabilir.
  • Tanımlanan versiyonlama yaklaşımı için temel olan versiyonlama kalıpları seti, ölçümlerin ve planlamanın toplanmasında kullanılabilir .
  • Olgunluk ve kalite seviyesi kavramlarına odaklanır . Çok sık olarak 1.0.0 gibi sürüm numaraları çok fazla gerek duymadan atanır (yazılım derin alfa olduğunda). Sunulan versiyon numaralandırma yaklaşımı, birkaç vade seviyesi belirlemeye izin verir. En basit durumda, sadece iki düzeyi olacaktır: orta düzey build ( N.x.K) ve release ( N.M.K). Sürüm, tam sürüm numarası ( N.M.K) olan yazılımın , tedarikçi firma / organizasyon / ekip içinde bir çeşit kalite yönetimi sürecinden geçtiği anlamına gelir .
  • Hem geliştirme hem de test etmenin çevik yapısının bir kanıtıdır .
  • Yazılım yapısı ve mimarisine modüler yaklaşımı teşvik eder.

Ayrıntılandırma yaklaşımını temsil eden daha karmaşık bir diyagram da vardır . Ayrıca versiyonlama yaklaşımına geçişi tanımlayan faydalı sunum slaytları ve versiyonlama numaralandırma yaklaşımının temel prensiplerini gösteren SCMFViz uygulaması da bulabilirsiniz . Sunum slaytları, yazılım projesinin tüm ömrü boyunca aynı versiyonlama yaklaşımına bağlı kalmanın neden önemli olduğunu da açıklar.

Şahsen gerçek sürüm numaraları yerine tarih sürümünü kullanmaya yönelik tutum , yazılım geliştiricilerin tarihli sürümlere sahip olduğunu varsayar:

  • Yazılım geliştirme yaşam döngüsü hakkında hiçbir şey bilmiyor . Gelişim genellikle çevik ve yinelemelidir. Sürüm numaralandırma yaklaşımı, yazılım geliştirme sürecinin yinelemeli niteliğini temsil etmelidir.
  • Yazılım kalitesi ile ilgilenmeyin . Kalite kontrol ve güvence çevik ve yinelemelidir. Tıpkı gelişme gibi. Ve sürüm numarası hem geliştirme hem de kalite kontrol / güvencenin çevik ve yinelemeli doğasının kanıtı olmalıdır.
  • Mimarlığı veya uygulama fikirlerini umursamayın . Başlıca sürüm numarası ( Nin N.M.K) hem mimari çözümden hem de uygulamanın temel prensibinden sorumludur. Ana sürüm numarası N, mimarideki değişikliklere veya çalışma / işleyişinin ana fikir ve değişikliklerine göre değiştirilmelidir.
  • Kod tabanları üzerinde kontrol sahibi değilsiniz . Muhtemelen sadece bir dal vardır (gövde) ve her şey için kullanılır. Şahsen bence hangisinin kodbaseini büyük bir çöplük olmaya teşvik ettiği için doğru değil.

Bu yaklaşım biraz tartışmalı görünebilir, ancak bunun, yazılımın uygun sürüm numaralarını vermesinin en kolay yolu olduğuna inanıyorum.


İlk bağlantı aşağı ...............
Pacerier

8

Yayınladığınız her büyük sürüm için, dahili olarak adlandırdığınız çalışan bir sürüme sahip olmanız nadir değildir. Örneğin, son işimde aşağıdaki Ubuntu'dan ilham alan adlandırma kuralını içeren büyük bir sürüme atıfta bulunduk:

[hastalık koşulu] [alliteratif hayvan adı]

" Limp Lamprey ", " Yaralı Wombat " ve " Astımlı Anteater " gibi isimler verdi .

Müşterilerinize sızdırmadığı gerçekten havalı bir isim olmadığından emin olun.


2
Zaman ve enerjinin verimsiz kullanımı gibi görünüyor .............
Pacerier

10
Yani o yorumdan ayrılıyordu ama seni durdurmadı.
Jesse C. Dilimleyici

Bu daha büyük bir
miktar

7

Üretimi.Version.Revision.Build (9.99.999.9999)

Nesil nadiren değişir. Ürüne yalnızca büyük bir dönüş: DOS -> Windows, yeniden yapılanma tamamlandı.

Sürüm, büyük uyumsuz değişiklikler, yeni işlevler, yazılımdaki bazı belirli paradigmalar üzerindeki değişiklikler vb. İçindir.

Revizyon sıklıkla yapılır (küçük özellikler ve hata düzeltme).

Yapı dahili bilgidir.


İyi bir fikir. "Nesil" fikrini nereden aldın?
Pacerier

6

git describeseçtiğiniz numaralandırma kuralına güzel bir uzantı sağlar. Bunu yapı / paketleme / dağıtım işleminize yerleştirmeniz yeterli.

Etiketli sürüm sürümlerinizi ABC (major.minor.maintenance) olarak adlandırdığınızı varsayalım. git describeBelirli bir taahhütte, söz konusu taahhüdün en son etiketli atasını bulabilir, daha sonra o zamandan beri olan taahhüt sayısını ve söz konusu taahhüdün kısaltılmış SHA1'ini inceleyebilirsiniz:

1.2.3-164-g6f10c

Aslında sürümlerden birindeyseniz, elbette, sadece etiketi (1.2.3) alacaksınız.

Bunun, hangi yapıyı yaptığınızı tam olarak bilmenizi sağlamanın yanı sıra, her bir yapınızı kendiniz numaralandırmanıza gerek kalmadan yararı vardır .


2

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

  • Binbaşı büyük sürüm numarasıyla (1, 2, 3 ...)
  • Küçük, 2 basamaklı küçük bir sürüm (01, 02, 03 ...). Tipik olarak, onlarca basamak, önemli yeni işlevler eklendiğinde, yalnızca hata düzeltmeleri için olanlarla artırılır.
  • Kamu, yapının (a, b, c, d, e) genel sürümü olup, küçük bir sürüm genel bir güncelleme olarak asla yayınlanmazsa, genellikle küçük sürümden farklıdır
  • derleyici, derleyicinin takip ettiği gerçek derleme numarası.
  • Bu özel durumlar için TRIAL, ALPHA, BETA X veya RC X eklenmiştir.

2

Bazı anlamsal anlam veren sürüm numaralarını tercih ederim. Kaynak kodda (ve etkinlik yönetim sisteminizde) meydana gelen değişikliklerle ilgili belirli bir sürümle bildirilen hataları izlemek için sürüm numarasını kullanabildiğiniz sürece, muhtemelen doğru yöntemi kullanırsınız.

.NET kullanıyorum, bu yüzden .NET sürüm numaralandırma sistemi ile takılıyorum ama bu sayıları anlamsal anlam vermeye çalışıyorum

Ana.Alt.Yapı.Düzeltme

  • major = (projeye kadar)
  • minor = (projeye kadar)
  • build = Hudson'dan derleme numarası (burada TeamCity veya TeamBuild vb. kullanabilirsiniz)
  • revizyon = yıkılma veya pazar revizyonu (projeye ve kullanımına bağlı olarak)

Sürüm numarasının bir şekilde göründüğünden her zaman emin oluruz (toplu konsol tabanlı programlarımız konsola yazdırılır ve bir log dosyasına, web uygulamaları genellikle menü çubuğundadır)

Böylece müşteriler sorun bildirirse, en son sürümü kullanıyorlarsa ve belirli sürümlerde ne kadar sorun yaşadığımızı izlemek için sürüm numarasını kullanabiliriz.

Her şey izlenebilirlikle ilgili!


1

Biz kullanmak Major.Minor.Build # .YYMMDD biz genellikle sadece bir üretim herhangi bir günde inşa [sonek], gibi (ama orada birden fazla ise ab / c / d eki kullanın) ve YYAAGG kullanıcılar / müşterileri / yönetimini verir yapının yaşının belirtisi, 6.3.1389’da bulunmaz.

Önemli rakamlar, önemli ürün özellikleriyle (ücretli) artmaktadır.

Küçük sayılar, düzeltmeler / iyileştirmeler ile artar (ücretsiz güncelleme).

Yapı her zaman artar; hepsi gemi inşa etmiyor, bu yüzden doğrusal bir ilerleme değil.


1

Sürüm numaraları, çakışmalardan kaçındığınız ve yanlış sürüm türü sorunlarındaki bir hatayı gidermeniz için yeterli bilgiye sahip olmalı, ancak alakalı olmayan ek bilgiler iletmemelidir.

Örneğin, müşterileri kullanırsanız tarihi eski bir sürüme sahip olduklarını söyleyebilir ve eski sürümlere karşı yamalar kafa karıştırıcı sürümleri olabilir.

Ben kişisel olarak anlamsal versiyonlamayı seviyorum :

  • Bültenleri Major. Minor.Patch
  • Patch bir yapıyı her bıraktığınızda artış olur.
  • Minor her zaman geriye doğru uyumlu işlevsellik artışları eklenir.
  • Major Yeni işlevler geriye dönük uyumlu olmadığında artışlar.
  • Major== 0 olduğunda , alfa / yayın öncesi sürümündesiniz. Major> = 1, genel yayınlarınızdır.
  • Düşük sayılar, her artışta 0'a sıfırlanır,

    1.5.3-> 1.5.4(hata düzeltme) -> 1.6.0(küçük özellik) -> 2.0.0(değişiklik kırma)

Bu şekilde eğer biri sürümü kullanıyorsa, 1.5.3bir bakışta 1.5.4yamaları almak için yükseltme yapabileceklerini , 1.6.0işlevsellik katabileceklerini ve yükseltme yapmamaları gerektiğini 2.0.0(en azından değişiklik yapmadan) söylemelerini söyleyebileceklerini söylüyorsa .


Semver yalnızca API'ler için çalışır. Ürün değil.
Pacerier

@Pacerier nedenini açıklayabilir misiniz?
Keith,


@Pacerier, bu numarayı sürüm numaralandırma için kullanamayacağınız anlamına gelmez.
Keith

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

X.Y.Zbizim iç sürüm numaramız. X.YMüşterilerimiz için bir anlamı olan herkese açık versiyon numarasıdır. Bir X.Y.Zsürüm herkese açık olduğunda, hiçbir zaman X.Y.(Z+1)sürüm olmaz: genel sürüm daima serinin sonuncusudur.

X büyük bir sürüm yayınlandığında artar.

Y Bu büyük sürümlerin bakım dallarında, yalnızca hata düzeltmelerinde kullanılır.

Zdahili olarak kullanılır ve sabit bir anlamı yoktur. Şimdiye kadar Z, uygulamanın geliştiricilere göstermeyecek ilginç özelliklere sahip olduğunu ve göreceli olarak kararlı olduğunu düşündüğümde yeni bir sürüm oluşturuyorum . Bu şekilde, biri sorduğunda uygulamanın "bilinen en son iyi sürümünün" bir demosunu gösterebilirim. Yakın bir gelecekte Zbugtracker'ımızdaki özelliklerin "hedefini" isimlendirmek için sayı versiyonlarını kullanmayı planlıyorum .

Not olarak, releasesürüm numarasını artırmak için maven ( komutla birlikte) kullanıyoruz. Bu nedenle, X.Y.Z-SNAPSHOTsürümleri de vardır ( X.Y.(Z-1)ve ve arasındaki herhangi bir sürümü gösterir X.Y.Z).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.