Bir kod incelemesi öznel mi yoksa nesnel mi (ölçülebilir)?


55

Kod incelemeleri için bazı yönergeler bir araya getiriyorum. Henüz bir resmi işlemimiz yok ve onu resmileştirmeye çalışıyoruz. Ve ekibimiz coğrafi olarak dağılmıştır.

Kaynak kontrolü için TFS kullanıyoruz (görevler / hata izleme / proje yönetimi için de kullandık, ancak geliştirme için Visual Studio 2008 ile bunu JIRA'ya taşıdık ).

Kod incelemesi yaparken aradığınız şeyler nelerdir?

  • Bunlar benim geldiğim şeyler
    1. Zorla FxCop (biz, bir Microsoft dükkan) kuralları
    2. Performansı (herhangi bir araç?) Ve güvenliği ( OWASP - kod tarayıcıyı kullanmayı düşünün ) ve iş parçacığının güvenliğini kontrol edin
    3. Adlandırma kurallarına uyun
    4. Kod kenar davalarını ve sınır koşullarını kapsamalıdır.
    5. İstisnaları doğru ele almalı (istisnaları yutmayınız)
    6. İşlevselliğin başka bir yerde çoğaltılıp çoğaltılmadığını kontrol edin
    7. Bir yöntem gövdesi küçük olmalıdır (20-30 satır) ve yöntemler tek bir şey yapmalı ve yalnızca bir şey yapmalıdır (yan etki yok ve geçici bağlantıdan kaçının -)
    8. Yöntemlerde boş değerleri geçmeyin / döndürmeyin
    9. Ölü koddan kaçının
    10. Ortak ve korunan yöntemleri / özellikleri / değişkenleri belgeleyin

Genel olarak nelere dikkat etmeliyiz?

Gözden geçirme sürecini ölçüp ölçemeyeceğimizi görmeye çalışıyorum (farklı kişiler tarafından incelendiğinde aynı çıktılar üretecek) Örnek: "yöntem gövdesinin 20-30 kod satırından daha uzun olmaması gerekir" derken "yöntem" vücut küçük olmalı ".

Yoksa kod incelemesi çok öznel mi (ve bir gözden geçiriciden diğerine farklılık gösterebilir mi)?

Amaç bir markalama sistemine sahip olmaktır (her bir FxCop kural ihlali için -1 puan, adlandırma kurallarına uymamak için -2 puan, yeniden düzenleme için 2 puan, vb.), Böylece geliştiricilerin kodlarını kontrol ettiklerinde daha dikkatli olmaları gerekir. Bu şekilde, sürekli olarak iyi / kötü kod yazan geliştiricileri tanımlayabiliriz. Amaç, gözden geçirenin inceleme süresini en fazla 30 dakika harcamasını sağlamaktır (bir inceleme konusu olduğunu düşünüyorum; değişiklik kümesinin / revizyonun mevcut mimaride birden fazla dosya / büyük değişiklik içerebileceği gerçeğini göz önünde bulundurarak, vb. Genel fikir, gözden geçiren kişinin kodunu incelemek için günlerini harcamamalıdır).

Geliştiriciler tarafından yazılan iyi / kötü kodları tanımlamak için başka hangi amaç / ölçülebilir sistemi izlersiniz?

Kitap referansı: Temiz Kod: Robert Martin tarafından yapılan çevik yazılım işçiliğinin bir el kitabı .


8
Null geri dönüşünde zararlı olarak kabul edilen nedir? Neden NULL yerine boş diziler döndürmenin genellikle C # gibi üst düzey dillerde daha iyi olduğunu anladım (hataları önlemek için kodu çok daha şık ve kolay hale getirir). Bazen de NULL referansı geri göndermelisin, değil mi?

4
Eğer null döndürmekten kaçınırsak, müşteri / tüketen uygulama / kütüphane yöntemimizi çağırdığında null değerlerini kontrol etmeyi atlayabiliriz. Robert Martin'den Clean Code'dan - Bölüm 7 (Hata İşlemesi) s: 110 "Null değerini döndürdüğümüzde, esasen kendimiz için iş yaratıyoruz ve arayanlarımıza sorun çıkarıyoruz. kontrol

3
Kitabı satın almak istemeyen birine bir sayfa okumak için açıklayabilir misiniz :)? Görünüşe göre çoğu C # programı için

2
İşte, null döndürmenin neden kötü bir fikir olduğunu açıklayan bir blog yazısı. thehackerchickblog.com/2008/10/… . Ve bir tane daha leedumond.com/blog/should-we-return-null-from-our-methods . Bob'un kitabında önerdiği şey, null döndürmek istiyorsak, Null başvuru istisnası atabilir veya bunun yerine bir SPECIAL_CASE nesnesini döndürebiliriz. Yöntem çağrıları zincirleme düşünün this.Foo().FooBar().FooBarBar(); () filanca çağrılırken nesne Foo null dan, kesinlikle "Nesne başvurusu bir nesnenin örneğine ayarlanmadı" önleyebilirsiniz burada döndürdüyse

@SoloBold: Ve sadece işaret etmek gerekirse, onlar sadece kurallardır. (Bazı durumlarda, olabilir) return null için çok zorlayıcı bir neden varsa, o zaman dönen boş bir SPECIAL_CASE nesnesi döndüren daha mantıklıdır

Yanıtlar:


25

Bir incelemede bireyleri derecelendirmek , birlikte çalıştığım en başarılı sistemlere, belki de hepsine aykırıdır. Ancak 20 yıldan fazla bir süredir ulaşmaya çalıştığım hedef, daha az hata ve mühendis başına saat verimlilik artışı. Bireyleri derecelendirmek bir hedef ise, incelemelerin kullanılabileceğini düşünüyorum. İhtiyacı olan bir durumu, bir işçi veya lider olarak hiç görmedim.

Bazı nesnel çalışmalar (Fagan, vb.) Ve birçok popüler bilgelik, akran ilişkilerinin hataları azaltmayı ve verimliliği arttırmayı amaçlayan kod incelemelerini kolaylaştırdığını göstermektedir . Çalışan yöneticiler işçi olarak katılabilir, ancak yönetici olarak olmayabilir. Tartışma noktalarına dikkat edilir, gözden geçirenleri tatmin edecek değişiklikler genellikle iyi bir şeydir, ancak zorunlu değildir. Dolayısıyla akran ilişkisi.

Herhangi otomatik araçlar olabilir daha fazla analiz ya da yargı olmadan kabul - iyi tüysüz C, C ++, Java. Düzenli derleme Derleyiciler, derleyici hatalarını bulmakta gerçekten iyidir. Otomatik kontrollerdeki sapmaları belgelemek, otomatik kontrollerin ince bir iddianamesi gibi geliyor. IMHO, sapmalara izin veren kod direktifleri (Java gibi) oldukça tehlikelidir. Hızlı hata ayıklama için, maddenin kalbine almanıza izin vermek için harika. Kötü bir şekilde belgelenmiş, 50.000 yorum yapmayan bir kod bloğunda bulmaktan o kadar iyi değilsiniz.

Bazı kurallar aptaldır ancak uygulanması kolaydır; Örneğin, ulaşılamadıklarında bile her anahtar ifadesi için varsayılanlar. O zaman sadece bir onay kutusu ve zaman ve para testiyle hiçbir şeye uymayan değerlerle zaman harcamak zorunda değilsiniz. Eğer varsa kuralları , sen gerekecek aptallık , bunlar edilir ayrılmaz bir şekilde bağlantılı . Herhangi bir kuralın yararı, mal olduğu aptallığa değmeli ve bu ilişki düzenli aralıklarla kontrol edilmelidir.

Öte yandan, "Çalıştırır" incelemeden önce bir erdem ya da incelemede savunma değildir. Eğer gelişme şelale modelini takip ettiyse , kodlama% 85 tamamlandığında, karmaşık hatalar bulunup çözülmeden önce incelemeyi yapmak istersiniz, çünkü inceleme onları bulmak için daha ucuz bir yoldur. Gerçek hayat şelale modeli olmadığından, gözden geçirme zamanı bir sanattır ve sosyal normlara eşittir. Kodunuzu gerçekten okuyacak ve içindeki sorunları arayacak olan insanlar katı altındır. Devam eden bir şekilde bunu destekleyen yönetim, fiyatın üzerinde bir inci. Yorumlar checkins- gibi olmalı erken ve sık sık .

Bunları faydalı buldum:

1) Tarz savaşı yok . Açık küme parantezleri nereye giderse, sadece belirli bir dosyadaki tutarlılık kontrolüne tabi tutulmalıdır. Hepsi aynı. O zaman sorun değil. Aynen girinti derinliği ** s ve ** sekme genişlikleri . Çoğu kuruluş, geniş bir alan olarak kullanılan sekme için ortak bir standarda ihtiyaç duyduklarını keşfeder.

2) `Dağınık

   looking

olmayan metin

   line up is hard to read 

içerik için.

BTW, K&R beş (FIVE) alanı belirledi, o yüzden otoriteye hitap etmek değersiz. Sadece tutarlı ol.

3) İncelenecek dosyanın satır numarasına sahip, değişmeyen, halka açık bir kopyası incelemeden önce 72 saat veya daha fazla süre ile belirtilmelidir.

4) Hiçbir tasarım anında. Bir sorun veya bir sorun varsa, konumunu not alın ve devam edin.

5) Geliştirme ortamındaki tüm yollardan geçen testler, çok, çok, çok iyi bir fikirdir. Çok büyük harici veriler, donanım kaynakları, müşterinin sitesinin kullanımı vb. Gerektiren testler bir servete mal olan ve eksiksiz olmayacak testlerdir.

6) ASCII olmayan bir dosya formatı, oluşturma, görüntüleme, düzenleme vb. Araçlar mevcutsa veya geliştirme aşamasında erken oluşturulmuşsa kabul edilebilir. Bu benim kişisel önyargımdır, ancak baskın işletim sisteminin 1 gigabayttan az RAM ile kendi yolundan çıkamadığı bir dünyada, 10 megabayttan daha küçük dosyaların neden bir şey olması gerektiğini anlayamıyorum. ASCII veya başka bir ticari olarak desteklenen format dışında. Grafik, ses, film, çalıştırılabilir ve onlarla birlikte gelen araçlar için standartlar var. Bazı sayıdaki nesnelerin ikili bir temsilini içeren bir dosyanın mazereti yoktur.

Onaylanan kodun bakımı, yeniden yapılandırılması veya geliştirilmesi için, bir grup meslektaşım , başka bir kişi tarafından yapılan incelemeyi , bir teşhirde otururken ve şubeye giriş için bir geçit olarak eski ve yeni bir farklılığa bakarken kullandım . Bunu sevdim, ucuz, hızlı, nispeten kolaydı. Kodu önceden okumamış kişiler için yapılacaklar, herkes için eğitici olabilir, ancak geliştiricinin kodunu nadiren geliştirebilir.

Coğrafi olarak dağılmışsanız, aynı görünen bir başkası ile konuşurken ekranda farklılıkları görmek oldukça kolay olacaktır. Bu değişikliklere bakan iki kişiyi kapsar. Söz konusu kodu okuyan daha büyük bir grup için, birden fazla site tek bir odada hepsinden daha zor değildir. IMHO, paylaşılan bilgisayar ekranları ve squak kutuları ile bağlantılı birden fazla oda çok iyi çalışıyor. Daha fazla site, daha fazla toplantı yönetimi gereklidir. Kolaylaştırıcı olarak bir yönetici burada kalmasını sağlayabilir. Bulmadığınız siteleri oylamaya devam etmeyi unutmayın.

Bir noktada, aynı organizasyon regresyon testi olarak kullanılan otomatik birim testine sahipti. Bu gerçekten güzeldi. Elbette platformları değiştirdik ve otomatik test geride kaldı. İnceleme olarak, iyidir Çevik Manifesto notları, ilişkiler süreç veya araçlar daha önemlidir . Ancak, bir kez inceleme yaptıktan sonra, otomatik birim testleri / regresyon testleri, iyi bir yazılım oluşturmak için bir sonraki en önemli yardımdır.

Eğer testleri "gerekliliklere dayandırabilirsen" dediğin gibi , "Harry ile karşılaştığında" dediği gibi , sahip olduğu şeye sahip olacağım!

Tüm incelemelerde, gereksinimleri karşılamak ve kodlama seviyesindeki sorunları tasarlayabilmek için bir park yerine sahip olmak gerekir . Bir şey park alanına ait olarak kabul edildikten sonra, incelemede tartışma durmalıdır.

Bazen kod incelemesinin donanım tasarımındaki şematik incelemeler gibi olması gerektiğini düşünüyorum - tamamen açık, kapsamlı, öğretici, bir sürecin sonu, sonradan inşa edilip test edileceği bir ağ geçidi. Ancak şematik incelemeler ağırdır, çünkü fiziksel nesneleri değiştirmek pahalıdır. Yazılımın mimarisi, arayüzü ve dokümantasyon incelemeleri muhtemelen ağır olmalıdır. Kod daha akışkan. Kod incelemesi daha hafif olmalıdır.

Birçok yönden, teknolojinin kültür ve beklenti ile ilgili olduğu kadar, belirli bir araçla da ilgili olduğunu düşünüyorum. Kalbi memnun eden ve akla meydan okuyan tüm " İsviçre Ailesi Robinson " / Çakmaktaşlar / McGyver doğaçlamalarını düşünün . Eşyalarımızın çalışmasını istiyoruz . Bunun tek yolu yoktur, 1960'larda AI programları tarafından bir şekilde soyutlanabilen ve otomatikleştirilebilen "zeka" dan daha fazlası yoktur .


Bu, özellikle insanları derecelendirme konusunda iyi bir cevap - bu, bir kod incelemesinin noktası olmamalıdır.
Paddy

25

Tanımladığınız noktaların çoğu yalnızca kod oluşturma veya "yüzey" öğeleriyle ilgilidir:

  • Adlandırma kurallarına uyun
  • Ölü koddan kaçının
  • belge
  • ...

Bütün bunlar otomatik bir araç kullanılarak kontrol edilebilir : bunu izlemek için koddan geçerek deneyimli bir geliştiricinin zaman geçirmesine gerek yoktur.

.NET hakkında hiçbir şey bilmiyorum ama PHP için bu tür şeyleri kontrol etmek için araçlarımız var; .NET'in PHP'den daha "endüstriyel" olduğu söylenirse, bu tür şeyleri kontrol etmek için herhangi bir araç olmadığını duymak beni şaşırttı.


Otomatik araç her ikisini de yapabilir:

  • Her gece çalışan bazı otomatik oluşturma işlemlerine entegre olun
  • Raporlama e-postaları gönder
    • uyarılar (örneğin, bir yöntem 20 satırdan uzun)
    • Hatalar (örneğin, bir yöntem 50 satırdan uzun)

Posta, tüm takıma veya bir testi geçmeyen kodu yapan kişiye ya da bazı raporlama web arayüzlerini (.NET ve PHP ile ilgili aynı notu kullanabilirsiniz) gönderebilir.


Ayrıca, otomatik testlerin , kod üretimde kullanılmadan önce belirli sayıda hatayı tespit etmek için çok yardımcı olabileceğini de eklerdim . Ve otomatikleştirilmiş testler bazı ölçümlerde de yardımcı olabilir sanırım.


Tecrübeli bir geliştiricinin yaptığı kod incelemelerinin ayrıca hakkında konuşmadığınız büyük bir avantajı da var:

  • Deneyimli bir geliştirici, yalnızca kaynak koduna bakarak çok çeşitli hataları algılayabilir (kod incelemeleri yaparken genellikle sık sık hatalar bulurum)
  • Deneyimli bir geliştirici tarafından yapılan bir kod incelemesi , takıma yorum ve öneride bulunmasını sağlayacaktır :
    • Kodda kullanılan algoritmaları anlamaya çalışacak ve muhtemelen daha iyi çözümler önerecektir.
    • Sadece kodu okuyarak, otomatik bir aracın algılamayacağını görebileceğiniz şeyler vardır.

Ancak yalnızca kod biçimlendirmeden daha derine inen bir kod incelemesi için yarım saatten daha fazla süreye ihtiyacınız olacak ...


.Net için bu araç (şu anda sadece iyi C #) StyleCop'tur. code.msdn.microsoft.com/sourceanalysis
Bryan Anderson

15

Kod inceleme konusundaki deneyimlerim, işlerinde kimin iyi ya da kötü olduğuna karar vermek için bir 'önlem' değil, kodu geliştirmek için harcanan bir çaba olması gerektiğidir. Kod incelemeniz sırasında çok fazla açıklama almanızın bir önemi olmazsa, gözden geçirenler daha katı olacaktır, bu nedenle kodu iyileştirmek için önerilerde bulunabilirsiniz.

Teslim edilen kodun kalitesini iyileştirmek için inceleme yorumlarının işlenmesini zorlayın (gözden geçirenin işlenmiş yorumları onaylamasına izin verin) ve ayrıca ilk işleme için bir kalite seviyesi zorlamak için statik kod kontrol araçları kullanın.


2
İşinde kimin daha iyi olduğunun bir karşılaştırması olmasına izin vermeyeceğiniz hakkındaki yorumunuz için +1. Bu moral için kötü olurdu!

2
@KarstenF: Doğru. Ayrıca DeveloperA daha karmaşık bir görevle (daha fazla kod satırı) çalışıyor olabilir; bununla birlikte DeveloperB basit bir görevde çalışıyor olabilir ve daha az puan alabilir (puan ölçeğinde). Hem işlerini / görevleri normalleştirmek için bir yol varken Deva kötü bir iş yaptığını söylemek haksızlık olur

2
Ayrıca bazı geliştiriciler meslektaşlarını itibarsızlaştırmaya çalışabilir.

bu nokta tam açık. Küçük kavramlar (sınıflandırma gibi) bitkinliğe yol açar.
Dan Rosenstark

Bu çok önemli noktada +1. İşleminiz bir sayı üretmeye başlar başlamaz, insanlar sayılarını artırmak için kodlarını oynayacaklar. Örneğin, cezaların / yöntem puanlarının çok düşük olması için birçok satır basit kod yazarlar. Veya tüm zamanlarını mükemmel değişken isimleri bulmak için harcıyorlar. Ve sonra bu politik bir şey haline gelir; çünkü hiç kimse arkadaşlarının kodunda küçük hatalara işaret etmek istemeyecektir; Ah hayır! Kısacası, kalbin doğru yerde, ama kötü bir fikir. Programcılar köpek göstermezler.
leoger

5

Puanlama sisteminizin kötü bir fikir olduğunu düşünüyorum. Amaç ne? İyi ve kötü programcıları belirlemek için? Bu kod incelemesinde yer alan herkes, kod incelemesinde sunulan koda dayanarak belirli bir programlayıcı hakkında bir değerlendirme yapabilir; bu, bazı keyfi özelliklere rasgele değer ataması yapmaktan daha iyidir. İyi ve kötü programlayıcıları tanımlamak istiyorsanız ... programcılara sorun. İnsanların bu değerlendirmeyi aptalca sezgilerinizden daha iyi yapabildiğini garanti ediyorum.

Benim önerim, kod değerlendirmelerini denemek ve iyileştirmektir, böylece insanlar fikirlerini ve fikirlerini yargılayıcı olmayan ve düşmanca olmayan bir ortamda açıkça paylaşırlar. Bunu yapabilirseniz, programcıları değerlendirmek için iyi bir iş yapma iddiasında olan aptal kontrol listelerinize dayanarak programlayıcılar hakkında karar vermekten 100 kat daha iyi bir durumda olacaksınız. Kod programlarında yetersiz kalıyorlarsa birçok programcının kendileri için zaten gururlu ve zor olduğunu düşünüyorum; Zayıf performans için daha fazla 'ceza' yapılmasının genellikle yardımcı olup olmadığını sorguluyorum.


4

Tek tavsiyem , kod inceleme sürecinizi çok katı yapmaktan kaçınmak olacaktır - en önemli şey, kod incelemesinin gerçekten gerçekleşmesi ve ciddiye alınmasıdır .

Süreci ne kadar yorucu ise inceleme uzmanı için kod incelemelerinin gerçekleşmesi ve sadece sıkıntı olarak görülmekten ziyade ciddiye alınmaları olasılığı düşüktür. Ayrıca, kod incelemelerinin gerçek değeri, gözden geçirenin kendi değerlendirmelerini kullanabilmesidir. Otomatik araçlar, FXCop kurallarının geçip geçmemesi gibi şeyleri kontrol etmek için kullanılabilir.


100! Demek istediğim, +1, ama gerçekten, bütün mesele bu değil: kod incelemeleri ve birim testleri (ve diğer şeyler) için daha az. Bu sadece doğrudur çünkü daha fazlası sadece sıfır olana kadar daha fazla olur :)
Dan Rosenstark

4

Genel bir kural olarak, kod incelemesinde makine tarafından yapılabilecek bir şeyi yaparak zaman harcamaktan kaçının. Örneğin, ilk öğeniz "FxCop kurallarını zorlamak" tır, ancak muhtemelen FxCop tarafından da insanlar yapmak zorunda kalmadan yapılabilir.


3

Eğer ölçebiliyorsanız, objektif, ölçülebilir ise, o zaman bir araç yaptırmaya çalışın. Tecrübeli bir eleştirmene ihtiyacınız olan yer, bulanık öznel şeyler içindir.


Aracı yapmak için 100 saat, 1000 kullanılarak kaydedildi.
Dan Rosenstark

3

Önemli olan stil meseleleriyle ilgili birçok iyi yorum yapılmıştır. Bir takım projesinde, tüm kodların tek bir yazar tarafından yazılmış gibi görünmesini sağlamak değerlidir. Bu, ekibin diğer üyelerinin, ortaya çıktıklarında düşmeleri ve sorunları gidermelerini kolaylaştırır. Bu daha geniş hedef için hangi niceliksel önlemleri seçtiğiniz daha az önemlidir.

Ek bir öğe, kodun, sistemin geri kalanı için kararlaştırılmış olan genel mimariyle eşleşmesini sağlamaktır. Benzer sorunların hepsi aynı şekilde çözülmelidir. Uygulama mantığı katmanlar arasında bölündüyse, incelenen kod, sistemin geri kalanının yaptığı gibi işlevselliğini bozuyor mu? Alternatif olarak, incelenen kod sistemin geri kalanında geri çekilmesi gereken yeni bir şey öğretiyor mu? Stil kontrollerinin kodun hepsinin aynı görünmesini sağlaması gibi, mimarlık incelemesi de kodun aynı şekilde çalışmasını sağlamalıdır. Buradaki vurgu yine sürdürülebilirlik üzerinedir. Takımdaki herkes bu koda girmeli ve ne olduğunu hemen anlayabilmelidir.

Sınıflandırma fikri yapımda bir felaket gibi görünüyor, ancak takımınızı en iyi siz tanıyorsunuz. Böyle bir sistem tarafından motive olmaları muhtemeldir, ancak insanların problemleri çözmekten ziyade notları için endişelenmeye başlama ihtimallerinin daha yüksek olduğunu düşünüyorum. Kod incelemelerinin gerçekten değerli yan etkilerinden biri, sundukları mentorluk fırsatlarıdır. Hakem, kodu yazan kişiye mentorluk yaptığı biri olarak davranmalıdır. Bulunan her sorun bir sorun değil, daha bilgili ve sofistike bir ekip üyesi ve genel olarak daha sıkı bir ekip oluşturmak için bir fırsattır.


2

Açıkçası "öznel" şeyleri aslında her şeyden daha çok önemsiyorum. İyi bir kod incelemesinden istediğim, yazarken değil mantığımı kontrol eden biri. Ve kod incelemesi yaparken buna odaklanıyorum.

Almayı sevdiğim genel biçim:

  1. Neyi tamir ediyoruz?
  2. Buna neden olan neydi? (koda bakın)
  3. Nasıl tamir ediyoruz?
  4. Bana yeni kodu göster
  5. Bana kod çalıştığını göster

Bu olmadan, sadece farklara bakmak, küçük konular ya da üslup noktaları hakkında bilgi verme eğilimindedir. Mantığın doğru olup olmadığı, genel olarak kullanılan yaklaşımın iyi olduğu ve çözümün sürdürülüp sürdürülmeyeceği konusunda çok daha fazla endişeliyim.

Örnek olarak, son zamanlarda bir meslektaş tarafından bazı kodlara baktım. Asıl sorun bir FxCop ihlaliydi. Ancak yapılan şey, sürüm numarasını kontrol ederek bir Windows özelliğinin varlığını veya yokluğunu belirlemeye çalışmaktı. Asıl girişim bunun bunun kırılgan bir yoluydu ve gelecekte doğrudan özellik sorgusu ile Windows sku arasındaki eşleştirme gelecekte değişmeyeceğinden, hizmeti sorgulamaktan daha iyi olacağız.


Cevabınızdan net değil: FxCop bu kırılganlığı yakaladı mı, yoksa sen mi?
Dan Rosenstark

2

Siklomatik karmaşıklık (CC) 'fena olmayan' kodu değerlendirmenin bir yoludur.

Yüksek CC olan gerçek kodda, "burada neler oluyor, hatırlamıyorum" faktörü yüksek. Düşük CC kodunu anlamak daha kolaydır.

Açıkçası, normal uyarılar metrikler için geçerlidir.


1
@AfermeraInfo: ha?
Paul Nathan,

1

Kod incelemeleri hem öznel hem de nesneldir. "Yöntem gövdesi 20-30 satır olmalıdır" gibi kurallar özneldir (bazı insanlar 100 satırın iyi olduğunu düşünebilir) ancak şirketiniz 20-30 satırın limit olduğuna karar verdiyse, bu iyi ve bunu ölçebilirsiniz. Bence bu senin karşılaştığın nokta sisteminin harika bir fikir olduğunu düşünüyorum. Belirli kuralların puanlamada daha fazla veya daha az ağırlığa sahip olması gerektiğine karar verdiğinizde periyodik olarak yeniden değerlendirmeniz gerekecektir, ancak herkes kuralları bildiği sürece, iyi bir sisteme benziyor.

Aradığım diğer şeyler:

  • kodun açıklığı - bazen bir satır bir satır veya birkaç satır halinde yazılabilir. Ortalama bir programcının bir kod satırının ne yaptığını anlamaya çalışırken birkaç dakika harcaması gerekmemelidir. O yaparsa, belki kod basit bir şekilde yeniden yazılmalıdır. Bu özneldir, ancak kilit nokta, kodun şirketinizdeki çoğu programcı tarafından derhal anlaşılabilir olması gerektiğidir.
  • fonksiyon giriş parametrelerini kontrol etme - giriş parametrelerinin kabul edilebilir aralıklar dahilinde olup olmadığını kontrol etmek için bir kod olmalıdır. Bu aynı zamanda fonksiyon belgelerine de uymalıdır.
  • tanımlayıcı değişken isimleri - birkaç özel durum dışında (döngü indeksleri, vb.) değişken isimleri tanımlayıcı olmalıdır. Sözleşmelerin adlandırılması vb. İçin bakmak isteyebileceğiniz bir kaynak Kod Tamamlandı.

1

Görünüşe göre çok hızlı bir şekilde detaylandırıyorsunuz. Daha fazla parçalamalısın. Kodu, kalitesi ve özelliklere uygunluğu açısından gözlemlemelisiniz. Her ikisini de ayırmalıydın ve bu hikayenin sonu bile değil ... işte önerim:

Kod kalitesi:

  • Otomatik kontroller:
    • Stilin şekli: adlandırma kuralı doğru mu, kodun tamamı girintili, vb.
    • Verimlilik standardı: bellek sızıntılarını, karmaşıklık kontrolünü, yedek değişkenleri vb. Kontrol edin.
  • Gerçek Akran Değerlendirmesi:
    • Tasarımın içinde basit bir gezinti
    • otomatik kontrollerden sapmaların açıklaması
    • Bakım kolaylığı, bakımın nasıl yapabileceğini ve hepsini nasıl konuşabileceğini konuş
    • Test edilebilirlik: bu kodu test etmek ne kadar kolay? Bir planın var mı?

Özellik uyumluluğu:

  1. Özellik gereksinimlerinin ve gereksinimler ve / veya tasarım incelemesinden bu yana yapılan değişikliklerin gözden geçirilmesi
  2. Gereksinimlerle ilişkili işlevselliği gösterin ve bunları tek tek kontrol edin
  3. Uygulama sırasında karşılaşılan yazılımın diğer yönlerinde (dağıtım planları, altyapı vb.) İlave gereklilikleri tartışın.
  4. Gereksinimlerden sapmaların, eğer varsa, bu noktadan açıklanması.

Kendinizi bir kod incelemesinin bu iki yönü ile başlatabilirseniz, altınsınız.



1

Değişir.

İncelemenin bazı bölümleri kolayca ölçülebilir (FxCop sorunu yok, StyleCop hatası yok, CAT.NET hatası yok , vb.)

Bununla birlikte, stil öznel olabilir - ancak söylediğiniz gibi, daha spesifik olmaya başladığınızda (yöntem> 20 satır olmadan), daha sonra ölçebilirsiniz ve NDepend gibi araçlar bunu otomatik olarak yapabilir. Bazı şeyler asla otomatik olmasa da - son durum kontrolünün yapılması testlerin yapılmasını gerektirir, bu da kod kapsamını getirir ve çoğu durumda% 100 ulaşılmaz bir idealdir. Çoğaltma denetimi otomatik olarak yapmak zordur. Boş kontroller, seninle aynı fikirde olduğumdan emin değilim, ama bunun için NDepend kurallarını veya FxCop kurallarını yazabilirsin.

Ne kadar fazla araç o kadar iyi ve araçlar geliştiricilerin değişiklik yapmadan önce çalışmalarını kontrol etmelerine ve CI sürecinin bir parçası olarak yapılacak kontrollerin yapılmasına izin veriyorsa, inceleme ihtiyacını en aza indireceksiniz.


0

Bir markalama sistemi doğru görünmek için zor geliyor, ancak bir ölçüm aracı olarak kullanmaya değer: ölçemediğiniz şeyi geliştiremezsiniz. Ancak, bazı şeylerin doğru bir şekilde ölçülmesinin zor / imkansız olacağını muhtemelen kabul etmelisiniz. İşin zor yanı her kalitenin kaç puan alması gerektiğidir: örneğin, adlandırma kurallarına uymak 2 puan alırsa, o zaman yöntemleri küçük tutmak için kaç puan?

Belki basit bir kontrol listesi gibi bir şey daha iyi olabilir, böylece kod uygun, kısmen uygun veya belirli bir kaliteye uygun olarak işaretlenebilir. Daha sonra, hangi kalite sorunlarının en sık ortaya çıktığını veya en çok soruna neden olduğunu gördükten sonra kontrol listesine puanlama ekleyebilirsiniz.

Gözden geçirme süreci, haklı gösterilmesi ve belgelenmesi şartıyla, kodun gözden geçirme bölümlerinin başarısız olmasına izin verecek kadar esnek olmalıdır. Bir bileşenin gereksiz yere karmaşık / yönetilemez hale gelmesine neden olan bazı kod kalite standardına kör bir şekilde bağlı kalmak kötü bir fikirdir!


Kaymakam şeyler olur.

0

İnsanların kodlarının daha standartlaştırılmasını istiyorsanız, bazı geliştiricilerin şikayet edeceği gibi "biçimlendirme için zamanlarını boşa harcamadan". ReSharper gibi bir araca yatırım yapın, çünkü biçimlendirme ve diğer yeniden faktoring işlemlerini düzeltmeyi neredeyse otomatik bir işlem haline getirir.


0
  • Bir makine kontrol edebilirse, insanlar bunu yapmamalı.
  • Yalnızca bir kontrol listesi öğesi: Her hata durumu her yerde doğru şekilde ele alınıyor mu?
  • Kaliteyi artırmak ve bilgileri aktarmak için kod incelemelerini kullanın.
  • "Kötü" geliştiricileri tanımlamak için kod incelemeleri kullanmayın.
  • Ego dings, açık noktalardan daha etkilidir.
  • Kısa tutun - 90 dakika ve 500 satır BÜYÜK.
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.