Spagetti kodu - Spaghetti code

Spagetti kodu , yapılandırılmamış ve bakımı zor kaynak kodu için aşağılayıcı bir ifadedir . Spagetti kodu, değişken proje gereksinimleri, programlama stili kurallarının eksikliği ve yetersiz yetenek veya deneyime sahip yazılım mühendisleri gibi çeşitli faktörlerden kaynaklanabilir .

Anlam

Yapılandırılmış programlama yapıları yerine GOTO deyimlerini aşırı kullanan , karmaşık ve sürdürülemez programlarla sonuçlanan koda genellikle spagetti kodu denir. Bu tür bir kodun karmaşık ve karışık bir kontrol yapısı vardır , bu da kavramsal olarak bir kase spagetti gibi , bükülmüş ve karışık bir program akışına neden olur . Amerika Birleşik Devletleri Ulusal Standartlar Bürosu tarafından 1980 yılında yayınlanan bir yayında , spagetti programı ifadesi "parçalanmış ve dağınık dosyalara" sahip eski programları tanımlamak için kullanılmıştır. Karmaşık yazılım kodu ayrıca açıklamak önleyici model ki burada nesne yönelimli kod olan yöntemleri aşırı uzun ve dağınık sınıfları oluşturmak, ya da bu gibi nesne yönelimli kavramları vazgeçme tarafından bu şekilde, bir usul tarzda yazılmıştır polimorfizmi . Bu tür spagetti kodunun varlığı, bir sistemin anlaşılırlığını önemli ölçüde azaltabilir.

Tarih

Spagetti kodu ifadesinin ne zaman yaygın kullanıma girdiği belli değil; bununla birlikte, 1977'de Guy Steele'in Macaroni is Better Than Spaghetti'yi içeren birkaç referansı yayınlandı . Richard Conway , 1978 yılında PL/I, PL/CS ve PL/CT kullanarak disiplinli programlama üzerine bir primer adlı kitabında bu terimi "bir tabak spagetti ile aynı temiz mantıksal yapıya sahip" program türlerini tanımlamak için kullandı. 1979 yılında David Gries ile birlikte yazdığı Programlamaya Giriş kitabında tekrarlandı . 1988 tarihli A spiral model yazılım geliştirme ve geliştirme makalesinde , bu terim, planlamadan yoksun ve sonunda şelale modelinin geliştirilmesine yol açan kod ve düzeltme modelinin eski uygulamasını tanımlamak için kullanılır . 1979 tarihli COBOL programcısı için Yapılandırılmış programlama kitabında , yazar Paul Noll, kötü yapılandırılmış kaynak kodunu tanımlamak için spagetti kodu ve sıçan yuvası ifadelerini eşanlamlı olarak kullanır.

In Ada - Avrupa '93 konferansında, Ada nedeniyle kısıtlayıcı istisna yayılma mekanizmasının, "yerine spagetti kod, üretmek anlaşılabilir" için programcı zorlayarak olarak nitelendirildi.

The Michigan Technic dergisinde 1981'de yayınlanan "BASICally...FORTRAN bytes!!" başlıklı bir bilgisayar dilleri sahtekarlığında yazar, FORTRAN'ı "tamamen spagetti kodundan oluştuğunu" belirterek tanımladı .

Richard Hamming, derslerinde, ikili kodlarda erken programlama bağlamında terimin etimolojisini açıkladı:

Bir hatayı düzeltirken, bazı atlanmış talimatları eklemek istiyorsanız, hemen önceki talimatı aldınız ve onu boş bir alana transfer ile değiştirdiniz. Buraya az önce yazdığınız talimatı yerleştirdiniz, eklemek istediğiniz talimatları eklediniz ve ardından ana programa geri transfer yaptınız. Böylece program kısa sürede kontrolün garip yerlere atladığı bir dizi haline geldi. Neredeyse her zaman olduğu gibi, düzeltmelerde hatalar olduğunda, başka bir kullanılabilir alan kullanarak aynı numarayı tekrar kullandınız. Sonuç olarak, programın depolama yoluyla kontrol yolu kısa sürede bir kutu spagetti görünümüne büründü. Neden onları talimatların akışına basitçe eklemiyorsunuz? Çünkü o zaman tüm programı gözden geçirmeniz ve taşınan talimatlardan herhangi birine atıfta bulunan tüm adresleri değiştirmeniz gerekir! Bundan başka bir şey!

İlgili ifadeler

mantı kodu

Ravioli kodu, nesne yönelimli programlamaya özgü bir terimdir . Ayrı ayrı anlaşılması kolay, ancak bir bütün olarak anlaşılması zor , iyi yapılandırılmış sınıflardan oluşan kodu açıklar .

lazanya kodu

Lazanya kodu, katmanları çok karmaşık ve iç içe geçmiş, bir katmanda değişiklik yapmanın diğer tüm katmanlarda değişiklik yapılmasını gerektiren kodu ifade eder.

Örnekler

Burada yer spagetti kod önemsiz bir örneği olarak düşünülebilir ne şu BASIC . Program 1'den 100'e kadar olan sayıların her birini karesiyle birlikte ekrana yazdırır. Girinti, kod tarafından gerçekleştirilen çeşitli eylemleri ayırt etmek için kullanılmaz ve programın GOTOifadeleri satır numaralarına güvenir . Bir alandan diğerine yürütme akışını tahmin etmek daha zordur. Spagetti kodunun gerçek dünyadaki oluşumları daha karmaşıktır ve bir programın bakım maliyetlerine büyük ölçüde katkıda bulunabilir.

1 i=0;

2 i=i+1;

3 PRINT i; "squared=";i*i;

4 IF i>=100 THEN GOTO 6;

5 GOTO 2;

6 PRINT "Program Completed.";

7 END

Yapılandırılmış bir programlama tarzında yazılmış aynı kod :

1 FOR i=1 TO 100
2     PRINT i;"squared=";i*i
3 NEXT i
4 PRINT "Program Completed."
5 END

Program bir bölgeden gelen atlar, fakat bu atlama, biçimsel ve daha kolay tahmin edilebilir döngüler için ve işlevleri sağlamak akış kontrolü oysa git deyimi keyfi akış kontrolü teşvik eder. Bu örnek küçük olsa da, gerçek dünya programları birçok kod satırından oluşur ve spagetti kodu tarzında yazıldığında bakımı zordur.

İşte gömülü GOTO ifadeleri içeren başka bir Spagetti kodu örneği.

  INPUT "How many numbers should be sorted? "; T
  DIM n(T)
  FOR i = 1 TO T
    PRINT "NUMBER:"; i
    INPUT n(i)
  NEXT i
  'Calculations:
  C = T
 E180:
  C = INT(C / 2)
  IF C = 0 THEN GOTO C330
  D = T - C
  E = 1
 I220:
  f = E
 F230:
  g = f + C
  IF n(f) > n(g) THEN SWAP n(f), n(g)
  f = f - C
  IF f > 0 THEN GOTO F230
  E = E + 1
  IF E > D THEN GOTO E180
 GOTO I220
 C330:
  PRINT "The sorted list is"
  FOR i = 1 TO T
    PRINT n(i)
  NEXT i

Ayrıca bakınız

Referanslar

Dış bağlantılar