Anlamadığınız kod nasıl gözden geçirilir?


25

Şirketimizde gelişmeyi geliştirme rolünü aldım. Başlamak istediğim ilk şey kod incelemeleriydi çünkü bu daha önce hiç yapılmamıştı.

Şirketimizde 3 programcı bulunmaktadır. Ben bir web programcısıyım, bilinen dillerim çoğunlukla PHP, ActionScript ve JavaScript. Diğer 2 geliştirici VB.net'te dahili uygulamalar yazıyor

Birkaç haftadır kod incelemeleri yapıyoruz. VB kodunu anlamakta zorlanıyorum. Bu yüzden ne yaptığını söylediklerinde, çoğunlukla bunun için sözlerini almalıyım.

Yanlış görünen bir şey görürsem fikrimi açıklarım ve bildiğim dillerden birinde nasıl hitap edeceğimi açıklarım.

Bazen önerilerim memnuniyetle karşılanır ancak çoğu zaman " bu dilde bunu yapmanın en iyi yolu budur " veya " bu dile uygulanmaz " veya bu türden benzer şeyler söylenir .

Bu doğru olabilir, ancak dili bilmeden bu taleplerin nasıl doğrulanacağını veya çürütüleceğini bilmiyorum.

Daha iyi kod incelemeleri yapabilmem için olası bir çözümün vb öğrenmek olacağını biliyorum. Vb öğrenmeye gerçekten ilgi duymuyorum (özellikle kendi projelerim için öğrenmeye çalıştığım diğer teknolojilerin bir listesine sahip olduğum için) ve bunu en son çare olarak tutmak istiyorum, ancak bu bir seçenek.

Bana gelen başka bir fikir, ikisinin de C # ile ilgisi var ve ben de öyle. Ben bunlarla ilgisi var çünkü .net ve benimle ilgisi var çünkü bildiğim dillere daha benziyor. Yine de hepimiz için yeni. Hepimizin bir evcil hayvan C # .net projesinde işbirliği yapıp, kodlarını inceleyerek hepimizin yararlarını düşündüm.

Sanırım içeri girip bize bazı kod incelemeleri yapmak için bir danışman da işe alma imkanı var.

Bu durumda ne yapmamı önerirsin?


6
Eğer bulmak zor VB kodunu anlamak için? Emin misiniz? tekrar sormama izin ver, emin misin! :)
Darknight

4
VB öğrenmeye ilgi duymadınız mı? O zaman muhtemelen VB kodunun kod incelemesini yapma görevini reddetmelisiniz!
JacquesB

Yanıtlar:


22

Başka şeyler öğrenme kişisel arzularınız, işiniz için şu anda gerçekten neye ihtiyacınız olduğunu öğrenmek için arka koltukta oturmalıdır. VB.net'i öğrenin. Çok sayıda soru sorarak, dili bildiğiniz zaman anlamadığınız kod inceleme kodunu etkili bir şekilde kodlayabilirsiniz (genellikle dili biliyorsanız ve ne yaptığını çözemiyorsanız, kodun iyi yazılmadığı bir işarettir). niye ya). Ancak kodu anlamadığınızda, yapabileceğiniz en iyi şey, size açıklamalarını sağlamaktır ve açıklamak sürecinde herhangi bir hata göreceklerini umarız. Bunu yaparken bir incelemede kendi kodumdaki hataları bulamadım, ancak kod incelemesinin en etkili yolu bu değil. Kod incelemesi artık işinizin bir parçası, başa çıkın ve etkili bir şekilde yapmayı öğrenmek için neye ihtiyacınız olduğunu öğrenin.

Öğrenirken, bu şekilde söyleme şeklimiz bu dilde yapma şeklimiz olmadığında, kullanmanın iyi bir teknik olduğunu söyleyen bir kaynak göstermelerini sağlayın. Başka bir şekilde değil, bir kod incelemesinde sizi haklı çıkarmak size kalmış. Bu bağlantıları görmeye başladığınızda, dilde daha iyi olursunuz.


5
+1 Öğrenmek istediklerinizden çok, neye ihtiyacınız olduğunu öğrenmek için. Tercihen, her ikisini de öğrenin - dilleri öğrenmek hızlı bir şeydir.
Orbling

1
+1: "Sana göstermelerini sağla" ile ilgili olarak, kibarca bir yolu, kitaplarının olup olmadığını sormak ya da bu ilkelerin açıklandığı yerde sormak, böylece de öğrenebilirsin. Aynı, sadece daha az saldırı. Ve insanlar saldırıya uğramaktan hoşlanmıyorlar.
Joris Meys

@Joris Meys, evet kibarca yapabilir ve yapmalısınız, ancak "çünkü ben söyledim" dediğinde kod geçişlerini onaylayabilmeniz için önce size cevap vermeleri gerekiyor.
HLGEM

1
@Jeff O: Kibarlığı her zaman bir ayrıcalık olarak görmüyorum. Çalışma ortamında, istediğinizi elde etmek için önemli bir araçtır. Ya da sayılması zor bir yoldan bir mesaj almak için. Kibar olduğun için kimse sana isim
diyemez

1
@Jeff O, kibar olmak paspas olmak anlamına gelmez. Nötr tonda profesyonelce sormak demektir. Kaba olmadan bir cevapta ısrar edebilirsiniz. Nezaket, işyerinde asla uygun değildir. Her zaman sevmediğiniz veya sizi sinirlendiren insanlarla çalışmak zorunda kalacaksınız, ancak onlara karşı zayıf davranmak asla uygun değildir. Bunu yaptığınızda, incittiğiniz asıl kişi kendinizdir çünkü diğerleri size olan saygılarını kaybedecek.
HLGEM

13

Aslında, yukarıdakilerin hepsine katılmıyorum. JS / PHP / ActiopnScript ile, bir programlama dilinin ne olduğuna ve nasıl çalıştığına dair temel bir anlayışa sahip olursunuz. Aslında, VB ile JS arasında çok fazla benzerlik olduğunu savunuyorum. Ancak, bu benim amacım değil. Dil konusunda çok yetkin olsanız bile, başkasının düşünme süreçlerini takip etmeye çalışırken bir şeyi gözden kaçırmak kolaydır, bu nedenle incelemenin yapması gereken şey programcının ne yaptığını ve nedenini açıklamak için bir fırsat sağlamaktır.

Bir arkadaşım bir zamanlar bunu "Kapıcı Teorisi" olarak tanımladı: ayrıntıları birine, kimseye, hatta kapıcıya açıklayarak, programcı koddaki herhangi bir zayıf noktayı kendi için açıklıyor; süreci. Bununla birlikte, kodun tamamen ve açıkça açıklanmasını gerektirir (geliştiriciler savunurken yorumlar çalışmaz).


4
+1 Janitor Theory için - genellikle "seslendirme tahtası" olarak adlandırdığım şey, dinleyebilen ve soru sorabilen herkes iyidir, orada dursalar bile yardımcı olur.
Orbling

1
Anahtar, herkesi konuşmaya ve birlikte çalışmaya devam ettirmektir. Takımını savunmaya sokma - hiçbir şey kendileri için çalışan herkesten daha hızlı bir şekilde verimliliği durduramaz.
IA

7

Kısa versiyonu

  1. Kod incelemelerinin hem gözden geçirenin hem de gözden geçirenin öğrenmesi için bir şans olduğunu unutmayın .
  2. Soru olarak ifade geribildirimi.
  3. Bilgi eksikliğinin sizi geribildirim vermekten alıkoymasına izin vermeyin (2 numara yaptığınız sürece).
  4. “Tercih değerlendirmeleri” nden kaçının veya en azından kendi kişisel tercihleriniz olduğunu ve mutlaka kabul etmeniz gerekmediğini açıkça belirtmeye çalışın.
  5. "Koltuk kodu incelemesi" olmak yerine yamalar göndermeyi deneyin.

Uzun versiyonu

Her şeyden önce, kod incelemesinin yalnızca gözden geçirenin öğrenmesi için bir fırsat olmadığını unutmayın. Aynı zamanda gözden geçirenin de öğrenmesi için bir fırsattır. Aslında, yeni programcıların kod incelemeleri yapmaya başlamasını sağlayan ve böylece kod için bir fikir edinebilen birkaç kuruluş duydum.

Bunu göz önünde bulundurarak, genel olarak her zaman yararlı bulduğum bir kod değerlendirme önerisi var, ancak özellikle konumunuzla ilgili. Geri bildiriminizi ifade yerine bir soru şeklinde ifade edin. Başka bir deyişle, "Bu kod berbat!" Demek yerine, "Kod yapmak yerine neden bu şekilde yazdınız ..." diyebilirsiniz. Bu, kod inceleme sürecini daha keyifli hale getirir ve öğrenmenizi de sağlar.

Sizin için sahip olduğum bir diğer tavsiye, bilgi eksikliğinin sizi geri almasına izin vermemektir. Yanlış olarak algıladığınız bir şey görürseniz ve gözden geçirenden el dalgalı bir cevap alırsanız, geri adım atmayın (en azından bilgi eksikliği yüzünden). Unutmayın, bir dilde iyi kod yapan, nadiren başka bir dilde iyi kod yapandan farklı değildir. Evet, bazı dillerin iyi kod yazmanıza yardımcı olacak farklı deyimleri vardır. Ancak bu deyimlerin kendi içinde sona ermekten ziyade bir araç olduğunu anlamak önemlidir .

Her şeyden önce, "tercih değerlendirmeleri" yapmaktan kaçının. Bu, (ve pek çok diğerinin) çok bilinçli bir çaba göstermesi gereken bir şey. Başka bir deyişle, çizgisinde olan değerlendirmeleri yapıyor kaçın "Dedin x , ama ben tercih y ". Şimdi, tercihleri ​​belirtmekte yanlış olan bir şey yoktur, ancak bunları açıkça açıkça belirtmeli ve karşı tarafın aynı fikirde olmadığı konusunda not almalısınız. Bu önemlidir, çünkü dilden dilden farklı olan birçok şey bu kategoriye girer.

Son olarak, dağıtılmış bir sürüm kontrol sistemi kullanıyor musunuz? Yardımcı olabilecek bir şey, kodda neyin yanlış olduğunu fark etmemek yerine, kodu nasıl yazdığınız, test edeceğiniz ve sonra bunun için bir düzeltme eki göndereceğiniz zamandır. Bu, yalnızca bir "koltuk kodu incelemesi" olmak yerine, kodlarını geliştirmekle gerçekten ilgilendiğinizi göstermenize yardımcı olur ve size dili daha iyi öğrenme şansı verir. Artı, "Bunu yapmalısın bence" ile aynı fikirde olmak daha kolay değil, "İşte nasıl yapardım, işte katılıyorsan işte yamalı" dır. Sanırım bunun için mutlaka bir DVCS'ye ihtiyacınız yok , ama kesinlikle yardımcı olur.


"Tercihler" hakkında: Kodu yazdığımı, incelediğinizi ve tercihleriniz nedeniyle değiştirmek zorunda kaldığımı hayal edin. Şimdi ufak bir değişiklik yaptınız, inceliyorum ve tercihlerim nedeniyle her şeyi değiştirmenizi sağlıyorum. Bunun aşırı saçma olduğu açık olmalı.
gnasher729

7

Soruna odaklanmayı kaybettiniz ve kötü bir çözüm buldunuz. Size gelişimi geliştirme görevi verilmiştir ve çözümünüz, dili anlamayan bir kod incelemesinden (kendiniz) sorumlu olan kişiye koymaktır. Kodunuzu kim gözden geçiriyor? Siz dili öğrenene kadar neden birbirinizi inceleyemiyorlar?

Daha acil bir iyileştirme yapmayı seçebilecek başka bir problem alanı olması gerekir. Bu şekilde size sadece duman üflerler ve hiçbir şey düzelmez.

Yeni gelişmeyi, hiçbirinizin anlamadığı bir dile (C #) yönlendirmek, özellikle de eğer herkes onlarla kötü alışkanlıklarını beraberinde getirirse, ödeme yapmak uzun zaman alır.

Tasarıma odaklan (Bu bahsetti.). Geçerli kodu korumakta zorluk çekiyorlarsa, VB için bazı yeniden düzenleme araçlarına bakın. Temel uygulamaların çoğu aynıdır.


5

Gerçekten bilmediğiniz şeyleri 'okuyabiliyorsunuz', ancak yeterince inceleyemezsiniz . C konusunda oldukça yetkinim, C ++ 'ı iyi tanırım, fakat C #' da bir şeyi gözden geçirmeyi hayal etmem.

Bazı şirketler bir kod testinden geçtikten sonra kodunuzu çalıştırmakta ve size neyin yanlış olabileceğini söylemek konusunda uzmanlaştığı için, bir danışmana kadar gitmeniz gerektiğini düşünmüyorum.

Yine de, sonucu yorumlayabilecek dili bilen kişisel geliştiricilere kalmıştır. Örneğin, bir kod gözden geçirici dönüş değerini kullanmadığım için beni kandırdıysa printf(), onlara garip bir şekilde bakar ve ayıklarını sorgulardım, sonra "Tamam, harika, konsola hiçbir şey basılamazsa ne yapabilirim diye sorardım yardımcı ol?"

Göz önünde bulundurmak isteyebileceğiniz şey, patronlarınızla bölümler ve takım liderleri kurma hakkında konuşmaktır; böylece etki alanınızda etkili olabilirken, bir başkasında etki alanında etkili olabilirsiniz.

Yine de, denetim için üçüncü bir taraf kullanabileceğinizi düşünüyorum. Tuzlarına değer veren programcıların çoğu , yarısını sahte olarak bıraksalar bile (benim örneğimde olduğu gibi) meşru kaygılara dikkat edecektir printf().


4

Anlamadığınız bir şey hakkında rehberlik sağlamak, bildiğiniz gibi köre giden köre benzer.

Bir yaklaşım , kod tabanının statik analizine değinecek olan FxCop ve StyleCop gibi tüysüz araçların kullanılmasıdır . Bu, araçlardan oluşturulan raporların tartışılmasında size bir başlangıç ​​noktası sağlayacaktır.

Başka bir yaklaşım, kod incelemelerini tasarım incelemelerine dönüştürmektir. Tasarım daha sık yapılan incelemelerden sonra, kod yazılmadan çok uzun süre önce problemleri çözemez. Eğer bir programcının bir tasarıma sahip olması halinde, onlardan çalışabilecekleri genel olarak yaklaşımlarında çok daha etkilidir ve bu nedenle hatalar azalır. Bir tasarım olmadığı zaman yaklaşımda geçici hale gelir ve kod artan hata sayısıyla karşı karşıya kalır. Tasarım incelemesindeki problemleri kod incelemesine dahil etmeden önce, her birinizin uygulayacağı somut bir tasarıma sahip olduğundan emin olarak yakalayın; UML burada arkadaşınızdır ve umlet gibi araçlar hızlı ve hızlıdır.


4

Kötü haber, kod incelemelerine etkin bir şekilde katılmak için VB'yi öğrenmeniz gerekecek. VB'nin bir tür projede kullanılması da yararlı olacaktır (zorunlu olarak üretim için değil).

İyi haber şu ki, bunu bir kez yaptıktan sonra, öğrendiklerinizin bir kısmı C # 'ya geçtiğinizde hala faydalı olacak.


9
VB okumak, VB bilmek ile aynı değildir . VB'yi eski VB kodunu Java'ya yazabilecek kadar iyi okudum. VB'yi yazamam (ve yazamam). Yeterince VB öğrenmenin orta bir temeli olduğunu düşünüyorum .
S.Lott

1
@ S.Lott - iyi ifade ve herhangi iki rastgele dil için oldukça uygulanabilir.
Tim Post

2
@ S.Lott: Eğer Java yeniden yazmak için yeterince VB okuyabilir, o zaman do VB biliyorum ve yazabilir. Gittiğiniz şeyleri araştırmanız gerekebilir, ancak bu sadece birkaç hafta sürer.
Larry Coleman

@Larry Coleman: VB'yi oldukça iyi tanıdığını tahmin ediyorum. Yazamadım. Gerçekten mi. Bir Python / Java programcısıyım ve VB'nin sınırlamaları ve garipliği beni şaşırtıyor. Çok. Ben sadece sözdizimi ararken olmazdım. Uygun programlar yazamayacak kadar beceriksiz olurdum çünkü böyle düşünmüyorum.
S.Lott

@ S.Lott: Unutma çabalarıma rağmen VB'yi gayet iyi tanırım. Eğer VB'nin tuhaflığı / kısıtlamaları sizin için kafa karıştırıyorsa, bu kod başka bir dile aktarılırken de sorun yaratmaz mı?
Larry Coleman

3

Hakem incelemesi yaparken her zaman saklamanız gereken düşünce:

"BU KODUN BAKIMI SONRAKİ BİRİ!"

Gözden geçirme hazırlığınızın bir parçası olarak bunu yapabilmek için yeterince iyi anlamalısınız ve göreviniz orijinal programcıyı, kodu korumak için yeterince iyi anlamak için gerekenden daha zahmetli kılan eksikliklerin farkında olmaktır. .

VB’de programlayamıyorsanız, kodu koruyamazsınız ve meslektaş yorumcusu olmaya hak kazanamazsınız.


1

Anlamadığınız kodları gözden geçirmemelisiniz, bu sadece yaptıkları garip görünen şeyleri açıklamak zorunda olan geliştiricileri kızdıracaktır.

Yapabilecekleriniz kodlama kurallarını seçer / tanımlar ve kodu bu kurallara göre kontrol eder. Bir şey kurallara uymadığında geliştiriciden açıklama isteyebilirsiniz.

Mevcut yönergeleri seçmekle başlardım (VB.net kodlama standartlarını bilmiyorum ama google bana verdi:

VB .net için stylecop benzeri araçlar kullanın.

Kaynakları NDepend ile analiz edin (döngüsel karmaşıklık, uzunluklar, derinlikler vb. Hakkında kuralları vardır)

Kodun seçilen standartlara uygun olduğunu söyleyebildiğinizde, işlevselliğin doğru olması veya uygun OOP ilkeleri kullanan kod hakkında bir şey söylemez. Ama en azından bir şey.


1

İyi bir kod incelemesi, dili anlamanızı gerektiren şeyler (dilin uygun kullanımı, API'ler ve kitaplıklar, stil, değişken adları vb.) Ve kodun sorunu ne kadar iyi çözdüğü hakkında - iyi yorumlar, uygun mimari, ilgili tasarım kalıplar, tüm hata durumlarını, vb. dikkate alır. Kod incelemeleri yapmaya ilk başladığınızda, ilkine konsantre olursunuz. Görmeleri daha kolay ve alması daha kolay. (örneğin, değişken adlarınızı beğenmiyorum. XXXX stil adlarını kullanmalısınız.)

Kod gözden geçirme, kodun sorunları ne kadar iyi çözdüğüne daha fazla odaklanıldığında daha değerli hale gelir. Şimdi ilk alanda o kadar fazla değer sağlayamadığınız için, nasıl yapıldığına değil, soru sormaya ve sorunun çözümü hakkında öneride bulunmaya odaklanın.

Tabii ki ikisi arasında örtüşme var. VB.NET'i bilmek, örneğin belirli bir durumda belirli bir tasarım modelinin neden iyi bir seçim olmadığı konusunda size tavsiyede bulunacaktır.

Her şeyden önce, bu aşamada mütevazı olun. Değişim süreci zordur. Bir VB.NET gurusu olsanız bile, değişim büyük olasılıkla kolay olmazdı. Kod incelemesini kullanmayan insanlar ilk başta hoşlanmaz. Başkalarının kodunuza bakması zor bir deneyim. Değeri görmek ve etrafta sabır görmek zaman alıyor. Eğer satın aldığınızda harika bir işlem ama zaman alacak.


0

Odağı, koda doğrudan bakmak yerine, daha fazla test olmak üzere değiştirebilir misiniz? Kod incelemelerinden vazgeçme demiyorum, ancak başlangıçta, bu dahili uygulamaların olup bitenlerin kodunu çözmeye yardımcı olacak yeterli testleri yaptırması daha mantıklı olabilir. Buradaki testlerin, bazı fonksiyonlara biraz daha aşina olmanıza yardımcı olabileceği fikri. Bunu sadece alması gereken farklı bir yol olarak görüyorum. Gözden geçirmenin daha sonra geri geldiği ve birkaç bölüm halinde yapılabileceği fikri, bir genel bakış / ön görüşme seansı ve sonra bir parça ara vermenin faydası olabilir. Bu mola ertesi güne kadar ya da iki yaşına kadar olmak, böylece bir gece uykusunu almak isteyen herkes için kodları ya da benzer bir şeyi düşünerek soru sormadan ve bir tartışma yapmadan önce geçirmek için yeterli zaman olabilir.

Tabii zaten testleriniz varsa, bu maalesef anlamlı değildir. Diğer bir düşünce, VB.Net’te bunun özel bir şekilde yapıldığını iddia ettiklerini iddia ettikleri bir örnek vermektir; VB.Net'in bir anlamda nasıl inşa edildiğinin kalbi.


0

VB'nin temellerini öğrenseniz bile, dilin tüm özelliklerini bilmeden bir kod incelemesi yapmak, dilde güvensiz özelliklerin kullanımını tespit etmenize izin vermez.

Python 2'deki input () işlevinin dizge dışı giriş türlerini ayrıştırmayı kolaylaştırmak için geri döndürmeden önce girişi değerlendirdiğini bilmediğinizi varsayalım. Ardından kod, kullanıcının __import__('os').execl('/bin/sh', '/bin/sh')Python işlemini bir kabuğa dönüştürmek için Linux sistemindeki gibi bir şeyi girmesine izin vererek Rasgele Kod Yürütülmesine karşı savunmasız kalır . Bunun yerine, işlenmemiş girdi verilerini elde etmek için raw_input () kullanılmalıdır.

Bir dilin tüm özelliklerinin farkında olmasa da bir kod incelemesi yapmaya çalışmak, yalnızca dilde belirli bir prosedürü gerçekleştirmenin daha iyi bir yolunu gerçekleştirmenizi engelleyemedi; ayrıca zararlı güvenlik kusurlarına yol açabilir.

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.