Kod ne zaman verilir?


59

Bir proje üzerinde çalışırken, kod birkaç hafta / ay / yıl boyunca uzun bir süre boyunca tek bir günde veya bit hızında oldukça hızlı bir şekilde geliştirilebilir. Kod taahhütleri, proje geliştirmenin bir ölçüsü olarak kabul edildiğinden, daha az taahhütte bulunan bir projeden daha fazla yazılı kod olduğu anlamına gelmez.

Öyleyse asıl soru, havuzun ne zaman bir taahhütte bulunacağı ve bu nedenle kararın haklı olması için mi?

Ek olarak: Bir projenin gelişimini taahhütlerine dayanarak ölçmek doğru bir uygulama mıdır?


9
Kolayca ölçülebilen birçok şey kötü ölçümlerdir çünkü basitleştirilirler veya belirli ölçümlere karşı iyi performans gösterebilmek için kolayca oynanabilirler.
unholysampler

Girişler için hepinize teşekkür ederim. Cevaplar üzerine dağıtılmış bir taahhütte bulunmak için birçok geçerli neden var ve birden fazla cevabı kabul edemiyorum, şu ana kadarki en yüksek oyu alan cevabı kabul ediyorum. Ama bütün cevaplarını alıyorum.

Yanıtlar:


79

Hatırlamak istediğiniz bir kod temeli durumuna ulaştığınızda taahhütte bulunuyorsunuz. Belirli bir kod temeli durumunu hatırlamak isteyebileceğiniz birçok neden vardır, bu yüzden ne zaman işlem yapılacağına ilişkin zor ve hızlı kurallar olamaz. Bununla birlikte, taahhütlerin sayısı kesinlikle bir kalite veya ilerleme ölçütü değildir.


10
Sandıkta, sandıkta farklı bir hikaye olduğu ekinde bulundum. Örneğin ekibimdeki bagajı kontrol etmek için a) doğru bir şekilde inşa etmek ve b) bir şeyi tamamlamak zorundadır. Herhangi bir ekip üyesi bir şube oluşturmakta özgürdür ve istediği durumda olabilir.
Edward Strange

34

Bu bağlamda kodlamayı kaya tırmanışı olarak düşünmeyi seviyorum. Biraz tırmanıyorsunuz ve sonra kayaya bir çapa koyuyorsunuz. Hiç düşerseniz, yerleştirdiğiniz son çapa sizi güvence altına alan noktadır, bu nedenle asla birkaç metreden fazla düşmeyeceksiniz. Kaynak kontrolü ile aynı; biraz kodlarsınız ve biraz sabit bir konuma geldiğinizde, bir düzeltme yaparsınız. Korkunç bir şekilde başarısız olursa, her zaman bu son revizyona geri dönebilirsin ve bunun kararlı olduğunu biliyorsun.

Bununla birlikte, eğer bir takım üzerinde çalışıyorsanız, yaptığınız şeyin eksiksiz olduğundan, mantıklı, temiz bir şekilde inşa edildiğinden ve başkalarının eşyalarını kırmadığından emin olmak gelenekseldir. Diğer insanların çalışmalarına müdahale edebilecek daha büyük değişiklikler yapmanız gerekirse, başkalarını rahatsız etmeden iş yapabilmeniz için bir şube açın.

Aynı zamanda kullandığınız SCM sistemine de bağlıdır. Dağıtılmış sistemler tipik olarak ağrısız ve hızlı bir şekilde birleşme ve çatallanma yapar ve yerel olarak işlem yapabilirsiniz; Bu, çok fazla şey yapmanız ve önemli miktarda iş yaptığınızda itmeniz / birleştirmeniz gerektiği anlamına gelir. Svn veya cvs gibi merkezi sistemlerde, taahhüt etmek daha maliyetlidir ve herkesi etkiler. Dallanma bu sorunu kısmen çözer, ancak sunucuda gerçekleştiği için acı verici bir şekilde yavaş olabilir ve birleştirme hantal olabilir. Bu nedenle, merkezi SCM'lerde, genellikle, yalnızca önemli miktarda iş yaptıktan sonra taahhüt ettiğiniz daha dikkatli bir kültür vardır.

Eklentiye gelince: Lütfen, lütfen bunu yapma. Kod satırları, taahhütlerin sayısı, bulunan / çözülen hataların sayısı, vb. Hepsi çok kötü kalite ve hatta miktar ölçümleridir.


Aynı durumun yeni şubeler için de geçerli olduğunu düşünüyorum; yeni gelişimin kendi şubenize bağlı olduğu ve ardından özellik hazır olduğunda iteceğiniz? Yani. Kendi özel şubenize bile çok sayıda tamamlanmamış kod uygulayabilirsiniz.
Juha Untinen

Evet, ama daha az derecede, çünkü (orijinal cevaba bakınız) kimseyi doğrudan rahatsız etmeyeceksiniz. Söz konusu SCM'ye bağlı olarak, genellikle yukarı havza birleştirmeden önce taahhüt geçmişinizi temizlemenin iyi bir uygulama olduğu düşünülmektedir (örn. git rebase -i).
tdammers

13

Mercurial veya Git gibi DVCS kullanıyorsanız, önemli miktarda iş yaptığınız zaman yerel depoya vermelisiniz. Ancak, yalnızca çalıştıktan sonra paylaşılan havuza itin, test edilen bağımsız değişiklik.

Dağıtılmamış VCS için (örneğin SVN gibi) aynı mantık, yerel depo yerine, ana branşa basmak yerine özel branş kullanın.


+1 Hayret, bu daha fazla karşılanmadı. Bu benim ilk düşünce oldu - DVCS veya vcs
Michael Durrant

9

Erken ve sık taahhüt etmelisin.

90 saniyede bir sıklıkta iş yapan insanları tanıyorum. Ciddi anlamda. Onlar için iş gibi görünüyor. Her seferinde 90 saniyeden daha sık olan bir dosyayı her kaydettiğimde işlem yapmayı denedim. Bugün, muhtemelen her 15 dakikada bir taahhüt ediyorum. Birden fazla komisyonu bir araya getirmenize izin veren ve yerel komisyonlara (git gibi) izin veren bir VCS bunu çok daha kolaylaştırır.

Ne sıklıkla yapmalısınız? Söylemesi zor, ama muhtemelen şimdi olduğundan daha sık. Daha fazla ve daha sık taahhüt etmeye devam edin, çok sık sık absürd gibi hissettiren bir nokta bulun ve ardından biraz geri çekilin. Muhtemelen makul bir şeyle sonuçlanırsın.

Bir ürünün gelişimini, kullanıcılarına sağladığı değere göre ölçersiniz. Başka hiçbir doğru ölçüm yoktur.


1
+1. BDD-As-If-You-It-You-It-It, Refactor Bırakılana Kadar, Atomik Kodlama ve oldukça etkileyici bir dil birleştirdiğinizde, 90 saniye bir taahhüt olmadan gitmek için uzun bir süre olabilir .
Jörg W Mittag

8

Taahhüt, herhangi bir sürüm kontrollü veri / kodun yapı taşlarıdır. Her bir taahhüt tam olarak aşağıdakilerden birini yapmalıdır:

  • Yeni bir veri parçası veya işlev ekleyin
  • Bir ya da daha fazla hatayı düzeltin (eğer mümkünse her bir düzeltme için bir taahhütte bulunun) düzeltmenin:
    • Performans iyileştirme
    • Yanlış kod davranışını düzeltme
    • Tipografik hataların kaldırılması
  • Anlamsallığı değiştirmeden yeniden kodlama kodu veya veri. Bu içerir:
    • Özgün ile aynı davranan kodun yeniden yazılması
    • Verilerin temsilini farklı bir formata değiştirme
    • Projenin biçimlendirme kurallarına uymak için kodu veya verileri biçimlendirme
  • Başka bir daldaki değişiklikleri birleştirme (yukarı / aşağı doğru)

Ayrıca şubelerde çalışırken, taahhütlerin daha uygun bir şubeye gitmesi gerekmektedir. İki komisyon aynı taahhüt mesajına sahip olmamalı (benzer değişiklikleri ifade etmeli) ancak ortak çalışanlarla karıştırdığı gibi farklı dallarda olmalıdır. Daha iyi bir yol ana dalı taahhüt etmek ve özellik dalı ile birleştirmek.

Müteahhitler yukarıdaki kuralı uygularsa, önemsiz hale gelir:

  • Yan etkisi olmayan belirli bir değişikliği geri alın
  • Kod formatlama değişikliklerinden kod değişikliğini değiştiren davranışları belirleyin
  • Çatışmalardan kaçınarak farklı dallar arasında birleştirme
  • Değişikliğinizi kolaylıkla çekebilecek diğer geliştiricilerle işbirliği yapın

Taahhüt bazında ölçüm projesinin ilerlemesine ilişkin olarak, Yeniden Düzenleme taahhütlerinin ve Hata tespit komisyonlarının dikkate alınmaması mümkündür.


Bu cevabın kabul edilmiş bir cevap olması gerektiğini düşünüyorum, fakat muhtemelen sorgulayıcı daha basit bir açıklama arıyordu :)
Behnam Rasooli

7

Sadece verilen fonksiyonu / modülü / işlevselliği başarıyla test ettiğinizde ve entegrasyon veya sistem testi için hazır olduğundan makul bir şekilde emin olduğunuzda taahhüt edin.

Eklenti sorularına cevap vermek için - HAYIR !! Projenin nerede olduğu ile ilgili olarak hiçbir zaman karar verilmediğini, aslında neyin taahhüt edildiğini bilen var mı? Başarılı bir şekilde sistem testinden geçmiş hatta ünite testinden geçirilmiştir. Sadece taahhüt edildiği için - üretime hazır olduğu anlamına gelmez.


5
Bu, bagaja bağlı olmanız halinde doğru olacaktır, ancak bir özellik şubesine veya özel bir şubeye bağlı kalıyorsanız, entegrasyona hazır olmasına gerek yoktur.
Neil Butterworth,

1
@Neil Butterworth: ... aynı dalda çalışan diğer geliştiriciler olmadığı sürece, kodunuzda bazı bağımlılıklar var.
SinirliFormsDesigner ile

@Grustrated Bu durumda kesinlikle derlenebilir olmalı, ancak entegrasyon ve sistem testi için hazır olması gerektiğini görmüyorum.
Neil Butterworth

1
Dağıtılmış ve merkezi vcs arasında ilginç bir ikilik var. Dağıtılmış vcs ile, şubeleri yerel olarak göstermeyi ve diğer aygıtlardan uzak durmayı taahhüt edebileceğiniz için bu asla endişe verici olmaz.
George Mauer

2
@ George - Bu yanlış bir ikiliktir. Asıl ikilik, özel (geliştirici başına) şube kullanımı veya kamu (birkaç geliştirici tarafından paylaşılan) arasındadır. Bu, dağıtılmış bir VCS'nin merkezileşmiş kullanıp kullanmamaya diktir (ancak, DVCS'ler, dalları yayınlamadan özel olarak başladığından, özel dalları teşvik eder).
Stephen C. Steel

6

Ek olarak: Bir projenin gelişimini taahhütlerine dayanarak ölçmek doğru bir uygulama mıdır?

Hayır . Bunun neden korkunç bir fikir olduğuna dair günlük bir WTF vardı.

Kod işleme konusundaki genel kural kuralım, bir kod parçasını tamamladığımda ve onu derlerken kontrol etmemdir. Öbek gerçekten tanımlanmamış. Küçük bir görevse, işi bitirene kadar check-in yapamam. Daha büyükse, her mantıksal bölüm tamamlandıktan sonra kontrol edebilirim.

Ancak derleme yapıp yapmadığınızı asla kontrol etmeyin. Gerçekten yüksek sesle söylemenin aptalca bir şey olduğunu biliyorum, ama bunu daha önce insanlara açıklamak zorunda kaldım.


1
Derleme uyarısı için +1. Ofiste herkesin bir ücret ödemesi gereken bir kumbaramız vardı ve bunun sonucunda inşaatı başarısız kılan bir şey yaptı. Ne yazık ki, bu yolla oldukça paramız oldu, en azından başlangıçta :)
Ray

@Ray - son yerimde, para loto fonuna geçti. Ne yazık ki, bu kötü alışkanlıktan zengin olmadı. : P
Tyanna

1

Kod, kodun diğer kullanıcılarıyla paylaşılmaya hazır olduğunda, nispeten kararlı, güvenli ve uygun şekilde test edildiğinde bir taahhütte bulunun.

Ve hayır, taahhütlerin bir projenin gelişimi için mükemmel bir ölçüm olduğunu düşünmüyorum, çünkü her küçük ve küçük değişikliği gerçekleştirecek bazı geliştiriciler ve işlevsellikte yalnızca büyük büyük değişiklikler yapacak bazı geliştiriciler biliyorum. Birinin diğerine karşı taahhüdünün değerini nicel olarak nasıl ölçersiniz?


Unutmayın ki dağıtık sistemlerde, taahhüt edin! = Paylaşın. Sen gerektiğini itmek sen paylaşılmaya hazır şeyler olduğunda.
Rein Henrichs,

@Rein Henrichs: İyi nokta, işteki kaynak kontrolünün bu işlevselliğe sahip olmamasına rağmen (en azından bildiğim kadarıyla). Bir şey yapıldığında, projedeki herkes onu görebilir ve yeniden senkronize edebilir (ve genellikle bazen kör olarak yaparlar).
SinirliFormsDesigner ile

Daha iyi araçlardan yararlanabileceğinizi gösteren bir gösterge olabilir. Sık sık taahhüt vermeyi önleyen herhangi bir şey gereksiz bir engeldir.
Rein Henrichs

@Rein Henrichs: Bunu tartışmayacağım !!
FrustratedWithFormsDesigner

1

İlgili görev yapılır yapılmaz . Bir görev , bir bir parçasıdır kullanıcı hikaye .

Ne zaman bir görev yapılır :

  • ilgili birim testleri geçmesi,
  • kod düzgün belgelenmiştir ve
  • kod taahhüt edildi.

Farklı bir tanım tanımı yapabilirsiniz .

Taahhüt sayısını ölçmedeki değeri göremiyorum. Ancak, aynı kullanıcı hikayesinde (veya daha kötüsü, hikayeler) uzun süre çalışan birini görürseniz, bu bir koku.


1

Bir şeyi bozmadığını düşündüğünüz her önemli değişikliği yapın. Yapmamanız gereken tek şey, stil değişiklikleridir, çünkü mantıkta bir değişiklik göstermezler. Ancak aksi takdirde, ne kadar küçük olursa, o kadar çok değişiklik yapın.

Taahhütler ne kadar küçük olursa, iyi bir taahhüt günlüğünün bir yönü olan düşünce sürecini o kadar ayrıntılı belgelendirirsiniz. İyi bir kod incelemesi sadece kod sonucuyla değil, düşünce süreciyle de ilgili olmalıdır.

Ayrıca, birçok küçük işlemin olması, sürüm kontrolünün çok az kullanılan bir özelliklerinden biri olan samanlık kod kodlarındaki iğne hatalarını aramak için beni saatlerce süre kazandıran, ikiye katlanmayı kolaylaştırıyor.

Kısaca bisküvi; Geçerli kod tabanında bir sorunu keşfedin. Ardından, belirli bir sorunun varolmadığından emin olduğunuz bir değişiklik yapmayı seçin. Ortadaki "iyi" ve "kötü" sürüm arasındaki kararlılığı kontrol etmeye başlayın. Sorunun hala devam edip etmediğini görmek için test edin. Eğer öyleyse, "iyinin" ortasında ve daha önce test edilen taahhüdün ardına daha geriye bakmanız gerekir. Sorun giderilirse, bu özel değişikliğin ardından ortaya çıktı, bu nedenle "kötü" ile önceden test edilmiş taahhüt arasındaki ortayı kontrol etmeniz gerekir. Tekrar et. Sonunda problemi ortaya koyan bir taahhütle başlayacaksınız. Ancak, yalnızca küçük taahhütleriniz varsa, aksi halde sorunun hangi büyük değişiklik yığınında ortaya çıktığını bileceksiniz.

İşte o Git ile çalışır ancak asıl herhangi bir sürüm kontrolü için geçerlidir nasıl.


Bu, önceki 10 cevapta verilen ve açıklanan önemli noktalar üzerinde önemli bir şey sunmuyor gibi görünüyor. Soru değil git hakkında olmak görünürken Ayrıca, son paragraf git özgü özelliği başvurmak gibi görünüyor
sivrisineği

İkiye ayrılmak belirli değildir. Her tür sürüm kontrolü ile yapılabilir, bu sadece
Git'in

-1

Ne zaman:

  • oluşturur (HER ZAMAN)
  • birim testleri geçmek
  • çalışır (açıkça "devam etmekte olan iş" olarak işaretlenmemişse)
  • kodun durumunu kaydetmenin yararları, testleri yürütme, iyi bir taahhüt mesajı düşünme ve söz konusu işlem sırasında herhangi bir birleşme çatışmalarını çözme zorluğunu ortadan kaldırıyor

Bunun için en iyi uygulama budur.
jersoft
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.