İnceleme sırasında başkalarının kötü tasarlanmış kodunda ustaca iyileştirmeler önerebilir miyim?


130

Temiz kod ve kod işçiliğine inanan biriyim, ancak şu anda bunun öncelikli olarak kabul edilmediği bir işteyim. Bazen bir katılımcının kod bir durumda kendimi bulmak delik deşik işlevsel ve hiçbir hata çok az içeren olsa dağınık tasarımı ve gelecekteki bakım için çok az endişe ile.

Değişmesi gereken çok şey olduğuna inandığınız ve bir son tarihin geldiğine inandığınızda kod incelemesinde iyileştirmeler önerme konusunda ne düşünüyorsunuz? Son gelişmelerden sonra yapılacak iyileştirmeleri önermenin, yeni özellikler ve hata düzeltmeleri geldikçe, tamamen önceliklerinin kaldırılacağı anlamına gelebileceğini unutmayın.


25
Öncelikle, görüşünüzün öznel olmadığından emin olun. Oldukça sık geliştiriciler başkalarının kodunu yazarlar çünkü başka bir stil veya lehçe isterler. Aksi takdirde, birer birer iyileştirmeler sunmaya çalışın.
Coder

Bir çok yazılım geliştirme işleminin tradeoffasyonlarla ilgisi olduğu ve çoğunlukla tasarıma dayalı kod işçiliğinden bahsettiğim için, çoğu kod inceleme yorumunun öznel olduğu ortaya çıkıyor. Bu yüzden “ iyileştirme önerileri hakkında nasıl gidersiniz?” Diye sordum . Kesinlikle bir şeyi dikte etmem benim hedefim değil.
Yony

5
Soru, test tamamlandıktan sonra kod incelemesi gerçekleşiyormuş gibi görünmesini sağlar . Eğer durum buysa, ya test zamanını boşa harcıyorsunuz (herhangi bir değişikliğin tekrar test edilmesi gerekiyor) ya da kod incelemesi sonucunda değişiklik yapılmasını zorlaştırıyorsunuz (neden zaten çalışan kod değiştirilsin?).
vaughandroid

3
@Baqueta - Neden kodunu gözden geçiriyor ve henüz işe yarayıp yaramadığını bilmiyorsanız neden birden fazla kişinin zamanını harcıyorsunuz?
Dunk,

4
@Baqueta Açıkçası farklı tür testler var. Eğer faydalı olacaklarsa, kod incelemeleri, ilk testlerden sonra, birim testleri (böylece işe yaradığını biliyorsunuz) ve son testlerden önce, kullanıcı kabul testleri gibi (değişiklikler bir bürokrasi yığınına yol açmaz) yapılmalıdır. .
Caleb,

Yanıtlar:


160
  1. Motivasyonunuzu iki kez kontrol edin. Kodun değiştirilmesi gerektiğini düşünüyorsanız, neden değiştirilmesi gerektiğini düşündüğünüz bir nedeni açıklayabilmeniz gerekir. Ve bu sebep “farklı yapardım” ya da “çirkin” den daha somut olmalı. Önerilen değişikliğinizden kaynaklanan bir faydayı işaret edemiyorsanız, değiştirmede zaman harcamanın (yani para) fazla bir anlamı yoktur.

  2. Projedeki her kod satırı, korunması gereken bir çizgidir. Kod, işin yapılması ve kolayca anlaşılması gereken ve devam etmemesi gerektiği sürece olmalıdır. Açıklıktan ödün vermeden kodu kısaltabilirsiniz, bu iyi. Netliği arttırırken yapabilirsiniz, bu çok daha iyi.

  3. Kod somut gibidir: bir süre oturduktan sonra değiştirmek daha zordur. Yapabildiğiniz takdirde değişikliklerinizi önceden yapın, böylece değişikliklerin maliyeti ve riski en aza indirilir.

  4. Her değişikliğin maliyeti vardır. İşe yarayan ve değiştirilmesi gerekmeyen kodların yeniden yazılması, boşa harcanabilir. Dikkatinizi daha fazla değişebilecek veya proje için en önemli olan bölümlere odaklayın.

  5. Form işlevi izler ve bazen tam tersi olur. Kod dağınıksa, aynı zamanda hata içerme olasılığı daha yüksektir. Bu hataları arayın ve kodun estetik çekiciliği yerine hatalı işlevsellik eleştirin. Kod daha iyi çalışması iyileştirme önerileri ve doğrulamak için kod operasyon kolaylaştırır.

  6. Tasarım ve uygulama arasındaki farkı ayırt eder. Berbat bir arayüze sahip önemli bir sınıf, kanser gibi bir projeye yayılabilir. Sadece projenin geri kalanının kalitesini düşürmekle kalmayacak, aynı zamanda hasarın onarımını da zorlaştıracak. Öte yandan, iyi tasarlanmış bir arayüze sahip, ancak berbat bir uygulamaya sahip bir sınıf çok da önemli olmamalıdır. Daha iyi performans veya güvenilirlik için sınıfı her zaman yeniden uygulayabilirsiniz. Veya, doğru çalışıyorsa ve yeterince hızlıysa, onu yalnız bırakabilir ve kabinin iyi kapsüllenmiş olduğunu bilerek güvende hissedebilirsiniz.

Yukarıdaki tüm noktaları özetlemek için: Önerilen değişikliklerin değer kattığından emin olun.


3
Aslında, endişelerinizi 'satmak' ile gelir. Belirtildiği gibi: faydaları ve katma değeri belirtin. Bu benim deneyimimde de zor bir iş.
Wivani

4
Kendi motivasyonunuzu anlamak sadece satış yapmak değildir. Bazı teknikleri neden diğerlerinden değil, neden hoşunuza gittiğini anlamanız gerekir; böylece kuralların ne zaman geçerli olduğunu ve ne zaman olmadığını görebilirsiniz. Bir çok konu, yanlış durumlarda doğru teknikleri uygulayan deneyimli programcılardan kaynaklanmaktadır.
Jørgen Fogh

1
Puanlarınız golf
oynamak

2
Tüm cevap için +1 ama özellikle "Kod
dağınıksa

2
Noktaya (6) göre olan sonuç, ilginç bir şekilde, arayüz kalitesinin uygulama kalitesinden daha önemli olduğu görülüyor
Brad Thomas

16

Yeniden yapılanma yoluyla değer katmak için tatlı bir nokta var. Değişikliklerin üç şeyi başarması gerekir:

  • değişmesi muhtemel kodu geliştir
  • netliği artırmak
  • en az çaba

hususlar:

  1. Temiz kodun yazmanın ve sürdürmenin daha ucuz olduğunu ve üzerinde çalışmanın daha eğlenceli olduğunu biliyoruz. İşiniz bu fikri şirketinizdeki insanlara satmak. Bir satıcı gibi düşünün, kibirli bir sersem gibi değil (yani, benim gibi değil).
  2. Kazanamazsın, sadece daha az kaybedebilirsin.
  3. Sadece güzellik değil, gerçek değer katmaya odaklanın. Kodumun hoş görünmesini seviyorum ama bazen bu ucuz meseleleri daha fazla kabul etmek zorunda kalıyorum.
  4. Tatlı noktayı bulmanın iyi bir yolu, İzci İlkesi'ni izlemektir - bir kod alanı üzerinde çalışırken, daima onu bulduğunuzdan daha iyi durumda bırakın.
  5. Küçük bir gelişme, iyileşme olmamasından iyidir.
  6. Otomatik araçlardan iyi yararlanın. Örneğin, sadece biçimlendirme biraz temizlemek araçları yapabilir dünyayı farkının.
  7. Yanlışlıkla kod netliğini artıran diğer fikirleri de satabilirsiniz. Örneğin, birim testi, büyük yöntemlerin daha küçük yöntemlere ayrıştırılmasını teşvik eder.

5
Otomatik alet kullanımı için +1. Şaşırtıcı bir şekilde, pek çok dükkanın geliştiricilerin araç setinin neye benzediğini görecek kadar önemsemediği görülüyor. Sadece kaynak kontrolünüz olduğu için, bir editör ve bir derleyici, araç setinizi tamamlamaz.
Spencer Rathbun

4
@Spencer: Daha fazla katılamadım. Aynı zamanda, sahip oldukları araçları kullanmayan geliştiriciler tarafından - fonksiyonun ya da faydaların ya da sade tembelliklerin cehaletiyle sinirleniyorum. Çoğu modern IDE, yalnızca birkaç tuşa basmayı gerektiren yerleşik bir kod biçimlendirme işlevine sahiptir - ancak bazı geliştiriciler kullanmaz.
Kramii

2
Doğru. Ama ben mağazanın altında bunu umursamadığını da ekliyorum. Cihazlarınız mevcut araç setindeki bazı fonksiyonlar hakkında bilgi sahibi olmayabilir, özellikle de yönetim standartlar oluşturmak için hiç uğraşmadıysa. İkincisi, pek çok IDE, çok büyük özelliklere sahip, çok büyük. Birkaç yıldır vim kullanıyorum ve hala onunla yapabileceğim farklı şeyleri bilmiyorum. Beni Visual Studio'ya bıraktıysanız, araştırmam gereken zamana kadar fuctionality'in% 90'ını dokunmadan bırakırdım. O zaman hatırlamayabilirim.
Spencer Rathbun

14

Kod ciddi bir hata olmadan çalışıyorsa ve önemli bir son tarih (P&L veya kurumsal PR etkilerinde olduğu gibi) yakınsa, büyük değişiklikler gerektiren iyileştirmeler önermek için çok geç. Kodda yapılan iyileştirmeler bile proje dağıtımında risk oluşturabilir. İyileştirme zamanı, kod tabanının gelecekteki sağlamlığına yatırım için daha fazla zamanın olduğu projede daha önceydi.


Eğer orada bittiyseniz, o zaman bu noktaya götüren işlemler muhtemelen başarısız olmuştur.
Tim Abell

9

Kod incelemesi 3 amaca hizmet eder:

  1. Hata kontrolü

  2. Kodun nerede geliştirilebileceğini kontrol etme

  3. Kodu kim yazdıysa, öğretme aracı.

Tasarım / kod kalitesini değerlendirmek elbette # 2 ve # 3 ile ilgilidir.

# 2'ye kadar:

  • Yapılması gereken değişikliklerin ve giderilmesi gereken maliyetlerin faydalarını ÇOK açıkça belirtin. Herhangi bir iş kararında olduğu gibi, bunun maliyet / fayda analizi ile ilgili olması gerekir.

    Örneğin, "X'in tasarıma yaklaşımı, Z'yi değiştirirken Y böceğinin ortaya çıkma olasılığını önemli ölçüde azaltacaktır ve bu kod parçasının her 2 haftada bir Z tipi değişikliğe uğradığını biliyoruz. Hata Y + 'dan kaynaklanan üretim kesintisini işlemenin maliyeti sabitleme ve featires sonraki seti teslim edilememesinden ötürü düzeltme + fırsat maliyeti bırakmadan + olduğu $A, şimdi kodu temizlik maliyeti ve fırsat maliyeti (geç nakliye ör fiyat ya da daha az özelliklere sahip) oysa $Bşimdi, değerlendirmek - daha doğrusu ya. Takım liderinize / menajere sahip olun - $Avs değerlendirin $Bve karar verin.

    • Bu, akıllı ekibin bunu etkin bir şekilde yönetmesine yardımcı olacaktır. Örneğin, TAM bilgileri kullanarak rasyonel bir karar verecekler.

    • Bu (özellikle bunu iyi söylerseniz) SİZİN statünüzü yükseltir - örneğin, daha iyi tasarımın faydalarını görecek kadar zeki biri olacaksınız ve işle ilgili düşünceleriniz olmadan dini olarak talep etmeyecek kadar akıllısınız.

    • VE, Z'nin gelmesi muhtemel durumunda, bir sonraki öneri grubundan bu kadar daha fazla kaldıraç elde edersiniz.

# 3’e kadar:

  • ÇOK açıkça belirsiz bir şekilde "düzeltmeleri gerekir" hatalarını / sorunlarını "" Bu en iyi uygulamadır ve gerçekten kaynaklarımızı ayırabilirsek düzeltmemiz gerekir - ekli pro / con analizine bakın "tasarım iyileştirmeleri (yukarıda belirtilenler için 2'ye bakınız) vs" Bunlar, kod sağlamlığınızı geliştirmenize yardımcı olacağını düşündüğüm genel yönergelerdir, böylece "isteğe bağlı değişiklikleri" daha kolay bir şekilde koruyabilirsiniz. Lütfen ifadelere dikkat edin - "kodunuzu istediğim gibi yapmak" - "böyle yaparsanız, SİZİN a, b, c" avantajları elde edersiniz. Ton ve yaklaşım önemlidir.

2
# 3'te, kod incelemeleri yalnızca kodun yazarını öğretmek için değildir. İnceleme, daha az deneyimli geliştiricilerin öğrenmesi ve takıma yeni giren deneyimli programcıların kodlama standartlarını hızlandırması için iyi bir yol olabilir. Bir grup olarak sorunların tartışılması, ürünle ilgili görüşlere de yol açabilir.
Caleb

1
@Caleb - iyi nokta. TOO'ya pek çok puan vermek istemedim, bu yüzden bu ana hat dışında düzenlendi, ancak bu hala geçerli bir nokta.
DVK

# 4 çapraz eğitim geliştiricileri yeni özellikler üzerine
Juan Mendes

1
# 5 - Kod değerlendirme asal amacı tasarım belge (doğru) uygulamaya konmuştur sağlamaktır
Mawg

8

Savaşlarınızı seçin, bir son tarih geliyorsa hiçbir şey yapmayın. Bir dahaki sefere bir başkası kodu gözden geçiriyor veya sürdürüyor ve onunla sorun yaşamaya devam ediyor, daha sonra bir ekip olarak kodu gözden geçirirken daha fazla sorun yaşamayacağınız bir kod olarak kod kalitesine daha fazla odaklanmanız gerektiği fikrine yaklaşıyor.

Fazladan bir çalışma yapmadan önce değeri görmelidirler.


5
Her zaman ufukta son tarihler değil mi?
FreeAsInBeer

8

Yorumuma her zaman "Yapacağım" ile başladım, ki bu da benimkinin pek çok görüşlerden biri olduğunu gösteriyor.

Ben de her zaman bir sebep içeririm.

" Ben istiyorum bir yöntem haline bu bloğu ayıklamak çünkü okunabilirliği."

Her şey hakkında yorum yapıyorum; büyük ve küçük. Bazen bir değişiklik hakkında yüzden fazla yorum yapıyorum, bu durumda çift programlama da öneririm ve kendimi kanatlı olarak öneriyorum.

Nedenlerle ortak bir dil kurmaya çalışıyorum; okunabilirlik, kuru, SRP, vb

Ayrıca Temiz Kod ve Yeniden Yönlendirme üzerine bir çalışma hazırladım, meslektaşlarıma niçin ve nasıl tuttuğumu açıkladı. Şimdiye kadar üç kere yaptım ve kullandığımız bir danışmanlık firması onlar için tekrar tutmamı istedi.

Fakat bazı insanlar zaten dinlemiyor. Sonra rütbe çekerek bıraktım. Ben tasarım lideriyim. Kod kalitesi benim sorumluluğumda. Bu değişiklik şu anki durumunda saatimden geçmeyecek.

Lütfen yaptığım herhangi bir yorumda geri adım atmaktan daha fazla istekli olduğumu unutmayın; teknik nedenlerden dolayı, son tarihler, prototipler, vb. hala kodlama hakkında daha fazla şey öğreneceğim ve daima akıl dinleyeceğim.

Oh, ve son zamanlarda ben yoktu hangi önemsiz olmayan bir değişiklik gönderilmesi benim takımımda ilk birisine öğle yemeği almak için teklif herhangi yorumunu. (Hey, sen de eğlenmelisin. :-)


5

Bazen kendimi bir akran kodunun dağınık tasarımla ve gelecekteki bakım için çok az endişe duyduğu bir durumda buluyorum, ancak işlevsel ve çok az veya hiç hata içermiyor.

Bu kod yapıldı. Belirli bir noktada, yeniden tasarımları gerekçelendirmek için fazla maliyetli hale gelir. Kod zaten çok az veya hiç hata olmadan çalışıyorsa, bu imkansız bir satış olacaktır. Gelecekte bunu temizlemek ve ilerlemek için birkaç yol önerin. Eğer kod gelecekte kırılırsa, yeniden tasarlamanın değerini tekrar değerlendirin. Asla kırılmaz, ki bu harika olurdu. Her iki durumda da, maliyetin şimdi veya daha sonra aynı olacağı için kumar oynamanın kırılmayacağının mantıklı olduğu noktadır: çekiliş, korkunç bir yeniden tasarım.

Gelecekte yapmanız gereken daha sıkı gelişme yinelemeleri var. Tüm böcekleri ütüleme işi yatırılmadan önce bu kodu gözden geçirebilseydiniz, yeniden tasarımı önermek mantıklı olurdu. Sonlara doğru, kod temelde sürdürülemez bir şekilde yazılmadıkça ve büyük ölçüde yeniden kodlamanın yapılması gerektiğinin farkında değilsiniz ve kodun yayınlanmasından hemen sonra değiştirilmesi gerekeceğinden emin olabilirsiniz.

İki seçenek arasındaki seçim göz önüne alındığında (refaktör veya refaktör yok), hangi akıllı sesin satılacağı gibi düşünün:

Hey patron, programdaydık ve her şeyin çalışmasını sağladık, ama şimdi gelecekte X özelliğini ekleyebilmemiz için bir çok şey yapacağız.

veya

Hey patron, serbest bırakılmaya hazırız. X özelliğini eklemek zorunda kalırsak, birkaç gün daha alabiliriz.

İkisinden birini söyleseydin, patronun şöyle derdi:

X özelliği hakkında kim bir şey söyledi?

Sonuç olarak, bazı teknik kusurları ucuza döndürebilirseniz (erken yinelemelerde) bazı kusurları düzeltemezseniz, mantıklı olabilir. Kaliteli bir kod tasarımına sahip olmak, tamamlanmış bir özelliğe ve son tarihe yaklaştıkça azalan getirilere sahiptir.


Ayrıca YAGNI olarak bilinen c2.com/cgi/wiki?YouArentGonnaNeedIt
Juan Mendes

Şunlar hakkında: "Hey patron, istediğiniz X özelliğini biliyorsunuz, üzerinde çalışmaya başlamadan önce birkaç güne ihtiyacımız var.". O da isterdi. YAGNI, dağınık kod oluşturmak veya kodu dağınık bırakmak için bir bahane değildir. Küçük bir teknik borç büyük bir sorun değil, ancak borçlar geri ödenmeli, ne kadar erken ödeme yaparsanız o kadar ucuz olur.
Thorsal

5

[Bu cevap, ilk başta verilen sorudan biraz daha geniştir, çünkü bu kod incelemelerindeki diğer pek çok sorunun yönlendirmesidir.]

İşte yararlı bulduğum bazı ilkeler:

Özel olarak eleştir, genel olarak öv. Biri kodunda bire bir hata olduğunu bilsin. Parlak bir şey yaptılar veya kimsenin istemediği bir görevi üstlenmişlerse, onları bir grup toplantısında ya da takıma gönderilen bir e-postada övün.

Kendi hatalarını paylaş. Felaket ilk kod incelememin (alınan) hikayesini öğrencilerle ve genç meslektaşlarımla paylaşıyorum. Ayrıca öğrencilere böceklerini çok çabuk yakaladığımı da bildirdim çünkü kendimden önce yaptım. Bir kod incelemesinde bu, şöyle olabilir: "Burada dizin değişkenlerini yanlış anladığınızı düşünüyorum. Dizinlerimi yanlış yaptığım ve veri merkezini düşürdüğüm zaman nedeniyle her zaman kontrol ediyorum." [Evet, bu gerçek bir hikaye.]

Olumlu yorumlar yapmayı unutmayın. Kısa bir "güzel!" ya da "temiz hile!" Küçük ya da güvensiz bir programcının gününü yapabilir.

Diğer kişinin zeki olduğunu ama bazen dikkatsiz olduğunu varsayalım. Söylemeyin: "Eğer gerçekten geri döndürmezseniz, arayanın dönüş değerini almasını nasıl beklersiniz?" De ki: "Geri dönüş bildirimini unuttun gibi görünüyor." Unutma ki, ilk günlerinde berbat bir kod yazdın. Birinin bir keresinde dediği gibi, "Bir yıl önceki kodunuzdan utanmazsanız, öğrenemezsiniz."

İşyerinde olmayan arkadaşlar için alaycı / alaycayı koru. Kod epeyce kötüyse, başka bir yerde şaka yap. (Bir programcı arkadaşla evlenmeyi uygun buluyorum.) Örneğin, aşağıdaki çizgi filmleri (veya bunu ) meslektaşlarımla paylaşmayacağım .

görüntü tanımını buraya girin WTF'lerinizi / dakika


4

Bir kaşık dolusu şeker ilacın düşmesine yardım ettiğinde ve yanlış olan, kısaca açık bir şekilde ifade edilebilir - 20 şey yanlış değil - istediğim herhangi bir hisseye yatırım yapmadığımı, istediğime yatırım yapmadığımı öneren bir şekilde öneriyorum duyulmak. Genellikle böyle bir şey:

Acaba daha iyi olur mu ...

veya

Bir anlamı var mı ...

Nedenler oldukça açıksa, onları belirtmiyorum. Bu, diğer insanlara, önerinin bazı fikri mülkiyet haklarını üstlenme şansını verir:

“Evet, bu iyi bir fikir çünkü < burada bariz nedeniniz >.”

Eğer gelişme oldukça açıksa, ancak beni düşünmemem için aptal gibi göstermeme neden olacak kadar fazla değilse ve bunu yapmanın nedeni dinleyiciyle paylaşılan bir değeri yansıtıyorsa, o zaman bazen bunu önermiyorum bile:

Acaba bir yolu olup olmadığını merak ediyorum ... <burada paylaşılan değer beyanı>

Bu sadece gerçekten dokunaklı insanlarla başa çıkmak için - akranlarımın çoğunda, sadece sahip olmalarına izin verdim!


1
"Acaba daha iyi olur mu acaba ..." demem nadirdir. Sadece emin olmasam - ki bu durumda yazarın daha iyi olup olmayacağını düşünmekte özgürdür ve değişmekte ya da etmekte özgürdür. Genelde "X yapardım" derim. (Bazen “X'i yapardım ama yaklaşımın daha iyi olurdu” diyeceğim). Bunun anlamı X'in daha iyi olduğunu düşünüyorum ama aynı fikirde değilsiniz. Ya da "bu işe yaramaz" ya da "bu tehlikeli" diyeceğim ve siz onu değiştirseniz iyi edersiniz. Bazen "bu işe yaramaz" deniyor ve genellikle koda baktım, "Oh bok" diyeceğim ve sonra düzeltiyorum.
gnasher729

3

Kod incelemeleri her zaman iyileştirmeler yapmayı amaçlamaz.

Bir projenin sonuna yakın bir inceleme, buradaki durum gibi gözüküyor, herkesin böcekler geldiğinde nereden bakmaya başlayacağını bilmesi (ya da daha sonra yeniden kullanım için uygun olan daha iyi tasarlanmış bir proje için). İncelemenin sonucu ne olursa olsun, hiçbir şeyi değiştirecek zaman yok.

Aslında değişiklik yapmak için projeyi daha önce kodla tartışmalı ve tasarlamalısınız - kod yalnızca olası yaklaşımlar hakkında konuşulduğunda varlığında değişiklik yapmak çok daha kolaydır.


3

Sorunuz "Nasıl kötü tasarlanmış kod incelemesi kodlanır?":

Cevap IMO basit. Kodun TASARIMI ve tasarımın nasıl kusurlu olduğu veya gereksinimleri karşılamadığı hakkında konuşun. Kusurlu bir tasarıma işaret ederseniz veya "gereksinimi karşılamıyorsa" geliştirici kodunu değiştirmek zorunda kalır, çünkü yapması gereken şeyi yapmaz.

Eğer kod "işlevsel olarak yeterli" ve / veya "şartnameye uygun" ve / veya "şartları yerine getiriyorsa":

Bu geliştiriciye bir eşseniz, değişiklik yapmasını "ona bildirmenizi" sağlayacak hiçbir doğrudan güce sahip değilsiniz.

Size kalan birkaç seçenek var:

  1. Kendi kişisel "etkinizi" (dolaylı olan bir "güç" biçimi) ve / veya "ikna edici" olma yeteneğinizi kullanmanız gerekir.
  2. kuruluşlarınızın "kod süreci" grubuna katılın ve "kod bakımı" nı daha yüksek bir öncelik haline getirmeye başlayın.
  3. Kurşunu ısır ve crappy kodunu daha hızlı / daha akıcı bir şekilde okumayı öğren.
    • Bu da sizi daha güçlü bir programcı yapacaktır.
    • Ve crappy kod üzerinde çalışırken crappy kodunu düzeltmek için izin verecektir.
    • Ve bu aynı zamanda daha fazla proje üzerinde çalışmanıza izin verecektir, çünkü birçok projenin işlevsel olan crappy kodu vardır, ama çok fazla crappy kodu vardır.
  4. Örnek olarak kurşun. Kodunuzu daha iyi hale getirin ... ama mükemmeliyetçi olmaya çalışmayın.
    • Çünkü o zaman “son teslim tarihlerine ulaşamayan yavaş adam, her zaman eleştiren ve onun herkesten daha iyi olduğunu düşünen” olacaksınız.

Gümüş mermi olmadığını biliyorum. Her üçünü de kullanmalısınız ve her üçünü de kullanımda yaratıcı olmalısınız.


Keşke # 3'ü öğrenebilseydim, kötü kodla o kadar sinirli olursam, anlamaya çalışmakta bile zorlanıyorum ... sürekli üzerinde çalışıyorum ....
Juan Mendes

Tasarım hatalı mı? Hangi tasarım?
gnasher729

1

Sakıncalı derecede kötü bir tasarım olması durumunda, odak noktanızın enkapsülasyonu maksimuma çıkarması gerekir . Bu şekilde, bireysel sınıfları / dosyaları / alt yordamları daha iyi tasarlanmış sınıflarla değiştirmek daha kolay hale gelir.

Bileşenlerin ortak arabirimlerinin iyi tasarlanmış olmasını ve iç çalışmaların dikkatlice gizlenmesini sağlamaya odaklanın. Ayrıca, Veri Depolama sarmalayıcıları esastır. (Büyük miktarda depolanmış veriyi değiştirmek çok zor olabilir, bu nedenle sistemin diğer alanlarına "uygulama sızması" durumunda, başınız belada demektir).

Bileşenler arasındaki engelleri çözdükten sonra, büyük sorunlara neden olması muhtemel olan bileşenlere odaklanın.

Son teslim tarihine kadar veya sistem "mükemmel" olana kadar tekrarlayın.


1

Birisinin kodunu doğrudan eleştirmek yerine, kod incelemesi sırasında yorumlarımızda kozmoktif olmak her zaman daha iyidir.

İzlememin bir yolu

  1. bu şekilde yaparsak en uygun olur.
  2. Bu şekilde yazmak, daha hızlı çalışmasını sağlayacaktır.
  3. "This" "this" ve "this" yaparsanız kodunuz çok daha okunaklı olacaktır.

Son yorumlarınız gelse bile bu yorumlar ciddiye alınacaktır. Muhtemelen bir sonraki gelişim döngüsünde uygulanacaktır.


0

Kod incelemesi çalışmak için kültür ve gelişim döngüsü ile entegre edilmelidir. X özelliğinin geliştirilmesinin sonunda büyük bir kod incelemesi planlamanın işe yarayacağı muhtemel değildir. Her şeyden önce, değişikliklerin yapılması zorlaşacak ve birinin utanmış hissetme olasılığı yüksektir - bu da faaliyete direnç sağlar.

Taahhüt seviyesindeki yorumlarla birleştiğinde erken ve sık taahhütler vermelisin. Kod analizi araçları bulunduğunda, çoğu inceleme hızlı olacaktır. FindBugs ve PMD gibi otomatik kod analizi / inceleme araçları , büyük bir tasarım hatası sınıfının dışına çıkmanıza yardımcı olacaktır. Ancak mimari düzeydeki sorunları çözmenize yardımcı olmayacaklarından, sağlam bir tasarıma sahip olmanız ve tüm sistemi bu tasarıma göre değerlendirmeniz gerekir.


0

Kod incelemelerinin kalitesini artırın.

İncelenen kodun kalitesinden ayrı olarak, kod incelemesinin kendisinin kalitesi de vardır:

  • Önerilen değişiklikler gerçekten bunun üzerinde bir gelişme gösteriyor mu?
  • Ya da sadece bir fikir meselesi?
  • Çok açık bir şey olmadığı sürece, eleştirmen doğru bir şekilde açıkladı, neden ?
  • Ne kadar zaman aldı? (Aylarca süren incelemeler gördüm; geliştirici tüm çok sayıda birleştirme ihtilafını çözmekle sorumluydu.)
  • Tone?

İyi kalitede bir kod incelemesini kabul etmek, çoğu zaman sorgulanabilen ego tımarından daha kolaydır.


0

Soruyla ilgili dikkat çekici iki konu var, incecik bir şekilde ve son teslim tarihi . Bunlar farklı konular - birincisi iletişim ve takım dinamikleri, ikincisi ise planlama ve önceliklendirme.

Taktiksel olarak . Fırçalanmış ego ve incelemelere karşı olumsuz itirazlardan kaçınmak istediğinizi varsayıyorum. Bazı öneriler:

  • Kodlama standartları ve tasarım ilkeleri konusunda ortak bir anlayışa sahip.
  • Asla geliştiriciyi eleştirmeyin ya da gözden geçirmeyin , yalnızca kodu . “Siz” veya “kodunuz” kelimesinden kaçının, inceleme altındaki kod hakkında herhangi bir geliştiriciden bağımsız olarak konuşun.
  • Gururunuzu, tamamlanmış kodun kalitesine ekleyin , böylece son sonucun iyileştirilmesine yardımcı olacak yorumları gözden geçirin .
  • Talep yerine iyileştirmeler önerin . Anlaşmazsanız her zaman bir diyalog var. Kabul etmiyorsanız diğer bakış açısını anlamaya çalışın.
  • İncelemelerin her iki yöne de gitmesini sağlayın. Yani, gözden geçirdiğiniz kişinin kodunuzu daha sonra incelemesini isteyin. "Tek yönlü" incelemeleriniz yok.

İkinci kısım önceliklendirmedir . İyileştirmeler için birçok öneriniz var, ancak son başvuru tarihi yaklaşmakta olduğundan, yalnızca birkaç başvurusu yapılacak zaman var.

İlk önce bunun olmasını önlemek istiyorsun! Bunu sürekli, artan incelemeler yaparak gerçekleştirirsiniz. Bir geliştiricinin bir özellik üzerinde haftalarca çalışmasına izin verme ve son anda hepsini gözden geçirme. İkincisi, kod incelemeleri ve inceleme önerilerini uygulama süresi, düzenli planlama ve herhangi bir görev için yapılan tahminlerin bir parçası olmalıdır. Düzgün bir şekilde incelemek için yeterli zaman yoksa, planlamada bir şeyler ters gitti.

Ancak, süreçte bir şeylerin yanlış gittiğini varsayalım ve şimdi birkaç inceleme yorumu ile karşı karşıya kaldınız ve hepsini uygulamak için zamanınız yok. Öncelik vermek zorundasın. Sonra ertelerseniz daha sonra değişmesi en zor ve en riskli olanı seçin.

Tanımlayıcıların kaynak kodda adlandırılması, okunabilirlik ve bakım kolaylığı için inanılmaz derecede önemlidir, ancak gelecekte değişmesi de oldukça kolaydır ve düşük risklidir. Kod biçimlendirme ile aynı. Bu yüzden o şeye odaklanma. Öte yandan, kamuya açık arabirimlerin akıl sağlığı, gelecekteki değişimi gerçekten zor oldukları için, en yüksek önceliğe sahip olmalıdır. Kalıcı verilerin değiştirilmesi zordur - ilk önce tutarsız veya eksik verileri bir veritabanında depolamaya başlarsanız, gelecekte düzeltilmesi gerçekten zordur.

Birim testlerinin kapsadığı alanlar düşük risklidir. Bunları daha sonra her zaman düzeltebilirsin. Değil, ama Alanlar olabilir birim test edilmiş alanlara göre daha düşük bir risk vardır olmak olamaz birim test edilmiş olmalı.

Diyelim ki ünite testi olmayan ve harici bir hizmete kodlanmış bir bağımlılık dahil olmak üzere her türlü kod kalitesi sorunu olan büyük bir kod yığınınız var. Bunun yerine bu bağımlılığı enjekte ederek kod öbeğini test edilebilir hale getirirsiniz. Bu, gelecekte testler ekleyebileceğiniz ve daha sonra sorunların çözülmesi için çalışabileceğiniz anlamına gelir . Kodlanmış bağımlılıkla test bile ekleyemezsiniz. Öyleyse önce bu düzeltmeye gidin.

Ama lütfen bu senaryoda ilk sırada yer almaktan kaçının!

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.