Bir programcının kod incelemesi yapmanın en iyi yolu nedir?


16

Kod inceleme için oldukça yeniyim, ancak doktora sırasında yıllardır kodlama yapıyorum - bu her zaman iyi bir programcı yapmaz!

İnceleyen kodunuzu değiştirir ve sizinle birlikte satır satır ilerlerse, katılmıyorsanız ne yaparsınız? Bazen X seçimini yaptınız ve hakem bunu Y olarak değiştirdi ve aklınızda Y vardı ama dezavantajlar nedeniyle bunu yapmamaya karar verdiniz, ancak gözden geçiren bu dezavantajların önemli olmadığını iddia ediyor. Anlaşmazlığınızı sözlü olarak ifade etmeli, yoksa söylememeli ve dinlemeli misiniz?

Eleştiriyi kabul etmede iyi değilseniz ve gözden geçiren kuruluşta daha kıdemli bir kişiyse bu zordur. Çok savunmacı olarak karşılaşmak iyi olmaz.



1
bir tartışma var, onun sadece bir yol trafik ise bir inceleme değil
NimChimpsky

@gnat: Bu soru açıkça bir kopya değil. En üst oylara bakın, bu sorunun cevabını kabul edin. Burada bir cevap olarak verilirse, bu soruya cevap vermediği için indirilmiş olurdu .
Michael Shaw


@gnat: Diğer soru, bir incelemede başka birinin kodunun nasıl reddedileceğiyle ilgilidir ve bu, bir incelemede kendi kodunun eleştirisini nasıl ele alacağınızla ilgilidir. Görebildiğim tek benzerlik, her ikisinin de kod incelemelerini içermesidir.
Michael Shaw

Yanıtlar:


19

Doğru, savunma olarak karşılaşmak yardımcı değildir; ama sonra - ikisi de eleştirilmiyor, bu yüzden bunun olduğunu düşünüyorsanız, kod incelemesinin kuruluş içinde daha iyi kod yazmanıza yardımcı olmadığı konusunda endişelerinizi dile getirmelisiniz.

İnceleyen, gerçek uyumsuzluk ve kusurlar için kodu gözden geçirme sorumluluğuna sahiptir, kodunuzu yapacağı şekilde yazmak için bir araç olarak kullanmaz. Bu, gözden geçirmenin bir şeyi nasıl yaptığınızı gözden geçirmek ve bir hata yaptığınız (en iyi yaptığımız bir şey) veya çerçeveyi veya standartları veya "tarihsel nedenleri" anlamadığınız herhangi bir alanı işaret etmek için orada olduğu anlamına gelir. olduğun yerde.

Bu nedenle, bir şey yapmanın birden fazla yolu varsa, kodunuzun alternatif bir şekilde değiştirilmesinin iyi bir nedeni olmalıdır, aksi takdirde size yardımcı olmayacak basitçe yapıcı olmayan karmaşası.

Ayrıca, gözden geçirenin de mükemmel olmadığını unutmayın. Y'nin bunu yapmanın yolu olduğu konusunda bir fikirleri olabilir ve X'in daha iyi olduğunu fark etmemiş olabilirler. Bunu neden X'te yaptığınızı açıklamalısınız. Gözden geçiren kişi sizinle aynı fikirde olabilir ya da Y'nin neden daha iyi bir çözüm olduğunu söyleyebilir - yaptığını bilmediğiniz başka faktörler olabilir.

Kısacası, incelemeler ekip üyelerinin kod değişiklikleri hakkında iletişim kurmasını sağlamanın bir yoludur. Bu yüzden gözden geçirenle bunun hakkında konuş.

Eğer yardımcı oluyorsa, incelenen kodun yazarı olmasanız bile tarafsız bir şekilde konuşun. Her şeyden önce kod şirkete veya ekibe aittir ve ekibin bunu koruması gerekir. Siz sadece onu yazan kişi oldunuz, bu birçok kişinin inandığı kadar önemli bir faktör değil.


7
"İnceleyen, gerçek uyumsuzluk ve kusurlar için kodu gözden geçirme sorumluluğuna sahiptir, kodunuzu yaptığı gibi yazmak için bir araç olarak kullanmaz.": Bunu belirtmek için +1.
Giorgio

+1 "yorumları, ekip üyelerinin kod değişiklikleri hakkında iletişim kurmasını sağlamanın bir yoludur"
Kwebble

20

Bilgisayar kodu yazmak, belirsizlik altında karar vermenin en iyi örneğidir . Her zaman çelişen baskılar vardır ve herhangi bir soruya nasıl karar verdiğiniz, hangi baskıları algıladığınıza ve bunları ne kadar büyük olarak değerlendirdiğinize bağlıdır.

Bu nedenle, bir hakem kararınıza katılmadığı zaman, sizden farklı baskılar / riskler gördükleri veya bazılarını sizden daha büyük / daha küçük olarak gördükleri anlamına gelir. Sen gerekir kesinlikle yapmıyor bu nedenle ilk etapta anlaşmazlık yol açtığını sorunları sürdürür, çünkü bu farklılıklar hakkında konuşun.

İncelemeniz daha üst düzey ise, deneyimleri onlara bu ya da bu riskin pratikte çok ilgili olmadığını doğru bir şekilde söyleyebilir ya da bir tür hatanın kuruluşunuzda uzun bir geçmişe sahip olduğunu bilebilir ve ekstra dikkatli olmaya değer önlemek için. Tersine, gözden geçirenin muhtemelen bilmediği bir şey bildiğinizi düşünüyorsanız, bunu kesinlikle ifade etmelisiniz; sessiz miktarları sizin tarafınızdan vazgeçme görevine düşürmek.

Durumun ele alınmasının en önemli kısmı, tasarım kararlarının eleştirisinin neredeyse her zaman birinin kişiliğine yönelik bir eleştiri olmadığını anlamaktır . (Gerçekten olduğu nadir durumlarda, yeterince yakında fark edeceksiniz ve eğer birisini gerçekten memnun edemezseniz, yaptığınız hiçbir şey fark etmez, bu yüzden en iyi uygulamaları takip etmenin zararı nerede? Bu sadece bilgisayar kodunda yer alan birçok risk ve ödülün farklı algılarına sahip olan farklı insanların bir sonucudur ve modern bilgisayar kodunun ne kadar karmaşık olduğu göz önüne alındığında, bu sadece beklenen bir durumdur. Farklar hakkında konuşmak kod geliştirmeye yardımcı olur ve bu durumda ve gelecekteki durumda sizin işbirliğini geliştirmek.


4

Diğer cevaplar zaten çok iyi bilgiler içeriyor. Gbjbaanb tarafından ima edilen bazı yönleri biraz genişletmek istiyorum (cevabına yaptığım yoruma bakın).

Deneyimlerime göre, kod incelemeleri sırasında farklı geri bildirimler gözlemledim:

  1. "Dürüst olmak gerekirse, bunun yanlış / yetersiz olduğuna inanıyorum ve bu şekilde değiştirmelisiniz." Normalde bu tür geri bildirimleri ciddiye alırım ve önerilen değişikliğe ancak karşı güçlü bir noktaya sahip olduğumu düşünürsem reddedeceğim.
  2. "Çözümünüzü iyi buluyorum, bu alternatifi düşünün, ancak değişikliği kabul edip etmemek size kalmış." Bu tür geri bildirimleri de ciddiye alıyorum: inceleme uzmanları, çözümlerinin daha iyi olduğuna dair güçlü bir görüşe sahip olmasalar bile bir alternatif öneriyor. Bir şey öğrenme fırsatım var ve daha iyi beğenirsem değişikliği kabul edeceğim. Aksi takdirde, kodu benim zevkime göre tutarsanız gözden geçiren Tamam bulur.
  3. "Ben bunu farklı şekilde yapardım, bu yüzden değiştirmek zorundasınız, nokta.", Hatta "Oh, kodunuzu değiştirdim çünkü ...", değişiklik önerilmedi, zaten işlenmiş! Değişiklikle ilgili bazı kısa açıklamalar yapılır, ayrıntılar hakkında tartışmak için çok fazla zaman olmadığına dair ipucu verilir, çünkü bir sonraki göreve geçmemiz gerekir.
  4. Gözden geçiren, kodu geliştirmeyen, ancak sadece farklı yapan küçük önemsiz nitelikte değişiklikler önermektedir. Önerilen değişiklikleri tartışmanız istendiğinde, gözden geçiren siz tükenmeden vazgeçene kadar önemsiz ayrıntılar hakkında uzun tartışmalara girer.

Seçenek 3, 4, 1 ve 2 gibi görünebilir: "Bunu önerdiğim gibi yapmak gerçekten önemliydi." veya "Gerçekten isterseniz değişikliği reddedebilirsiniz." dedi, aslında söylenenlerin tam tersi anlamına geliyor. Gereksiz olduğunu düşündüğünüz değişikliklere karşı çıkmanız durumunda, paylaşılan kod sahipliği bu tutumun bir gerekçesi olarak kullanılabilir: "Kod size ait değil, ekibe ait!" İnceleyen kişi tartışmaya çok açık değilse, tahriş olursa ve çözümünü her ne pahasına olursa olsun zorlamaya çalışırsa, gözden geçirenin niyetinin ne zaman dürüst olmadığını anlayabilirsiniz. Temel olarak zaten karar verdiler ve daha fazla tartışma sadece zaman kaybı.

IMO seçenekleri 1 ve 2, yardım etmeye çalışan, işinize saygı duyurken size bir şeyler öğretmeye çalışan ve aynı zamanda bir şeyler öğrenmeye açık olan dürüst bir gözden geçirenin bir işaretidir. Bu senaryoda, bir gözden geçirenden yapıcı geri bildirim aldığımda çok gururlanmamaya çalışıyorum.

Seçenek 3, 4, bazı güç oyunlarının devam ettiğini öne sürüyor: önemli olan, her ikisini de tatmin eden iyi bir çözüm bulmaya çalıştığımız için değil, kendi yolumda mı yoksa kendi tarzınızda mı yaptığımızdır. Bu, gözden geçirenin egosu ile ilgili olabilir, ancak aynı zamanda onların düşünme tarzlarına uymayan herhangi bir kodu anlayamamaları ile de ilgili olabilir. Normalde kendilerine aşina olmayan ve tüm kod tabanına dayamak isteyen kodlardan rahatsız olurlar.

Durum 3 ve 4 çok sık meydana gelirse, takım çalışması oldukça rahatsız edici olabilir. Böyle bir durumda takımı terk etmeyi düşünürüm.


Kendimi bir 3 veya 4 olarak karşımıza çıkarsam, ya yaptıklarının gerçekten kırıldığını göstermem gerektiğini fark ettim ("Bakın, müşterilerin soyadı boşsa bu aslında başarısız oluyor") veya yazdım önerdiğim çözümün gerçekte değişime değip değmediğini kontrol edin (belki kodum daha okunabilir, ancak daha yavaştır, ya da tam tersi), bu durumlarda, fark önemli olmadığı sürece, normalde değişikliği incelemekle uğraşmayacağım (ya okunabilirlik veya hızda)).
scragar

@scragar: Doğru: Kişi her zaman gerçeklere bağlı kalmaya çalışır. Ancak, bazen yorucu olabilir. Örnek (oldukça kapsamlı bir taahhüt bağlamında): bir std :: dizesini bir QString ile karşılaştırmanız gerekir. Çözümünüz: Std :: string'i QString'e dönüştürün ve karşılaştırmak için QString yöntemini kullanın. Gözden geçirenin değişikliği: QString'i std :: string'e dönüştürün ve karşılaştırmak için std :: string yöntemini kullanın. Sadece orada olduğunuzu göstermek için kodu eşdeğer koda nasıl değiştireceğiniz konusunda sonsuz varyasyonlar düşünebilirsiniz. Yapıcı geri bildirim ile nitpick arasında ayrım yapmak çok önemlidir.
Giorgio

3

Kabul etmediğinizde ne yapmanız gerektiği konusunu ele almak için ...

Bizim konuşmamız, çoğu insanın işaret ettiği gibi gitmenin yoludur.

Bunu zaten yaptıysanız, belki de birden fazla kez kullandığımız kullanışlı bir teknik, bazı alanlarda hala anlaşmazlık varsa, 'evet, yeniden düzenleme yapmak iyi olur -

Bunun için ayrı bir bilet koyabilir miyiz?

Ayrı bir bilet, kodu bazı yerlerde iyi bildiğim korkunç 'karmaşa ve asla devam etmeyin' yerine girmenize izin verir. Bu, çevik ile iyi uyum sağlayarak, mümkün olan en küçük miktarı yapar ve yükü yayar. Bazen yagni başvurur. Bazı durumlarda ürün yöneticisi, müşteriye, son teslim tarihlerine ve kaynaklara değer açısından bu refaktörden daha fazla acil ihtiyaç olduğuna karar verecektir.


1

Kod incelemesi muhtemelen genel olarak iyi bir şeydir, ancak deneyimimden en iyisi, yeni kodlama yönergeleri kullanan yeni ekiplerdeki geliştiriciler için veya önemli hataları düzeltmek için bir araç olarak sunulur, böylece hata yapma riski azalır. İncelemeden daha iyi bildiğinize inanıyorsanız, önerdiği çözümün neden daha iyi olduğunu ve konuyla ilgili görüşlerinizle tartışmanız gerektiğini sormalısınız. Kimse her şeyi en iyi bilmiyor, bu yüzden kod incelemesi her ikisi için de değerli bir öğrenme deneyimi olmalı ya da olabilir.


1

Kod incelemesi, hem gözden geçiren hem de kodlayıcı için potansiyel sorunları yakalamak ve bilgiyi aktarmak için bir fırsattır.

Bir kod inceleyici olarak sorumluluk, olası risk alanlarını, standart uygulamaya uyumsuzluğu, iyileştirmeleri ve aynı kod alanında sadece başka bir bakış açısını vurgulamaktır.

Bu, kodlayıcıların geliştirme sırasındaki kararlarını tartışmadan / anlamadan kodda bir değişikliğe neden olmamalıdır.

İnceleyen kişi değişiklik yapıyorsa, başkalarına iş delege etmekte zorlanabilir, bu da birçok akıllı insanın yapması zordur.

Bir inceleme alan bir kodlayıcı olarak, konuşlandırıldığında olası bir sorundan korunursunuz, yeni bir şey öğrenme şansı verilir ve bilginizi gözden geçirenle paylaşma fırsatı verilir.

Kıdeme bakılmaksızın, düşünme şekliniz bazılarının başına gelmeyen bir çözüm bulabilir, bu nedenle inceleme sadece doğru olduğuna inandığınız şeyi yaparak parlama şansınız olabilir.

Hem kodlayıcı hem de gözden geçiren, onların yanlış olabileceğini kabul ettikleri ve yanlış olmanın uygun olduğunu kabul ettikleri sürece, bir inceleme takımı güçlendiren bir şey haline gelir, çünkü çözüm üzerinde birlikte çalışırsınız.


0

Kodunuzu henüz incelememişsiniz gibi görünüyor :-)

Kod incelemesinin amacı, kodu iyi kalitede almak ve iyi kalitede kodunuz olduğunu bilmektir. Deneyimsiz bir geliştiricinin kodu incelendiğinde, o geliştiriciyi hayal kırıklığına uğratmaktan kaçınarak daha iyi kod yazmayı öğretmek için kullanılabilir.

İnceleyen asla kodunuzu değiştirmemelidir. Kodunuzun nasıl değiştirilmesini istediklerini az çok güçlü önerilerde bulunabilirler ve kodunuzu kabul edip etmemeye karar verebilirler.

Yorumu doğru giderse ben kodunuzu gözden eğer / ne büyük olasılıkla alacak nasıl bazı yorumlar ise ben size öğrenebilirler kod yazmak veya görmezden olur - bunlar ben fikir sahibi şeylerdir ve bir var özgürdürler farklı düşünce. Bölgemde, işlevlerin, değişkenlerin vb. İyi adlandırılması önemli kabul edilir, bu nedenle adlandırmayı iyileştirmek için bazı öneriler alabilirsiniz. Genellikle bu durumda değişiklikler yapmalısınız (bazen bir şey için daha iyi bir isim bularak). Bazen böcek bulurum. Onları düzeltirsiniz. Bazen yaptığım şeylerin hata olduğunu bulurum ve yanılıyorum. Kodun doğru olduğunu görmek zorsa, kodun daha doğru olmasını sağlarsınız. Eğer sadece yanlış anladıysam, sen söyle.

Tasarımın genellikle doğru olmadığını düşünüyorsanız, bu daha önce tartışılmalıdır. Daha sonra, bir değişikliğe ne kadar işin dahil olduğunu göz önünde bulundurarak tasarımınızın yeterince iyi olup olmadığını düşünmeliyiz, yoksa belki de yanılmışım ve tasarımınız daha iyidir. Sonunda anlaşmaya varmalıyız.

Hakem ve hakem kabul edemezse, bir sorunumuz var. Çünkü bu, birimizin ekip çalışması yapamayacağı veya birimizin iyi ya da kötü bir tasarım ya da her ikisini birbirinden ayırt edemeyeceği anlamına gelir. Bu mutlaka sizin hatanız değildir. Ne yazık ki kıdemli ve clueless geliştiriciler var ve bu şirket ve sizin için bir sorun olacak.

Bu olursa, çok, çok düşünün: İyi kurulmuş eleştiriyi kabul etmekte sorun mu yaşıyorsunuz? Bu durumda, tutumunuzu değiştirmeniz gerekir. İncelemenin neden doğru olduğunu görmek için çok deneyimsiz misiniz? Eğer durum buysa, sorun değil. Hakemlere güvenin ve öğrenin. Hakemden daha iyi bildiğinizden emin misiniz? İncelemeyi kabul edin, ancak üçüncü ve güvenilir bir geliştiriciye görüşünü sorun. Kendinizden gerçekten emin olabileceğinizi ve haklı olabileceğinizi unutmayın, ancak kendinizden de emin olabilirsiniz ve yanlış olabilirsiniz.

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.