Bir kodu bagajda işlemeden önce incelemenin en iyi yolu nedir? (Svn)


14

SVN gövdesine bağlanmadan önce bir kodu incelemenin en iyi yolu nedir? Düşündüğüm bir fikir, geliştiricinin kodunu bir şubeye vermesi ve daha sonra da şube revizyonlarını bagajda birleştirirken kodunu gözden geçirmesi. Bu iyi bir uygulama mı? Değilse, bir kodu bagajda işlemeden önce gözden geçirmek için başka ne yapılabilir?


2
Ön taahhüt incelemeleri için destek sağlayan Crucible gibi bazı araçlara bakabilirsiniz .
Gyan aka Gary Buyn

3
bir kod bagajına işlendikten sonra gözden geçirmemek için herhangi bir neden ?
gnat

3
@gnat Eh, ben genç geliştiriciler kodlarını başka bir yerde taahhüt ve daha sonra onları gözden ve bu değişikliklerin bagajda olmak için iyi olduğundan emin sonra üst düzey bir geliştirici tarafından bagajda birleştirmek daha iyi olduğunu düşünüyorum. Üst düzey bir geliştirici, doğrudan bagajda işlenen kodu inceledikten sonra, bu kodun geri alınması gerektiği gibi sorunlara sahip olduğuna karar verebilir. Bu sorunlu kodun ilk etapta bagaja işlenmesini engelleyebilirdik. Bütün fikir bu.
Meysam

Başka bir yol denediniz mi yoksa bu sadece tahmin mi ediyor?
gnat

Yanıtlar:


12

Gerçi iki okul var - önerdiğiniz veya "taahhütten önce gözden geçirdiğiniz". Farklılıkların çoğu negatif ve / veya pozitif olarak görülebilir. - Örneğin, bir incelemeden kaynaklanan değişikliklerin izlenmesi yok - bunları ayrı taahhütler olarak görmek istiyor musunuz, yoksa yalnızca son çalışmayla ilgileniyor musunuz?

Taahhüt etmeden önce gözden geçirin - dallanma gerekmez (istenirse yapılabilir), gözden geçirenlerin çalışma klasörlerine erişmesini sağlamalıdır. Kod, inceleme sırasında ve sonrasında izleme olmadan değiştirilebilir. İncelemenin neden olduğu düzeltmeler depoda görünmez.

İşlemden Sonra Gözden Geçir (bir dalda) - Her inceleme için bir dalı döndürmeniz gerekir (bu zaten iş akışında olabilir). İncelenmek üzere gönderilen kod, değişiklikler izlenmeden değiştirilemez. Birisi gözden geçirilen şubeleri birleştirmeli ve neyin gözden geçirildiğini ve neyin gözden geçirilmediğini takip etmelidir.

Büyük ölçüde takım kültürüne ve deneyimine bağlıdır. Neye güveniyorsunuz, incelemelerin ana amacı nedir? İncelemenin bir sonucu olarak değişikliklerin izlenmesine izin verdiği için, taahhütten sonra kişisel olarak incelemeyi tercih ederim. Artık Git ve Gerrit'i iki seçenek arasında güzel bir denge sağladıklarından kullanıyoruz.


1
Sürekli şube oluşturma ve tekrarlanan birleştirme, potansiyel (ve geri dönülmez) kirletici gövdeden çok daha ağır basan bir sapmadır. Genellikle sürüm kontrolü için ana yönerge "derlemeyi bozma" dır. Bunu yapabilirseniz, check-in işleminde gerçek bir zarar yoktur ve diğer her şey sadece gerçeğin ardından bir ayarlamadır.
Spencer Kormos

Bir daldaki taahhüdün ardından özellik dallarının kullanımı ile iyi çalışır: her yeni özellik veya hata düzeltmesi için yeni bir dal başlatırsınız. Tamamlandığında ve inceleme geçtiğinde, gövde ile birleştirilir. Bu şekilde bagajda sadece tam, gözden geçirilmiş değişiklikler bulunur. Özellik dalları kısa ömürlü olduğundan, birleştirmeler genellikle önemsizdir. Diğer avantaj, bagajın sadece tam özellikler ve düzeltmeler içermesidir - yarı pişmiş herhangi bir şey sadece bir dalda mevcut olacaktır.
Stephen C. Steel

7
  1. Bir yama dosyası oluşturmak için 'svn diff' komutunu çalıştırmadan önce.
  2. Yama dosyasını, bagajın temiz bir kopyasına uygulayan incelemeye gönderin.
  3. İnceleyen, seçim fark görüntüleyicisini kullanarak değişiklikleri gözden geçirir.
  4. Hakem, derleme gerçekleştirir ve testleri çalıştırır.
  5. Her şey yolunda giderse geliştiriciye değişikliklerini kontrol edebileceklerini söyleyin. Sorun
    varsa, geliştirici 1. adıma geri döner.

5

İdeal dünya var ve sonra gerçek dünya var.

In İdeal dünyada, tüm kod emin olabilirsiniz, test, vasiyetin çalışması ya teslim alır ya da bir veya daha fazla test başarısız olduğu için bunu kırık bileceksiniz şey. Edilmektedir Ayrıca, bu kadar deneyimli olmayan herkes deneyimli biriyle eşleştirilecektir, bu yüzden kod inceleme anında yapılır (gittiğinizde taahhütte bulunursunuz).

In gerçek dünyada işler farklı. İş dünyası bu değişikliğin şimdi canlı olmasını istiyorve mükemmel bir düz yüzle, evet, kodu temizlemek ve daha sonra test senaryoları eklemek için zaman alacağınızı söyleyeceksiniz. Muhtemelen her şeyi kodlamak için zamanınız olmayacak ve testlerin kapsadığı kod yüzdesi sürekli olarak azalıyor. Kod incelemesinin temel nedeni, daha deneyimli bir kişinin değişiklikleri gözden geçirerek ve "bir şeyler yapmanın daha iyi yollarını (TM)" önererek üst düzey geliştiricilerden (bunun için zaman olduğunda) öğrenmeleri. İncelenmemiş kodu üstlenen üst düzey geliştiricilere sahip olacaksınız. Sadece bir kod incelemesi için dallanma ve daha sonra birleştirme büyük bir zaman kaybıdır. Bu sorunun üstesinden gelmenin bir yolu, insanların kısa süre önce üzerinde çalıştıkları bir veya iki değişiklik seçip yazarlarını "sunmak" için haftalık 2 saatlik (veya benzeri) düzenli bir ekip toplantısı ilan etmektir. kodları bir projektör veya bir şey üzerinde birlikte inceleyerek yaklaşımları Bu bazı ilginç tartışmalara yol açabilir (genellikle biraz konu dışı gider), ancak genellikle herkesin bunu nasıl doğru yapacağına dair anlayışını geliştirir. Ayrıca, muhtemelen kodunuzu sunmak zorunda kalmanın baskısı, bazı insanların bunu daha iyi yapmasını sağlar ;-)

Ya da şanslı olabilirsiniz ve çok telaşlı olmayan gerçek dünya ortamında çalışmaya başlayabilirsiniz, programcılar aslında istismar yerine yaptıkları için takdir edilir ve her şeyi doğru yapmak için zaman vardır. Bu durumda cevabım şöyle olacaktır: burada cevaplarda önerilen farklı yöntemlerden bazılarını deneyin ve hangisinin ekibinize uyduğunu ve en iyi nasıl çalıştığınızı görün.


Haftalık inceleme fikri için +1. Bunu denemek zorunda kalabilirim
Jamie Taylor

@JamieTaylor: Eh, biraz uzlaşma - açıkçası, siz (ve dev ekibiniz) zamanınız varsa, tam kod incelemelerini öneriyorum. Ancak ekip içinde bilgi paylaşmanın iyi bir yolu.
Amos M. Carpenter

2

Şubeler, önceki işlerde ön taahhüt incelemelerinde kullanma deneyimime dayanarak Tamam çalışmalıdır.

O zamanlar, üretim öncesi aday koduna yönelik kritik yamalar için ön sipariş incelemelerini kullanıyorduk, bu yüzden çok fazla şube yoktu (rutin değişiklikler, taahhüt sonrası incelemelerden geçirildi).

Tüm değişiklikler için ön işlem incelemelerini kullanacağınız için, büyük miktarda şubeyi yönetmeniz gerekebilir. Geliştiricinin haftada ortalama bir "incelenebilir" değişiklik yapmasını bekliyorsanız, ekipteki her geliştirici için her yıl yaklaşık 50 şubeye sahip olursunuz. 1, 2, 3 ... gün alan küçük iş parçaları kullanıyorsanız, 50'yi 2, 3, 5 ... ile çarpın.

Aşağıda, en iyi şekilde istiyorsanız dikkate almanız gereken birkaç nokta vardır .

1. gecikme inceleme diğer ekip üyeleri için gerekli kodu engelleme durumlarda işleme

Kod inceleme son tarihleriyle ilgili çakışmaları tespit edin, izleyin ve çözün. Önceki projelerden birinde ele aldığım rutin değişikliklere ilişkin ön taahhüt incelemelerini hatırladığım için, makul süre yaklaşık 3 gündür ve endişelenmeye başlama zamanı, incelemenin gönderildikten sonra 1 günden fazla tamamlanmadığı zamandır.

Karşılaştırma için, taahhüt sonrası incelemelerde bu gereksinimler çok daha rahattır (2 hafta son tarih kullanıyorum ve 1 hafta sonra endişelenmeye başlıyorum) - ancak ön taahhüt incelemelerini hedeflediğiniz için, bu muhtemelen ilginç değil.

2. gözden geçirilmiş kodu gönderirken çakışmaları birleştir

İncelenen kodun taahhüdü, kod incelenmeyi beklerken başka biri tarafından yapılan çakışan değişiklikler tarafından engellenirse ne yapmalı?

Dikkate alınması gereken birkaç seçenek

  • başlangıca geri dönme ve geliştiricilerin değişikliği yeniden uygulamalarını ve yeniden gözden
    geçirmelerini gerektirme Bu durumda, ekip morali üzerinde olumsuz bir etkiyi ele almanız gerekebilir (olacaktır!).
  • birleştirme sorumluluğunu diğer ekip üyelerine iletme ("birleştirme ustası")
    Bu durumda, birleşmelerin kendi başına ön taahhüt incelemesinden geçip geçmeyeceğine karar vermeniz gerekir - ve eğer evet ise, bu birleşme sırayla başka bir çatışmaya denk gelir.
  • birleştirme aşamasında gözden geçirilen kodda yapılan değişiklikleri yoksay
    Bu durumda, işlenen kodun gözden geçirilen koddan farklı olması gerçeğiyle ilgili olarak ekip morali üzerinde olumsuz bir etkiyi ele almanız gerekebilir.
  • çakışmalardan kaçınmanın bir yolunu bulma
    Basit bir yaklaşım, belirli bir dosya kümesini değiştirmek için aynı anda yalnızca bir geliştiriciye izin vermektir; ancak bu, sizi doğrudan dosyaları değiştirmeyen tür değişikliklerden korumaz, ancak bunları dahili API değişiklikleri yoluyla etkiler. . Ayrıca, bu tür "kötümser kilitleme" nin sistem genelinde değişiklikler ve derin yeniden düzenlemeyi oldukça zahmetli hale getirdiğini de öğrenebilirsiniz.

Karşılaştırma için, taahhüt sonrası incelemelerde bu tür hiçbir sorun olmayacaktır (zaten tanımla birleştirilen kodla uğraştıklarından) - ancak ön taahhüt incelemelerini hedeflediğiniz için, bu muhtemelen ilginç değildir.

3. gözden geçirmeyi bekleyen geliştirici yükle

İnceleme gönderen geliştiricinin yeni bir göreve mi geçmesi veya başka bir şey yapması gerektiği konusunda açık bir politika oluşturun (örn. Gözden geçireni kovalamak gibi).

Karşılaştırma için karşılaştırma sonrası incelemelerin açık bir politikaya ihtiyacı yoktur (kod işledikten sonra bir sonraki göreve devam etmek doğaldır ve inceleme son tarihinin bir veya iki hafta olduğunu dikkate alarak) - ancak önceden taahhütlü incelemeleri hedeflediğiniz için, bu muhtemelen ilgi çekici değil.


0

Gözden geçirilmesi gereken herhangi bir geliştirme parçasının ayrı bir dalda olması gerekir. Bu nedenle, şube inceleme zamanı gelmeden önce var olmalıdır. O zaman adımın olması gerekir:

  1. gözden geçirmek
  2. Düzeltme (muhtemelen)
  3. İncelemeye geri dön (muhtemelen)
  4. Bagajda birleştir

Birleştirme zor kısımdır. Şube ne kadar uzun süre bağımsız kalırsa, gövdeye tekrar birleştirilmesi o kadar zor olacaktır. (Test edilmesi de daha zor olabilir.)

Çapraz birleştirme olası bir çözümdür. Bagajda birleşmeden önce (adım 4, hatta daha önce, adım 3 veya adım 1'den önce söyleyin), gövdeyi dalda birleştirin. Geliştirici bunu yapabilir ve test edebilir. Sonra şube gövdeye yetişir ve gövdeye birleştirmek daha kolay hale gelir. Bagajda birleştirme en iyi sizin tarafınızdan veya bagajdan sorumlu olan kişi tarafından yapılır.

Bazı insanlar çapraz birleştirme yerine yeniden pazarlamayı dener. Bazı insanlar rebase kötü olduğunu savunuyor. Bu başka bir tartışma.

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.