Revizyon kontrolü kullanan mağazalarda 'düzenleyen' satır içi yorumlar norm mu?


17

Mağazamızdaki kıdemli geliştirici, kod her değiştirildiğinde, sorumlu programcının ne yaptığını belirten satır içi bir yorum eklemesi gerektiğinde ısrar ediyor. Bu yorumlar genellikle// YYYY-MM-DD <User ID> Added this IF block per bug 1234.

Revizyon kontrolü için TFS kullanıyoruz ve bana göre bu tür yorumlar satır içi gürültü yerine check-in notları olarak çok daha uygun. TFS, bir check-in'i bir veya daha fazla hatayla ilişkilendirmenize izin verir. Eski, sıklıkla değiştirilmiş sınıf dosyalarımızdan bazıları, 1: 1'e yaklaşan yorum / LOC oranına sahip gibi görünüyor. Gözlerime göre, bu yorumlar kodun okunmasını ve sıfır değeri eklemesini zorlaştırır.

Bu diğer mağazalarda standart (veya en azından yaygın) bir uygulama mıdır?


12
Size katılıyorum, sürüm kontrolündeki revizyon günlükleri bunun için.
TZHX

1
Ekibinizdeki kıdemli geliştirici, sürüm kontrolü yaygınlaşmadan bunu yaptı ve kod kokusunu ortadan kaldırmanın başka bir yere ait olduğunun farkına varmadı. Ona bir bugzilla ve vc sistemi kullanan altı açık kaynaklı proje gösterin, jQuery Kütüphanesi'nin yorumlarında $ .ajax'ın () 4 ay önce jaubourg tarafından yakın zamanda değiştirildiğini ve tüm küçük değişiklikler olduğunu bilmesine gerek olup olmadığını sorun. yüzlerce insanın yaptığı oraya ait. Tüm jQuery kütüphanesi yorumların bir karışıklığı olurdu ve hiçbir şey kazanılmadı!
Gizli Bölüm

1
Aslında, BadThing TM olarak kabul edilen bir kod sahipliği duygusu yaratabileceğinden, kaynak kodda isimsiz yazılı bir politikamız var.
Stephen Paulger

Yanıtlar:


23

Genellikle bu tür yorumları kötü bir uygulama olarak görüyorum ve bu tür bilgilerin SCM taahhüt günlüklerine ait olduğunu düşünüyorum. Çoğu durumda kodun okunmasını zorlaştırır.

Ancak , yine de belirli türdeki düzenlemeler için böyle bir şey yapıyorum.

Durum 1 - Görevler

Eclipse, Netbeans, Visual Studio gibi bir IDE kullanıyorsanız (veya kod tabanınızda başka bir şeyle metin araması yapmanın bir yolu varsa), ekibiniz bazı özel "yorum etiketleri" veya "görev etiketleri" kullanır. Bu durumda bu yararlı olabilir.

Zaman zaman, kodu incelerken, aşağıdaki gibi bir şey eklemek istiyorum:

// TOREVIEW: [2010-12-09 haylem] marking this for review because blablabla

veya:

// FIXME: [2010-12-09 haylem] marking this for review because blablabla

Bunun için görev görünümünde Eclipse'de görebildiğim farklı özel görev etiketleri kullanıyorum, çünkü taahhüt günlüklerinde bir şey olması iyi bir şeydir, ancak bir inceleme toplantısında size bir hata giderme XY'nin neden tamamen unutulduğunu soran bir yöneticiniz olduğunda yeterli değildir. ve geçip gitti. Acil konularda veya gerçekten şüpheli kod parçalarında, bu ek bir hatırlatma görevi görür (ancak genellikle yorumu kısa tutacağım ve taahhüt günlüklerini kontrol edeceğim çünkü bu hatırlatma için buradadır, bu yüzden kodu da karıştırmıyorum çok).

Durum 2 - 3. Taraf Libs Yamaları

Ürünümün üçüncü taraf bir kod parçasını kaynak (veya kitaplık olarak paketlemesi gerekiyor, ancak kaynaktan yeniden oluşturulmuş) bir nedenden dolayı yamalanması gerekiyorsa, yamayı bu "uyarıları" listelediğimiz ayrı bir belgede belgeliyoruz. ileride başvurmak için kullanılır ve kaynak kodu genellikle aşağıdakine benzer bir yorum içerir:

// [PATCH_START:product_name]
//  ... real code here ...
// [PATCH_END:product_name]

Durum 3 - Belirsiz Düzeltmeler

Bu biraz daha tartışmalı ve kıdemli geliştiricinizin istediklerine daha yakın.

Şu anda üzerinde çalıştığım üründe, bazen (kesinlikle ortak bir şey değil) aşağıdaki gibi bir yorumumuz var:

// BUGFIX: [2010-12-09 haylem] fix for BUG_ID-XYZ

Bunu yalnızca bugfix belli değilse ve kod anormal okursa yaparız. Bu, örneğin tarayıcı tuhaflıkları veya yalnızca üründe bir belge hatası olduğu için uygulamanız gereken belirsiz CSS düzeltmeleri için geçerli olabilir. Bu nedenle, genel olarak, dahili sorun depomuza bağlarız, bu da daha sonra hata düzeltmesinin arkasındaki ayrıntılı mantığı ve harici ürünün hatasının belgelerine işaret eder (iyi bilinen bir Internet Explorer 6 hatası için bir güvenlik danışma belgesi veya bunun gibi bir şey).

Ancak belirtildiği gibi, oldukça nadirdir. Görev etiketleri sayesinde, düzenli olarak bunları gözden geçirebilir ve bu garip düzeltmelerin hala mantıklı olup olmadığını veya aşamalı olarak kaldırılıp kaldırılamayacağını kontrol edebiliriz (örneğin, hataya neden olan buggy ürün için desteği düşürdüğümüzde).


Bu sadece: Gerçek bir hayat örneği

Bazı durumlarda, hiç yoktan iyidir :)

Kod tabanımda, başlık yorumunun her zamanki yadda yadda ile bir değişim günlüğü şeklinde olduğu büyük bir istatistiksel hesaplama sınıfıyla karşılaştım: inceleme, tarih, hata kimliği.

İlk başta hurdaya çıkarmayı düşündüm, ancak hata kimliklerinin sadece mevcut sayı izleyicimizin kurallarına uymadığını, aynı zamanda şirkete katılmadan önce kullanılan izleyiciden biriyle eşleşmediklerini fark ettim. Bu yüzden kodu okumaya ve sınıfın ne yaptığını (bir istatistikçi değil) anlamaya çalıştım ve ayrıca bu hata raporlarını kazmaya çalıştım. Oldukça önemliydi ve küçük müşterinin sorunları ve o zamanki menşe müşteri tarafından yayılan çok özel gereksinimlere dayanan özel durumlar ile uğraştığı için dosyayı oldukça korkunç bilmeden düzenlemek için bir sonraki adamın hayatına bakacaklardı. . Sonuç olarak, eğer bunlar orada olmasaydı, bilemezdim. Eğer orada olmasaydı VE sınıfı daha iyi anlamış olsaydım,

Bazen bunlar gibi çok eski gereksinimleri takip etmek zor olabilir. Sonunda yaptığım hala başlığı kaldırmak oldu, ama her suçlayıcı fonksiyondan önce bir blok yorumda gizlice girdikten sonra neden bu "garip" hesaplamalar özel istekleri olarak açıklayan.

Bu durumda hala kötü bir uygulama olarak görüyordum, ama oğlum orijinal geliştiricinin en azından onları yerleştirdiği için mutluydum! Kod yerine açıkça yorum yapmak daha iyi olurdu, ama sanırım bu hiçbir şey daha iyi oldu.


Bu durumlar mantıklı. Giriş için teşekkürler.
Joshua Smith

ikinci durum, kodda bir yama neden sıradan bir kod açıklamasıdır. ilk durum geçerli bir durumdur: sadece kodun bitmediğine veya o kısımda yapılacak daha fazla iş olduğuna dair bir açıklama.
Salandur

İşyerindeki kıdemli geliştirici (ben), değişikliklerin yazılım yapılandırma yönetimi sisteminizin taahhüt yorumlarında olduğunu söylüyor. SCM ve hata izleyicileriniz birbirine bağlandı, değil mi? (google SCMBUG) Otomatikleştirilebilecekleri manuel olarak yapma.
Tim Williscroft

@Tim: Cevabın ilk satırında belirtildiği gibi, sana katılıyorum. Ancak belli olmayan durumlarda, programcılar (tembellikten uzak, zaman harcamak istemedikleri için) taahhüt günlüklerini kontrol etmeyecek ve bazı önemli bilgileri kaçırmayacaklar, 10char yorum ise onları işaret edebilir SCM ve izleyicinizi birlikte çalışmak üzere ayarladıysanız, bu hata ile ilgili revizyonların günlüklerini içerecek doğru hata kimliği. Tüm dünyaların en iyisi, gerçekten.
haylem

Tecrübelerime göre, taahhüt mesajları genellikle yok sayılır (bunlara yer verilecek politikalara rağmen, bunlar varsa) veya işe yaramaz (sadece bir sorun numarası ve genellikle yanlış olan). Ancak aynı insanlar kodda yorum bırakacaklar ... Hiç bir şeyden daha çok bu mesajlar vermeyi tercih ederim (ve birçok ortamda taahhüt mesajlarına / kaynak geçmişine ulaşmaya çalıştım, neredeyse imkansızdı. , sürüm kontrolüne erişim "güvenlik nedeniyle" sınırlı olduğu için diğer kişilerden kaynak istemek zorunda kalacaktır).
10'da jwenting

3

Bu uygulamayı sürüm kontrolü altında olmayan dosyalar için kullanıyoruz. Bir ana bilgisayarda çalışan RPG programlarımız var ve bunları desteklemekten çok daha fazlasını yapmak zor oldu.

Sürümlendirilmiş kaynak kodu için check-in notlarını kullanıyoruz. Sanırım ait oldukları yer, kod dağınıklığı değil. Ne de olsa meta veri.


Katılıyorum, sürüm kontrolü altında olmayan dosyalar farklı bir hikaye.
Joshua Smith

1
"Onları yedeklemekten çok daha fazlasını yapmak zor oldu." Benim CTO'mun mide bulacağı bir bahane değil.
Tim Williscroft

@Tim: Her zaman önerilere açık - Onları komuta zincirine atabilirim. :) Mainframe ile dosyaları almak ve açmak için çalışmak zordur.
Michael K

Benim önerim - muhtemelen onları çıkarabilirsiniz (yedekleme); neden sadece bir yere dökmüyor ve her gece cıvalı değişiklikleri küçük bir senaryoya itiyorsunuz?
Wyatt Barnett

2

Bu uygulamayı uzun zaman önce yöneticimizin kod dosyalarını kağıt üzerinde okumak ve düzeltme geçmişlerini takip etmek istediğinde ısrar ettiği bir SW mağazasında yapıyorduk. Söylemeye gerek yok, aslında bir kaynak dosya çıktısına baktığında herhangi bir somut olayı hatırlamıyorum: - /

Neyse ki, o zamandan beri yöneticilerim sürüm kontrol sistemlerinin neler yapabileceği konusunda daha bilgili oldular (ilk dükkanda SourceSafe kullandığımızı eklemeliyim). Bu yüzden koda sürüm meta verileri eklemiyorum.


2

Genellikle SCM ve IDE'niz "ek açıklama göster" (buna rağmen Eclipse de denir) özelliğini kullanmanıza izin veriyorsa, hangi taahhütlerin bir kod parçasını değiştirdiğini kolayca görebilirsiniz ve taahhüt yorumları kimin ve neden olduğunu söylemelidir.

Kodda böyle bir yorum koyacağım tek zaman, gelecekte birinin kafa karışıklığına neden olabilecek özellikle garip bir kod parçası olması durumunda, hata raporuna gidip okuyabilmeleri için hata numarasıyla kısaca yorum yapacağım. ayrıntılı olarak.


"Bunu anlamanız beklenmiyor" büyük olasılıkla kodu koymak kötü bir yorum. Yine, SCM ve hata izleyicilerinizi birbirine bağlayacağınızı söyleyeceğim.
Tim Williscroft

2

Açıkçası, bu tür yorumların neredeyse zaman içinde yanlış olduğu garanti edilmektedir; bir satırı iki kez düzenlerseniz iki yorum ekler misiniz? Nereye gidiyorlar? Yani daha iyi bir işlem aletlerinize güvenmektir.

Bu, üst düzey geliştiricinin değişiklikleri izlemek ve değişiklikleri sorun izleme sistemine bağlamak için yeni sürece güvenemeyeceğinin bir işaretidir . Çatışmayı çözmek için bu rahatsızlığı gidermelisiniz.

Neden ona güvenemeyeceğini anlamalısın . Eski alışkanlıklar mı? SCM sisteminde kötü bir deneyim mi var? Onun için çalışmayan bir sunum biçimi mi? Belki de 'git blame' ve Perforce'nin zaman çizelgesi görünümü gibi araçları bile bilmiyor.

İhtiyaç sebebini anlamadan onu ikna edemezsiniz.


2

20 yılı aşkın bir Windows ürünü üzerinde çalışıyorum. Uzun süredir uygulanmakta olan benzer bir uygulamamız var. Bu uygulamanın pastırmamı kaç kez kurtardığını sayamıyorum.

Bazı şeylerin gereksiz olduğunu kabul ediyorum. Eskiden geliştiriciler kod yazmak için bu uygulamayı kullandılar. Bunu gözden geçirdiğimde, onlara devam etmelerini ve kodu silmelerini söylüyorum ve yorum gerekli değil.

Ancak, çoğu zaman, on yıl civarında olan ve 20 geliştirici tarafından değiştirilen ancak hiçbir zaman yeniden düzenlenmeyen koda bakabilirsiniz. Herkes uzun zaman önce orijinal koddaki tüm gereksinim ayrıntılarını unuttu, tüm değişikliklere aldırmayın ve güvenilir bir belge yok.

Hata numarası içeren bir yorum bana kodun kökenine bakmam için bir yer verir.

Yani, evet, SCM sistemi çok şey yapıyor, ama her şeyi değil. Bunlara başka yorumlarda olduğu gibi davranın ve önemli bir değişiklik yapılan her yere ekleyin. Geliştiriciden 5 yıl önce kodunuza nasıl teşekkür edeceğinizi düşünüyoruz.


1

Bir VCS'niz varsa yorumlardaki her değişiklikten bahsetmek anlamsızdır. Belirli bir hatayı veya belirli bir satırla ilgili diğer önemli notları belirtmek yararlıdır. Bir değişiklik, tümü aynı taahhüt mesajı altında değiştirilmiş birçok satır içerebilir.


1

Söyleyebileceğimden değil.

Ben giderken kodumda YAPILACAKLAR sıçramak yapmak ve amaç onları inceleme süresi ile kaldırmaktır.

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.