Kod tabanının farklı bir bölümünde çalışırken bir hatayı düzeltme


19

Bu benim için en az bir kez oldu. Ben kod tabanı bir kısmı üzerinde çalışıyorum ve farklı bir bölümünde küçük bir hata bulmak ve hata şu anda yapmaya çalışıyorum ne tamamlamam beni durdurur. Hatayı düzeltmek, tek bir ifadeyi değiştirmek kadar basit olabilir.

Bu durumda ne yaparsın?

  1. Hatayı düzeltin ve mevcut işinizle birlikte çalışın
  2. Mevcut çalışmanızı başka bir yere kaydedin, hatayı ayrı bir işlemle düzeltin, ardından çalışmaya devam edin [1]
  3. Yapmanız gerekeni sürdürün, kodu uygulayın (olsa bile) inşaa son verir bazı testlerde başarısız olursa), hatayı düzeltin (ve yapı testleri geçmek) ayrı bir taahhütte

[1] Uygulamada bu şu anlama gelir: orijinal veri havuzunu başka bir yerde klonlayın, hatayı düzeltin, değişiklikleri taahhüt edin / itin, taahhüdü üzerinde çalıştığınız depoya çekin, değişiklikleri birleştirin ve çalışmalarınıza devam edin.

Düzenleme: Gerçekten ne demek istediğimi yansıtmak için üç numarayı değiştirdim.


2
Neden tek bir işlemde hem hata düzeltmesini hem de değişikliğinizi taahhüt etmiyorsunuz? Oldukça yaygın ve temiz. Taahhüdünüze uygun yorumlar koymak zorundasınız.

@Pierre, bu 1 numara. Sanırım bundan daha iyi bir kelime seçebilirim silently.
imgx64

Genellikle aynı işleme birden çok düzeltme koydum. Ben görev kimliğini kullanarak bunları referans ve hatta Trac ben yükledim özel bir kanca ile otomatik görevlere benim kaydedilmesini takmak zorunda

2
@Pierre 303 Ah adamım, çok kötü bir uygulama! Taahhütlerinizi ayrıntılı hale getirin.
alternatif

@mathepic: bir değişiklik sadece bir görevi etkilediğinde evet, ancak birden fazla görevi etkilediğinde, derlemeyi bozmadan mümkün değildir

Yanıtlar:


15

1 ve 2 yaptım ve sonunda # 2'yi tercih ettiğimi düşünüyorum. KG / sürüm notları / diğer geliştiriciler için önemli olabilecek hata düzeltmesi için daha fazla görünürlük sağlar.

Ayrıca bir hata olduğunu düşündüğüm bir durumla da karşılaştım (burada durumun böyle olmadığını söyleyerek) ve ayrı bir taahhütte "düzeltmek", başka bir geliştiricinin benimle iletişime geçmesine ve ne olduğunu açıklamasına izin verdi yerine "düzeltme" sadece benim normal check-in kayboluyor.


11

Genellikle 2 numaraya giderim. Depoyu daha temiz hale getirir ve günlükleri daha anlaşılır hale getirir. Birlikte çalıştığım diğer geliştiriciler, aynı taahhütte 15 farklı hata düzeltmesi, özellik ve yeniden düzenleme yaptıklarından nefret ediyorum.

Ayrıca, ekibinizin kusur izlemeyi nasıl yaptığına bağlı olarak, düzelttiğiniz kusur oradaysa, öğeyi tamamlandı olarak işaretlediğinizden emin olmak için kusur deposunu aramanız gerekebilir. Veya, yeni bir öğe oluşturmanız ve kusur sistemi ile kod deposunun eşleşmesi için tamamlandı olarak işaretlemeniz gerekebilir.


7

# 2 yaparım. Git gibi araçları kullanmak, birden fazla işleme bölmeyi önemsiz hale getirir. Ekibinizi daha modern araçlara geçmeye ikna edemiyorsanız, git-svn size bu sorunu çözmek için kullanacağınız şeyin iyi bir kısmını verecektir. Bu blog gönderisi çözmeye çalıştığınız iş akışına iyi bir genel bakış sunuyor: Git Hakkında Şey


Teşekkürler, bu blog yazısı çok kullanışlı ve benim durumumda uygulanabilir (Git ile aynı özelliklere sahip Mercurial kullanıyorum). Sanırım Kitabı bir gün okumalıyım .
imgx64

@ imgx64: Dizine eşdeğer olup olmadığını bilmiyorum.
Git'in

Bu blog gönderisindeki yorumları okuyan Mercurial'ın eşdeğer uzantıları var. shelveUzatma ihtiyacım olanı yapar.
imgx64

@ imgx64 Raf yararlı olabilir, evet. Ancak Record uzantısının daha uygun olduğunu düşünüyorum. Ben sadece TortoiseHg GUI aracılığıyla (bir diff kaldırmak / taahhüt eklemek için çift tıklayabilirsiniz) aracılığıyla kullanın.
barjak

3

Yazılmamış seçeneği seçiyorum (4): Projenizi son derece uzmanlaşmış montajlara / kitaplıklara bölün, böylece ilgisiz hatalar sürüm kontrol ağacında her zaman farklı bir konumda olacaktır.

Yukarıdakilerin sersemlemiş olması durumunda özür dilerim, ama içtenlikle demek istiyorum. Birbiriyle hiçbir ilgisi olmayan yüz form ve ad alanı olan monolitik bir proje gördüğümde küfrediyorum. Farklı fonksiyonel alanlarla ilgilenen taahhütleri alıp almayacağımı merak etmem için sık sık aynı ikilemle yüzleşiyordum; daha sonraya kadar, tüm bu farklı fonksiyonel alanların tek bir yüklenebilir projede bulunmasının kendi başına büyük bir tasarım hatası olduğunu fark etmedim.

Belirli bir özellik üzerinde çalışırken sık sık tamamen alakasız hatalar buluyorum. Kullanıcı arayüzü üzerinde çalışıyor olabilir ve bazı iş mantığında bir hata bulabilirim ve devam etmeden önce düzeltmek zorundayım. Fark, iş mantığının her zaman kullanıcı arayüzünden farklı bir montajda / projede olmasıdır, bu yüzden tek yapmam gereken BL'de çok küçük bir değişiklik yapmak ve çok küçük bir taahhütle devam etmek, sonra çalışmaya devam etmektir.

Gerçekten iyi bir proje organizasyonuna sahip olmak sadece mümkün olmakla kalmaz, aynı zamanda bir değişikliği gömmeden, yapıyı bozmadan veya tahriş edici bir dal / birleştirmede birleşmeden bu sorunları ele almayı oldukça kolaylaştırır (bir DVCS kullansanız bile tamamen ağrısız değildir) ).

Bu seçeneğe sahip değilseniz - yani proje organizasyonunda söz hakkı olmayan bir genç geliştiricisiniz - o zaman sadece # 1 ile giderim ve günlükte uygun notlar alırım, böylece diğer insanlar neden yaptığınızı neden yaptığınızı bilir. Bir yaptıysanız büyük bir değişim daha sonra da neden sabit ve kadarıyla görünürlük vermek için sorun izleme sisteminde bir hata raporu.


2
Kabul ederken, bu her durumda işe yaramıyor. 'Kodun farklı bir bölümündeki hata' bir üst sınıfta veya hatta aynı sınıftaki farklı bir yöntemde olabilir. Bunları farklı kütüphanelerde ayıramazsınız.
imgx64

@img: Elbette, ancak kod tabanının "farklı kısmı" üzerinde çalıştığınız şeye çok yakınsa, muhtemelen bu kadar dikkatini haklı çıkarmaz - sadece düzeltin! : P
Aaronaught

1

# 2 yapmaya çalışıyorum. Gerçekten ayrı bir sorunsa, üzerinde çalıştığınızdan farklı bir dosyada olma olasılığı yüksektir. Üzerinde çalıştığınız depoda yapılmış olsa bile, dosyayı ayrı bir taahhüt olarak kontrol edebilmelisiniz. Daha önce belirtilen tüm nedenlerden ötürü, taahhütlerin mümkün olduğunca bağımsız olması, izleme ve yanlış olması durumunda değişikliği geri almanın mantıklı olması mantıklıdır.


3
Git ile aynı dosyada birden fazla değişikliği birkaç işlem için bölebilirsiniz - SVN tabanlı projeler üzerinde çalışırken bunu yapmayı özledim.
Peter Boughton

1

Genellikle hatayı düzeltirim ve sonra üzerinde çalıştığım şeye devam ederim. İşlem yapma zamanı geldiğinde, hata düzeltmesinin ayrı bir dosyada olduğunu varsayarsak, iki eşzamanlı taahhütte bulunuyorum - birincisi sadece hata düzeltmesini içeren kısmi bir taahhüttür ve ikincisi diğer her şeydir.


1

Kısa cevap: # 2. Bu hata düzeltmesinin (notu izleyicinizde!) Sürüm geçmişinizde ayrı bir varlık olarak etiketlenmesini istiyorsunuz.

Daha uzun cevap:

  • Böcekle karşılaşmak
  • Hatayı gösteren bir test veya daha fazlasını yazın
  • Test geçişini yapın
  • Sadece bu değişikliği ve testlerini yapın ( git add --interactiveveya darcs record -iVCS'niz bunu yaparsa) (*)
  • Yaptığım şeye geri dön.

(*) CVS'de (hayır, gerçekten) Bazen temiz bir ağacım ve üzerinde çalıştığım bir kopyam var. Sonra bir hata - benim durumumda - sadece bugfix'i temiz ağaca çekmek için kullanıyorum, böylece ayrı ayrı yapabilirim. (Diğer seçenek, değiştirilen dosyalarınızı yeniden adlandırmak cvs updateve birleştirmek içindir. Değişikliği tamamladığınızda, dosyayı kaldırın ve taşınan dosyalarınızı orijinal adlarıyla yeniden adlandırın.)

Dikkat edilmesi gereken bir şey, genellikle sadece üzerinde çalıştığım şeyle ilgili olan veya yakın sözcüksel yakınlıkta olan hataları bulmamdır. Kod tabanının ilgisiz kısımlarında hata bulması normal olsaydı şaşırırdım - hatayı giderirken neden ilgisiz kodu okuyorsunuz? (Evet, bu Aaronnaught'ın söylediklerinin tam tersidir!)


1

Hatayı düzeltirim ve her düzeltme / özellik için ayrı ayrı taahhütler yaparım .

Çoğu zaman, değişiklikler aynı dosyada değildir, bu nedenle taahhütleri ayırmak kolaydır. Değişiklikler aynı dosyadaysa, işlemek istediğim farklılıkları seçmek için TortoiseHg (mecurial GUI ön uç) kullanıyorum (bunu Kayıt uzantısına sahip komut satırında yapmak mümkündür , ancak daha az uygun ).

Bazı insanlar bir özellik üzerinde çalışırken küçük düzeltmeleri izole etmek için Mercurial Kuyruklarını kullanır. Küçük düzeltmeler MQ'da biriktirilir ve özellik bittiğinde ve işlendiğinde, kuyruğun içeriği de işlenir (kuyruktaki her giriş için bir değişiklik kümesi).


0

Genellikle # 2 yaparım. Mevcut çalışmamı başka bir yere kaydetme: bu genellikle bir yama oluşturarak iyi çalışır. Ayrıca bazı IDE'ler (IntelliJ), değişikliklerin rafa kaldırılmasına izin verir;


0

Ne yaptığım böcek gerçekten farklı bir parçası olup olmadığına bağlıdır. Eğer öyleyse, kontrol etmek yarım yaptığım değişikliklerden bağımsızdır. Değişiklik yapıyorum, önemsiz bir hata yapmadığımdan emin olmak için bu farklı kısmı inşa ediyorum, test edin (belki de beni yapmasını engelleyen her şeyi yaparak) ve neler olduğunu açıklamak için kontrol edin. Genellikle bunun için bir iş öğesi yapacağım ve iade / çözmeden sonra WI'yi bir test cihazına atayın. Sonra yaptığım şeye geri dönüyorum.

Her şey yarı değiştirdiğim dosyalar ile doluysa, o parçayı bağımsız olarak inşa edip test edemiyorum. Bu durumda, bunun için başka bir WI yapıyorum ve değişikliklerimi kontrol ettiğimde, her iki WI'yu aynı checkin ile çözüyorum, bu genellikle ilkelerime aykırı, ancak bu durumda iyi uygulanıyor.

Her iki durumda da bugfix benim tarafımdan test edildi, bir tür iz ile kontrol edildi, böylece insanlar o günü neden bu kodu rastgele değiştirdiğimi anladılar ve şimdi doğru olduğunu onaylamak için bir başkasına bir WI atandı.


0

# 1 yapıyoruz. # 2 kulağa hoş geliyor, ancak # 2 ile ilgili sorun yaşadığımızı söyleyemem.

Şirketimdeki ek bir faktör, web uygulamaları oluşturmamız ve testimizin neredeyse tamamen web arayüzü üzerinden yapılmasıdır - kabaca, insanların birim test yerine fonksiyonel test dediği şey. Kontrol etmeden önce tüm testler geçmiştir. Taahhütleri daha küçük bitlere bölmek, testleri her bit için bir kez çalıştırmak anlamına gelir ve bu daha fazla zaman alır. Daha küçük taahhütler yapmamıza izin verecek çok daha hızlı bir test paketine sahip olmak isterdim, ama sadece sahip değiliz.

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.