Ugrás a tartalomhoz

Spagettikód

Ellenőrzött
A Wikipédiából, a szabad enciklopédiából

A számítógép-programozásban a spagettikód a strukturálatlan és nehezen karbantartható forráskód pejoratív megnevezése. Többféle oka lehet, a programozó tapasztalatlansága, a gyorsan változó követelmények, vagy a programozási stílusra vonatkozó szabályok hiánya.[1]

Spagetti, mint a strukturálatlan kód illusztrációja

Habár sokszor az egyszerűen csak nehezen érthető, követhető kódot is spagettikódnak nevezik, eredetileg a strukturált programszerkezetek helyett a GOTO utasítás túlzott használatát nevezik így, mivel a program összegabalyodott, emiatt karbantarthatatlan.[2] A kód szerkezete bonyolult és szövevényes, mint egy tál spagetti.[3] A United States National Bureau of Standards egy 1980-as publikációjában a spaghetti program kifejezést használták a régebbi, szétszórt és töredezett szerkezetű programokra.[4]

Objektumorientált környezetben a nem objektumorientált, strukturált kód is lehet spagettikód, hosszú és nehezen érthető metódusokkal, vagy visszaél az olyan objektumorientált lehetőségekkel, mint a polimorfizmus, amikor az aggregáció célravezetőbb lenne. A teljes program megértését ez is megnehezíti.

A kifejezés eredete nem tisztázott. 1977-ben már használták, köztük Steele cikke Macaroni is Better Than Spaghetti címmel a Proceedings of the 1977 szimpózium keretében, melynek témája a programnyelvek és a mesterséges intelligencia volt.[5] Richard Conway 1978-ban megjelent könyve, A primer on disciplined programming using PL/I, PL/CS, and PL/CT címmel. Ebben olyan programokat jellemzett így, amelyek logikai szerkezete ugyanolyan átlátható, mint egy tál spagetti. Ez a mondat szerepel David Gries-szel közös könyvében, ami 1979-ben jelent meg An Introduction to Programming címmel.[6] Az A spiral model of software development and enhancement lap 1988-ban a kódolj és javíts korábbi gyakorlatát bírálta, azzal a tanulsággal, hogy szükség van tervezésre, és helyette a vízesésmodellt javasolta.[7] 1979-ben Paul Noll Structured programming for the COBOL programmer című könyvében a spagettikód és a patkányfészek szinonímákat alkalmazta a gyengén strukturált kódra.[8]

Az Ada – Europe '93 konferencián az Adát azzal dicsérték, hogy kivételterjedési mechanizmusa rákényszeríti a programozókat arra, hogy érthető kódot írjanak.[9]

1981-ben a The Michigan Technic BASICally speaking...FORTRAN bytes!! című cikkében rosszallását fejezte ki a FORTRAN iránt, mivel teljes egészében spagettikódból áll.[10] Habár ez a cikk úgy írta, hogy ez is bizonyítja, hogy olaszok működtek közre az IBM alapításánál, olasz matematikusok, Corrado Böhm és Giuseppe Jacopini már 1966-ban megjelentették cikküket, amiben bizonyították a strukturált programozás tételét. Edsger Dijkstra idézte ezt a cikket, a Kártékonynak tekinthető GO TO utasítás címmel megjelent nyílt levelében.[11]

Egyszerű példa a spagettikódra BASIC nyelven. A kódban elhelyezett GOTO utasítás miatt a kód nehezen követhető.

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

A fenti kód strukturált változatából hiányzik a GOTO utasítás, a kód szerkezete könnyen átlátható és értelmezhető.

1 FOR i=1 TO 100
2     PRINT i;"squared=";i*i
3 NEXT i
4 PRINT "Program Completed."
5 END
  • Ravioli kód az objektumorientált programozásban azt jelenti, hogy ugyan az osztályok jól strukturáltak, de nehéz követni kapcsolataikat.
  • Lasagna kód arra utal, hogy a kód rétegeinek kapcsolata olyan összetett, hogy az egyik réteg változásai miatt a többi rétegen is változtatni kell.
  1. Markus, Pizka (2004). "Straightening spaghetti-code with refactoring?" (PDF). Software Engineering Research and Practice: 846–852. 2018. március 5. dátummal az eredeti (PDF) címről archiválva. Hozzáférés: 2018. március 5.. {{cite journal}}: Unknown parameter |archívdátum= ignored (súgó); Unknown parameter |archívurl= ignored (súgó)
  2. Cram, David; Hedley, Paul (2005). "Pronouns and procedural meaning: The relevance of spaghetti code and paranoid delusion" (PDF). Oxford University Working Papers in Linguistics, Philology and Phonetics. 10: 187–210. 2018. március 6. dátummal az eredeti (PDF) címről archiválva. Hozzáférés: 2018. március 5..
  3. Horstmann, Cay (2008). "Chapter 6 - Iteration". Java Concepts for AP Computer Science (angol nyelven) (5th ed. [i.e. 2nd ed.]. ed.). Hoboken, NJ: J. Wiley & Sons. 235–236. o. ISBN 978-0-470-18160-7. Hozzáférés: 2017. január 2..
  4. United States National Bureau of Standards (1980). ASTM special technical publication. United States Government Printing Office.
  5. Conway, Richard (1978). A primer on disciplined programming using PL/I, PL/CS, and PL/CT. Winthrop Publishers. ISBN 0-87626-712-6.
  6. Conway, Richard; Gries, David (1979). An Introduction to Programming (3rd ed.). Little, Brown. ISBN 0-316-15414-8.
  7. Boehm, Barry W. (1988. május). "A spiral model of software development and enhancement". IEEE Computer. 21 (2). IEEE: 61–72. doi:10.1109/2.59.
  8. Noll, Paul (1977). Structured programming for the COBOL programmer: design, documentation, coding, testing. M. Murach & Associates.
  9. Schwille, Jürgen (1993). "Use and abuse of exceptions — 12 guidelines for proper exception handling". Lecture Notes in Computer Science. Ada – Europe '93 (Proceedings). Vol. 688. Springer Berlin Heidelberg. 142–152. o. doi:10.1007/3-540-56802-6_12. {{cite conference}}: Unknown parameter |booktitle= ignored (|book-title= suggested) (súgó)
  10. MTSBS (március–április 1981). "BASICally speaking...FORTRAN bytes!!". The Michigan Technic. 99 (4). College of Engineering, University of Michigan.
  11. Bohm, Corrado; Giuseppe Jacopini (1966. május). "Flow Diagrams, Turing Machines and Languages with Only Two Formation Rules". Communications of the ACM. 9 (5): 366–371. doi:10.1145/355592.365646.

Ez a szócikk részben vagy egészben a Spaghetti code című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.