Kodlama standartlarındaki evrim, onlarla nasıl başa çıkıyorsunuz?


12

Mevcut kod tabanı için bir projedeki kodlama standartları / stil kılavuzundaki evrim ile nasıl başa çıkıyorsunuz? Ekibinizdeki birisinin programlama dilinde daha iyi bir nesne somutlaştırma yöntemi keşfettiğini varsayalım. Eski yolun kötü ya da arabası olması değil, sadece yeni yol daha az ayrıntılı ve çok daha zarif hissettiriyor. Ve tüm ekip üyeleri bundan gerçekten hoşlanıyor. Mevcut tüm kodu değiştirir misiniz?

Kod tabanınızın yaklaşık 500.000'den fazla kod satırı olduğunu varsayalım. Mevcut kodların tümünü değiştirmek ister misiniz? Yoksa sadece yeni kodun yeni standarda uymasına izin verir misiniz? Temel olarak tutarlılığı kaybediyor musunuz?

Projenizin kodlama standartlarındaki bir evrim ile nasıl başa çıkıyorsunuz?

Yanıtlar:


16

Kodlama standartları ekipleri daha verimli hale getirmek için mevcuttur. Teorik olarak, kodun anlaşılmasını, değiştirilmesini ve test edilmesini kolaylaştırırlar. Uygulamada, tehlikeli miktarda meta çalışma yaratabilirler; ekipler, en doğru ve zarif çözüm arayışıyla mevcut kodu tekrar tekrar yazıyor. Ne yazık ki, meta-iş problemi, herkesin doğru şeyi yapmakla meşgul, tutkulu ve takıntılı olduğu takımlarda daha kötü görünüyor.

Projeden projeye geçen bir danışman olarak, katı bir kodlama standardına sahip mükemmel disiplinin, bir projenin başarısına, sonuçlarla ilgilenen mükemmel geliştiricilere göre çok daha az katkıda bulunduğunu buldum. Tutarsız kodlama stilleri şaşırtıcı geliştiriciler için küçük bir sıkıntıdır. Tutarlı veya tutarlı olmayan üretkendirler. Kabul edilirse, tutarsız kodla karşılaşırlarsa, akım hakkında sorarlarstandart ve onunla sopa. Bununla birlikte, projedeki her kod satırını mevcut standarda güncellemekte ısrar etmeyeceklerdir. Israr etmezler çünkü en iyi uygulamaların gelip gittiğini gördüler. Bugün bir şeyi yapmanın doğru yolu, yarın bir şeyi yapmanın doğru yolu ile aynı değildir. Eğer öyleyse, kodlama standartlarınız gelişmeyecekti. Yani, bir şeyi yapmanın doğru yolu zamanla değişirse, belki de "doğru" tanımımız bozulur.

Bu standartların önemli olmadığı anlamına gelmez. Standartların hedefinin verimlilik olduğunu unutmayın. Yeni bir standarda yeniden yazmanın uzun vadede kendisinin ödeyeceğini garanti edemezseniz, zaman kaybetmeyin. Yeni veya yeniden düzenlenmiş kodda yeni bir standardı haklı çıkarmak çok daha kolay. Zarafet harika ama sonuçlarla aynı değil.


6

Yaptığımız şey, kod tabanı için evrim (devrim değil);

  • yeni kod yazıldı
  • kod yeniden düzenlendi
  • hatalar giderildi
  • varolan bir sınıfa yeni bölümler eklenir

Kod tabanınızın tutarlı olması önemlidir, bu nedenle değişiklik "eski" ve "yeni" stil kodu arasında bir karışıklık olasılığı açarsa, kodlama standardınızın güncellemesini bir sonraki projeye ayırmak daha iyi olabilir.


3

Her şeyden önce, bu tür "en iyi uygulamaları" kodlama yönergelerinin (zorunlu kısmı) dahil etmem. Onlar nasıl bir örnek olarak, bir ekte, örneğin söz edilebilir olabilir bir şey yapmak ama değil o gerektiğini şekilde bu yapılabilir.

Bununla birlikte, bir kodlama standardındaki değişiklikler için dikkate alınması gereken iki durum vardır:

  1. Eski ve yeni kodlar eski kod güncellenmeden karıştırılsa bile okunabilirliği etkilemeyen değişiklikler.
    Bu değişiklikler kodlama standardına hemen eklenebilir ve tüm yeni ve değiştirilmiş kodlar için geçerli olarak düşünülmelidir. Eski kod, zamanın izin verdiği ve bu alanda değişiklik yapıldıkça kademeli olarak uyarlanmalıdır.
    Aslında karşılaştığım bu tür bir değişikliğe örnek olarak, her dosyanın başındaki telif hakkı deyimindeki bir değişiklik gösterilebilir.
  2. Eski ve yeni kodlar karıştırılırsa okunabilirliği bozan değişiklikler.
    Bu değişiklikler ya tek seferde tüm kod tabanına uygulanmalı ya da gerçekten gerekliyse yeniden değerlendirilmelidir.
    Bu tür bir değişikliğe örnek olarak girinti veya köşebent yerleştirmedeki bir değişiklik gösterilebilir.

2

Bu gerçekten oluşturduğunuz ürünün türüne bağlı olmalıdır:

  • Evde yazılan ve müşterilere dağıttığınız ticari bir uygulama için ana hedefiniz gelir olmalıdır. Eski kod buggy olmadığı sürece, yeni kodlama standartlarının geliştiği önemli değildir, ürününüze yeni özellikler eklemeye ve gelir elde etmeye odaklanmalısınız. Elbette, yeni kodlama standartlarını yeni kod için uyarlayın, ancak mevcut kodun tamamını değiştirmek zaman kaybı olacaktır.
  • Açık kaynaklı bir ürün veya birden fazla şirketin (hatta müşterilerinizin bile) kaynağı göreceği ve kaynak üzerinde çalışacağı bir ürün geliştiriyorsanız, kod okunabilirliği çok daha önemli hale gelir ve bu durumda, tam olarak bağlı olarak mantıklı bir karar verilmelidir. ne kadar kodun değiştirilmesi gerektiği ve uzun vadede ne gibi avantajlar olacağı. Her ne kadar güzel kodları sevsek de, gerçek şu ki, kapalı kaynakla uğraşan ticari bir şirket için, sürekli olarak yeni standartları uyarlamak, uzun vadede gelirinizi kaybedeceğiniz anlamına gelecektir.

1
Ayrıca test kapsamınıza bağlı olduğunu da ekleyeceğim. Kritik işlevsellik entegrasyon ve birim testleri kapsamında olduğundan, oldukça büyük 10.000'den fazla satırı güvenle yükledim.
Martijn Verburg

@Martijn - Güzel nokta, bu da çok doğru.
mrwooster

0

Şahsen, eski kodları olduğu gibi tutmayı ve ne yaparsanız yapın yeni standartları takip etmeyi tercih ederim. Daha spesifik olarak, old.c'de çifte standart kullanmayacağım. C. Ama yeni oluşturacaksam. C, daha yeni, rafine sözdizimlerini kullanabilir :)


Bu seçimin ardındaki mantığı açıklayabilir misiniz?
Ward Bekker

Ah ... diyebilirsin, bu biraz sezgi. Mrwooster'ın yukarıda söylediklerine dayanarak, ticari bir uygulama ise, sadece bazı kozmetik değişiklikler yapmak için zamanımı boşa harcamam. (Unutmayın, işlevsellik aynı kalır). Dahası, diyelim ki değişim sadece nesneleri nasıl başlattığınız değildir. Ama aynı zamanda, onun yöntemlerine nasıl eriştiğinizi de söyleyin. Sonra, hataların yakışıklı bir şekilde tanıtılması için bir sürü kodun düzeltilmesi gerekiyor. Öyleyse yaşlı adamın orada kalmasına izin ver.
Barun
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.