Spaghetti -Code

Spaghetti -Code ist ein abwertend Phrase für unstrukturierte und schwer zu erkennenpflegen Quellcode. Spaghetti -Code kann durch verschiedene Faktoren verursacht werden, wie z. B. volatile Projekt Anforderungen, Mangel an Programmierstil Regeln und Software -Ingenieure mit unzureichenden Fähigkeiten oder Erfahrung.[1]

Bedeutung

Code, der überaus überaus GEHE ZU Aussagen und nicht Strukturierte Programmierung Konstrukte, die zu verschlungenen und unbemerkbaren Programmen führen, wird oft als Spaghetti -Code bezeichnet.[2] Ein solcher Code hat einen komplexen und verwickelten control structure, was zu einem Programmfluss führt, der konzeptionell wie a ist Schüssel Spaghetti, verdreht und verwickelt.[3] In einer 1980er Veröffentlichung von der Nationales National Bureau of Standards der Vereinigten Staaten, der Satz Spaghetti -Programm wurde verwendet, um ältere Programme mit "fragmentierten und verstreuten Dateien" zu beschreiben.[4] Spaghetti -Code kann auch einen beschreiben Anti-Muster in welchem objektorientierter Code wird in einem prozeduralen Stil geschrieben, beispielsweise durch Erstellen von Klassen, deren Methoden zu lang und unordentlich sind oder objektorientierte Konzepte wie Polymorphismus.[5] Das Vorhandensein dieser Form des Spaghetti -Code kann die Verständlichkeit eines Systems erheblich verringern.[6]

Geschichte

Es ist nicht klar, wenn der Ausdruck Spaghetti -Code gemeinsam verwendet wurde. 1977 erschienen jedoch mehrere Referenzen, einschließlich Makkaroni ist besser als Spaghetti durch Guy Steele.[7] Im Buch von 1978 Eine Grundierung für disziplinierte Programmierung unter Verwendung von PL/I, PL/CS und PL/CT, Richard Conway verwendete den Begriff, um Arten von Programmen zu beschreiben, die "die gleiche saubere logische Struktur wie eine Platte von Spaghetti haben",[8] Eine Phrase, die im Buch von 1979 wiederholt wurde Eine Einführung in die Programmierung Er war Mitautor mit David Gries.[9] In der Arbeit von 1988 Ein Spiralmodell der Softwareentwicklung und -verbesserungDer Begriff wird verwendet, um die ältere Praxis der zu beschreiben Code- und Fixmodell, was fehlte Planung und schließlich zur Entwicklung der Wasserfall-Modell.[10] Im Buch von 1979 Strukturierte Programmierung für den COBOL -Programmierer, Autor Paul Noll verwendet die Phrasen Spaghetti -Code und Rattennest als Synonyme, um einen schlecht strukturierten Quellcode zu beschreiben.[11]

In dem ADA - Europa '93 Konferenz, Ada wurde beschrieben, dass der Programmierer aufgrund seines restriktiven Ausnahmeregelungsmechanismus "verständlich ist, anstelle von Spaghetti -Code".[12]

In einer 1981er Computersprachen in Parodie in Die Michigan -Technik Mit dem Titel "Grundsätzlich ... FORTRAN -BYTES !!", beschrieb der Autor Forran Aussagen, dass "es vollständig aus Spaghetti -Code besteht".[13]

Richard Hamming beschrieben in seinen Vorlesungen[14] Die Etymologie des Begriffs im Kontext der frühen Programmierung in Binärcodes:

Wenn Sie bei der Behebung eines Fehlers einige weggelassene Anweisungen einfügen wollten, haben Sie die unmittelbar vorhergehende Anweisung angenommen und durch eine Übertragung in einen leeren Raum ersetzt. Dort haben Sie die gerade geschriebene Anweisung eingelegt, die Anweisungen hinzugefügt, die Sie einfügen wollten, und dann von einer Übertragung zum Hauptprogramm zurück. So wurde das Programm bald zu einer Abfolge von Sprüngen der Kontrolle an seltsame Orte. Wenn, wie es fast immer passiert, gab es Fehler in den Korrekturen, die Sie dann erneut mit einem anderen verfügbaren Platz den gleichen Trick verwendeten. Als Ergebnis Der Kontrollweg des Programms durch Lagerung nahm bald das Erscheinungsbild einer Dose Spaghetti auf. Warum fügen Sie sie nicht einfach in den Anweisungen ein? Denn dann müssten Sie das gesamte Programm durchgehen und alle Adressen ändern, die auf eine der bewegten Anweisungen verwiesen wurden! Alles außer das!

Verwandte Phrasen

Ravioli -Code

Ravioli Code ist ein Begriff spezifisch für Objekt orientierte Programmierung. Es beschreibt Code, der gut strukturiert ist Klassen Das ist leicht isoliert zu verstehen, aber als Ganzes schwer zu verstehen.[15]

Lasagne -Code

Lasagne Code bezieht sich auf Code, dessen Ebenen so kompliziert und miteinander verflochten sind, dass eine Änderung einer Schicht Änderungen in allen anderen Ebenen erfordern würde.[16]

Beispiele

Hier folgt ein triviales Beispiel für Spaghetti -Code in BASIC. Das Programm druckt alle Nummern 1 bis 100 zusammen mit dem Quadrat auf den Bildschirm. Die Einrückung wird nicht verwendet, um die verschiedenen vom Code ausgeführten Aktionen und das Programm zu unterscheiden GEHE ZU Aussagen schaffen eine Abhängigkeit von Linien Nummern. Der Ausführungfluss von einem Bereich zum anderen ist schwerer vorherzusagen. Das Auftreten von Spaghetti-Code in der realen Welt ist komplexer und kann die Wartungskosten eines Programms erheblich hinzufügen.

1 i=0; 2 i=i+1; 3 DRUCKEN i; "Quadrat =";i*i; 4 WENN i> =100 DANN GEHE ZU 6; 5 GEHE ZU 2; 6 DRUCKEN "Programm abgeschlossen."; 7 ENDE 

Hier ist der gleiche Code in a Strukturierte Programmierung Stil:

1 ZUM i=1 ZU 100 2  DRUCKEN i;"Quadrat =";i*i 3 NÄCHSTE i 4 DRUCKEN "Programm abgeschlossen." 5 ENDE 

Das Programm springt von einem Bereich zum anderen, aber dieses Springen ist formal und leichter vorhersehbar, weil für Schleifen und Funktionen zur Verfügung stellen Ablaufsteuerung während die gehe zu Die Erklärung fördert beliebige Flusskontrolle. Obwohl dieses Beispiel klein ist, bestehen reale Programme aus vielen Codezeilen und sind schwer zu pflegen, wenn sie in einer Spaghetti -Code geschrieben sind.

Hier ist ein weiteres Beispiel für Spaghetti -Code mit eingebetteten Goto -Aussagen.

  EINGANG "Wie viele Zahlen sollten sortiert werden?"; T   Schwach n(T)   ZUM i = 1 ZU T   DRUCKEN "NUMMER:"; i   EINGANG n(i)   NÄCHSTE i   'Berechnungen:   C = T  E180:   C = Int(C / 2)   WENN C = 0 DANN GEHE ZU C330   D = T - C   E = 1  I220:   f = E  F230:   g = f + C   WENN n(f) > n(g) DANN TAUSCHEN n(f), n(g)   f = f - C   WENN f > 0 DANN GEHE ZU F230   E = E + 1   WENN E > D DANN GEHE ZU E180  GEHE ZU I220  C330:   DRUCKEN "Die sortierte Liste ist"   ZUM i = 1 ZU T   DRUCKEN n(i)   NÄCHSTE i 

Siehe auch

Verweise

  1. ^ Markus, Pizka (2004). "Beim Refactoring-Spaghetti-Code?" (PDF). Forschung und Praxis von Software -Engineering: 846–852. Archiviert von das Original (PDF) am 5. März 2018. Abgerufen 5. März 2018.
  2. ^ Cram, David; Hedley, Paul (2005). "Pronomen und prozedurale Bedeutung: Die Relevanz des Spaghetti -Code und der paranoiden Täuschung" (PDF). Arbeitspapiere der Universität Oxford in Linguistik, Philologie und Phonetik. 10: 187–210. Abgerufen 5. März 2018.
  3. ^ Horstmann, Cay (2008). "Kapitel 6 - Iteration". Java -Konzepte für AP -Informatik (5. Aufl. [D. H. 2. Aufl.]. Hrsg.). Hoboken, NJ: J. Wiley & Sons. S. 235–236. ISBN 978-0-470-18160-7. Abgerufen 2. Januar 2017.
  4. ^ Nationales Büro der Vereinigten Staaten (1980). ASTM Special Technical Publication. Regierung des US -Regierung der Vereinigten Staaten.
  5. ^ Moha, N.; Gueheneuc, Y. G.; Duchien, L.; Meur, A. F. Le (Januar 2010). "Dekor: Eine Methode zur Spezifikation und Erkennung von Code- und Designgerüchen". IEEE -Transaktionen auf Software -Engineering. 36 (1): 20–36. Citeseerx 10.1.1.156.1524. doi:10.1109/tse.2009.50. ISSN 0098-5589. S2CID 14767901.
  6. ^ Abbes, M.; Khomh, F.; Gueheneuc, Y. G.; Antoniol, G. (2011). Eine empirische Studie über den Einfluss von zwei Antipatterns, Blob und Spaghetti -Code, auf das Programmverständnis. 2011 15. Europäische Konferenz über Software -Wartung und -Regineering. S. 181–190. Citeseerx 10.1.1.294.1685. doi:10.1109/csmr.2011.24. ISBN 978-1-61284-259-2. S2CID 14152638.
  7. ^ Guy Lewis Steele. 1977. Macaroni ist besser als Spaghetti. In Proceedings of the 1977 Symposium über künstliche Intelligenz und Programmiersprachen. Vereinigung für Computermaschinen, New York, NY, USA, 60–66. Doi:https://doi.org/10.1145/800228.806933
  8. ^ Conway, Richard (1978). Eine Grundierung für disziplinierte Programmierung unter Verwendung von PL/I, PL/CS und PL/CT. Winthrop Publishers. ISBN 978-0-87626-712-7.
  9. ^ Conway, Richard; Gries, David (1979). Eine Einführung in die Programmierung (3. Aufl.). Little, braun. ISBN 978-0-316-15414-7.
  10. ^ Boehm, Barry W. (Mai 1988). "Ein Spiralmodell der Softwareentwicklung und -verstärkung". IEEE -Computer. 21 (2): 61–72. doi:10.1109/2.59. S2CID 1781829.
  11. ^ Noll, Paul (1977). Strukturierte Programmierung für den COBOL -Programmierer: Design, Dokumentation, Codierung, Tests. M. Murach & Associates.
  12. ^ Schwille, Jürgen (1993). "Verwenden und Missbrauch von Ausnahmen - 12 Richtlinien für die richtige Ausnahmebehandlung". Vorlesungsnotizen in Informatik. ADA - Europa '93 (Verfahren). Vorlesungsnotizen in Informatik. Vol. 688. Springer Berlin Heidelberg. S. 142–152. doi:10.1007/3-540-56802-6_12. ISBN 978-3-540-56802-5.
  13. ^ MTSBS[Klarstellung erforderlich] (März - April 1981). "Im Grunde genommen ... Forran -Bytes !!". Die Michigan -Technik. 99 (4).{{}}: Cs1 montiert: Mehrfachnamen: Autorenliste (Link)
  14. ^ Hamming, Richard (1996). Die Kunst des Wissenschaft und Ingenieurwesens. ISBN 9056995006.
  15. ^ Troyer, O. de (13. Mai 1991). "Das OO-binäre Beziehungsmodell: Ein wirklich objektorientiertes konzeptionelles Modell". Advanced Information Systems Engineering. Anmerkungen zur numerischen Flüssigkeitsmechanik und zu multidisziplinärem Design. Vol. 141. S. 561–578. doi:10.1007/3-540-54059-8_104. ISBN 978-3-319-98176-5. {{}}: Fehlen oder leer |title= (Hilfe)
  16. ^ Tomov, Latchezar; Ivanova, Valentina (Oktober 2014). "Gute Praktiken im Software -Engineering durch Gegenbeispiele unterrichten". Informatik und Bildung in Informatik (1): 397–405. Abgerufen 5. März 2018.

Externe Links