Piyasaya sürülmeye hazır özellikleri yalnızca her hafta üretim sürümlerimize nasıl dahil edebiliriz?


12

Oldukça büyük bir çevik ekipte yazılım geliştiriciyim (tek bir kod deposunda aktif olarak değişiklik yapan sekiz geliştiricimiz var). İki haftada bir, yazılımımızın yeni bir sürümünü üretime zorluyoruz. Mevcut iş akışımız:

  • Yeni bir göreve başlarken, geliştiriciler ana geliştirme dalından bir "özellik dalı" oluştururlar ( git kullanıyoruz ) ve bu yeni daldan çalışırlar
  • Bir geliştirici görevlerini tamamladıktan sonra, özellik dallarını geliştirme dalına geri birleştirir
  • Geliştirici geliştirme dalını KG dalında birleştirir.
  • KG şubesinden bir yapı tetiklenir. Bu yapının çıktısı, test uzmanlarının testlerine başlamasına izin vermek için KG ortamımıza yerleştirilir.

Test uzmanlarımız, KG şubesinde birleştirilen bu yeni özelliklerle ilgili sorunlar bulmak oldukça yaygındır. Bu, herhangi bir zamanda, KG ortamının muhtemelen bazıları test edilmiş ve hatasız ve bazıları kırık olmak üzere birkaç yeni özellik içerdiği anlamına gelir. Bu, bırakmayı zorlaştırır, çünkü KG yapısının üretime hazır bir durumda olması nadirdir.

Bunu hafifletmek için, bir "KG donması" başlatmaya çalışıyoruz, bu da geliştiricilerin, geliştirme dalımızı yayın gününden birkaç gün önce KG dalıyla birleştirmediği anlamına geliyor. KG ortamına yönelik hata düzeltmeleri doğrudan KG şubesinde yapılır ve geliştirme şubesiyle birleştirilir. Teorik olarak, bu, QA'daki sorunları düzeltmemize izin verirken yeni, kırık özellikleri KG'den uzak tutar.

Bu "KG donma" kavramı kısmen başarılı olsa da, koordine etmek zordur ve insanlar genellikle KG ile birleşmelerine izin verilip verilmediğine dair kafaları karışır. Aynı zamanda bir "KG donma" son tarihini belirlemek zordu - herkes donma ve bırakma arasında bir nefes odası fikrinden hoşlanır, ancak pratikte, bir sonraki sürümde son teslim tarihine uymaktan ziyade özelliklerine sahip olmayı tercih ederler.

İki haftada bir yayınlanan sürümlerimiz için temiz bir yapıya sahip olmamızı sağlamanın daha iyi bir yolu var mı?


3
Regresyon sorunlarından (regresyon testinin yararlı olacağı yerlerde), kaçırılan kullanım durumlarından (yeni özellikte ince ayar gerektiren bazı özel durumlar eksik) veya diğer özelliklerin aynı anda yapılmasından kaynaklanan hatalar mı var (İkinci özellik birleştiriliyor) ortaya çıkan sorunlar)? Burada kökün biraz daraltılabileceğini merak ediyorum.
JB King

1
Tam olarak bu sorunu yaşadık. Cevap, KG'nin kendi dalını oluşturmasıdır. Ana olanı dondurmazlar. Sürüm gerçekleştikten sonra, şube yeniden birleştirilir, etiketlenir ve silinir . Ayrıca solunum odası KG, olayların duruma göre bu dalda birleşmesine izin verebilir. Ama normal çalışma normal olarak devam ediyor
Richard Tingle

2
Konu "iki haftada bir" çıkmak için tehlikeli bir terim olarak kabul edilir . Bazı insanlar haftada iki kez, diğerleri 2 haftada bir anlama geldiğini düşünüyor
Richard Tingle


@JBKing Yukarıdakilerin neredeyse tamamı. En yaygın olarak, test cihazının yeni özellikte bir hata bulduğu veya yeni özelliğin yeni özellikle ilgisiz bir regresyon hatasına neden olduğu söylenebilir.
Nathan Friend

Yanıtlar:


9

Burada yüzen ve yaşadığınız sorunlara neden olan birkaç sorun vardır.

Birincisi uzun süredir devam eden KG şubesidir. Geliştirme ana hattına paralel olan uzun süren bir şubeye sahip olmak karışıklık kaynağı olabilir, çünkü hem KG şubesinde hem de ana hatta tekrarlanması gereken farklı çabalar vardır. Bu, ya ana hatta birleştirilmesi gereken KG şubesine yönelik düzeltmeleri kontrol ettiğiniz (kötü bir şey değil) ya da KG şubesine (olası hataların kaynağı) birleştirilen ana hatta kontrol ettiğiniz anlamına gelir. .

Uzun süren paralel daldaki diğer sorun, dosyaların sürekli olarak eşitlenememesidir. Asla birleştirilmeyecek bir kod düzeltmesi veya üretim testleri için hiçbir zaman test edilmeyen bir yapılandırma ve geliştirme ana hattının bir parçası.

Sonra, çarpan rollere sahipsiniz. Bu, ambalaj rolünün (bundan sonra daha fazlası) yeterince izole edilmediği anlamına gelir.

İçinde git-akış modeli, salınım kolu (geliştirme dallanmaktadır olup QA için birleştirilmiş gelişimi) ve tüm düzeltmeleri salma dal içine kontrol edilir ve daha sonra tekrar gelişim dalına birleştirildi.

Dallanma felsefesinin bir kısmı Gelişmiş SCM Dallanma Stratejileri'nde bulunabilir (mükemmel bir okuma olduğunu düşünüyorum). Bu, her dalın üstlenebileceği rollere odaklanır. Serbest bırakma dalı, paketleme rolünü üstlenir.

Paketleme rolü genellikle birikim veya daha yaygın olarak ana hat rolleriyle karıştırılır. Amaçlanan geliştirme ve bakım yapıldıktan ve herhangi bir birikim yapıldıktan sonra, kodu serbest bırakmaya hazırlama zamanı gelmiştir. Böyle bir çaba önemsiz olmayabilir, bu da bir serbest bırakma mühendisleri ekibi ve halihazırda yapılmış olanların ötesinde ek düzeltmeler gerektirebilir. Ambalaj kolundaki politika, bakım kolundaki politikadan önemli ölçüde farklıdır, ambalaj rolünün de belirttiği gibi, yalnızca ürünü serbest bırakılabilir kılmak için gerekli değişiklikler ele alınmalıdır.

  • Geliştirme noktasından sürüm şubesine kadar şube. KG'nin oluşturduğu serbest bırakma dalı, bir dal alır ve geliştirme ile birleştirilmez.
    • Bu yolda, tutarlı adlandırma ve kancalarla gitmek istiyorsanız, bir ayırma dalında birleştirme yapılmasını önlemek mümkündür.
  • Serbest bırakma dalında düzeltilmesi gereken her şeyi düzeltin ve bu değişiklikleri ana hatta geri birleştirin.
  • Serbest bırakma çabasının sonunda, serbest bırakma dalını "serbest bırakma buraya" dalına birleştirin ve bu şekilde etiketleyin.
    • Bazı sitelerin "sürümler buraya git" dalı yoktur ve sadece sürüm dalının sonunu bir etiketle sarkık bırakır.

Birisi git-flow bütünlüğünü yerinde uygulamayı ciddi olarak düşünmelidir. Bu, şu anda yapılanlardan çok uzak değildir ve her bir dalın ne anlama geldiğine ve her bir dalın diğerleriyle nasıl etkileşime girdiğine disiplin ve tutarlılık kazandırır.


"sürümler buraya", "çalışma" deniyor.
RandomUs1r

10

Sorun bana tek bir KG şubeniz olması gibi geliyor.

Her sürüm için, birincil geliştirme bagajından / master'dan ayrı bir KG dalı oluşturun. Daha sonra yalnızca o daldaki özellikler için hata düzeltmelerini birleştirin - asla yeni özellikler. Bu dalı KG testinden geçirin.

Bu şekilde, "dondurma" oldukça belirgindir - şube adındadır. Bilmiyorum gibi bir şey kullanabilirsiniz release/26/10/2015. Bundan sonra kimsenin yeni özelliklerle birleşmemesi gerektiği açıktır.

Donma olana kadar dalı bile çatallamıyorsanız özellikle yararlıdır. İnsanlar istedikleri zaman ustalaşmak için birleşebilirler, test edilmesi için zamanında yapılmazsa bu sürümün bir parçası olmayacaktır.

Tek bir uzun vadeli KG şubeniz yok, bu sadece sorun için yalvarıyor. Her sürüm için ana geliştirme dalından çatal ve bu dal QA.


1
Geliştiriciler bitmemiş özellikler üzerinde çalışmaya devam etmedikçe ve bu "hata düzeltme" olarak adlandırılmadığı sürece, adı donma tarihini hatırlatan bir şubeye sahip olmak benim için çok iyi bir fikir (+1) gibi görünüyor.
Giorgio

4

Biraz aşağıda görülen Development-MAIN-Production dallanma modeliyle eşleştirildiniz. MAIN'in üstündeki alanın gelişme alanı olduğu söylenir. ANA altındaki alan üretim alanıdır.

Geliştirme-ANA-Üretim dallanma modeli

Sizin için uygun olduğunu düşündüğüm bu modelin öne çıkan özellikleri:

  • Geliştiricilerinizin en son değişikliklerinin her zaman en son genel gelişmeleri dikkate almasını sağlamak için DEV şubelerine sık sık (haftada 2-3 kez) İleriye Doğru Entegre Etme (FI) (FI = ANA'dan birleştirme) gerekir.
  • Geliştiricilerinizin yalnızca QA'ya maruz kalmak istedikleri ve anında düzeltmeler sağlamaya hazır oldukları bir özellik tamamlama kilometre taşına ulaştıklarında TEST branşında Ters Entegre (RI) (RI = ANA'ya birleştir) gerekir . KG geri bildirimlerine yanıt. Düzeltmeler, TEST dalında ve hemen DEV dalında FI olarak gerçekleştirilecektir.
  • Hiçbir DEV dalından ANA'ya asla UR
  • Her zaman TEST şubesinden ANA'ya, özellikle KG'niz TEST kalitesinin iyi olduğunu düşündüğünde RI. MAIN ile birleştirmek için yüksek kalitede bir eşik tutun. En azından, Ürün Yöneticinizin, Ürününüzün çalışan bir sürümünü her zaman MAIN'deki en son taahhütten gösterebilmesi gerekir.
  • Üretim alanında sadece gerektiği gibi şubeler oluşturun. Oluşturma sunucunuz, geliştirme alanından olanlar da dahil olmak üzere her zaman tüm dalları etiketlemeli ve herhangi bir derleme / sürümün kaynağı, geldiği şubeden bağımsız olarak her zaman tanımlanabilir olmalıdır.
  • Sadece MAIN veya üretim alanından üretim için sürüm alın. Daha sonra, tam olarak yayınlanan bir sürüm için bir düzeltme sağlamanız gerekiyorsa (yani, yalnızca MAIN'den en son sürümü veremezsiniz), düzeltme gerektiğinde, hatalı sürümün ANA etiketinden üretim alanında bir şube oluşturun. Sorunu her zaman Düzeltme dalında düzeltin ve hemen MAIN ve FI'yı TEST'e dönüştürün.

Sorunlarınız olduğundan şüpheleniyorum çünkü:

  • Özellik kilometre taşı tamamlanmamış TEST koduna devs RI'niz
  • Geliştiricileriniz QA'dan yeşil ışık almadan TEST'e giriyor (yani QA, TEST'e enjekte edilen şeyin kontrolünde değil)
  • KG, TEST'te bir hata bildirdiğinde, geliştiricileriniz DEV dallarında düzeltir ve ardından REST'i TEST'e dönüştürür. Bu büyük bir kötü uygulamadır çünkü birleştirme her zaman diğer eksik geliştirmeleri getirecektir. Her zaman TEST'e ve ardından FI'ya DEV dallarına sabitlemeleri gerekir. TEST'te düzeltilemezse, ilk etapta toplam bok teslim ettiler ve daha büyük sorunlarınız var.
  • Geliştiricileriniz TEST'ten yeterince sık FI yapmaz ve bu nedenle oraya teslim ettiklerinde TEST'in dengesini bozarlar. Bu, FI'ya ne kadar sıklıkla DEV girebileceğini dengeleyen güzel bir sanattır. Çok fazla erteleyin ve teslimattan hemen önce son derece pahalı ve riskli olacak, asla istemeyeceksiniz. Bunu çok sık yapın ve bu arada TEST'teki diğer kişilerin teslim ettiği işlerle çok fazla çakışırsanız gerçek bir geliştirme işi alamazsınız.

2

Soruyu anladığım gibi iki probleminiz var. (a) kırık özellikler, serbest bırakmak istediğiniz iyi özelliklerle birleştiriliyor; (b) kırılmış olanları tutarken iyi özellikleri serbest bırakmak isteyebilirsiniz. Olası çözümlere bir kısıtlama olarak, nihai / resmi KG testinizin bir sonraki sürüm için sıralanan tüm özellikleri içeren entegre bir dalda yapılmasını istediğinizi varsayalım.

SCM dallanma modelinizden bağımsız olarak, aşağıdakilerden birini veya her ikisini denemenizi öneririz:

  1. Her özellik ekibine bir KG kaynağı atayın. Özellik dalından derlemeler üzerinde bazı özellik testleri yapmalarını sağlayın ve bir özelliğin ne zaman birleştirilebilecek kadar iyi olduğuna karar verme yetkisi verin. İdeal olarak, özellik ekibiyle (geri kalanını) birlikte çalışmalarını sağlayın, böylece şeyler yazıldıktan kısa bir süre sonra test edilir. (Bunun tüm testleri kendileri yapmak zorunda oldukları anlamına gelmediğini unutmayın.)
  2. Özellik dalları yerine veya bunlara ek olarak özellik geçişlerini kullanın. Doğru yapıldığında, özellik geçişleri, bozuk bir özelliği koddan ayırmaya çalışmadan kapatmanıza olanak tanır, böylece diğer özellikleri test edebilir ve serbest bırakabilirsiniz. Bahsettiğim geçiş türüne müşteriler erişemez; test etmek için katlanarak artan sayıda kombinasyon istemezsiniz. KG dalındaki geçişleri, bırakmayı planladığınız özelliklerle eşleşecek şekilde ayarlarsınız ve bir özellik hazır olmadığı için plan değişirse, bu geçişi değiştirirsiniz.

1

Sizinkinden biraz daha büyük bir ekipte çalıştığımı gördüğüm çok basit bir çözüm, herkesin tek bir şubeden çalışmasını ve konuşlandırmasını sağlamak.

Ekibin çevik olduğunu söylüyorsunuz ama sprint (yani Scrum) veya daha sürekli bir akış (yani Kanban) yaklaşımı üzerinde çalışıyorsanız net değil. Sprint yaptığınızı varsayarsak, takımın amacı iki haftalık sürümünüz için her sprint sonunda kodun serbest bırakılabilir olmasını sağlamaktır. Hepsi birlikte geliştirildiklerinden, bir özelliğin diğerini bozup bozmayacağı konusunda bir karışıklık yoktur. Test kullanıcıları, geliştiricilerin onlara sunma yükü daha düşük olduğundan daha küçük parçalardaki özelliklere erişebilirler. Ve gerçekten bir KG-Donmasına ihtiyacınız yok, bunun yerine herkes sprintin ne zaman biteceğini biliyor ve bitiremedikleri ya da konuşlandırılabilir (yani devre dışı bırakılmış) bir durumda bırakacakları işi almamaları gerektiğini biliyor.

Açıkçası herhangi bir yaklaşımın artıları ve eksileri vardır, bunu bir seçenek olarak mutlaka 'en iyi yol' olarak sunmuyorum.


Her şeyi ana hatta kontrol etmek bir yaklaşımdır, ancak yüksek risk veya daha önemli değişiklikler biraz bozulmaya neden olabilir. Ayrıca, belirli bir sürüm genellikle belirli bir özellik grubu ile ilgilidir. Pazarlamanın vaat etmediği daha fazla özellik eklemek sorunlara yol açabilir. Serbest bırakma çabasını geliştirme çabasından ayırmak genellikle gerekli bir şeydir. KG, bir sonraki sürüm için kullanıcı arayüzünü test ederken rahatsız oluyor ve aniden her şey değişiyor ve hepsini tekrar test etmek zorundalar.

Gerçekten de, gelişime giren ve pazarlamanın istediği arasında daha iyi bir koordinasyona sahip olmanız gerekir. Muhtemelen, oldukça yaygın bir model olan belirli özellikleri etkinleştirmek / devre dışı bırakmak için koddaki özellik bayraklarını kullanmayı sona erdirirsiniz. Testlerin geliştiricilerin yaptığı bir değişiklik sizi şaşırtıyorsa muhtemelen test ediciler ve geliştiriciler arasındaki daha yakın hizalamadan faydalanabileceğinizi söyleyebilirim. Yani, çapraz fonksiyonel ekipler üzerinde çalışarak, test uzmanlarının bilgisi ya da böyle bir şey söylemeden hiçbir şey değişmez. Açıkçası bu her zaman mümkün değildir ve süreçlerinizi buna göre değiştirmeniz gerekir.
Robin

1

Bu sorunları yaşamanızın nedeni, KG'ye yayınlanan kodunuzun yeterince iyi olmaması (ve anyonlar mı ?!), bu nedenle QA'ya daha iyi bir sürüm almaya başlamanız gerekir, böylece bigfix'leri çok sık almaları gerekmez. Bunu yapmanın en basit yolu, bıraktığınız bir aracı dalı tanıtmaktır (test diyelim). Bu hala geliştirme görevinin altındadır, ancak geliştiricilerin çalışmaya devam etmek için zorlamasına izin verirken, aynı zamanda KG'ye gönderilecek kadar iyi kalitede olması gereken entegre bir şubeye sahiptir.

KG'nin şu anda bulduğu hataları bulmak için bu dalda entegrasyon testi gerçekleştirilebilir, hatalar orijinal dalda sabitlenebilir ve daha sonra tekrar ve bu dalda doğrudan düzeltilene kadar tekrar birleştirilebilir (tavsiye ederim eski). Bir dizi temel testten geçtikten sonra, 'kullanıcı yapışkan parmakları ve ne yaptılar?' İçin KG'ye gönderilebilir. test yapmak.

Bu nedenle, bu yaklaşım KG dalını kırık geliştirme özelliklerinden korumak için tasarlanmıştır - bu, özelliğin yeterince iyi kodlanmaması veya beklenmedik entegrasyon sorunlarının olup olmadığı önemli değildir. Yalnızca entegrasyon testini geçen geliştirme dalları KG'ye yükseltilir.

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.