Verimlilik ve SLOC hakkında
SLOC ile ilgili sorun
SLOC metriği ile ilgili problem, hesaba katılmadan yazılmış kod miktarının yaklaşık bir değerini ölçmesidir :
- Kodun kalitesi (yani, her 100 SLOC için, hatalar nedeniyle başka bir 90 SLOC eklemeniz gerekiyorsa, ancak kodunuzun verildiği anda bilmediğiniz bir durum varsa?)
- kodla ulaşılan hedefler (10K SLOC, beklenen tüm kullanım durumlarını veya kullanıcı hikayelerini mi kullanıyor? yoksa sadece küçük bir altküme mi?)
- Kodun korunabilirliği (diğer bir deyişle, kodu beklenen gelişen gereksinimlere göre ayarlamak için% 1 veya% 50 daha fazla kod eklemeniz gerekecek mi?).
Aksi taktirde, birçoğunun kopyayla yapıştırılan bölümüyle hataya açıklanamayan spagetti kodunun üretilmesi, dikkatlice tasarlanmış yeniden kullanılabilir koddan daha verimli olarak kabul edilecektir.
Bu yüzden SLOC kesin olarak verimliliği ölçmenin en iyi yolu değildir.
Hangi verimliliği düşünüyoruz?
Verimlilik bir işlem için ölçülür. Dolayısıyla SLOC, tek başına kodlama işlemi için mükemmel bir geçerli gösterge olabilir.
Örneğin, zayıf gereklilikleri yanlış anlarsanız, yazılımı üretmek için beş ay geçirirseniz, kullanıcıya gösterirseniz, yanlış olduğunu keşfederseniz ve sıfırdan başlayarak tekrar yazmak için 5 ay daha harcarsanız, SLOC’de aynı üretime sahip olursunuz. / ay, örneğin ilk kez doğru kodu yazan bir ekibin, örneğin sık sık geri bildirim yoluyla yanlış anlamaları azaltan çevik bir süreç kullandıkları için. Bu belirgin eşit verimlilik büyük problemleri gizliyor.
Bu nedenle, yazılım geliştirme verimliliğini ölçmek, gereksinimleri analiz etmek, neyin kodlanacağını tasarlamak, kodlamak, test etmek, hata ayıklamak ve kullanıcı beklentilerinin karşılandığını doğrulamak dahil tüm süreci dikkate almalıdır. Tüm bu faaliyetler çok farklı olduğu için en iyi şey, sadece önemli olan düşünceyi ölçmektir: çalışan yazılım, yani üretilen yazılım kullanıcı için ne anlama geliyor ?
Yazılım çıktılarını nasıl ölçebilirim?
Birkaç yaklaşım var:
- Klasik yazılım mühendisliğinde tipik yaklaşım İşlev Noktaları'dır (FP). İşlev puanları yerine getirilmesi gereken şartlara göre ölçülür (örneğin, form sayısı, her formdaki alan sayısı, vb.). Verimlilik daha sonra zaman başına ve kişi başına FP cinsinden ölçülür. Bazı şirketler, bir geliştiricinin belirli bir dilde belirli bir dilde zaman birimi başına ne kadar işlev noktası üretebileceğini söyleyen verilere de sahiptir. FP ile ilgili sorun, önceden çok ayrıntılı gereksinimler gerektirmesi ve zaman alıcı olmasıdır.
- Daha modern ve pragmatik bir yaklaşım hikaye noktalarıdır (SP). Bunlar, üretilecek kodun karmaşıklığını değerlendirmek için kullanılır ve geliştirme ekiplerinin hızını değerlendirmek için rutin olarak kullanılır. Bununla birlikte, SP tüm detaylar bilinmeden önce yapılan iş için bir tahmin önlemidir. Bu gerçekte ne olduğunun son ölçüsü değil. Bu nedenle, bir verimlilik ölçütü olarak kullanıldığında biraz dikkatli olunmalıdır, çünkü tahmin sürecini geri tepebilir .
Statik ve dinamik yazmanın üretkenliği hakkında
Şahsen statik olarak yazılmış dillerin hayranı olduğumu itiraf etmeliyim, çünkü kendi içimde daha güvenilir olduğunu biliyorum (yıllarca süren kodlama bana bunu kanıtladı).
Kesin olarak aldığım bir şey, statik olarak yazılan dilin, derleme zamanında (örneğin yazım hataları, beklenen türlerde uyumsuzluklar vb.) Statik olarak yazılmayan dillerden çok daha fazla hata / hata önleyebilmesidir. Ancak, tüm tarafsızlıkta, bunu daha yüksek bir verimlilik olarak kötüye kullanmaya cesaret edemem.
Mimarın doğru mu?
Belki, belki değil.
Ancak argümanları geçerli görünmüyor: statik olarak yazılmış dilin üretkenlik kazanımı, derleyici tarafından önceden tespit edilen önemli sayıda hatadan geliyor.
Sonuç olarak, bu "daha yüksek" verimlilik kazancını, dinamik olarak yazılmış diller için gereken yeniden işleme bakmadan yalnızca SLOC'ye bakarak bulmak mümkün değildir. Yani karşılaştırması adil olamaz.
Karşılaştırılabilir koşulların argümanı da geçerli değil. Bazı dinamik olarak yazılmış diller, klasik statik olarak yazılmış dillerden birinde aynısını yapmaktan daha az kod gerektiren bazı yüksek seviye yapılara izin verir. Böylece daha az zamana ihtiyaç duyabilir, daha az kod yazabilir, ancak aynı analizi, test ve ek yükü doğrulayın. Dolayısıyla, verimliliği SLOC tarafından ölçmek, potansiyel verimlilik kazanımlarını azaltacaktır, böylece dinamik olarak yazılmış bir dile karşı bir önyargı yaratacaktır.
Bu iddiayı destekleyen bir çalışma var mı?
Konuyla ilgili birkaç yeni akademik çalışma var. Bazıları statik yazmanın avantajını görmelerine rağmen, genel olarak belirli bir amaçla sınırlıdır (dokümantasyon, kötü belgelenmiş kodun veya API'nin kullanılması vb.). Modern IDE, dinamik yazma ile ilgili riskleri önemli ölçüde azalttığı için akıllıca kelimeler de kullanılır: