Müşteriye özel yazılım yamalarını işlemenin gerçekçi bir yolu nedir?


16

Başkalarının aşağıdaki sorunu çözdüğü etkili yolları toplamaya çalışıyorum. İş yerinde, yalnızca belirli bir müşterinin görmesini istediğimiz bir yazılım yamasını (son kullanıcı sistemlerine yüklenecek) yayınlamak zorunda kaldık. Özel kod kendi kaynak denetim dalındadır. Sorun, senkronize olmasını sağlamak için iki paralel kod satırımız (ve komut dosyaları oluşturmamız) ve orijinal kodu her eklediğimizde müşteriye özel kodu yamalamamız ve test etmemiz gerekiyor.

Merak ediyorum, diğer kuruluşlar bu senaryoyu nasıl ele alıyor? Biz sadece teknik (kaynak kontrolü ile ilgili) çözümlere değil, iş çözümlerine de açığız . Örneğin, müşteriye o dalda güncelleme alamayacaklarını söylemekten bahsettik.

Dallanma stratejimiz şu şekildedir (bunun için Subversion'ı kullanmamıza rağmen , Visual Studio TFS Dallanma Kılavuzu'na dayanmaktadır ) resim açıklamasını buraya girin


Eğer kullanıyorsanız hgya gitda Patch Queues ( Mercurial Queues Extension veya Stacked Git ) kullanmaya bakmanızı önerebilirim ama TFS'nin benzer bir şeyi olup olmadığını bilmiyorum.
Mark Booth

Belki de belirtmeliydim, TFS öneren bir dallanma stratejisi kullansak da Subversion kullanıyoruz: P Patch Queues gerekli testleri keser mi? Bunlar kaynak kontrol yamaları için mi? Müşterinin son kullanıcı sistemlerine yüklediği yamalar ile ilgileniyoruz.
Vimes

2
Bir iş çözümü: Yapmayın.
JeffO

@JeffO good call =) Her durumda, bunu veri odaklı bir çalışma zamanı anahtarı yapmanın herhangi bir yolu var mı?
Patrick Hughes

1
@JohnB - Üzgünüm, bilmiyorum, ancak kaynak yamalarınız varsa, derleme sisteminiz testleri otomatikleştirebilmeli, ayrıca müşteri yamalarınısvn normal iş akışınızı karıştırmayacakları araçların dışında tutmalıdır. Düzeltme Eki Kuyrukları yararlı olabilecek gibi görünüyorsa, git-svn kullanarak deneyebilirsiniz veya hgsubversion deneyebilirsiniz . Zor bir iş akışını düzeltmek için bir DVCS ön ucu kullanmak svn, insanları diğer tüm avantajları elde etmek için bir DVCS toptan satışına geçmeyi düşünmeye bile teşvik edebilir.
Mark Booth

Yanıtlar:


5

Müşteriye özel yamalar vermeye başladığınızda, ürününüzün hemen yanında tutulması gereken yeni bir sürümünü oluşturdunuz. Bu, değişikliklerin iki versiyon arasında yayılması gerektiği anlamına gelir. Genellikle müşteriye özel yamalar, kaynak kodu da dahil olmak üzere müşteriye ait olması gereken özelleştirmelerdir.

Bir yama olası görünüyor düzeltme bu acil sorun için daha az optimum geçici düzeltme daha olmadıkça bir şeye ana hat şube yapmak olmaz. Durum buysa, yamanın yalnızca beklenen düzeltme ana hatta gelinceye kadar korunması gerekir.


5

Bana öyle geliyor ki anahtar "görünür" - ayrı bir kod dalı olmamasına değil, davranışı değiştiren bir yapılandırma seçeneğine ne dersiniz?


Bu, basit özelleştirmeler için işe yarayabilir, ancak daha karmaşık olanlar, ürünü tüm müşteriler için daha garip ve kararsız hale getirebilir.
SinirliWithFormsDesigner

3
@FrustratedWithFormsDesigner Tek istemciler için karmaşık özelleştirmeler, ürün yönetimi ve tasarımında büyük ihmali temsil eder. Bir ürün için tek bir müşteri için ayrı bir şube gerektiren herhangi bir çözüm, üründe tüm müşterilerin ihtiyaçlarını karşılamak için üründe brüt yetersizliği ve ürün sahibinin zayıf yönetimini temsil eder.
maple_shaft

2
Ayrıca bu ısırığı önceki işverenimin tekrar tekrar gördüm. Bu sadece kötü bir uygulamadır, ancak genellikle yönetimin istediği ve geri adım atmayacağı bir şeydir. Özellikle Subversion kullanıyorsanız, bu sadece gitmeyecek bir kabus - kodu senkronize tutmak zaman ve tekrar tekrar incinir.
Steve Hill

1
@maple_shaft - Ama "uluslararasılaşmayı uygulamak için hiç kod dallaması kullandınız mı?" sorusunu sormayı düşündünüz mü?
psr

3
@maple_shaft - Şaka yapıyordum, ama aslında, benim açımdan, uluslararasılaşmayı ele almak için dallamayı kullanmak en azından müşteriye özel şubeler kadar kötü. Muhtemelen böyle bir yerde çalışmak istemediğiniz anlamında değil. Konudan oldukça uzaklaşıyordum.
psr

3

Bunu kısa vadeli veya uzun vadeli bir şey olarak görüyor musunuz? Gerçek şu ki, işletme zaten bu müşteriyi bu kadar kısa vadede barındırmaya karar vermiştir, zaten iş uygulamaları tarafından çözülmesi gereken bir iş kararıdır (ekstra maliyeti kabul etmek / müşteriye maliyet almak).

Uzun vadede, yazılımın müşterilerin yapılandırma (veya kurulum vb.) Aracılığıyla gereksinimlerini kolayca karşılamak için yeniden çarpanlarına ayırırsanız büyük olasılıkla tasarruf göreceksiniz.

Nispeten kısa vadeli bir anlam taşıyorsa, bu değişiklikleri kısa bir süre sonra ana / geliştirme dalında birleştireceksiniz ve tüm kullanıcılar değişiklikleri de görecek, o zaman mevcut durumunuzun sınırları dahilinde çalışmak kabul edilebilir olacaktır. Dediğim gibi, müşteriyi kabul etme kararı verildiğinde ne yapılması gerektiğine karar verilmesi gerekiyordu.

Uzun lafın kısası. Uzun vadeli teknik olarak düzeltmek, Kısa vadeli anlaşma.

Tabii ki bir madalyonun attığı bir nokta var. Eğer bu noktadaysanız geliştiricilerin tercih ettiği her şeyi yaparım.


2

Yıkımı da kullanıyoruz - ve tam olarak böyle bir senaryo ile karşılaşıyoruz.

Unutmamanız gereken bazı önemli noktalar şunlardır:

  1. Gerekli olsa da, müşteriler için belirli şubelerden kaçınılmalıdır, ihtiyaç mümkün olduğunca en aza indirilmelidir; her zaman işe yarayabilecek çözümü genelleştirmenin mümkün olup olmadığını her zaman sorun.

  2. Müşteriye özel şubeler yeni bir sürümden kaynaklanmalıdır. 1.2 sürümüne sahip olduğunuzu ve 1.2.1 sürümünden 1.2.11 sürümüne kadar türettiğinizi varsayalım - müşteri şubelerinin tüm yamalara izin vermesi gerekir, bu nedenle müşteri şubesinin ana sürüme göre uyumlu kalması gerekir .

  3. Uyumlu olmayan yeni bir sürüm başlattığınızda müşteriye özel bir şube oluşturmalısınız. Talihsiz kısım, bir şekilde yeniden yapmanız gerekebileceğidir işi . Çözümlerden biri, müşteri şubelerinden tüm yamaların çıkarılması gerektiğidir ve hala uyumlu olan her şey yeni müşteri şubesine uygulanabilir.

  4. Her zaman, hiçbir koşulda, şube veya bagajı serbest bırakmak için müşteriye özgü değişiklikleri geri göndermemelisiniz. Bununla birlikte, ideal olarak, çalışma, müşteriye özel bu tür çalışmaların azaltılacağı şekilde genelleştirilmeye çalışılmalıdır.

Bu fikri göstermek için bir araya getirmeye çalıştım aşağıdaki diyagram:


1

Kodunuza bir uzatma mekanizması eklemeye ne dersiniz?

Ana kodunuz:

class Foo
{
}

Program başlatıldığında, başlangıç ​​klasöründe yerel özelleştirmeler için DLL / ahlaki eşdeğerini kontrol eder. Birini bulursa yüklenir ve Foo'nun şirkete özel sürümünü içerebilir

class FooForABC : Foo
{
}

FooForABC, Foo ile aynı davranışı uygular, ancak ABC'nin ihtiyaç duyduğu belirli davranışı sağlamak için gereken işlevleri geçersiz kılar. Teknik, desteklemeniz gereken herhangi bir senaryoyu işleyebilecek kadar esnek olmalıdır.

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.