Bir geliştirici olarak kod incelemesi için hazırlanmak mı?


10

Burada bazı fikirler arıyorum.

Makaleyi okuma kod yorumları Gerçekleştirdi edilmelidir nasıl ve Kod Yorumlar, avantajları nelerdir? çok bilgilendirici olmasına rağmen, aşağıdaki soru hakkında daha fazla açıklığa ihtiyacım var.

Sorum şu,

  1. Hedef geliştirici olarak, bir geliştiricinin kodu incelenmeden önce dahil edebileceği bazı en iyi uygulamaları önerebilir misiniz?

    • Şu anda aşağıdaki yöntemleri uyguluyorum

      • Mantıksal bir akış için PPT
      • Ayrıntılı yorumlar.

Sorun: Yukarıdaki uygulamaları uygulamama rağmen, incelemede yardımcı olmuyorlar. Karşılaştığım sorun, belirli bir mantık söz konusu olduğunda, uygulamayı ve akışı aramaya devam ediyorum ve süreçte çok fazla zaman harcıyorum ve insanların sinirine geçiyorum.

Sanırım birçok geliştirici de yaşadığım şeyden geçiyor olacak.


2
Sadece bir tane: kodunuzda aptalca şeyler yapmayın.
BЈовић

1
ÖPÜCÜK: kod basitse, beyniniz hepsini yönetebilir.
mouviciel

Şirketinizde kod incelemesi yaptığınızda, genellikle toplantıyı kim yönetir? siz mi yoksa çalışmanızı inceleyen bir kişi mi? Ben sormak IMO kod inceleme toplantı gerçekten şeyler ararken hızlı olsa bile bit ve kod parçalarını aramak için zaman harcamak için yer değildir.
DXM

@DXM Cevabınız için teşekkürler. Bu benim TL toplantıyı yönetecekti.
Karthik Sreenivasan

@Karthik: k, bu kısım iyi. Yani sorunuza dayanarak, kod inceleme için hazır olan yüksek kaliteli kodun nasıl yazılacağını ve üretileceğini sormuyorsunuz. Bunun yerine, asıl endişeniz şudur: "Uygulamayı ve akışı aramaya devam ediyorum ve çok fazla zaman harcıyorum". Bunu biraz açıklayabilir misin? TL kodunun önünde ve toplantıyı yönetiyorsa neden arama yapıyorsunuz?
DXM

Yanıtlar:


8

Bu nedenle, OP'nin sağladığı ayrıntılara dayanarak, "X kodunu bulmam veya Y'yi açıklamam istendiğinde, hızlı bir şekilde yanıt verebilmem için kendi kodumu nasıl öğrenebilirim?"

Düşünebileceğim birkaç öneri:

  • Kod yazarken, kendi kodunuzu öğrenmek ve anlamak için zaman ayırmanız gerekir. Bu, TL'nizin o kadar çok kelime ile karşılaşmaya çalıştığı şey olabilir. Mevcut projenin TL'si olarak, son 11 ayda çok sayıda kod incelemesi yaptım ve bazı geliştiricilerin kendi kod tabanımızda veya başka bir yerde "örnek kod" aramak için bir uygulama fark ettim (google , vb ...) ve kopyalayın / yapıştırın. Şahsen, dayanamıyorum çünkü kodları basit birim testlerini geçerken, aslında ne yaptığını anlamıyorlar, bu yüzden hiçbir zaman t Bazı sınır durumları veya oluşabilecek beklenen bir arıza durumu.

  • Önceki ifadenin sonucu olarak, kopyalamanız / yapıştırmanız gerekiyorsa, yalnızca daha önce yazdığınız ve anladığınız kodu kopyalamaya / yapıştırmaya çalışın. Başkalarının fikrini "ödünç almak" kesinlikle sorun değil, ancak bu durumda kodlarını satır satır yeniden yazın çünkü yazarken, ne yaptığına dair daha iyi bir anlayış kazanacaksınız. Harici API'ler kullanıyorsanız, bu API'yı kullanan bir örneğiniz olsa bile, bir referans bulmak ve bu API'nın nasıl çalıştığını öğrenmek için yine de birkaç dakika ayırın. Sadece daha önce çalıştıysa, durumunuzda da işe yarayacağını varsaymayın.

  • Okuyun ve KURU prensibi sevmeyi öğrenin . Kopyalama / yapıştırma için ayarladığınız şey genellikle ortak bir konuma yerleştirilebilir (ayrı işlev, ayrı sınıf, ayrı kitaplık ...)

  • Yukarı Oku ve sevgi öğrenmek KATI ilkelere ve ona iken, inceleme KISS zaten mouviciel bahsettiği hangi. Bu ilkelerin hepsi çok özlü, temiz ve modüler kod üretmeye yöneliktir. İçinde büyük sınıflar ve büyük işlevler varsa, bir şeyler bulmak çok daha zor olacak ve bunun üzerine kodun ne yaptığını açıklamaya çalışın. Öte yandan, SRP'yi takip ederseniz (veya en azından takip etmeye çalışırsanız) ve her sınıfı / işlevi yalnızca bir şeyden sorumlu hale getirirseniz, kodunuz küçük ve okunabilir olacaktır.

  • Temiz Kod'un bir kopyasını alın . Çok güzel bir kitap. Kendinden açıklamalı ve okunması, bakımı ve genişletilmesi kolay kod yazma hakkında konuşur. Okuması kolay bir kod yazma alıştırması yaparsanız, kod incelemelerinde kendi kodunuzu okurken sorun yaşamamanız gerekir. Ve bu komik kısım, insanlardan kendi kodlarını okumalarını ya da sadece değişkenlerin neyi temsil ettiğini söylemelerini istedim ve sadece bir hafta önce bu kodu (yeni değil, yepyeni sınıflar) yazsalar bile cevap veremediler . İyi adlandırma uzun bir yol kat ediyor.

  • Sonuçta sadeleştirme ve yeniden düzenleme, hala çok belirgin olmayan bir tür algoritma gerçekleştirmek zorunda olan bir fonksiyona sahipseniz, zaman ayırın ve bu fonksiyona algoritmayı açıklayan bir yorum bloğu yazın. Bu işlevi 2 ay sonra değiştirmek zorunda olduğunuzda yardımcı olmakla kalmayacak, aynı zamanda bir kod incelemesinde pusuya düşerseniz, yazdıklarınızı kolayca okuyabilirsiniz.

  • Yukarıdaki tüm öğelerden sonra hala başınızı belada mı buluyorsunuz? takıma yeni mi geldiniz ve bir sürü eski kodla mı çalışmanız isteniyor? Bu durumda, TL'niz bir A $$ olabilir ve toplantıdan önce kolay gitmesini ve ilgili herkesin zamanını boşa harcamamasını isteyerek proaktif olabilirsiniz. Yeni insanlar bir takıma katıldıklarında, TL'nin yeni bir platformda, yeni bir üründe, yeni insanlarda, yeni bir ortamda çalışmak yeni bir kişiden çok fazla yoğunlaşacağı için yeterli sabra ihtiyaç duyar ve bu kişi başlangıçta bazı ayrıntıları kaçırır. Tasarlandığı gibi çalışır ve TL'niz bunu kabul etmelidir.

  • Yukarıdaki tüm öğelerden sonra, yine de korkunç kod incelemelerine sahip olduğunuzu hissediyorsunuz. TL'nizle konuşun. Bazen TL kodu sizinle mutlu olduğunda kod gözden geçirme toplantılarının doğası nedeniyle insanlar kendilerini kötü hissederler. Kod incelemeleri yaptığımda amacım neyin değiştirilmesi gerektiğini vurgulamak, değişiklikleri anladığınızdan ve devam ettiğinizden emin olmaktır. Çoğu zaman kibar olmak için zamanım yok ve bazı insanlar savunmaya giriyor ve yorumlarımın her birine cevap vermeye çalışıyor. Bu durumlarda, kod gözden geçirme toplantısı durma noktasına gelir, bu yüzden onları kesme ve devam etme eğilimindedir. Genel olarak, toplantıdan sonra yeni adamlarla süreci anladıklarından ve kişisel bir şey olmadığından emin olmak için konuşurdum. Birkaç kod incelemesinden sonra insanlar genellikle çok daha rahattır.


+1 "anlamadığınız kodu kopyalayıp yapıştırmayın" için. Bu dayanılmaz! Ayrıca "TL ile konuş" için +1
MarkJ

@DXM Sorunun daha ince nüanslarını anlama yeteneğiniz, cevabınızdan bahsetmemek için çok profesyoneldi, çok bilgilendirici ve açıklayıcı. Zihin = Üflemeli!
Karthik Sreenivasan

@DXM Referansınızdan "Öte yandan, SRP'yi takip ederseniz (veya en azından takip etmeye çalışırsanız) ve her sınıfı / işlevi yalnızca bir şeyden sorumlu hale getirirseniz, kodunuz küçük ve okunabilir olacaktır." * SRP'nin ne anlama geldiğini bana söyleyebilir misiniz ? * Burada kod netliği konusunda ilginç bir yazı daha gördüm .
Karthik Sreenivasan

1
@KarthikSreenivasan - Bu bağlamda, bir yöntem veya sınıfın bir şeyden sorumlu olduğu bir uygulama kullanıldı. Örneğin, sayıları toplayan bir yöntem de ortalamayı döndürmemelidir. Basit arama bunu buldu: en.wikipedia.org/wiki/Single_responsibility_principle
Ramhound

10

Uygulamalar farklılık gösterir, ancak benim deneyimime göre:

  • Kod için özel bir şey yapmayın. Kodunun gözden geçirileceğini öğrendiğinizde kodunuzu biraz daha büyütmek doğaldır ve yazım hatalarını ve benzeri açık şeyleri düzeltmenin bir zararı yoktur. Ancak içeri girmeyin ve çok sayıda ayrıntılı yorum eklemeyin veya yalnızca inceleme için planlandığı için kodu başka bir şekilde değiştirmeyin.

  • Kod hazırlanır ve gözden geçirmeden önce gözden geçirenlere dağıtılır. Bu genellikle tarafsız bir üçüncü taraf, muhtemelen kod inceleme kolaylaştırıcısı tarafından yapılır. Yazdırılırsa, kod satırların çok sık sarılmayacak kadar küçük, ancak herkesin kolayca okuyabileceği kadar büyük olmalıdır. Gerekiyorsa, yatay biçimde yazdırın.

  • Kod yazdırılmalı veya satır numaralarıyla gösterilmelidir . Tercihen, sayı bir dosyadan diğerine devam etmelidir. "Satır 3502" ye "foo.c satır 238" den çok daha kolaydır ve sayılara sahip olmak, herkesin bu satırları bulmak için zaman kaybetmeden belirli satırlar hakkında konuşmasına izin verir.

  • Kesinlikle bir kolaylaştırıcı olmalı , btw. Görevi, incelemenin minutia'da sıkışmasını önlemek, kişisel veya ısınmasını önlemek ve incelemenin uzunluğunu kesinlikle sınırlamaktır.

  • Yazar olarak, inceleme toplantısından önce kodu kendiniz gözden geçirmelisiniz. Bunun başka birinin kodu olup olmadığını önereceğiniz değişiklikleri not edin. Bu, birkaç gün içinde bakmamış olabileceğiniz kod hafızanızı hareket ettirir ve ayrıca kendi kodunuza eleştirel bir gözle bakmaya çalışmanıza yardımcı olur. Hem inceleme hem de yazar olarak birkaç inceleme yaptıktan sonra, kendi notlarınızın grubun geri kalanıyla daha yakından eşleşeceğini göreceksiniz.

  • İnceleme sırasında not almaya hazır olun . Bu sizin asıl endişeniz olmamalıdır - başka biri grubun kabul ettiği eylem öğelerini kaydetmelidir, böylece kodu açıklamaya ve geri bildirimleri dinlemeye odaklanabilirsiniz. Ancak, bir eylem öğesi olmayan bazı değerli geri bildirimler aldığınız zamanlar olacaktır ve bu tür şeyleri meydana geldikçe düzeltmelisiniz.

  • Kişisel olmadığını unutmayın. Bir inceleme sırasında savunmacı hissetmekten (ve oyunculuktan) kaçınmak zordur. Yanlış anlaşıldığını düşünüyorsanız kodunuzu açıklamak iyidir, ancak her şeyden çok dinlemeye çalışın.


Bir şey eklerdim: "line 3502" büyük kırmızı bir işaret olurdu. Çok uzun dosyalara sahip olmak kesinlikle kötü bir şeydir.
11:16

2
@VJo: Caleb, satır numaralarının dosyalar arasında devam etmesini önerdi, bu nedenle 3502 satırı aslında foo.c'nin 238 satırıdır.
Heinzi

Dosyalar arasında devam eden satır numarasına katılmıyorum. Bana göre, bu sadece kafa karıştırıcı ve garip. Bulunan herhangi bir sorun varsa, yine de modül (sınıf, dosya, hatta yöntem) tarafından izlenmeleri gerekir. Buna ek olarak, bir kod incelemesi sırasında tüm bir sistemi değil, bir alt sistemi veya hatta birkaç sınıfı veya dosyayı gözden geçirmelisiniz, bu nedenle değişikliklerin nerede olduğunu izlemek çok zor olmamalıdır.
Thomas Owens

1
@ThomasOwens Satır numaraları yalnızca inceleme sırasında incelenen koddaki bir konumu kolayca tanımlamak içindir. "Dosya foo.c, satır 123" kullanmaktan daha hızlı ve daha az hataya açıktır ve OP özellikle kod bulmak için daha az zaman harcamayı ister. Sorunların dosyaya göre izlenmesi gerektiğini kabul edin. IME, incelemeler bir grup sınıfı, belki de iki büyük veya bir düzine küçük sınıfı kapsamaktadır. 3500+ satır aynı anda incelenemeyecek kadar çok - yalnızca sayıların bir dosyadan diğerine devam ettiği noktasını ortaya koymaya çalışıyordu.
Caleb

Eğer organize olursanız, önemli değil. Bana göre, bunun beni yavaşlatacağını hissediyorum. Ben kod değerlendirmeleri ile ilgili oldum ve ben her zaman dosyaları yazdırmak, onları sınıf / dosyaya zımbalamak, ve sonra okumak ve açıklama. Birisi bana nereye bakmam gerektiğini söylemek isterse, bir dosya adı / satır numarası çifti istiyorum - özellikle benim IDE'm her sayfadaki üstbilgi / altbilgideki dosya adını yazdırdığı ve dosya başına satır numaraları.
Thomas Owens

3

Diğer cevaplara eklemek için bir şey daha var: resmi kod gözden geçirenleri daha kolay hale getirmek için gayri resmi kod incelemeleri LOTS yapın ! Örneğin:

"Hey Bob, foo () işlevini nasıl uyguladığımı gösterebilir miyim?" "Hey Steve, bu sınıf şemasına bir göz atabilir ve ne düşündüğünü bana söyleyebilir misin?" "Hey Karen, bu problemi düşünmeme yardım edebilir misin? Sanırım iyi bir çözümüm var, ama yardımını kullanabilirim ..."

Bunu düzenli bir alışkanlık haline getirin. İş arkadaşlarınızı tasarım sürecine erken dahil ettiğinizde:

  • İlişki kurmak
  • Sorun hakkında yeni bilgiler edinin
  • Elinizdeki sorunu / çözümü açıklama yeteneğinizi geliştirin
  • Resmi kod incelemelerinde daha sonra zaman kazanın

Takım oluşturma için +1 ve sorunu açıklama yeteneğinizi geliştirin. Bu gerçekten harika bir fikir!
Karthik Sreenivasan
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.