Kod belgeleri nasıl yapılır ve yazılımlar (çoğu zaman) neden yetersiz belgelenmiştir?


26

Java api gibi iyi belgelenmiş kodların bazı iyi örnekleri var. Ancak, git ve şirketlerin iç projeleri gibi kamu projelerinde pek çok kod belgelenmiştir ve çok yeni gelenler için uygun değildir.

Tüm yazılım geliştirme adımlarımda, kötü belgelenmiş kodlarla uğraşmak zorunda kaldım. Aşağıdakileri farkettim -

  1. Kodda çok az veya hiç yorum yok.
  2. Metod ve değişken isimleri kendi kendini tanımlamaz.
  3. Kodun sisteme veya iş süreçlerine nasıl uyduğuna dair çok az belge var veya hiç yok.
  4. Kötü geliştiricileri işe almak veya iyi olanlara danışmanlık yapmak. Basit ve temiz kod yazamazlar. Bu nedenle, geliştirici de dahil olmak üzere kodu belgelendirmek herkes için zor veya imkansızdır.

Sonuç olarak, çok fazla koddan geçmem ve birçok insanla bir şeyler öğrenmek zorunda kalmam gerekti. Bunun herkesin zamanını boşa harcadığını hissediyorum. Ayrıca yeni başlayanlar için bir projeye KT / Bilgi transferi oturumlarına ihtiyaç duyulmasına neden oluyor.

Aşağıdaki nedenlerden dolayı belgelerin hakettiği ilginin olmadığını öğrendim:

  1. Tembellik.
  2. Geliştiriciler kod dışında bir şey yapmayı sevmezler.
  3. İş güvenliği. (Kodunuzu kimse kolayca anlayamazsa, kolayca değiştiremeyebilirsiniz.)
  4. Zor tarihler belgelemek için çok az zaman bırakır.

Bu yüzden, bir şirkette veya projede iyi dokümantasyon uygulamalarını teşvik etmenin ve uygulamanın bir yolu olup olmadığını merak ediyorum. Karmaşıklığından bağımsız olarak, herhangi bir projenin sistemleri ve kodları için uygun belgeler oluşturmak için kullanılacak stratejiler nelerdir? Asgari dokümantasyona ihtiyaç duyulan veya hiç gerekli olmayan herhangi bir iyi örnek var mı?

IMHO, proje teslim edildikten sonra bir dokümantasyon incelememiz olması gerektiğini düşünüyorum. Basit, özlü, açıklayıcı ve kullanıcı dostu değilse, geliştirici veya teknik dokümantasyon mühendisi bunun sorumluluğunu üstlenir ve düzeltmek için yapılır. İnsanlardan dokümantasyonda sıkıntı çekmelerini beklemiyorum, ilk baştaki kitaplar gibi kullanıcı dostu olacağını ümit etmiyorum, ancak saatlerce süren analiz ihtiyacını ve israflı KT oturumlarını ortadan kaldırmasını bekliyorum.

Bu çılgınlığı sona erdirmenin veya azaltmanın bir yolu var mı? "Belge odaklı gelişme" belki de?


2
Düzgün bir belgenin bulunmamasının bir başka nedeni daha vardır: Kodu yalnızca İngilizce olarak parolalamayan iyi bir belge yazmak zordur, ancak kodun neden bu şekilde tasarlandığını / yazıldığını açıklar. Bu bilgiye duyulan ihtiyaç ancak yazılması gerektiğinden aylar sonra ortaya çıkar.
Bart van Ingen Schenau

1
Başka bir ciddi sebep: birçok geliştirici, ikinci bir dil olarak İngilizce'ye sahip ve / veya kötü bir şekilde İngilizce yazıyor. Onları bir yöntem için tek bir astar yazmaları için zorlayabilirsiniz, ancak iyi bir dokümantasyon istiyorsanız, para ödemeye hazır olmanız ve bunu yapmak için uzmanlar tutmanız daha iyi olur.
david.pfx

Yanıtlar:


26

Kod nasıl belgelenir?

Zaten bir ipucunuz var: Java API'sinin nasıl belgelendiğine bakın.

Daha genel olarak, her proje için geçerli olan benzersiz kurallar yoktur. İş açısından kritik büyük ölçekli projeler üzerinde çalışırken, belgelerin, küçük ölçekli bir açık kaynak kütüphanesi için yazacağım belgeyle hiçbir ilgisi yok, ki bu da orta ölçekli kişisel projemin belgelenmesiyle hiçbir ilgisi yok. .

Neden birçok açık kaynaklı proje iyi belgelenmedi?

Çünkü çoğu açık kaynaklı proje, eğlenceli olduğu için bu projelere katkıda bulunan kişiler tarafından üretilmektedir. Çoğu programcı ve geliştirici, dokümantasyon yazmanın ücretsiz yapılacak kadar eğlenceli olmadığını düşünmektedir.

Neden birçok kapalı kaynaklı proje iyi belgelenmedi?

Çünkü (1) iyi belgeler yazmak ve (2) bakımını yapmak çok fazla paraya mal olur.

  1. Anında maliyet (belgelerin yazılmasının maliyeti) paydaşlara açıkça görülebilir: ekibiniz projeyi belgelemek için önümüzdeki iki ayı harcamak isterse, ödenmesi gereken iki aylık maaş tutarıdır.

  2. Uzun vadeli maliyet (belgelerin bakım maliyeti) yöneticiler için de oldukça kolaylaşır ve genellikle maliyeti düşürmeleri veya gecikmeleri kısaltmaları gereken ilk hedefdir. Bu, hızlı bir şekilde işe yaramaz hale gelen ve güncellenmesi oldukça pahalı olan ek bir eski belge sorununa neden olur.

  3. Uzun vadeli tasarruflar (sadece birkaç yıl önce belgelenmesi gereken temel bir şeyi anlamak için eski kodu araştırmakla birkaç gün harcamak zorunda kalmamaktan kaynaklanan tasarruf), diğer taraftan, bazı yöneticilerin duygularını doğrulayan ölçülmesi zordur. dokümantasyon yazmanın ve sürdürmenin zaman kaybı olduğunu.

Sık sık gözlemlediğim şey şudur:

  1. Başlangıçta, takım çok fazla belge vermeye isteklidir.

  2. Zaman içinde, son tarih baskısı ve ilgisizlik, dokümantasyonu korumayı zorlaştırır.

  3. Birkaç ay sonra, projeye katılan yeni bir kişi pratik olarak dokümantasyonu kullanamaz, çünkü gerçek sisteme hiç uymuyor.

  4. Bunu farketmeksizin, yönetim, geliştiricileri dokümanları sürdürmediği için suçluyor; geliştiriciler birkaç hafta boyunca bunu güncellemek istiyorlar.

    • Yönetim bunun için birkaç hafta verirse, döngü tekrar eder.

    • Eğer yönetim önceki tecrübelere dayanarak reddederse, ürün dokümantasyondan yoksun olduğu için sadece kötü tecrübeyi arttırır, ancak birkaç ay yazıp sürdürmek için harcanmıştır.

Dokümantasyon, tıpkı test gibi, sürekli bir süreç olmalıdır. Birkaç hafta LOC'yi kodlamak ve testlere ve belgelere geri dönmek çok acı vericidir.

Ekibi dökümantasyona teşvik etmek nasıl teşvik edilir?

Benzer şekilde, insanları temiz kod yazmaya, düzenli yeniden düzenlemeye, tasarım modellerini kullanmaya veya yeterli birim testi eklemeye teşvik etmenin yollarına benzer.

  • Örnek olarak kurşun. İyi bir belge yazarsanız, çiftleriniz de bunu yapmaya başlayabilir.

  • Belgeleri incelemeyi hedefleyen resmi kod incelemeleri dahil sistematik kod incelemeleri yapın.

  • Takımın bazı üyeleri iyi dokümantasyona (ya da dokümantasyona) özellikle antipatik ise, daha iyi dokümantasyon yazmasını önleyen engellerin neler olduğunu anlamak için konuyu özel olarak konuşun. Zaman yetersizliğini suçlarlarsa, sorunların kaynağını görürsünüz.

  • Birkaç hafta veya ay boyunca belgelerin varlığını veya eksikliğini ölçülebilir hale getirin, ancak buna odaklanmayın. Örneğin, LOC'ye göre yorum satırı sayısını ölçebilirsiniz, ancak bunu kalıcı bir önlem yapmayın, aksi takdirde, geliştiriciler yalnızca düşük puanlardan kurtulmak için uzun ama anlamsız yorumlar yazmaya başlayacaktır.

  • Oyunlaştırmayı kullanın. Bu önceki nokta ile birlikte geliyor.

  • Pozitif / negatif takviye kullanın .

  • (Bkz . SJuan76'nın yorumu ) Yorumların eksikliğini hatalar olarak kabul edin. Örneğin, Visual Studio'da XML belgeleri oluşturmak için bir seçeneği işaretleyebilirsiniz. Ayrıca, tüm uyarıların hata olarak kabul edildiğini kontrol ederseniz, bir sınıfın tepesindeki yorumun veya bir yöntemin bulunmaması derlemeyi durduracaktır.

    Önceki üç maddeye gelince, bu dikkatle kullanılmalıdır. Bir süredir özellikle zor bir başlangıç ​​programcı ekibi ile kullandım ve StyleCop uyumlu yorumlarla bitti:

    /// <summary>
    /// Gets or sets the PrimaryHandling.
    /// </summary>
    public Workflow PrimaryHandling { get; set; }

Hangi, hm ..., özellikle yararlı değil.

Unutmayın: otomatikleştirilmiş hiçbir şey, programcılar sizinle uğraşmak istediğinde kötü yorumları belirlemenize yardımcı olamaz . Yalnızca kod incelemeleri ve diğer insan görevleri yardımcı olacaktır.

Asgari dokümantasyona ihtiyaç duyulduğunda veya gerekli olmadığında iyi örnekler var mı?

Mimariyi ve tasarımı açıklayan dokümantasyon gerekli değildir:

  • Bir prototip için

  • Bir görevin tamamlanması için birkaç saat içinde yazılan kişisel bir proje için, bu projenin artık sürdürülmeyeceğinden emin olarak,

  • Küçük olduğu göz önüne alındığında, özellikle temiz kodla birleştiğinde, belgeyi yazmak için gelecekteki tüm koruyuculardan daha fazla zaman harcamak için belge harcayacağınız açık olan herhangi bir proje için.

Bazı geliştiricilere göre, kod kendi kendine belgelendirilirken kod içi belgelere (kod yorumları) gerek yoktur. Onlar için, yorumların varlığı, nadir durumlar dışında, iyi bir işaret değil, yorumlara ihtiyaç duyulmaksızın kodun yeterince düzeltilmediğinin bir işaretidir.

Bir proje teslim edildikten sonra dokümantasyon incelemesi yapmamız gerektiğini düşünüyorum.

Projeniz haftada en az bir kez teslim edilirse, yol budur. Projeniz çevik değilse ve altı ay aralıklarla gerçekleştiriliyorsa, daha düzenli incelemeler yapın.


'Nasıl teşvik edilir' için, birçok IDE'nin eksik belgelerin uyarı olarak bildirilmesine izin verdiğini eklerdim. Alternatif olarak, belki de belgelerin statik bir analizi OSB'de yapılabilir (tabii ki, bu yeterli olmaz).
SJuan76,

@ SJuan76: Gerçekten de. Visual Studio, yorum eksikliğini derleme zamanı hatası olarak bile ele alabilir. Bununla ilgili bir not eklemek için cevabımı düzenledim.
Arseni Mourzenko

@ArseniMourzenko - Belgelendirme için hikayeler ekleyerek Çevik'te bazı belgeleri teşvik edebileceğimizi okudum. Ancak bunlar diğer hikayeleri, yani yapılan diğer hikayeleri engellememeli, dokümantasyon hikayelerinin tamamlanmasını içermemelidir. Bu nasıl ses geliyor?
Borat Sagdiyev,

3

Bence yorum ve dokümantasyon arasında bir ayrım yapmalısın. Yorumlar açıklayıcı olsa da, tutarlılıktan yoksun, kodun her yerine dağılmış durumdalar. Yorumlar, yeterince kendini tanımlamamış kodu asla telafi etmemeli, bunun yerine diğer programcıları zorlu bölümlerde ima etmelidir.

Kodun belgelenip belgelenmemesi projenin ölçeğine bağlıdır. Elbette her şeyin belgelenmesi gerektiğine inanan insanlar var ve bu düşünceyi haklılaştırmak kolay görünüyor çünkü kimin belgeleme bilgisine karşı çıkmaya cesaret edeceğini? Neyse ki yazılım geliştirme bilim değildir ve küçük programınızın arkasındaki detaylar belirsizleşirse dünya çökmez. Şimdi birçok geliştiricinin kullanımına yönelik profesyonel bir yazılımla ilgili olarak, evet, açıkça kodunuzu belgelemeniz gerekir. Ama eğer bu seviyede kodlama pozisyonundaysanız, o zaman açıkça bunu biliyorsunuzdur.

tl; Dr.

Her projenin iyi belgelenmesini istiyorsan, o zaman çok fazla soruyorsun.


2
Fortunately software development is not scienceLütfen bana neden inandığınızı anlatın.
Borat Sagdiyev

3
@Borat - Yazılım geliştirme, bilim tarafından sağlanan araçları kullandığını ima eden bir mühendislik disiplinidir .
Leopold Asperger

Her şeyin belgelenmesini istemiyorum. Bir sistemin ve kodun ne yaptığına ilişkin yüksek bir genel bakış sağlamak için yeterli olmalıdır. Örneğin. Lütfen televizyonumu nasıl kullanacağımı söyle. İşi yapmak için LCD, CRT, Vakum tüpleri veya Katı hal cihazları kullanması umurumda değil. Bir tamirci bu bilgiyi isterse, onun için ayrı belgeler hazırlayın.
Borat Sagdiyev

Üst düzey bir genel bakış istiyorsanız, tanımlayıcı adları yeterlidir. Tıpkı TV'nizdeki düğmenin "Açık" etiketine sahip olması gibi. Demek düşük seviye detaylar istiyorsun.
Leopold Asperger

2
@LeopoldAsperger: Bence Borat, sınıflardaki yöntemlerden değil, mimarlık ve tasarımın belgelenmesinden bahsediyor.
Arseni Mourzenko
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.