Ortak programcı tarafından yapılacak henüz uygulanmayan bir yöntemle nasıl başa çıkılır?


45

Bu, takım halinde nasıl çalışılacağıyla ilgili bir sorudur.

Son zamanlarda, 6 kişiden oluşan bir ekiple ilk büyük (~ 80 sınıf, Java) programlama projem üzerinde çalıştım, ancak sadece 4 kişi sürekli olarak kod üzerinde çalışıyordu. Erken yapılması gereken çalışmaları dağıttık ve bir noktada ortak programcılarımdan birinin henüz uygulayamadığı bir yöntemi çağırmam gerekiyordu. Bununla başa çıkmak için önerilen yol nedir?

Gördüğüm seçenekler, ama hiçbirini beğenmedim:

  1. //TODOBu arada uygulamanın uygulanıp uygulanmadığını kontrol etmek için kendime a yazıp bu kod satırını tekrar gözden geçirin.

  2. İlgili ekip üyesinden şimdi bunu yapmasını istemek .

  3. Özel bir runtimeException'ı henüz uygulanmamış olanın açık bir açıklamasıyla atma. (En azından eksik olanı bulmak için uzun süre aramak zorunda değiliz)

  4. İçin gerekli yöntem ekleme onların sınıf ve bunları bir yazılı //TODOileti gövdesinde, muhtemelen de söz konusu değişiklikle ilgili onları hızlı bir mesaj göndermek. (Şimdi artık benim sorunum değil, ancak bu arada bu yöntem üzerinde çalışıyorlarsa, bu can sıkıcı birleşme çatışmalarına neden olabilir)

  5. İşi yapan kodu yazmadan önce her şey için soyut sınıflar veya arayüzler tanımlamak. (Çok iyi çalışmadı çünkü bu arayüzler sık ​​sık değiştirildi)


51
Başka birinin yazdığı bir yönteme ihtiyaç duyduğunuz iş akışının doğru olmadığını düşünüyorum. Bir özellik üzerinde çalışıyorsunuz. Bu özellik bir yöntem gerektiriyorsa, onu uygulayın. İki kişi tek bir özellik uygulayacaksa, ya eşleşiyor ya da neredeyse eşleşiyor gibi görünecek şekilde sık sık tümleşiyor ve iletişim kuruyorlar.
Öforik

8
@Euphoric Çok kez, nispeten kısa bir zaman diliminde oldukça büyük bir yeni özelliğin geliştirileceği ve kullanıcı arayüzü, iş mantığı ve API katmanlarının aynı anda üzerinde çalışmak üzere farklı görevlere bölünmesi gerektiği bir durumla karşılaştım. Aksi takdirde son tarih asla karşılanamamıştır. Bu tam olarak UI üzerinde çalışan bir kişinin sadece veri erişim yöntemlerini ve komutlarını BL'a arabirimler olarak bildirmesi ve diğer kişilerin yalnızca UI üzerinde çalışırken uygulama üzerinde çalışmasına izin vermesi gereken yerdir.
Andy,

15
@DavidPacker Tanımladığınız, bu sorunu çözmenin tek yolu değil. Dikey dilimler, sık entegrasyon, küçük özellikler, her biri ayrı bölümlerde çalışan Yatay dilimlerden daha iyi çözümlerdir.
Öforik

3
@Euphoric Sana daha fazla katılıyorum. Mümkün olduğunda, kritik olmayan parçaların karmaşık yeni özelliğini soyma yoluna gidiyoruz (yani, yalnızca UX'i iyileştiren ancak hemen gerekli olmayanlar). Ne yazık ki, bazen bahsettiğiniz seçenekler, ne özelliklerin çıkarılması mümkün değildir. İş diyor, geliştiriciler yapar. Bu yüzden puanlarınız sağlam olsa da, birisinin iş gereksinimlerini karşılamak için bir tür özellikte iş bölünmesinin yapılması gerektiği bir durumla karşılaşması ve karşılaşması ihtimali de vardır.
Andy,

2
onunla nasıl başa çıkmak istediği hakkında konuşmaya ne dersiniz ?
Aganju,

Yanıtlar:


5

Bu ilginç bir soru ve cevap düşündüğünüzden daha kolay olabilir.

Basitçe söylemek gerekirse, varsayımlarınızı doğrulayan testleri yazın. Uygulamayı veya diğer programcılarınızı yaparsanız farketmez

Uzun cevap.

Listelenen seçeneklerden herhangi biri biraz pasif, geri dönüp kodu (varsa) er ya da geç tekrar etmenizi gerektirir .

  • Yorumlar , uygulamadan sorumlu olan meslektaşınız tarafından okunmalı ve kullanılmalıdır. Bu arada kodunuz derlenemez. Böyle bir durumu bir kod deposunda kontrol ederseniz, sürekli entegrasyon boru hattınız çalışmaz ve yine de kötü bir uygulamadır ... hiçbir zaman hatalı kodları kontrol etmeyin
  • Çalışma zamanı istisnaları daha iyi görünüyor, ancak yine de toksik. Çünkü program arkadaşınız, uygulamanın zaten kontrolsüz bir şekilde yapıldığını ve sistemi dengesiz bir durumda bıraktığını varsayabilir. Metot çok sık tetiklenmezse, üretim kodunun kırılmasına neden olabilir ... kötü uygulama da ... "uygulanmayan" istisnaları asla kontrol etmeyin
  • Programcı arkadaşlarınızın metot veya saplama uygulaması için beklemesi de göz korkutucu. İş akışınızı ve diğer programcılarınızın iş akışını bozar. Hastalarsa, bir toplantı agında, kahve molasında, vaktinizi beklemek ister misiniz? ... zorunda kalmazsan birini beklemeyin
  • Eksik yöntemleri kesinlikle ilerlemenin en iyi yolu uygulayın. Ancak, uygulamanız tüm kullanım durumunu karşılamıyorsa ve programcı arkadaşlarınızın değiştirmesi veya değiştirmesi gerekiyorsa ne olur? Siz ve onlar bunun hala amacınıza uygun olduğundan nasıl emin oluyorsunuz? Cevap yine kolay. Niyetinizi doğrulayan, açıklayan ve belgeleyen testler yazın. Testler kırılırsa fark etmesi kolaydır. Bu yöntemde değişiklik yapmanız gerekiyorsa, bu özelliği kırmanız gerekiyorsa hemen görürsünüz. İkinizin de iletişim kurmak ve ne yapacağınıza karar vermek için bir sebebiniz var. İşlevselliği bölmek mi? Uygulamanızı değiştirin, vb. Hiçbir zaman testler tarafından yeterince belgelenmeyen kodları kontrol etmeyin.

Yeterli bir test seviyesine ulaşmak için iki disipline bir göz atmanızı öneririm.

  1. TDD - test odaklı geliştirme - amacınızı tanımlamanızı ve yeterince test etmenizi sağlayacaktır. Ayrıca, henüz uygulanmayan yöntem ve sınıflarla (ayrıca arayüzleri kullanarak) alay etme ya da sahte olma imkanı sunar. Kod ve testler yine de derlenecek ve diğer programcılarınızın koduna göre kendi kodunuzu test etmenize izin verecektir. (bkz: https://en.wikipedia.org/wiki/Test-driven_development )

  2. ATDD - kabul testine dayalı geliştirme - bu özelliği bir bütün olarak test etmenize yardımcı olan bir dış döngü (TDD döngüsü etrafında) yaratacaktır. Bu testler yalnızca tüm özellik uygulandığında yeşile döner, böylece arkadaşlarınız işlerini tamamladığında size otomatik bir gösterge verir. Bana sorarsanız oldukça temiz.

Uyarma: Sizin durumunuzda, sadece basit kabul testleri yazacağım ve işe başlamak için çok fazla olduğu gibi çok fazla iş tarafı getirmeye çalışmadım. Özelliğin gerektirdiği sistemin tüm parçalarını bir araya getiren basit entegrasyon testleri yazın. Gereken tek şey bu

Bu, kodunuzu Sürekli Entegrasyon boru hattına koymanıza ve oldukça güvenilir bir uygulama üretmenize olanak sağlar.

Bu konuda daha fazla bilgi edinmek istiyorsanız, aşağıdaki bağlantıları kontrol edin:


103

Taslakları isteyin.

Ya da kendin yaz. Her iki durumda da, sizin ve iş arkadaşlarınızın arayüzler ve nasıl kullanılmaları gerektiği konusunda hemfikir olmalısınız. Ancak bu anlaşma bu kadar nispeten katılaşmış gerekiyor olabilir koçanları karşı geliştirmek - değil söz etmek, kendi birim test için kendi mocks oluşturabilmesi için ...


25
^^ Bu. Arabirimleri düzgün kullanıyorsanız, diğerleri yazmayı bitirene kadar uygulamalara ihtiyacınız olmamalıdır.
Robert Harvey,

13
Ve Robert'in yorumunu daha da ileri götürmek için, özellikle birden fazla insan arasında bölünmek üzere tasarlanmış bir projede arayüzleri düzgün bir şekilde kullanmıyorsanız, iyi bir zaman geçirmeyeceksiniz ...
corsiKa

1
Java'nın başlık dosyalarının olmaması utanç verici. C / C ++ dünyasında API'lerinizi hesaplayabilir ve önce tüm başlıklarınızı yazabilirsiniz; uygulama eksikliği sonra bağlayıcı için bir sorun haline gelir. (Hafif bir sadeleştirme, ABI'nin sadece bağlayıcı bir konu olması için de sabit kalması gerekiyor).
Wes Toleman

16
@WesToleman Eğlenceli, Java ile ilgili en sevdiğim şeylerden biri, başlık dosyalarına sahip olmaması. Robert ve corsiKa'nın bahsettiği “arayüzler” bu rolü mükemmel şekilde dolduruyor. Önce API'lerinizi hesaplarsınız, arayüzleri yazarsınız ve somut bir uygulama eksikliği derleyici için bir sorun değildir.
GrandOpener,

1
@WesToleman Bu sizin için iyi mi çalışıyor? Kulağımda su damlası stiline çok benzeyen sesler var ve benim tahminime göre bu "önemli parametreyi" yanlış kullandığınızı fark ettiğinizde arayüzü daha da güncellemeniz gerekiyor.
netigger

6

Sizin durumunuzda, bu işlevin sorumluluğunu üstlenecek ekip üyesiyle konuşacağım. Bu işlevin gelişimini öncelik sırasına koyacak bir konumda olabilirler, böylece onu daha erken kullanmaya başlayabilirsiniz.

Dördüncü seçeneğinden uzak dururum. Tüm kodunuzu yazdınız ve dediğiniz gibi, artık sizin probleminiz olduğunu düşünmüyorsunuz. İş arkadaşınız daha sonra işlevin uygulamasını yazar ve artık onların sorunu olarak görmez. Aslında yazdığınız kodun doğru çalıştığını kim test edecek?


Bir veya daha fazla arayüzle sonuçlanacak olan bu fonksiyon için API'yi sormalısınız . Bu arayüzü birlikte kullanmak iyi bir fikir olabilir, çünkü bu arayüzü kullanmanız gerekecek, böylece girdilerinizi temel alarak ilk test senaryolarını tasarlayabilirsiniz. Asıl uygulama daha sonra gelebilir (olası API değişiklikleri dahil)
Thorbjørn Ravn Andersen
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.