Sürüm Yönetimi
Sürüm yönetimi, yazılım geliştirme sürecinin önemli bir bileşenidir ve projenin zaman içinde nasıl evrileceğini, yeni özelliklerin ve hata düzeltmelerinin nasıl organize edileceğini belirler. Bu bölümde, sürüm numaralarının nasıl belirleneceği ve projedeki değişikliklerin nasıl yönetileceği ele alınmaktadır. Semantic Versioning (Anlamsal Sürümleme) yöntemi, yazılım sürümlerinin düzenli ve tutarlı bir şekilde numaralandırılmasını sağlar.
Semantic Versioning Nedir?
Semantic versioning, sürüm numaralarının "MAJOR.MINOR.PATCH" formatında belirlendiği bir sürümleme sistemidir. Bu sistem, her bir sürüm numarasının belirli bir anlam taşımasını sağlar:
MAJOR: Geriye dönük uyumsuz değişiklikler yapıldığında arttırılır. Bu, API'nin eski sürümlerle uyumlu olmadığı anlamına gelir. Örneğin, bir metodun imzasının değişmesi veya tamamen kaldırılması gibi durumlar major bir sürüm değişikliği gerektirir.
MINOR: Geriye dönük uyumlu yeni özellikler eklendiğinde arttırılır. Bu, mevcut API'yi bozmadan yeni işlevsellikler eklediğinizde kullanılır. Örneğin, mevcut bir API'ye yeni bir metod eklemek veya yeni bir modül sunmak gibi.
PATCH: Geriye dönük uyumlu hata düzeltmeleri yapıldığında arttırılır. Bu, mevcut işlevselliği değiştirmeden sadece hataları düzeltmek için kullanılır.
Örnekler
Sürüm numaralarının nasıl belirleneceğini anlamak için aşağıdaki örnekleri inceleyelim:
v1.0.0: İlk üretim sürümü. Bu sürüm, temel fonksiyonları içerir ve geriye dönük uyumluluk garantisi sağlar. Bu sürüm, projenin ilk stabil sürümü olarak kabul edilir ve üzerinde çalışılacak yeni sürümlerin temelini oluşturur.
v1.1.0: Bu sürümde yeni bir özellik eklenmiştir. Örneğin, kullanıcı profil düzenleme özelliği eklenmiştir. Bu sürüm,
v1.0.0ile uyumludur, ancak yeni işlevsellik içerir.v1.1.1: Bu sürümde, önceki sürümde bulunan küçük bir hata düzeltilmiştir. Örneğin, giriş formundaki bir doğrulama hatası giderilmiştir. Bu değişiklik,
v1.1.0sürümü ile tamamen uyumludur ve sadece küçük bir düzeltme içerir.v2.0.0: Mevcut API'lerde geriye dönük uyumsuz değişiklikler yapılmıştır. Örneğin, kimlik doğrulama süreci tamamen yeniden yapılandırılmıştır. Bu nedenle major sürüm numarası arttırılmıştır. Bu sürüm, eski sürümlerle uyumsuz olabilir ve yeni sürümle birlikte eski API'ler artık desteklenmeyebilir.
Etiketleme
Sürüm yönetiminde, ana branch'ler (main/master, development) üzerinde yapılan değişiklikler, semantic versioning kullanılarak etiketlenir. Etiketleme, belirli bir sürüme hızlıca erişebilmek ve geçmişte yapılan değişiklikleri kolayca takip edebilmek için önemlidir.
Örnek Etiketleme:
v1.2.3: Bu, "MAJOR.MINOR.PATCH" formatında bir etikettir.Git Komutlarıyla Etiketleme:
git tag -a v1.2.3 -m "Release version 1.2.3" git push origin v1.2.3
Uygulama Süreci
Sürüm yönetimi uygulamasında dikkat edilmesi gereken adımlar şunlardır:
Yeni Özellik Ekleme (MINOR):
Bir feature branch üzerinde yeni bir özellik geliştirildiğinde ve
developmentbranch'ine merge edildiğinde MINOR sürüm numarası artırılır.Örnek:
v1.2.0 → v1.3.0
Hata Düzeltmesi (PATCH):
Bir bugfix branch üzerinde hata düzeltildiğinde ve
developmentbranch'ine merge edildiğinde PATCH sürüm numarası artırılır.Örnek:
v1.3.0 → v1.3.1
Kritik Değişiklik (MAJOR):
Mevcut API'lerde büyük, geriye dönük uyumsuz değişiklikler yapıldığında ve
mainbranch'ine merge edildiğinde MAJOR sürüm numarası artırılır.Örnek:
v1.3.1 → v2.0.0
Önizleme ve Beta Sürümleri
Yeni bir özellik eklenirken, kararlı sürümden önce beta veya alpha sürümleri yayınlanabilir. Bu sürümler, son kullanıcılarla yapılacak testler için uygundur ve geliştiricilere geri bildirim toplama olanağı sağlar.
v1.2.0-beta.1: Bu sürüm, belirli bir özelliğin tamamlanmasının ardından, ancak tamamen test edilip kararlı sürüm olarak yayınlanmadan önce yayınlanır. Kullanıcılar bu sürümü test edebilir ve geri bildirim sağlayabilir.
v1.2.0-alpha.1: Bu, daha erken bir sürümdür ve genellikle iç testler için hazırlanır. Alpha sürümleri, kararlılık açısından risk taşır ve genellikle geliştirme sürecinin erken aşamalarında kullanılır.
Önerilen Araçlar
Sürüm yönetimini daha verimli hale getirmek için çeşitli araçlar ve otomasyon sistemleri kullanılabilir:
Git Hooks: Otomatik etiketleme ve sürüm numaralandırma işlemleri için Git hooks kullanılabilir. Bu, belirli olaylar (örneğin, merge veya commit) gerçekleştiğinde otomatik olarak belirli komutların çalıştırılmasını sağlar.
Örnek: Bir merge işleminden sonra otomatik olarak sürüm numarası artıran bir hook yapılandırabilirsiniz.
Release Management Tool: GitHub Releases veya GitLab Release Management gibi araçlar, sürüm yönetimini daha da kolaylaştırır. Bu araçlar, sürümleri yönetmek, sürüm notları eklemek ve sürümleri kullanıcılarla paylaşmak için kullanılabilir.
Örnek: GitHub'da bir sürüm oluşturmak için:
Navigate to the "Releases" section in your GitHub repository and click "Draft a new release".
Sürüm Yönetiminin Faydaları
Düzenli ve Anlaşılır Bir Yapı Sağlar: Sürüm numaraları, projenin ne kadar ilerlediğini ve hangi değişikliklerin ne zaman yapıldığını takip etmeyi kolaylaştırır.
Geriye Dönük Uyumluluk: Semantic versioning sayesinde, kullanıcılar bir sürüm güncellemesi yapmadan önce geriye dönük uyumluluğun bozulup bozulmadığını kolayca anlayabilir.
Yazılımın Yaşam Döngüsünü Yönlendirme: Her sürüm, yazılımın yaşam döngüsünde önemli bir adımı temsil eder. MAJOR güncellemeler büyük değişiklikleri, MINOR güncellemeler yeni özellikleri ve PATCH güncellemeler hata düzeltmelerini temsil eder.
Sürüm Geri Almayı Kolaylaştırır: Eğer bir güncelleme sonrasında sorunlar yaşanırsa, belirli bir sürüme hızlıca geri dönülebilir. Etiketleme, bu süreci kolaylaştırır ve hata düzeltme süresini kısaltır.