Yeniden kodlamayı büyük bir kod tabanı ve birçok geliştirici ile nasıl yönetiyorsunuz?


13

Muhtemelen bir tür bir araç, belki bir Eclipse eklentisi kullanarak iki geliştiricinin aynı kodu ilk önce konuşmadan aynı anda yeniden düzenlediği bir durumu önlemek istiyorum. Yardım edebilir misin?

4.5 milyon kod satırımız ve dört kıtada 20'den fazla geliştirici ekibimiz var.

İdeal olarak, daha önce bahsedilen geliştiricilerin ikisinin, başka birinin aynı kod parçası üzerinde çalıştığını ve herhangi bir şeyi değiştirmeden önce ilk kodla konuştuğunu fark etmesini istiyorum.

Bir çözüm biliyor musunuz?


1
Herhangi bir Eclipse eklentisi hakkında bilmiyorum ... daha çok sürüm kontrol sistemi için bir iş gibi geliyor.
SL Barth - Monica'yı

Bunu neden önlemek istiyorsun? Komplikasyonları (böcekleri) önlemek mi yoksa geliştirici zamanından tasarruf etmek mi? Çözüm büyük ölçüde bu IMO'nun cevabına bağlıdır.
KaptajnKold

Neden bazı SVN, Apache Subversion veya Tortoise svn denemiyorsunuz bunun için iyi olacak.

1
Neden yirmi ekip aynı kaynağı düzenliyor?

Bir VCS'miz var. ClearCase'den Git'e geçtik.
Roger CS Wernersson

Yanıtlar:


14

Birçok 2. nesil kaynak kontrol sistemi, sunucuya bir dosyayı değiştirmek istediğinizi bildiren bağlı bir "ödeme" kullanarak çalışır. TFS, SourceGear Vault ve diğer birçok örnek verilebilir. Bu şekilde, gereksiniminizi teknik olarak yerine getirebilirsiniz. Adam Butler'in belirttiği gibi, bu tür araçların kendi sorunları vardır (uzun bir tartışmaya girmeden - çevrimdışı çalışma için sınırlı destek ve genellikle karşı üretken geliştirme iş akışı).

Yeniden düzenleme çalışmalarının tahsisine kesinlikle bir tür hiyerarşik yaklaşım öneririm. Geliştiriciler mantıksal olarak her biri kodun belirli alanlarından sorumlu olan alt ekiplere ayrılabilir. Ekipleri nasıl yapılandırmak istediğinize bağlı olarak, her birinin ekibin alanının üst düzey tasarımından sorumlu olan bir "lider" rolü olabilir. Bu yapı geliştiriciler tarafından iyi bilinmeli ve yeniden düzenleme için iletişimi basitleştirmelidir. Bu yaklaşımın bazıları için çok resmi ve geriye doğru göründüğünden eminim, ancak 20'den fazla geliştiricinin büyük bir sistemi yeniden düzenlemek için "herkes için ücretsiz" bir yaklaşım kullanmasının büyük ölçüde tercih edildiğini düşünüyorum. Bazı yeniden düzenleme işlemleri yüksek düzeyde gerçekleşecektir (örneğin, X modülü Y modülü ile nasıl iletişim kuracak), bu durumda uygun seviyede arama yapabilen kişilere ihtiyacınız olacaktır. Takımdaki her geliştirici mimari kararlar vermemelidir, bu nedenle, cahil olmayı seçmiş olsa bile, neredeyse her durumda bir hiyerarşi uygulanır.

Temel olarak, ortaya koyduğunuz temel gereksinimi karşılayacak araçlar vardır, ancak uygun iletişimin yerini alacak ve projenizin genel mimarisini yönlendiren az sayıda insanın yerini alacak hiçbir araç yoktur.


Çoğu dikey değiştirir; GUI, ağ protokolleri, veritabanı, eserleri değiştirir. Yeniden düzenlemeleri iletmemize yardımcı olacak bir araca ihtiyacımız var. Okunabilirliği artırmak ve bakım maliyetini azaltmak için her girişte kodu yeniden düzenlemeye çalışıyoruz.
Roger CS Wernersson

@RogerWernersson - Anlıyorum, bunu başarmanın iyi bir yolu olduğunu sanmıyorum. Bu yüzden cevabım, sonuç olarak ayak basmanın en aza indirilmesi için ekipleri ve sorumlulukları ve şirket kültürünü yapılandırmayı önerdi. Git'in üstüne eşzamanlı bir ödeme yapmayı denemek acı verici olacak ve muhtemelen merkezi bir revizyon kontrol sisteminin tüm dezavantajlarına sahip olacak. Eminim birisi bunu yapmış olsa da, git kullandığınızdan bahsettiğinize göre, bazı özel uygulamalar bulabilmelisiniz.
Daniel B

7
  1. Geliştiricilere belirli modüllerin atandığından emin olun.
  2. Her yeniden düzenleme değişikliğini takip eden bir görev / hata izleme sistemine sahip olun. Her sorunu yalnızca bir geliştiriciye atayın
  3. Bazı sürüm kontrol sistemleri bir dosyayı kilitleme özelliğine sahiptir, böylece yalnızca bir geliştirici dosya üzerinde güncelleme haklarına sahip olabilir. Bu özelliği hiç kullanmadım, ancak geliştiriciler sürekli olarak birbirlerinin üzerine çıkıyorlarsa, bu dikkate almak isteyebileceğiniz bir şeydir.
  4. Birim testleri yapın, böylece geliştiriciler aynı dosyada çalışsa bile, değişikliklerin uygulamayı hiçbir şekilde bozmadığını bilirsiniz.
  5. Yeniden düzenleme işleminiz modüller içinde bulunuyorsa, yukarıdakilerin tümü yardımcı olacaktır. Ancak, bir kişi günlük tutma veya güvenlik gibi kesişen bir konu üzerinde yeniden düzenleme yaparsa, tanım gereği birçok dosyayı etkileyecektir. Özellikle aop yaklaşımlarından faydalanmadıysanız, bunların dikkatli bir şekilde ele alınması gerekir.

Prensip olarak kilitleri kullanmaktan yanayım, ancak aracınız (örneğin Eclipse) yeniden düzenleme yoluyla birçok dosyayı otomatik olarak değiştirirse ne yapmalı. Değiştirilen tüm dosyalar otomatik olarak kilitlenmeli mi? Kilitli dosya sayısı çok hızlı büyüyebilir. Kilitler aşamalı olarak mı kazanılmalıdır? Kilitlenmeler nasıl ele alınır?
Giorgio

Bir yöntem imzasını değiştirirseniz ve bu yöntem birçok dosyayı etkiliyorsa, tüm dosyalar için bir kilit edinmeniz gerekir. Başka birinin kilidi varsa, yeniden düzenleme işleminiz daha yüksek önceliğe sahipse kilidi zorla alabilirsiniz (svn buna izin verir).
Sriram

Bu otomatikleştirilebilir mi (öncelikleri kaydederek ve kilit çakışmalarını otomatik olarak çözerek)? Veya her geliştirici, yeniden düzenleme işlemlerinin daha yüksek önceliğe sahip olup olmadığına karar verir mi?
Giorgio

Öncelikleri iyi bir api ile görev mgmt uygulamasında saklanırsa, otomatikleştirebilirsiniz sanırım. Hiç denemedim ama bunun neden mümkün olmaması gerektiğini anlamıyorum.
Sriram 20:11

Her yeniden düzenleme için bir hata oluşturmak istemiyorum. Yaklaşım değiştirdiğiniz kodu temizlemektir. Her dosya için bir hata raporu dosyalamak çok fazla iş gibi geliyor.
Roger CS Wernersson

6

Geliştiricilerin düzenlemeden önce ödeme kodunu yapan sürüm kontrol sistemleri vardır / vardı, ancak bunların kendi sorunları vardır. Daha iyi uygulama, geliştiricilerin sık sık taahhütte bulunmalarını ve güncelleme yapmalarını sağlamaktır. Bir geliştirici daha sonra bir sınıfı amortisman olarak işaretleyebilir ve sonra diğer geliştirici, refactorlarına başlamadan önce güncellenirse, amacı görecektir.


3
+1: Taahhüt ve güncelleme genellikle değişikliklerin küçük ve kolayca yönetilebilir olması anlamına gelir ve bu da çatışmaların yönetilmesini kolaylaştırır.
Bringer128

Taahhüt sıklıkla yardımcı olur. Ne yazık ki, bunu değiştiremem. İletişim kurmamıza yardımcı olacak bir araç arıyorum.
Roger CS Wernersson

3

Teknoloji sosyal sorunları çözemez. Geliştiricilerinizin birbirleriyle konuşmasını ve çalışmalarını koordine etmesini sağlamanız gerekir. 20 takımla bazı yapı ve kurallar gerekli olacaktır. Onları teknolojik çözümlerle desteklemek isteyeceksiniz, ancak önce insanlar geliyor.


3
20 takımdan bahsetti, 20 takımdan değil
Ingo

1
Teknoloji için +1, sosyal sorunları çözemez. Ama "20 takım ile bazı yapı ve kurallar gerekli olacak" cevabını düzenleyin
MarkJ

Bazı insanlar uyurken diğerleri uyur. Dört kıtada ekibimiz var.
Roger CS Wernersson

0

Ayrılırsanız notice that someone else is working on the same piece of code and talk to the first one before modifying anything, söylediklerinize göre, bir sürüm kontrol sistemine (CVS / SVN / GIT) ihtiyacınız vardır. Ama emin değilim, ama bunu da dahil etmek istiyorsanız, bazı gelişmiş şeylere ihtiyacınız olacak (bir çeşit tetikleme mekanizması / bazı özel şeyler).


Git var. Ondan önce ClearCase vardı. VCS çözüm değil. Biraz tetikleme mekanizmasına ihtiyacımız var.
Roger CS Wernersson

0

Kaynak kontrolündeki dosyaları kilitleyen geliştiriciler sorununuzu kolayca çözmelidir, ancak daha sonra büyük sorunlarınız olabileceğini düşünüyorum.

4.5 Milyon LOC, çok iyi tasarlanmış ve tasarlanmış bir çözümde oynamak için devasa bir sanal alan. Bunun tesadüfen daha fazla gerçekleşmesi, dikkat edilmesi gereken bazı ciddi potansiyel tasarım kusurlarını anlatıyor.


Çoğu değişiklik dikeydir; GUI, ağ protokolleri, veritabanı. Her takım çeviktir ve her sprintte müşteri değeri sağlamaya odaklanmıştır. Veritabanında, GUI'de vb. Bir ekibimiz olamaz. Kod daha temiz olsaydı daha kolay olurdu. Ancak kodu temizleme yolu "birçok küçük refactorings" yazılmıştır.
Roger CS Wernersson

0

Bir kaç şey:

  1. Çalışma için ayrı modüller
  2. Değişiklikler yapılmadan önce konuşmak [tüm geliştiricilerle]
  3. Birim testi [ilgili şeyleri kırmanın doğrulanması ve önlenmesi için]
  4. Diğerlerinin de belirttiği gibi bir VCS

1. her takım dikey olarak çalıştığında zor 2. bazı takımlar uyurken bazı takımlar uyku 3. sorunu çözmüyor 4. Git şimdi, daha önce ClearCase üzerinde.
Roger CS Wernersson
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.