Bir kod satırının ömrünü nasıl tahmin edebilirim?


11

Açık kaynak projelerinde kod ömrünü analiz etmek için bir yol bulmaya çalışıyorum: yani, ne kadar uzun bir süre aktif ve kullanımda kod.

Şu anki düşüncem, bir kod satırının ömrünün ilk işlendiğinde başladığı ve aşağıdakilerden biri gerçekleştiğinde sona erdiğidir:

  • Düzenlendi veya silindi,
  • Yapılardan hariç tutulmuş,
  • Yapısında hiçbir kod bir süre korunmaz (örneğin, bir yıl).

NOT: Bir "düzenlemenin" neden "ölüm" olarak sayıldığına ilişkin açıklama olarak, düzenlenen satırlar "yeni" nesil veya kod satırı olarak sayılır. Ayrıca, bunu yapmanın kolay bir yolu yoksa, bir soyun ya da bir atadan inişin uzun ömürlülüğünü hesaba katamazdı.

Bir kod satırının ömrünü başka ne belirler?


2
"belirli bir kod satırı ne kadar süredir aktif ve kullanılıyor?" bunun neden iyi bir metrik olduğunu düşünüyorsunuz?
Pieter B

Yanıtlar:


10

Andy Ozment 2006'da OpenBSD'ye aynı soru ile baktı: Süt veya Şarap: Yazılım Güvenliği Yaşla İyileşiyor mu?

Onun tanımından öğrenebilirsiniz. Aynı zamanda, ilginç bir sonuca sahip, yazılım yönetimine dahil edilmemiş çok ilginç bir makale:

7.5 yıllık on beş bültenleri bir süre boyunca, OpenBSD'de rapor 140 açıklarını% 62 idi temel : kodunda mevcut çalışmanın başlangıcında.

Bu temel zayıflıkların ilk yarısının raporlanması iki buçuk yıldan fazla sürdü. İncelenen son versiyondaki kaynak kodun% 61'inin temel olduğunu bulduk: 7.5 yıl önce yayınlanan ilk versiyondan değişmeden kalıyor. Bu nedenle, OpenBSD'deki temel güvenlik açıklarının raporlanma oranının, genel güvenlik açığı raporlaması oranını büyük ölçüde etkilemeye devam etmesi muhtemeldir.

Ayrıca, temel zayıflık raporlarının oranının çalışma döneminde azaldığına dair istatistiksel olarak anlamlı kanıtlar bulduk. Temel sürümdeki güvenlik açıklarının% 67,6'sının bulunduğunu tahmin etmek için bir güvenilirlik büyüme modeli kullandık. Modelin günlük raporlanan beklenen temel güvenlik açıkları tahmini, çalışma başlangıcındaki 0,051'den 0,024'e düşmüştür.


1
+1 @Bruce Ediger: Harika, teşekkürler - şu anda bakıyorum!
büyük hatalar

Tekrar teşekkürler, böylece bulabildiğim tek bilgi "Bugünün OpenBSD'sindeki kod satırlarının% 61'inin temel olduğunu öğrendik: çalıştığımız ilk sürümün yayınlanmasından önce tanıtıldı ve o zamandan beri değiştirildi. " - ilginç olsa da, gerçekten ilgili değil. Diğer her şey, güvenlik açıklarının düzeltilmesinin ne kadar sürdüğüne odaklanıyor gibi görünüyor, bu da ilginç, ancak kod ömründe hesaba katılması gereken faktörler hakkında hiçbir şey söylemiyor. Kaçırdığım bir şey var mı?
büyük hatalar

1

Bunun bir cevabı olduğunu sanmıyorum. Projeye son derece bağımlı. Bazıları yıllar içinde daha kararlı, diğerleri yıllar içinde daha uçucu / yeniden düzenlenmiş / evrimleşmektedir.

Dahası, ölçmek zor. Düzenlenmiş bir çizgi gerçekten ömrünün sonu mu? Kod tabanını sekmelerle veya boşluklarla yeniden biçimlendirmek gibi yalnızca kozmetik bir değişikliğe ne dersiniz? IMHO, yenilenmiş kod tabanı olarak sayılmaz, ancak ölçütlerinize göre olur.

Bununla birlikte, bence LOC'ların iyi bir kısmı sonsuza dek yaşıyor.

Nedeni basit: bazılarını kaldırmak yerine yeni kod eklemek çok daha kolay. Özellikle sistem karmaşık ve yıllar içinde büyüdüğünde. Daha sonra, önemsiz kodu kaldırmak veya değiştirmek için "riskli" bir noktaya gelir. Hatalar getirebilir, uyumluluğu bozabilir, değişikliklerin kelebek etkisini ortaya çıkarabilir ... Bu yüzden, kod tabanı büyüdükçe, büyüdükçe LOC'lar daha fazla kalacaktır.

Ayrıca, yalnızca iyi programcılar kod tabanlarını temizleme ve satırları azaltma eğilimindedir. Diğerleri LOC'ları biriktirme eğilimindedir. Ve şimdiye kadar, ikincisi açık arayla kazanıyor. ;)


0

Bir kod satırını silmek veya hariç tutmak kesinlikle ömrünün sona erdiğinin bir göstergesidir.

Düzenleme yeniden düzenlenirken şu soruyu sorabilirim: Bu ifade düzenlemeden sonra farklı bir sonuç çıkarıyor mu?

Cevabınız evet ise, o zaman önceki ifadenin artık mevcut olmadığını söyleyebilirim, aksi takdirde hala bir önceki ifadenin devamı olarak düşünürdüm.

Sonucu değiştirme örneği:

if ( a && b )

için:

if ( a || b )

Kullanım ömrüne devam etme örneği:

foo.bar( baz );

için:

foo.prototype.bar.call( this, baz );
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.