Ekibim yeniden düzenleme sonrasında sık sık yapılan hataları nasıl önleyebilir?


20

Size biraz bilgi vermek için: Yaklaşık on iki Ruby on Rails geliştiricisine (+/- stajyer) sahip bir şirkette çalışıyorum. Uzaktan çalışma yaygındır. Ürünümüz iki parçadan oluşur: oldukça şişman bir çekirdek ve üzerine inşa edilmiş büyük müşteri projelerine kadar incedir. Müşteri projeleri genellikle çekirdeği genişletir. Önemli özelliklerin üzerine yazma gerçekleşmez. Çekirdeğin acil olarak yeniden düzenleme ihtiyacı olan bazı oldukça kötü kısımları olduğunu ekleyebilirim. Teknik özellikler var, ancak çoğunlukla müşteri projeleri için. Çekirdeğin en kötü kısmı test edilmemiştir (olması gerektiği gibi değil ...).

Geliştiriciler, her sprint için bir veya iki PO ile çalışan iki takıma ayrılır. Genellikle, bir müşteri projesi kesinlikle ekiplerden ve PO'lardan biriyle ilişkilidir.

Şimdi sorunumuz: Sık sık birbirimizin eşyalarını kırıyoruz. A Ekibi'nden biri, temel Y özelliğini genişletir veya yeniden düzenler ve B Takımının müşteri projelerinden biri için beklenmedik hatalara neden olur. Çoğunlukla, değişiklikler takımlar üzerinde duyurulmaz, bu nedenle böcekler neredeyse her zaman beklenmedik bir şekilde çarptı. PO dahil B takımı, Y özelliğinin kararlı olduğunu düşündü ve değişikliklerden habersiz, serbest bırakmadan önce test etmedi.

Bu problemlerden nasıl kurtuluruz? Bana ne tür bir 'duyuru tekniği' önerebilirsin?


34
Açık cevap TDD .
mouviciel

1
Bunu nasıl "temel özelliklerden üzerine yazmak olmaz" devlet gelir ve sonra sorunun tam o mu oldu? Ekibinizde "temel" ve "temel özellikler" arasında ayrım yapıyor musunuz ve bunu nasıl yapıyorsunuz? Sadece durumu anlamaya çalışıyor ...
logc

4
@mouvciel Bu ve dinamik yazmayı kullanmayın , ancak belirli bir tavsiye bu durumda biraz geç gelir.
Doval

3
OCaml gibi güçlü yazılan bir dil kullanın.
Gaius

@logc Net olmayabilirim, üzgünüm. Filtre kitaplığının kendisi gibi temel bir özelliğin üzerine yazmıyoruz, ancak müşteri projelerimizde kullandığımız sınıflara yeni filtreler ekliyoruz. Sık karşılaşılan bir senaryo, filtre kitaplığındaki değişikliklerin müşteri projesinde eklenen bu filtreleri yok etmesidir.
SDD64

Yanıtlar:


24

Michael C. Feathers'ın Eski Kod ile Etkili Çalışmasını okumanızı tavsiye ederim . Gerçekten otomatik testlere ihtiyacınız olduğunu, bunları nasıl kolayca ekleyebileceğinizi, henüz sahip değilseniz ve hangi kodun "refactor'a" hangi şekilde koktuğunu "açıklar.

Bunun yanı sıra, durumunuzdaki bir başka temel sorun da iki ekip arasında iletişim eksikliği gibi görünüyor. Bu takımlar ne kadar büyük? Farklı birikmiş işler üzerinde çalışıyorlar mı?

Takımları mimarinize göre ayırmak neredeyse her zaman kötü bir uygulamadır. Örneğin çekirdek bir ekip ve çekirdek olmayan bir ekip. Bunun yerine, fonksiyonel alanda ekipler oluşturacağım, ancak çapraz bileşen oluşturacağım.


"Efsanevi Adam-Ay" da kod yapısının genellikle ekip / organizasyon yapısını takip ettiğini okudum. Bu nedenle, bu gerçekten "kötü uygulama" değil, sadece işlerin genel gidiş şekli.
Marcel

Bence " Yazılım geliştirme dinamikleri ", Visual C ++ arkasındaki yönetici canlı bir şekilde özellik takımları önerir; "Mythical Man-Month", @Marcel'i okumadım, ancak AFAIK sektördeki kötü uygulamaları listeliyor ...
logc

Marcel, işlerin genellikle böyle gittiği veya gittiği yol olduğu doğrudur, ancak gittikçe daha fazla takım bunu farklı yapıyor, örneğin özellik takımları. Bileşen tabanlı ekiplere sahip olmak, bileşenler arası özellikler üzerinde çalışırken iletişim eksikliğine neden olur. Bunun yanında, neredeyse her zaman iyi bir mimarinin amacına dayanmayan, ancak diğer ekiplere / bileşenlere karşı sorumlulukları zorlamaya çalışan mimari tartışmalara yol açacaktır. Böylece, bu sorunun yazarı tarafından açıklanan durumu elde edersiniz. Ayrıca bkz . Mountaingoatsoftware.com/blog/the-benefits-of-feature-teams .
Tohnmeister

Eh, bildiğim kadarıyla OP anlaşıldığı gibi o takımlar olduğunu belirtti değil bir çekirdek ve çekirdek olmayan takımın bölündü. Takımlar, esasen "işlevsel alan adı" olan "müşteri başına" olarak bölünür. Ve bu da sorunun bir parçası: Tüm takımların ortak çekirdeği değiştirmesine izin verildiğinden, bir takımdaki değişiklikler diğerini etkiler.
Doc Brown

@DocBrown Haklısın. Her takım çekirdeği değiştirebilir. Tabii ki, bu değişikliklerin her proje için faydalı olduğu varsayılmaktadır. Ancak, farklı birikmiş işler üzerinde çalışırlar. Her müşteri için bir tane ve çekirdek için bir tane var.
SDD64

41

Çekirdeğin en kötü kısmı test edilmemiştir (olması gerektiği gibi ...).

Sorun bu. Verimli yeniden düzenleme büyük ölçüde otomatik test paketine bağlıdır. Bunlara sahip değilseniz, tanımladığınız sorunlar ortaya çıkmaya başlar. Parametreleri yöntemlere geçirmeyle ilgili temel hataları yakalamak için derleyici bulunmayan Ruby gibi dinamik bir dil kullanıyorsanız bu özellikle önemlidir.


10
Bu ve bebek adımlarında yeniden düzenleme ve çok sık taahhüt.
Stefan Billiet

1
Muhtemelen burada tavsiye ekleyebilecek öneriler var, ama hepsi bu noktaya gelecek. OP'ler hakkında "ne olursa olsun" kendi başına bir sorun olduğunu bildiklerini gösteren şaka ne olursa olsun, senaryo testlerinin yeniden düzenleme üzerindeki etkisi çok büyüktür: Bir geçiş başarısız olursa yeniden düzenleme işe yaramadı. Eğer tüm paslar paslar kalırsa, yeniden düzenleme işe yaramış olabilir (pasoları geçmek başarısız olur tabii ki bir artı olur, ancak tüm pasları pas olarak tutmak bile bir kazanç elde etmekten daha önemlidir; bir testi kıran ve beşi düzelten bir değişiklik bir iyileştirme, ancak yeniden düzenleme değil)
Jon Hanna

Sana bir "+1" verdim, ama bence "otomatik testler" bunu çözmenin tek yolu değil. Belki ayrı KG ekibi tarafından daha iyi kılavuzu, fakat sistematik QA da kalite sorunları çözebilir (- otomatik ve muhtemelen ikisi de var mantıklı ve manuel testleri).
Doc Brown

İyi bir nokta, ancak çekirdek ve müşteri projeleri ayrı modüller ise (ve ayrıca Ruby gibi dinamik bir dilde), çekirdek hem bir testi hem de ilişkili uygulamasını değiştirebilir ve kendi testlerini başarısız olmadan bağımlı bir modülü kırabilir.
logc

Diğerleri gibi yorum. TDD. Muhtemelen mümkün olduğunca çok kod için birim testleri yapmanız gerektiğini zaten biliyorsunuzdur . Ünite testleri sadece uğruna kaynak israfı yaparken, herhangi bir bileşeni yeniden düzenlemeye başladığınızda, çekirdek koda dokunmadan önce kapsamlı test yazımı ile başlamalısınız.
jb510

5

Sizi daha iyi birim testlerine yönlendiren önceki yanıtlar iyidir, ancak adreslenmesi gereken daha temel sorunların olabileceğini hissediyorum. Müşteri projeleri kodundan temel koda erişmek için net arayüzlere ihtiyacınız vardır. Bu şekilde , arayüzlerde gözlemlenen davranışı değiştirmeden çekirdek kodu yeniden düzenlerseniz , diğer takımın kodu kırılmaz. Bu, neyin "güvenli" olarak yeniden düzenlenebileceğini ve neyin, muhtemelen arayüz kırılması, yeniden tasarlanması gerektiğini bilmeyi kolaylaştıracaktır.


Açık. Daha otomatik testler faydalardan başka bir şey getirmeyecek ve tamamen yapmaya değer, ancak burada temel sorunu çözemeyen çekirdek sorunu çözmeyecektir. Arayüzleri önemli özelliklerin etrafına sararak ayrıştırmak büyük bir gelişme olacaktır.
Bob Tway

5

Diğer cevaplar önemli noktaları vurguladı (daha fazla birim testi, özellik takımları, çekirdek bileşenlere temiz arayüzler), ancak eksik bulduğum bir nokta var, versiyonlama.

Bir sürüm 1 yaparak çekirdeğinizin davranışını dondurursanız ve bu sürümü özel bir artefakt yönetim sistemi 2'ye koyarsanız, herhangi bir müşteri projesi çekirdek sürüm X'e bağımlılığını beyan edebilir ve bir sonraki sürüm X tarafından kırılmaz. + 1 .

"Duyuru politikası" daha sonra her sürümle birlikte bir DEĞİŞİKLİK dosyasına veya her yeni çekirdek sürümün tüm özelliklerini duyurmak için bir ekip toplantısına gitmeyi azaltır.

Ayrıca, neyin "çekirdek" ve bunun alt kümesinin "anahtar" olduğunu daha iyi tanımlamanız gerektiğini düşünüyorum. "Anahtar bileşenler" üzerinde birçok değişiklik yapmaktan (doğru) kaçıyorsunuz, ancak "çekirdek" te sık değişikliklere izin veriyorsunuz. Bir şeye güvenmek için onu istikrarlı tutmalısınız; bir şey istikrarlı değilse, çekirdek olarak adlandırmayın. Belki ona "yardımcı" bileşenler demeyi önerebilirim?

DÜZENLEME : Anlamsal Sürüm Oluşturma sistemindeki kuralları izlerseniz , çekirdeğin API'sındaki uyumsuz değişiklikler büyük bir sürüm değişikliği ile işaretlenmelidir . Yani, daha önce var olan çekirdeğin davranışını değiştirdiğinizde veya bir şeyi kaldırdığınızda, sadece yeni bir şey eklemeyin. Bu kural ile, geliştiriciler '1.1' sürümünden '1.2' sürümüne güncelleme yapmanın güvenli olduğunu bilirler, ancak '1.X' den '2.0' sürümüne geçmek risklidir ve dikkatle gözden geçirilmelidir.

1: Sanırım bu Ruby 2 dünyasında mücevher olarak adlandırılıyor
: Java'daki Nexus veya Python'daki PyPI'ye eşdeğer


"Versiyonlama" gerçekten önemlidir, ancak bir yayınlamadan önce çekirdeği dondurarak tarif edilen problemi çözmeye çalıştığında, sofistike dallanma ve birleştirme ihtiyacına kolayca ulaşırsınız. Bunun nedeni, A takımının "sürüm oluşturma" aşamasında, A'nın çekirdeği değiştirmek zorunda kalması (en azından hata düzeltme için) olması, ancak diğer takımlardan çekirdekteki değişiklikleri kabul etmemesidir. takım başına çekirdek, "daha sonra" birleştirilecek, bu bir teknik borç şeklidir. Bazen sorun olmaz, ancak genellikle açıklanan sorunu daha sonraki bir noktaya erteler.
Doc Brown

@DocBrown: Sana katılıyorum, ancak tüm geliştiricilerin işbirlikçi ve yetişkin oldukları varsayımı altında yazdım. Bu, ne anlattığınızı görmediğimi söylemiyorum . Ancak bir sistemi güvenilir hale getirmenin önemli bir parçası, istikrar için çabalamaktır. Dahası, A takımının çekirdekteki X'i değiştirmesi ve B takımının çekirdekteki X'i değiştirmesi gerekiyorsa, belki X , çekirdeğe ait değildir ; Sanırım bu benim diğer noktam. :)
logc

@DocBrown Evet, her müşteri projesi için çekirdeğin bir dalını kullanmayı öğrendik. Bu başka sorunlara neden oldu. Örneğin, halihazırda konuşlandırılmış müşteri sistemlerine 'dokunmak' istemiyoruz. Sonuç olarak, her dağıtımdan sonra kullanılan çekirdeklerinin birkaç küçük sürüm atlama ile karşılaşabilirler.
SDD64

@ SDD64: Ben de tam olarak bunu söylüyorum - değişiklikleri derhal ortak bir çekirdeğe entegre etmemek uzun vadede de çözüm değil. İhtiyacınız olan şey, otomatik ve manuel testlerle de çekirdeğiniz için daha iyi bir test stratejisidir.
Doc Brown

1
Kayıt için, her takım için ayrı bir çekirdeği savunmuyorum ya da testlerin gerekli olduğunu inkar etmiyorum - ancak daha önce yorumladığım gibi , bir çekirdek test ve uygulaması aynı anda değişebilir . Yalnızca bir yayın dizesi veya bir taahhüt etiketi ile işaretlenmiş donmuş bir çekirdeğe, üzerine kurulan bir proje tarafından güvenilebilir (hata düzeltmeleri hariç ve sürüm oluşturma politikasının sağlam olması şartıyla).
logc

3

Diğer insanların söylediği gibi, iyi bir birim test paketi sorununuzu çözmez: her takım test paketi geçse bile değişiklikleri birleştirirken sorun yaşarsınız.

TDD için de aynı şey geçerli. Bunu nasıl çözebileceğini görmüyorum.

Çözümünüz teknik değil. "Temel" sınırları açıkça tanımlamanız ve başrol veya mimar olsun, birine "gözcü köpek" rolü atamanız gerekir. Çekirdekteki herhangi bir değişiklik bu bekçi köpeğinden geçmelidir. Tüm takımlardan elde edilen her çıktının çok fazla teminat zararı olmadan birleştirilmesini sağlamaktan sorumludur.


Çekirdeğin çoğunu yazdığı için bir "gözcü köpeği" vardı. Ne yazık ki, test edilmemiş kısımların çoğundan da sorumluydu. YAGNI'nın kimliğine bürünmüştü ve yarım yıl önce iki kişi tarafından değiştirildi. Hala bu 'karanlık kısımları' yeniden düzenlemeye çalışıyoruz.
SDD64

2
Fikir bir birim test kümesine sahip olmaktır çekirdek için ise, çekirdek kısmı tüm takımlar değil her takım için ayrı deney düzenekleri katkılarıyla.
Doc Brown

2
@ SDD64: "Buna ihtiyacınız olmayacak (henüz)" (bu çok iyi bir şey) ile "kodunuzu temizlemenize gerek yok (henüz)" ile karıştırıyorsunuz - ki bu çok kötü bir alışkanlık ve IMHO tam tersi.
Doc Brown

Bekçi köpeği çözümü gerçekten, gerçekten yetersiz IMHO. Bu, sisteminize tek bir başarısızlık noktası inşa etmek gibidir ve bunun üzerine çok yavaş bir şeydir, çünkü bir kişiyi ve politikayı içerir. Aksi takdirde, TDD elbette bu soruna yardımcı olabilir: her çekirdek test, mevcut çekirdeğin nasıl kullanılması gerektiğine ilişkin müşteri proje geliştiricilerine bir örnektir. Ama sanırım cevabını iyi niyetle
verdin

@DocBrown: Tamam, belki anlayışlarımız farklı olabilir. Onun tarafından yazılan temel özellikler, en tuhaf olasılıkları bile karşılamak için aşırı derecede karmaşıktır. Çoğu, hiç karşılaşmadık. Karmaşıklık bizi diğer taraftan onları yeniden canlandırmak için yavaşlatıyor.
SDD64

2

Daha uzun vadeli bir düzeltme olarak, ekipler arasında daha iyi ve daha zamanında iletişime ihtiyacınız vardır. Örneğin, Y çekirdek özelliğini kullanacak olan her takımın, bu özellik için planlanan test örneklerinin oluşturulmasında yer alması gerekir. Bu planlama, kendi başına, iki takım arasında Y özelliğinde bulunan farklı kullanım durumlarını vurgulayacaktır. Özelliğin nasıl çalışması gerektiğine karar verildiğinde ve test senaryoları uygulandıktan ve üzerinde anlaşıldıktan sonra, uygulama şemanızda gerekli olan ek bir değişiklik var. Özelliği serbest bırakan ekip, kullanmak üzere olan takımı değil, test çantasını çalıştırmak için gereklidir. Çarpışmalara neden olması gereken görev, her iki takımdan da yeni bir test çantasının eklenmesi. Bir ekip üyesi test edilmeyen özelliğin yeni bir yönünü düşündüğünde, kendi sanal alanlarına geçtiğini doğruladıkları bir testcase ekleyebilirler. Bu şekilde, meydana gelecek olan tek çarpışmalar niyet düzeyinde olacaktır ve yeniden düzenlenmiş özellik vahşi hayata bırakılmadan önce çivilenmelidir.


2

Her sistem etkili test paketlerine (diğer şeylerin yanı sıra otomasyon anlamına gelir) ihtiyaç duysa da ve bu testler etkili bir şekilde kullanılırsa, bu çatışmaları şimdiye kadar olduğundan daha çabuk yakalayacak olsa da, bu altta yatan sorunları ele almaz.

Soru, en az iki temel sorunu ortaya koyuyor: bireysel müşteriler için gereksinimleri karşılamak için 'çekirdek' modifiye etme uygulaması ve ekiplerin değişiklik yapma niyetlerini iletişim kurma ve koordine etmemeleri. Bunların hiçbiri kök neden değildir ve bunu düzeltmeden önce neden yapıldığını anlamanız gerekir.

Belirlenecek ilk şeylerden biri, hem geliştiricilerin hem de yöneticilerin burada bir sorun olduğunu fark edip etmedikleri. En azından bazıları yaparsa, neden bu konuda hiçbir şey yapamayacaklarını düşündüklerini ya da yapmamayı seçtiklerini öğrenmeniz gerekir. Yapmayanlar için, mevcut eylemlerinin gelecekteki problemleri nasıl yaratabileceğini tahmin etme yeteneklerini artırmaya veya bunları yapabilecek insanlarla değiştirmeye çalışabilirsiniz. İşlerin nasıl yanlış gittiğinin farkında olan bir iş gücünüz olana kadar, sorunu çözme ihtimaliniz düşüktür (ve belki de o zaman bile, en azından kısa vadede).

Sorunu soyut terimlerle analiz etmek zor olabilir, en azından başlangıçta, bir soruna neden olan belirli bir olaya odaklanın ve nasıl olduğunu belirlemeye çalışın. İlgili kişilerin savunmacı olmaları muhtemel olduğundan, gerçekten neler olduğunu bulmak için self servis ve hoc sonrası gerekçeler konusunda uyanık olmanız gerekir.

Bahsetmekten çekinme ihtimalim var, çünkü bu pek olası değil: müşterilerin gereksinimleri o kadar farklı ki ortak çekirdek kodunu haklı çıkarmak için yeterli ortaklık yok. Bu durumda, aslında birden fazla ayrı ürününüz var ve bunları böyle yönetmeli ve aralarında yapay bir bağlantı oluşturmamalısınız.


Ürünümüzü Java'dan RoR'ye geçirmeden önce, aslında önerdiğiniz gibi yaptık. Birinin tüm müşteriler için bir Java çekirdeği vardı, ancak gereksinimleri bir gün 'kırdı' ve bölmek zorunda kaldık. Bu durumda aşağıdaki gibi sorunlarla karşılaştık: “Dostum, müşteri Y'nin böyle güzel bir çekirdek özelliği var. Çok kötü, müşteri Z'ye taşıyamıyoruz, çünkü çekirdekleri uyumsuz. ' Rails ile kesinlikle 'herkes için bir çekirdek' politikasına gitmek istiyoruz. Olması gerekiyorsa, yine de ciddi değişiklikler sunuyoruz, ancak bunlar müşteriyi daha fazla güncellemeden ayırıyor.
SDD64

Sadece TDD demek benim için yeterli değil. Yani, temel önerinin bölünmesinin yanı sıra, cevabınızı en çok seviyorum. Ne yazık ki, çekirdek mükemmel bir şekilde test edilmedi, ancak bu tüm sorunlarımızı çözmeyecekti. Bir müşteri için yeni çekirdek özellikler eklemek mükemmel görünebilir ve hatta onlar için yeşil bir yapı oluşturabilir, çünkü müşteriler arasında yalnızca temel özellikler paylaşılır. Biri fark etmez, olası her müşteriye ne olur. Bu nedenle, sorunları bulma ve bunlara neyin sebep olduğu hakkında konuşma önerinizi seviyorum.
SDD64

1

Hepimiz biliyoruz ki, birim testleri bir yol. Ancak, bunları bir çekirdeğe gerçekçi bir şekilde takmanın zor olduğunu da biliyoruz.

İşlevselliği genişletirken sizin için yararlı olabilecek belirli bir teknik, geçici ve yerel olarak mevcut işlevselliğin değiştirilmediğini doğrulamaya çalışmaktır. Bu şu şekilde yapılabilir:

Orijinal sözde kod:

def someFunction
   do original stuff
   return result
end

Geçici yerinde test kodu:

def someFunctionNew
   new do stuff
   return result
end

def someFunctionOld
   do original stuff
   return result
end

def someFunction
   oldResult = someFunctionOld
   newResult = someFunctionNew
   check oldResult = newResult
   return newResult
end

Bu sürümü var olan sistem düzeyi testlerinden geçirin. Her şey yolundaysa, şeyleri kırmadığınızı biliyorsunuz ve daha sonra eski kodu kaldırmaya devam edebilirsiniz. Eski ve yeni sonuç eşleşmesini kontrol ettiğinizde, hata düzeltmesi gibi amaçlanan bir değişiklik nedeniyle farklı olması gerektiğini düşündüğünüz yakalama durumlarındaki farklılıkları analiz etmek için kod da ekleyebilirsiniz .


1

"Çoğunlukla, değişiklikler takımlar üzerinden duyurulmuyor, bu yüzden hatalar neredeyse her zaman beklenmedik bir şekilde çarptı"

İletişim sorun mu var? Peki (diğer herkesin daha önce işaret ettiklerine ek olarak, sıkı testler yapmanız gerektiğini) doğru iletişim olduğundan emin olun? İnsanların yazacakları arayüzün bir sonraki sürümde değişeceğinden ve bu değişikliklerin ne olacağından haberdar edildiğini?
Ve kendi kodlarını yazmaya başlayabilmeleri için geliştirme sırasında mümkün olan en kısa zamanda en azından bir kukla etkileşime (boş uygulama ile) erişmelerini sağlayın.

Tüm bunlar olmadan, birim testler, son aşamalarda, sistemin parçaları arasında yıpranma dışında bir şey olduğuna dikkat çekmek dışında pek bir şey yapmaz. Bunu bilmek istiyorsunuz, ancak bunu erken, çok erken ve ekiplerin birbirleriyle konuşmasını, çabaları koordine etmesini ve aslında diğer ekibin yaptığı işe sık sık erişmesini istiyorsunuz (çok büyük taahhütler değil, düzenli taahhütler) birkaç hafta veya ay sonra taahhüt, teslimattan 1-2 gün önce).
Hatanız kodda DEĞİL, kesinlikle karşı yazdığınız arayüzle uğraştığınızı bilmeyen diğer takımın kodunda değil. Hatanız gelişim sürecinizde, insanlar arasındaki iletişim ve işbirliği eksikliğindedir. Farklı odalarda oturmanız, kendinizi diğer insanlardan soyutlamanız gerektiği anlamına gelmez.


1

Öncelikle, bir iletişim probleminiz var (muhtemelen bir ekip oluşturma problemiyle de bağlantılı ), bu yüzden davanıza bir çözüm geliştirme tekniklerine değil ... iletişim üzerine odaklanmalıdır.

Bir müşteri projesine başlarken çekirdek modülün dondurulmasının veya çatallanmasının mümkün olmadığını kabul ediyorum (aksi takdirde şirketinize çekirdek modülü güncellemeyi amaçlayan müşteri ile ilgili olmayan bazı projeleri programlamanız yeterlidir).

Böylece takımlar arasındaki iletişimi geliştirmeye çalıştık. Bu iki şekilde ele alınabilir:

  • insanlarla. Bu, şirketinizin kodun kalitesinden ve kullanılabilirliğinden sorumlu olacak birini çekirdek modül mimarı (ya da üst yönetim için iyi olan her ne olursa olsun) olarak adlandırdığı anlamına gelir . Bu kişi çekirdeği enkarne edecektir. Böylece, tüm takımlar tarafından paylaşılacak ve aralarında uygun senkronizasyon sağlanacaktır. Ayrıca, tutarlılığını korumak için çekirdek modüle bağlı bir kod inceleyicisi olarak hareket etmelidir;
  • araçları ve iş akışları ile. Çekirdeğe Sürekli Entegrasyon uygulayarak , çekirdek kodun kendisini iletişim ortamı haline getireceksiniz. Bu önce biraz çaba gerektirecektir (üzerine otomatik test paketleri ekleyerek), ancak gece CI raporları çekirdek modülün brüt durum güncellemesi olacaktır.

Burada iletişim süreci olarak CI hakkında daha fazla bilgi bulabilirsiniz .

Son olarak, şirket düzeyinde ekip çalışması eksikliği ile ilgili bir sorununuz var. Ekip oluşturma etkinliklerinin büyük bir hayranı değilim, ancak bu yararlı olabilecekleri bir durum gibi görünüyor. Düzenli olarak geliştirici çapında toplantılarınız var mı? Diğer ekiplerden insanları proje retrospektiflerine davet edebilir misiniz? Veya bazen Cuma akşamı bira içebilir misiniz?

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.