Spagetti kodu - Spaghetti code

Spagetti kodu bir aşağılayıcı yapılandırılmamış ve zorsürdürmek kaynak kodu. Spagetti kodu, uçucu gibi birkaç faktörden kaynaklanabilir. proje gereksinimler, eksikliği programlama stili kurallar ve yetersiz yetenek veya deneyim.[1]

Anlam

Aşırı kullanan kod GİT yerine ifadeler yapısal programlama kıvrımlı ve sürdürülemez programlarla sonuçlanan yapılar genellikle spagetti kodu olarak adlandırılır.[2]Böyle bir kodun karmaşık ve karışık bir denetim yapısı kavramsal olarak bir program akışına neden olur. bir kase spagetti, bükülmüş ve karışık.[3]1980 tarihli bir yayında Amerika Birleşik Devletleri Ulusal Standartlar Bürosu, ifade spagetti programı "parçalanmış ve dağınık dosyalara" sahip eski programları tanımlamak için kullanılmıştır.[4]Spagetti kodu ayrıca bir desen karşıtı içinde nesne yönelimli kod Yöntemleri aşırı uzun ve dağınık olan sınıflar oluşturarak veya gibi nesne yönelimli kavramları terk ederek, yordamsal bir tarzda yazılmıştır. çok biçimlilik.[5] Bu tür bir spagetti kodunun varlığı, bir sistemin anlaşılabilirliğini önemli ölçüde azaltabilir.[6]

Tarih

Spagetti kodunun ne zaman ortak kullanıma girdiği belli değil; ancak, 1977'de, Makarna Spagettiden Daha İyidir Yapay zeka ve programlama dilleri üzerine 1977 sempozyumunun Bildirilerinde yayınlanan Steele tarafından. 1978 kitabında PL / I, PL / CS ve PL / CT kullanarak disiplinli programlama üzerine bir astarRichard Conway terimi, "bir tabak spagetti ile aynı temiz mantıksal yapıya sahip" program türlerini tanımlamak için kullandı.[7] 1979 kitabında tekrarlanan bir cümle Programlamaya Giriş birlikte yazdı David Gries.[8] 1988 gazetesinde Yazılım geliştirme ve iyileştirmenin sarmal modeliterim, eski uygulamalarını tanımlamak için kullanılır. kodlama ve düzeltme modeliplanlamadan yoksun olan ve sonunda şelale Modeli.[9] 1979 kitabında COBOL programcısı için yapısal programlama, yazar Paul Noll cümleleri kullanıyor spagetti kodu ve Fare yuvası zayıf yapılandırılmış kaynak kodunu tanımlamak için eşanlamlılar olarak.[10]

İçinde Ada - Avrupa '93 konferans, Ada kısıtlayıcı istisna yayma mekanizması nedeniyle programcıyı "spagetti kodu yerine anlaşılır üretmeye" zorlamak olarak tanımlandı.[11]

1981'de bir bilgisayar dillerinde parodi Michigan Tekniği "TEMEL olarak konuşursak ... FORTRAN bayt !!" başlıklı yazar, FORTRAN "tamamen spagetti kodundan oluştuğunu" belirterek.[12]

Richard Hamming derslerinde anlattı[13] İkili kodlarda erken programlama bağlamında terimin etimolojisi:

Bir hatayı düzeltirken, atlanan bazı talimatları eklemek istiyorsanız, hemen önceki talimatı alıp yerine boş bir alana aktarırsınız. Orada az önce yazdığınız talimatı eklediniz, eklemek istediğiniz talimatları eklediniz ve ardından ana programa geri döndünüz. Böylece program kısa sürede kontrolün tuhaf yerlere sıçradığı bir dizi haline geldi. Neredeyse her zaman olduğu gibi, düzeltmelerde hatalar olduğunda, aynı numarayı başka bir kullanılabilir alanı kullanarak tekrar kullandınız. Sonuç olarak programın depolama yoluyla kontrol yolu kısa süre sonra bir kutu spagetti görünümüne büründü. Neden bunları talimatlar dizisine 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

Ravioli kodu

Mantı kod özel bir terimdir nesne yönelimli programlama. İyi yapılandırılmış bir kodu açıklar sınıflar tek başına anlaşılması kolay, ancak bir bütün olarak anlaşılması zor.[14]

Lazanya kodu

Lazanya kod, katmanları o kadar karmaşık ve iç içe geçmiş ki bir katmanda bir değişiklik yapmak diğer tüm katmanlarda değişiklik yapılmasını gerektirecek kodu ifade eder.[15]

Örnekler

Aşağıda, spagetti kodunun önemsiz bir örneği olarak kabul edilecek olan şey şu şekildedir: TEMEL. 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 GİT ifadeler güven yaratır Satır numaraları. Bir alandan diğerine uygulama akışını tahmin etmek daha zordur. Spagetti kodunun gerçek dünyadaki oluşumları daha karmaşıktır ve bir programın bakım maliyetlerini büyük ölçüde artırabilir.

1ben=02ben=ben+13YAZDIRben;"kare =";ben*ben4EĞERben>=100SONRAGİT65GİT26YAZDIR"Program Tamamlandı."7SON

İşte aynı kod bir yapısal programlama stil:

1İÇİNben=1KİME1002YAZDIRben;"kare =";ben*ben3SONRAKİben4YAZDIR"Program Tamamlandı."5SON

Program bir alandan diğerine atlıyor, ancak bu atlama resmi ve daha kolay öngörülebilir çünkü döngüler için ve fonksiyonlar sağlamak akış kontrolü oysa git ifadesi keyfi akış denetimini 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.

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

GİRİŞ"Kaç sayı sıralanacak?";TDIMn(T)İÇİNben=1KİMETYAZDIR"NUMARA:";benGİRİŞn(ben)SONRAKİbenHesaplamalar:C=TE180:C=INT(C/2)EĞERC=0SONRAGİTC330D=T-CE=1I220:f=EF230:g=f+CEĞERn(f)>n(g)SONRADEĞİŞTİRn(f),n(g)f=f-CEĞERf>0SONRAGİTF230E=E+1EĞERE>DSONRAGİTE180GİTI220C330:YAZDIR"Sıralanan liste"İÇİNben=1KİMETYAZDIRn(ben)SONRAKİben

Ayrıca bakınız

Referanslar

  1. ^ Markus, Pizka (2004). "Yeniden düzenleme ile spagetti kodunu düzeltmek mi?" (PDF). Yazılım Mühendisliği Araştırma ve Uygulama: 846–852. Alındı 5 Mart 2018.
  2. ^ Cram, David; Hedley Paul (2005). "Zamirler ve yordamsal anlam: Spagetti kodu ve paranoyak sanrının alaka düzeyi" (PDF). Oxford Üniversitesi Dilbilim, Filoloji ve Fonetik Alanında Çalışma Raporları. 10: 187–210. Alındı 5 Mart 2018.
  3. ^ Horstmann, Cay (2008). "Bölüm 6 - Yineleme". AP Bilgisayar Bilimi için Java Kavramları (5. baskı [yani 2. baskı]. Baskı). Hoboken, NJ: J. Wiley & Sons. s. 235–236. ISBN  978-0-470-18160-7. Alındı 2 Ocak 2017.
  4. ^ Birleşik Devletler Ulusal Standartlar Bürosu (1980). ASTM özel teknik yayını. Amerika Birleşik Devletleri Hükümeti Baskı Ofisi.
  5. ^ Moha, N .; Gueheneuc, Y. G .; Duchien, L .; Meur, A.F. Le (Ocak 2010). "DEKOR: Kod ve Tasarım Kokularının Belirlenmesi ve Algılanması İçin Bir Yöntem". Yazılım Mühendisliğinde IEEE İşlemleri. 36 (1): 20–36. CiteSeerX  10.1.1.156.1524. doi:10.1109 / TSE.2009.50. ISSN  0098-5589.
  6. ^ Abbes, M .; Khomh, F .; Gueheneuc, Y. G .; Antoniol, G. (2011). İki Antipattern, Blob ve Spagetti Kodunun Programın Anlaşılması Üzerindeki Etkisinin Ampirik Bir Çalışması. 2011 15. Avrupa Yazılım Bakımı ve Yeniden Yapılandırma Konferansı. s. 181–190. CiteSeerX  10.1.1.294.1685. doi:10.1109 / CSMR.2011.24. ISBN  978-1-61284-259-2.
  7. ^ Conway Richard (1978). PL / I, PL / CS ve PL / CT kullanarak disiplinli programlama üzerine bir astar. Winthrop Yayıncıları. ISBN  978-0-87626-712-7.
  8. ^ Conway, Richard; Gries, David (1979). Programlamaya Giriş (3. baskı). Küçük, Brown. ISBN  978-0-316-15414-7.
  9. ^ Boehm Barry W. (Mayıs 1988). "Yazılım geliştirme ve iyileştirmenin sarmal modeli". IEEE Bilgisayar. 21 (2): 61–72. doi:10.1109/2.59.
  10. ^ Noll, Paul (1977). COBOL programcısı için yapısal programlama: tasarım, dokümantasyon, kodlama, test. M. Murach & Associates.
  11. ^ Schwille, Jürgen (1993). "İstisnaların kullanımı ve kötüye kullanımı - uygun istisna işleme için 12 kılavuz". Bilgisayar Bilimlerinde Ders Notları. Ada - Avrupa '93 (Bildiriler). 688. Springer Berlin Heidelberg. s. 142–152. doi:10.1007/3-540-56802-6_12.
  12. ^ MTSBS[açıklama gerekli ] (Mart-Nisan 1981). "Temel olarak ... FORTRAN baytları !!". Michigan Tekniği. 99 (4).CS1 Maint: birden çok isim: yazarlar listesi (bağlantı)
  13. ^ Hamming Richard (1996). Bilim ve Mühendislik Yapma Sanatı. ISBN  9056995006.
  14. ^ Troyer, O. De (13 Mayıs 1991). OO-ikili ilişki modeli: Gerçek bir nesne yönelimli kavramsal model. İleri Bilgi Sistemleri Mühendisliği. Sayısal Akışkanlar Mekaniği ve Multidisipliner Tasarım Üzerine Notlar. 141. s. 561–578. doi:10.1007/3-540-54059-8_104. ISBN  978-3-319-98176-5.
  15. ^ Tomov, Latchezar; Ivanova, Valentina (Ekim 2014). "Yazılım Mühendisliğinde İyi Uygulamaları Karşı Örneklerle Öğretme". Bilgisayar Bilimi ve Bilgisayar Bilimlerinde Eğitim (1): 397–405. Alındı 5 Mart 2018.

Dış bağlantılar