Lokasyon başına ortalama hata sayısı farklı programlama dilleri için aynı mıdır? [kapalı]


45

Farklı programlama dilleri için kod satırı başına ortalama hata / hata sayısının "sabit" olduğu söylendi. 10 KLOC of Ruby, 10 KLOC c ++ ile aynı sayıda hataya sahip olacaktır. Bu argüman genellikle, ifade eden dillerin kullanımını desteklemek için kullanılır (c ++ / assembly üzerinden python / ruby). Aynı işlevi tanımlayan satır sayısı daha az olacaktır.

Bu iddianın nereden geldiğini bilen var mı? Yüksek seviye dilleri daha az hataya neden olur mu?


11
Bazı dillerin, diğerlerinden daha fazla açıklama içeren bir stili teşvik ettiğini düşünmek mantıksız görünüyor.
Caleb

10
Bugs / LOC, her şey için çok yanlış bir ölçümdür. Dile bağlıdır, ancak programcıya yazması çok daha fazla bağlıdır. Bu yüzden, dilin ortalamasını almak anlamsızdır, çünkü büyük dalgalanmalar diğer değişkendedir. Bu sadece IMO, ofc.
K.Steff

3
Size Perl'de yazdığım hataların / satırların sayısının C yazdığımdan çok daha büyük olacağını söyleyebilirim. Bir arkadaşım bir Perl büyücüsüdür ve onun için de C'deki hataların / satırın C'den çok daha büyük olduğunu söyleyebilirim. Perl. Bu metriğin nasıl faydalı olabileceğini görmek zor.
Caleb

4
Gerçekten bunun {1≥⍴⍵:⍵⋄e←⍵[?⍴⍵]⋄ (∇(⍵<e)/⍵) , ((⍵=e)/⍵) , ∇(⍵>e)/⍵}bir hata içerme ihtimalinin yüksek olduğunu düşünüyor musunuz int pivot = arr.Count / 2;?
salı

2
Ben sadece bu soruyu rastladım. Niye kapalı olduğunu bulamadım. bu, bu site için mükemmel bir soru. Büyük bir proje için, KLOC başına hatalar, programcıların ne kadar iyi olduklarının bir ölçütü değildir. Organizasyonun ve sürecin ne kadar iyi olduğunun bir ölçüsüdür.
David Hammen

Yanıtlar:


43

Sezginin aksine, 1000 satır başına düşen hataların sayısı, ilgili dilden bağımsız olarak nispeten sabit görünmektedir. Kod Tamamlama ve Yazılım Tahmininin yazarı Steve McConnell : Siyah Sanatın Demistleştirilmesi bu alanın bir kısmını ayrıntılı olarak ele alıyor.

Elimde kopyalarım hazır değil - işte kitaplığımın başında oturuyorlar - ancak hızlı bir Google alakalı bir teklif buldu:

Endüstri Ortalaması: "1000 satır teslim kodu başına yaklaşık 15 - 50 hata."
(Steve) ayrıca bunun genellikle arkasında bir miktar yapılandırılmış programlama seviyesi olan kodu temsil ettiğini, ancak muhtemelen bir kodlama teknikleri karışımı içerdiğini söylüyor.

Code Complete'den alıntı , burada bulundu: http://mayerdan.com/ruby/2012/11/11/bugs-per-line-of-code-ratio/

Eğer bellek doğru çalışıyorsa, Steve bu konuda tam bir tartışmaya giriyor, rakamların diller arasında (C, C ++, Java, Assembly vb.) Ve zorluklara rağmen (“kod satırının” ne anlama geldiğini tanımlamak gibi) sabit olduğunu gösteriyor.

En önemlisi kaynakları için çok fazla alıntı yapıyor - doğrulanmamış görüşler sunmuyor, ancak onları destekleyecek referansları var.

Bu aşağı kaynıyor gibi görünüyor: kloc başına ortalama hata sayısı, geliştiricilerin belirli bir dilin veya platformun kendine özgü avantajlarından veya dezavantajlarından ziyade yanılabilir insanlar olduğu gerçeğinin bir özelliği gibi görünmektedir.

(Bir yana: Zaten Code Complete'iniz yoksa, gidip kendinize bir kopya alın ve baştan sona okuyun - yatırıma değer.)

Güncelleme : Buradaki bazı cevapların oynadığı başka bir faktör var - büyük ölçekli istatistikler genel tahminlerde bulunmak için faydalı ancak spesifik olanları değil. Nüfus ölüm tablolarının, bu yıl trafik kazalarında kaç kişinin öleceğini tahmin edebileceğini, ancak hangi kişilerin öleceğini söyleyemeyeceğinizi düşünün. Benzer şekilde, kloc başına göreceli olarak sabit sayıda kusur gösteren endüstri istatistikleri, belirli bir projenin ne kadar iyi veya ne kadar zayıf olacağını - belirli bir projede ne olacağını ya da ne olacağını tahmin etmek için kullanılamaz.


4
Yazılım Tahmini'nin bir kopyasına sahip değilsiniz, ancak Kod Komple McConnel'da Capers Jones "Program Kalitesi ve Programcı Üretkenliği" 1977 raporunu proje büyüklüğü başına LOC başına bir hata tablosu olarak belirtiyor. McConnel'in yapmaya çalıştığı nokta, projenin büyüklüğü arttıkça hataların çarpıcı biçimde artması ve verinin yalnızca "sektörün bir görüntüsü" olduğunu ve "sayıların, üzerinde çalıştığınız projeler için çok az benzerlik gösterebileceğini" kaydetmesidir. ". Gerçekten bu soru ile ilgisi olan hiçbir şey göremiyorum.
Roc Martí

Hangi Kod Tamamlama sürümü @ RocMartí'niz var? İkinci baskının büyük bir güncelleme olduğunu biliyorum. Kazmak ve Pazartesi günü işe girdiğimde ne yazdığını görmek zorunda kalacak.
Bevan

Düzenlemenizin ( Güncelleme :) sorunun asıl nedeni olduğunu düşünüyorum . Veya, Mark Twain'in dediği gibi, üç çeşit yalan vardır: Yalanlar, Lanet olası Yalanlar ve İstatistikler.
GalacticCowboy

1
@ RocMartí "Projenin büyüklüğü arttıkça hatalar çarpıcı biçimde artıyor" Suyun nemli olduğunu da belirtti mi? Elbette işler daha karmaşık hale geldiğinde hatalar var. Çünkü her yeni değişiklik, etkilenebilecek her olası parçayı göz önünde bulundurmalıdır. Proje büyüdükçe büyür.
Parthian

3
Alıntı ya yanlış ya da modası geçmiş. İkinci baskıda sayfa 521: "Endüstride ortalama tecrübe, teslim edilen yazılım için 1000 kod başına 1 - 25 hata. Yazılım genellikle teknik bir hodgepodge kullanılarak geliştirildi."
Aryeh Leib Taurog

18

Bu iddia - en iyi ihtimalle - saftır.

SLOC, belki iki veya daha fazla projenin boyutunu karşılaştırmak dışında, yararlı bir şey için tam olarak güvenilir bir ölçüm değildir. Ayrıca Sloc fiziksel KO ve mantıksal LOC iki farklı tipi vardır ve bu kudreti önemli ölçüde farklıdır. Vikipedi'den bu örneği ele alalım :

for (i = 0; i < 100; i += 1) printf("hello"); 

Burada bir fiziksel LOC var, fakat iki mantıksal ( forve printfifadeler) var. Ama tabii ki örneği şöyle yazabiliriz:

for (i = 0; i < 100; i += 1) 
  printf("hello"); 

Bu bize iki fiziksel ve iki mantıksal LOC verecek. Fiziksel LOC'lara bağlı olan herhangi bir "loc başına hata" ölçümünün programlama stiline göre işaretleneceği açıktır, bu nedenle ölçümümüz büyük ölçüde işe yaramaz olacaktır.

Öte yandan, mantıksal LOC'lar ile gidersek, ölçümümüz büyük ölçüde dilin sözdizimsel deyişlerine bağlı olacaktır. Ortaya çıkan metrik rağmen belki aynı dilde yazılmış projelerini karşılaştırırken biraz yararlı olabilir, farklı dillerde yazılmış projeler için oldukça yararsız olacaktır.

Talep için olası bir kaynak Les Hatton'un Yazılım başarısızlıkları-kötüler ve yanlışlar :

Programlama dili seçiminin en iyi şekilde güvenilirlikle ilgili olduğu sonucuna varabiliriz.

Daha sonra, makale C ve C ++ için benzer hata yoğunluklarından bahseder:

Benzer boyuttaki iki benzer sistemi (her biri yaklaşık 50.000 satır), biri C ve diğeri nesne tasarımlı C ++ ile karşılaştıran yeni bir çalışmada, sonuçta ortaya çıkan hata yoğunluklarının sırasıyla 1000 ve 2.4'te 2,9'da aynı olduğu gösterilmiştir.

Ancak bu, programlama dilleri arasında "LOC başına hata" nın sabit olduğu veya eğer öyleyse önemli olacağı anlamına gelmez.


Hataların / ifadelerin sabit olduğunu varsayarsanız, diller için bir fark vardır. C örneği genellikle for () ve printf () arglarında hatalara sahiptir. Printf işlevini tam olarak kodlamanız gerekiyorsa, orantılı olarak daha fazla hataya sahip olursunuz ve tek bir printRepeat () çağrısı ile daha yüksek düzeyde bir diliniz varsa, yanlış anlama için daha az fırsat olurdu.
Martin Beckett

2
Özet: deyim / işlev noktası başına hata sabittir, düşük seviyeli diller yanlış programlayıcı tarafından yazılmış daha fazla koda sahiptir, daha az yazdığınız yüksek seviye diller - bu nedenle daha az hata vardır. Her ne kadar tamamen yanlış tasarım tipi hatalar olsa da muhtemelen aynı!
Martin Beckett

2
“Bir böceği” neyin oluşturduğunun son derece öznel olduğunu ve bu böceklerin ciddiyet, etki ve önem açısından çılgınca farklılık göstermesine izin verin.
tdammers

@tdammers Ve bu önemi olumsuz olabilir. Müvekkilin / bekliyor / istediği için bir avuç
hatamız var

@Izkata: bir hata tanımınıza göre değişir ...
tdammers

12

Bu gözlem çok eski ve çok değerli bir kaynaktan, yani Fred Brooks'un "Efsanevi Adam Ayı" kitabında geliyor. IBM'in üst düzey yöneticilerinden biriydi ve milyonlarca hat işletim sistemi olan OS / 360 dahil olmak üzere birçok programlama projesini yönetti. Aslında, bir programdaki hata sayısının kodun uzunluğuyla orantılı olmadığını ama ikinci dereceden ! Araştırmasına göre, hataların sayısı, programın gücünün uzunluğu 1.5 ile orantılıydı. Başka bir deyişle, on kat daha uzun bir program 30 kat daha fazla hataya sahiptir. Ve bunun tüm programlama dilleri ve programlama dilleri seviyelerinde tutulduğunu bildirdi.


6

LOC başına hataların belirli bir dil için hiç sabit olduğunu bulamıyorum. LOC başına hatalar, bazı Yöneticilerin gözden geçirme zamanı geldiğinde geliştiricilerin kalitesini belirlemek için kullandıkları bir ölçü gibi görünüyor.

Şimdi bunun dışında, bazı diller diğerlerinden daha fazla hata veya kusurya açık. Genellikle, ancak her zaman bu değil, daha yüksek bir dilden daha düşük bir dildir. Mesela C # 'ya karşı C # (ya da Java.)' Da kodlama derim, çünkü bunun gerçekliği ve aradığınız cevabın zekâsı, geliştirici kalitesine ve kodlama uygulamalarına bağlıdır. Ortalama Java / C # geliştiricilere göre çok daha yüksek kod kalitesine ve düşük hata sayısına sahip çok iyi C geliştiricileri gördüm. Bu, kıdemli bir geliştiriciyi küçük bir geliştiriciden ayıran öğedir. Belirli bir zaman dilimi içinde ne kadar LOC yazdıkları değil, dilin, LOC'nin veya zaman çerçevesinden bağımsız olarak yazılan kodun kalitesi.

İlgili olabilecek verebileceğim tek cevap, LOC'nin ne kadar fazla olduğu ve bir kusur olma ihtimalinin yüksek olduğu ve var olan hataların o kadar fazla olmasıdır.


Sorum, dilden bağımsız olarak kod satırı başına ortalama hata sayısı ile ilgili.
Kristian,

4
@Kristian böyle bir numara yok. Her kişi için kod yazıcısı olan geliştirici ve dilin işi ve uzmanlığına göre değişir. Evrensel bir ortalama olduğunu sanmıyorum.
Akira71

1
@ Akira71 "böyle bir numara yok" Peki, elbette. Ancak, sayıları çıkarabileceğiniz olasılık dağılımları vardır. Ayrıca Amazon yağmur ormanlarında yılda kaç inç yağmur yağdığı konusunda bir rakam yoktur, ancak ortalama bir değer alabilirsiniz.
Parthian

3

Kod Satırı Başına Hata Sayısı

Hatalar / LOC yalnızca bireye göredir. Kaynak kod havuzuna bağlanan hata izleme araçlarını kullanan işletmeler için. Bir yöneticinin sorunları, geliştiriciye göre düzenlemek, geçmiş sayılara ve kod değişikliklerine göre sıralaması mümkündür.

Hatalar İşinize Göre

Son derece deneyimli, son derece yetenekli, çok akıllı ve bağımsız işler yapabilen üst düzey bir yazılım geliştiricinin, bir izleme sisteminde daha fazla hataya sahip olma olasılığı çok daha düşük, daha sonra da çok az deneyime sahip küçük bir geliştirici olması muhtemel.

Bu nasıl mümkün olabilir?

Üst düzey geliştiriciler genellikle daha yüksek risk geliştirme görevlerinde bulunurlar. Kodun yeniden düzenlenmesi ve örnek olarak yeni sistemler oluşturulması. Küçük geliştiriciler genellikle üst düzey geliştiricilerin zamanına değmeyen bilinen sorunları çözmek için görevlendirilir.

Bu nedenle, bir göreve atanan bir genç, böcek getirmez, düzeltir ve üst düzey bir geliştiricinin bunları getirme riski vardır, çünkü arşivlemeye çalıştıkları şeyin yararı, bunları tamamlayan küçük sorunlardan daha önemlidir. görevler.

Dil Sözdizimi Önemli

Bir dilin daha az hata getirdiği iddiası, çünkü daha az kod satırında daha fazlasını başarabildiği için tam bir efsanedir. C ++ / C # / Java gibi yüksek derecede yapılandırılmış diller, geliştiriciyi, istenen talimatın ne olduğunu, Python / PHP gibi dillerin çok iyi yapılandırılmamış olması durumunda açıkça belirtmelerini ister. Bu diller, yalnızca bir geliştiriciyi değil aynı zamanda dil ayrıştırıcısını da karıştıracak yazılı ifadelere izin verir.

Derleyici Hataları Azaltır

Python / PHP'deki kaç hata bunu üretim sunucularına dönüştürdü, çünkü geliştiricinin bir şeyin yanlış olduğu konusunda uyarıcı derleyici yoktu. LOC başına hataları ölçtüğünüzde, derleyici kaynak kodunu işlemeden önce mi yoksa sonra mı?

2019 güncellemesi:

Derleyiciler, doğanın veya böceklerin sayısında bir fark yaratmaz. Hatalar tamamen kaynak kodunu yazan kişiye göre görecelidir ve böceklerin kendileri doğaları gereği çok öznel olabilir.


3
Derleyici azaltma hatalarını yeniden yazın: Hem Python hem de PHP teknik olarak derleyicilere sahipler, sadece statik olarak yazılmış dillerin yaptığı kontrolleri yapmıyorlar. Ayrıca, böyle bir kontrolün son hata sayımı üzerinde önemli bir etkisi olduğu konusunda hemfikir değilim, çünkü bir derleyici tarafından yakalanabilecek neredeyse tüm hatalar minimum testle yakalanır.
Winston Ewert

3
Derleyici tarafından yakalanabilecek hataların genellikle makul otomatik veya manuel testlerle yakalanacağı kabul edildi. Aradaki fark, statik olarak yazılmış dillerin size (a) ücretsiz testin ilk geçişini vermesi ve (b) gerçekten, çok hızlı bir şekilde yapmasıdır. İyi bir Ruby birimi sınama paketi derleyiciden daha iyidir, ancak genellikle bunları hızlı çalıştıramazsınız, ücretsiz olarak alamazsınız ve normalde kod satırına neredeyse o kadar yaklaşmazlar. sorun.
Ken Smith,

@KenSmith statik tipleri ücretsiz değildir. courses.cs.washington.edu/courses/cse590n/10au/…
Hugo Wood

1

FWIW, deneyimime göre

  1. İki tür hata vardır: a) programın beklentileri karşılamadığı ve b) programın herhangi bir makul beklentiyi karşılamadığı durumlar. Çünkü çöküyor / takılıyor / derlenmiyor.

  2. Dil ne olursa olsun, (b) tipindeki hatalar veri / sınıf yapısındaki fazlalıktan kaynaklanmaktadır, burada veri yapısının bir kısmındaki bir şeyi değiştirmek, yapıyı diğer kısımlarda bir veya daha fazla değişiklik yapılıncaya kadar tutarsız / bozuk bir duruma getirmektedir. . Buna katkıda bulunmak, bir kod satırında yapılan düzenlemenin başka bölümlerde bir veya daha fazla değişiklik yapılıncaya kadar kodu yanlış yaptığı kaynak kodunun artıklığıdır. Bu iki fazlalık türü, elbette yakından ilişkilidir, ve programcılar süper kişiler olmadıklarından, dikkatlerini dağıtırlar, bir şeyleri unuturlar ve hatalar yaparlar;

Bu şeyler (yine benim tecrübelerime göre) gerçekten dilin bir işlevi değil, programcının beceri / olgunluğunun bir işlevidir. Çok daha az hataya eğilimli olan programlar da, belirli bir işlevsellik kümesi için, LOC açısından çok daha küçük olma eğilimindedir.

Bazılarının program yazdığı, bazılarının dizin yazdığı, eskilerinin ise ikincisine kıyasla "sadece çalışma" eğiliminde olduğu sistemler gördüm.


1

Kodlama hatalarındaki kilit bir faktörün, belirli bir çözüm tanımı ile çözülecek kod arasındaki "anlamsal boşluk" dediğim şeyle ilgili olacağını umuyorum - bu kodların çok yakın olduğu yerlerde reform reform hataları daha belirgin olacaktı. farklı, birçok hata beklenebilir. Belli dillerin paradigması, belirli sorun alanlarıyla yakından eşleşir - elektronik tablolar günlük iş hesaplamaları için çok uygundur, bu da hem çok az "kod" hem de "kod" un sorun alanına çok yakın olmasıyla sonuçlanır. Beklenen kod hem çok kısa hem de çok az hata. Aksine montajcı kullanmak birçok KLOC gerektirir ve çok fazla hata üretme olasılığı yüksektir.


Bu nasıl indirildi? SO palyaçolar dolu hale geliyor
codyc4321

0

Kod satırları hakkında konuşmak yerine - ki gerçekten işe yaramaz bir ölçüm olan - sorunuzun bu bölümünü ele almak istiyorum:

Yüksek seviye dilleri daha az hataya neden olur mu?

Bu, böcek / LOC'den farklıdır, çünkü daha yüksek seviyeli diller daha az kodla daha fazlasını yapar. Bazı özellik gereksinimlerinin uygulanması, 15000 satır x86 montajına karşılık 500 satır LISP alabilir.

Bu nedenle, hatalar / LOC tüm diller arasında sabit olsa bile, üst seviye dil hala daha az hata verecektir.


2
"Yararsız bir metrik" kod satırı? Hayır, program karmaşıklığının kabaca bir yaklaşımıdır. Yararlı olabilir çünkü ölçülmesi kolaydır ve geliştirme zamanı ile yakından ilgilidir.
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.