Semantik Sürümleme Nedir ?

Alperen Bayramoğlu
3 min readJun 18, 2022

--

Semantik/Anlamsal sürümleme (Semantic versioning) uygulamaların sürümlendirilmesinde kullanılan bir standarttır. Semantik sürümleme uygulamaların anlamlı bir şekilde sürümlendirilmesine ve uygulamanın bağımlılıklarının yönetilmesine kolaylık sağlayan bir sistem sunar. Standart, sistemi kullanan üçüncü parti yazılımlarda herhangi bir bağımlılık problemini önlemeyi hedefler.

Semantik Sürümleme

Standart, sürümlemenin sayılardan oluşan BÜYÜK.KÜÇÜK.YAMA (MAJOR.MINOR.PATCH) şeklinde yapılmasını önerir ve özetle üç maddesi vardır:

  1. BÜYÜK sürüm, uygulamaya yeni özellik eklendiğinde, önceki sürümler ile uyumlu olmayan büyük değişiklikler yapıldığında artırılır.
  2. KÜÇÜK sürüm uygulamaya önceki sürümlerle uyumlu olabilen yeni özellikler ve değişiklikler eklendiğinde artırılır.
  3. YAMA sürüm önceki sürümlerle uyumlu olabilen hata düzenlemeleri yapıldığında artırılır.

Örnek vermek gerekirse 5.2.15 sürümünde olan bir uygulamaya yapılan büyük değişiklik ile 6.0.0(büyük sürüm artırıldığında küçük ve yama sürüm sayıları sıfırlanır) sürümü çıkartılır. Uygulamanın 5.2.15 sürümünü kullanan üçüncü parti yazılım 6.0.0 sürümüne geçmek istediğinde uygulamayı kullanım şeklini(kod veya API) değiştirmesi gerekir çünkü büyük değişiklikler önceki sürümlerle uyumlu değildir. Ancak 5.2.15 sürümünde olan hata düzenlemelerinden sonra çıkarılan 5.2.16 sürümü, üçüncü parti yazılımın herhangi bir değişiklik yapmadan 5.2.16 sürümüne geçebileceğini gerektirir.

Semantik Sürümleme Standartının Kuralları

  1. Semantik sürümleme kullanan herhangi bir uygulama açık API sunmalıdır. Bu API kod içerisinde veya ekstra döküman olarak sunulabilir.
  2. Normal sürüm numarası X.Y.Z şeklinde olmalıdır ve X,Y,Z pozitif sayılardır. X.Y.Z sayısal olarak artırılmalıdır ve Büyük.Küçük.Yama şeklinde adlandırılır.
  3. Sürümlendirilmiş uygulama paylaşıldıktan sonra uygulama değiştirilmemelidir. Uygulamada yapılacak herhangi bir değişiklik
    yeni sürüm olarak yayınlanmalıdır.
  4. Büyük sürümün 0 olması durumu başlangıç geliştirme durumudur. Her şey herhangi bir zamanda değişebilir. Açık olarak sunulan API stabil değildir.
  5. 1.0.0 sürümü açık olarak sunulan stabil API’yi belirtir.
  6. Yama sürümü sadece eski sürümlerle uyumlu hata çözümleri yapıldığında değiştirilmelidir.
  7. Küçük sürüm sadece eski sürümlerle uyumlu yeni özellik eklemelerinde değiştirilmelidir. Eğer API’de sunulan herhangi
    bir fonksiyonellik eskimiş(deprecated) olarak belirtilirse artırılmalıdır. Küçük sürüm artırıldığında Yama sürümü sıfırlanmalıdır.
  8. Büyük sürüm eski sürümlerle uyumlu olmayan birçok özelliğin uygulamaya eklenmesiyle artılır. Büyük sürüm artırıldığında
    küçük ve yama sürümleri sıfırlanır.
  9. Uygulamanın yayınlamadan önceki beta sürümleri(pre-release) ‘-’ işareti ile ayrılan sona eklenen tanımlama(identifier) ile belirtilebilir. Bu tanımlama sadece sayı,harf ve ‘-’ işaretinden oluşabilir ve boş olamaz. Bu sürümler stabil değildir ve sürümlerde sunulan kurallara uymayabilir. (Örneğin: 1.0.0-alpha, 1.0.0-alpha.1, 1.0.0–0.3.7)
  10. Sürüm ile ilgili inşa meta verisi(build metadata) sürümün sonuna artı işaretinden sonra nokta ile ayrılmış tanımlamalar girilerek belirtilebilir. Tanımlama sadece sayı,harf ve ‘-’ işaretinden oluşabilir ve boş olamaz. Sürüm öncelikleri belirlenirken inşa meta verisi dikkate alınmaz. (Örneğin: 1.0.0-alpha+001, 1.0.0+20130313144700, 1.0.0-beta+exp.sha.5114f85)
  11. Öncelik, sürümler sıralandığında nasıl karşılaştırılacağını belirtir:
  • Önceliğin hesaplanması için Büyük, Küçük, Yama ve yayınlamadan önceki sürüm(pre-release) tanımlayıcıları ayrılır.
  • Öncelik hesaplanırken sırasıyla büyük, küçük, yama sayıları karşılaştırılır. Örneğin : 1. 0.0 < 2.0.0 < 2.1.0 < 2.1.1.
  • Eğer büyük, küçük, yama sürümleri aynı ise yayınlamadan önceki sürüm daha düşük önceliktedir: 1.0.0-alpha < 1.0.0.
  • Aynı büyük, küçük, yama sürümüne sahip iki yayınlamadan önceki sürüm için karşılaştırma fark bulana kadar tanımlayıcılar karşılaştırılarak yapılır:
  • 1. Eğer tanımlayıcı sadece sayı içeriyorsa nümerik olarak karşılaştırılır.
  • 2. Eğer tanımlayıcı sadece harf ve ‘-’ işaretinden oluşuyorsa ASCII sıralama ölçütüne göre karşılaştırılır.
  • 3. Nümerik değerler her zaman diğerlerinden daha düşük önceliktedirler.
  • 4. Eğer bütün önceki tanımlayıcılar eşitse daha yüksek bilgi içeren daha yüksek önceliktedir.
  • Örneğin: 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0.

Özet

  1. Semantik sürümleme (Semantic versioning) uygulamaların sürümlendirilmesinde kullanılan bir standartır.
  2. BÜYÜK.KÜÇÜK.YAMA (MAJOR.MINOR.PATCH) formatındadır.
  3. Semantik sürümleme kullanan herhangi bir uygulama açık API sunmalıdır.
  4. Yama sürüm sadece eski sürümlerle uyumlu hata çözümleri yapıldığında değiştirilmelidir.
  5. Küçük sürüm sadece eski sürümlerle uyumlu yeni özellik eklemelerinde değiştirilmelidir. Küçük sürüm artırıldığında yama sürümü sıfırlanır.
  6. Büyük sürüm eski sürümlerle uyumlu olmayan birçok özelliğin uygulamaya eklenmesiyle artılır. Büyük sürüm artırıldığında küçük ve yama sürümleri sıfırlanır.

--

--

No responses yet