fbpx
Wikipedia

Spaghetti code

Spaghetti code is a pejorative phrase for unstructured and difficult-to-maintain source code. Spaghetti code can be caused by several factors, such as volatile project requirements, lack of programming style rules, and software engineers with insufficient ability or experience.[1]

Meaning

Code that overuses GOTO statements rather than structured programming constructs, resulting in convoluted and unmaintainable programs, is often called spaghetti code.[2] Such code has a complex and tangled control structure, resulting in a program flow that is conceptually like a bowl of spaghetti, twisted and tangled.[3] In a 1980 publication by the United States National Bureau of Standards, the phrase spaghetti program was used to describe older programs having "fragmented and scattered files".[4] Spaghetti code can also describe an anti-pattern in which object-oriented code is written in a procedural style, such as by creating classes whose methods are overly long and messy, or forsaking object-oriented concepts like polymorphism.[5] The presence of this form of spaghetti code can significantly reduce the comprehensibility of a system.[6]

History

It is not clear when the phrase spaghetti code came into common usage; however, several references appeared in 1977 including Macaroni is Better Than Spaghetti by Guy Steele.[7] In the 1978 book A primer on disciplined programming using PL/I, PL/CS, and PL/CT, Richard Conway used the term to describe types of programs that "have the same clean logical structure as a plate of spaghetti",[8] a phrase repeated in the 1979 book An Introduction to Programming he co-authored with David Gries.[9] In the 1988 paper A spiral model of software development and enhancement, the term is used to describe the older practice of the code and fix model, which lacked planning and eventually led to the development of the waterfall model.[10] In the 1979 book Structured programming for the COBOL programmer, author Paul Noll uses the phrases spaghetti code and rat's nest as synonyms to describe poorly structured source code.[11]

In the Ada – Europe '93 conference, Ada was described as forcing the programmer to "produce understandable, instead of spaghetti code", because of its restrictive exception propagation mechanism.[12]

In a 1981 computer languages spoof in The Michigan Technic titled "BASICally speaking...FORTRAN bytes!!", the author described FORTRAN stating that "it consists entirely of spaghetti code".[13]

Richard Hamming described in his lectures[14] the etymology of the term in the context of early programming in binary codes:

If, in fixing up an error, you wanted to insert some omitted instructions then you took the immediately preceding instruction and replaced it by a transfer to some empty space. There you put in the instruction you just wrote over, added the instructions you wanted to insert, and then followed by a transfer back to the main program. Thus the program soon became a sequence of jumps of the control to strange places. When, as almost always happens, there were errors in the corrections you then used the same trick again, using some other available space. As a result the control path of the program through storage soon took on the appearance of a can of spaghetti. Why not simply insert them in the run of instructions? Because then you would have to go over the entire program and change all the addresses which referred to any of the moved instructions! Anything but that!

Related phrases

Ravioli code

Ravioli code is a term specific to object-oriented programming. It describes code that comprises well-structured classes that are easy to understand in isolation, but difficult to understand as a whole.[15]

Lasagna code

Lasagna code refers to code whose layers are so complicated and intertwined that making a change in one layer would necessitate changes in all other layers.[16]

Examples

Here follows what would be considered a trivial example of spaghetti code in BASIC. The program prints each of the numbers 1 to 100 to the screen along with its square. Indentation is not used to differentiate the various actions performed by the code, and the program's GOTO statements create a reliance on line numbers. The flow of execution from one area to another is harder to predict. Real-world occurrences of spaghetti code are more complex and can add greatly to a program's maintenance costs.

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 

Here is the same code written in a structured programming style:

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

The program jumps from one area to another, but this jumping is formal and more easily predictable, because for loops and functions provide flow control whereas the goto statement encourages arbitrary flow control. Though this example is small, real world programs are composed of many lines of code and are difficult to maintain when written in a spaghetti code fashion.

Here is another example of Spaghetti code with embedded GOTO statements.

 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 

See also

References

  1. ^ Markus, Pizka (2004). (PDF). Software Engineering Research and Practice: 846–852. Archived from the original (PDF) on 5 March 2018. Retrieved 5 March 2018.
  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. Retrieved 5 March 2018.
  3. ^ Horstmann, Cay (2008). "Chapter 6 - Iteration". Java Concepts for AP Computer Science (5th ed. [i.e. 2nd ed.]. ed.). Hoboken, NJ: J. Wiley & Sons. pp. 235–236. ISBN 978-0-470-18160-7. Retrieved 2 January 2017.
  4. ^ United States National Bureau of Standards (1980). ASTM special technical publication. United States Government Printing Office.
  5. ^ Moha, N.; Gueheneuc, Y. G.; Duchien, L.; Meur, A. F. Le (January 2010). "DECOR: A Method for the Specification and Detection of Code and Design Smells". IEEE Transactions on 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). An Empirical Study of the Impact of Two Antipatterns, Blob and Spaghetti Code, on Program Comprehension. 2011 15th European Conference on Software Maintenance and Reengineering. pp. 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 is better than spaghetti. In Proceedings of the 1977 symposium on Artificial intelligence and programming languages. Association for Computing Machinery, New York, NY, USA, 60–66. DOI:https://doi.org/10.1145/800228.806933
  8. ^ Conway, Richard (1978). A primer on disciplined programming using PL/I, PL/CS, and PL/CT. Winthrop Publishers. ISBN 978-0-87626-712-7.
  9. ^ Conway, Richard; Gries, David (1979). An Introduction to Programming (3rd ed.). Little, Brown. ISBN 978-0-316-15414-7.
  10. ^ Boehm, Barry W. (May 1988). "A spiral model of software development and enhancement". IEEE Computer. 21 (2): 61–72. doi:10.1109/2.59. S2CID 1781829.
  11. ^ Noll, Paul (1977). Structured programming for the COBOL programmer: design, documentation, coding, testing. M. Murach & Associates.
  12. ^ Schwille, Jürgen (1993). "Use and abuse of exceptions — 12 guidelines for proper exception handling". Lecture Notes in Computer Science. Ada – Europe '93 (Proceedings). Lecture Notes in Computer Science. Vol. 688. Springer Berlin Heidelberg. pp. 142–152. doi:10.1007/3-540-56802-6_12. ISBN 978-3-540-56802-5.
  13. ^ MTSBS[clarification needed] (March–April 1981). "BASICally speaking...FORTRAN bytes!!". The Michigan Technic. 99 (4).{{cite journal}}: CS1 maint: multiple names: authors list (link)
  14. ^ Hamming, Richard (1996). The Art of Doing Science and Engineering. ISBN 9056995006.
  15. ^ Troyer, O. De (13 May 1991). "The OO-binary relationship model : A truly object oriented conceptual model". Advanced Information Systems Engineering. Notes on Numerical Fluid Mechanics and Multidisciplinary Design. Vol. 141. pp. 561–578. doi:10.1007/3-540-54059-8_104. ISBN 978-3-319-98176-5. S2CID 10894568. {{cite book}}: Missing or empty |title= (help)
  16. ^ Tomov, Latchezar; Ivanova, Valentina (October 2014). "Teaching Good Practices In Software Engineering by Counterexamples". Computer Science and Education in Computer Science (1): 397–405. Retrieved 5 March 2018.

External links

  • Go To Statement Considered Harmful. The classic repudiation of spaghetti code by Edsger Dijkstra
  • We don't know where to GOTO if we don't know where we've COME FROM by R. Lawrence Clark from DATAMATION, December, 1973 2018-07-16 at the Wayback Machine
  • Refactoring Java spaghetti code into Java bento code separating out a bowl full of code from one class into seven classes
  • Objects and Frameworks – Taking a Step Back by Brian Rinaldi
  • Programming Pasta - Spaghetti, Lasagna, Ravioli and Macaroni Code
  • Pasta Theory of Programming

spaghetti, code, pejorative, phrase, unstructured, difficult, maintain, source, code, caused, several, factors, such, volatile, project, requirements, lack, programming, style, rules, software, engineers, with, insufficient, ability, experience, contents, mean. Spaghetti code is a pejorative phrase for unstructured and difficult to maintain source code Spaghetti code can be caused by several factors such as volatile project requirements lack of programming style rules and software engineers with insufficient ability or experience 1 Contents 1 Meaning 2 History 3 Related phrases 3 1 Ravioli code 3 2 Lasagna code 4 Examples 5 See also 6 References 7 External linksMeaning EditCode that overuses GOTO statements rather than structured programming constructs resulting in convoluted and unmaintainable programs is often called spaghetti code 2 Such code has a complex and tangled control structure resulting in a program flow that is conceptually like a bowl of spaghetti twisted and tangled 3 In a 1980 publication by the United States National Bureau of Standards the phrase spaghetti program was used to describe older programs having fragmented and scattered files 4 Spaghetti code can also describe an anti pattern in which object oriented code is written in a procedural style such as by creating classes whose methods are overly long and messy or forsaking object oriented concepts like polymorphism 5 The presence of this form of spaghetti code can significantly reduce the comprehensibility of a system 6 History EditIt is not clear when the phrase spaghetti code came into common usage however several references appeared in 1977 including Macaroni is Better Than Spaghetti by Guy Steele 7 In the 1978 book A primer on disciplined programming using PL I PL CS and PL CT Richard Conway used the term to describe types of programs that have the same clean logical structure as a plate of spaghetti 8 a phrase repeated in the 1979 book An Introduction to Programming he co authored with David Gries 9 In the 1988 paper A spiral model of software development and enhancement the term is used to describe the older practice of the code and fix model which lacked planning and eventually led to the development of the waterfall model 10 In the 1979 book Structured programming for the COBOL programmer author Paul Noll uses the phrases spaghetti code and rat s nest as synonyms to describe poorly structured source code 11 In the Ada Europe 93 conference Ada was described as forcing the programmer to produce understandable instead of spaghetti code because of its restrictive exception propagation mechanism 12 In a 1981 computer languages spoof in The Michigan Technic titled BASICally speaking FORTRAN bytes the author described FORTRAN stating that it consists entirely of spaghetti code 13 Richard Hamming described in his lectures 14 the etymology of the term in the context of early programming in binary codes If in fixing up an error you wanted to insert some omitted instructions then you took the immediately preceding instruction and replaced it by a transfer to some empty space There you put in the instruction you just wrote over added the instructions you wanted to insert and then followed by a transfer back to the main program Thus the program soon became a sequence of jumps of the control to strange places When as almost always happens there were errors in the corrections you then used the same trick again using some other available space As a result the control path of the program through storage soon took on the appearance of a can of spaghetti Why not simply insert them in the run of instructions Because then you would have to go over the entire program and change all the addresses which referred to any of the moved instructions Anything but that Related phrases EditRavioli code Edit Ravioli code is a term specific to object oriented programming It describes code that comprises well structured classes that are easy to understand in isolation but difficult to understand as a whole 15 Lasagna code Edit See also Architectural layer and Layer object oriented design Lasagna code refers to code whose layers are so complicated and intertwined that making a change in one layer would necessitate changes in all other layers 16 Examples EditHere follows what would be considered a trivial example of spaghetti code in BASIC The program prints each of the numbers 1 to 100 to the screen along with its square Indentation is not used to differentiate the various actions performed by the code and the program s a href Goto html title Goto GOTO a statements create a reliance on line numbers The flow of execution from one area to another is harder to predict Real world occurrences of spaghetti code are more complex and can add greatly to a program s maintenance costs 1 i 0 2 i i 1 3 PRINT i squared i i 4 IF i gt 100 THEN GOTO 6 5 GOTO 2 6 PRINT Program Completed 7 END Here is the same code written in a structured programming style 1 FOR i 1 TO 100 2 PRINT i squared i i 3 NEXT i 4 PRINT Program Completed 5 END The program jumps from one area to another but this jumping is formal and more easily predictable because for loops and functions provide flow control whereas the goto statement encourages arbitrary flow control Though this example is small real world programs are composed of many lines of code and are difficult to maintain when written in a spaghetti code fashion Here is another example of Spaghetti code with embedded GOTO statements 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 gt n g THEN SWAP n f n g f f C IF f gt 0 THEN GOTO F230 E E 1 IF E gt D THEN GOTO E180 GOTO I220 C330 PRINT The sorted list is FOR i 1 TO T PRINT n i NEXT iSee also Edit Computer programming portal Engineering portalBig ball of mud a piece of software with no perceivable architecture International Obfuscated C Code Contest a competition to produce pleasingly obscure C code Technical debt The Elements of Programming Style Write only language a language with such bizarre syntax that resulting code is incomprehensibleReferences Edit Markus Pizka 2004 Straightening spaghetti code with refactoring PDF Software Engineering Research and Practice 846 852 Archived from the original PDF on 5 March 2018 Retrieved 5 March 2018 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 Retrieved 5 March 2018 Horstmann Cay 2008 Chapter 6 Iteration Java Concepts for AP Computer Science 5th ed i e 2nd ed ed Hoboken NJ J Wiley amp Sons pp 235 236 ISBN 978 0 470 18160 7 Retrieved 2 January 2017 United States National Bureau of Standards 1980 ASTM special technical publication United States Government Printing Office Moha N Gueheneuc Y G Duchien L Meur A F Le January 2010 DECOR A Method for the Specification and Detection of Code and Design Smells IEEE Transactions on Software Engineering 36 1 20 36 CiteSeerX 10 1 1 156 1524 doi 10 1109 TSE 2009 50 ISSN 0098 5589 S2CID 14767901 Abbes M Khomh F Gueheneuc Y G Antoniol G 2011 An Empirical Study of the Impact of Two Antipatterns Blob and Spaghetti Code on Program Comprehension 2011 15th European Conference on Software Maintenance and Reengineering pp 181 190 CiteSeerX 10 1 1 294 1685 doi 10 1109 CSMR 2011 24 ISBN 978 1 61284 259 2 S2CID 14152638 Guy Lewis Steele 1977 Macaroni is better than spaghetti In Proceedings of the 1977 symposium on Artificial intelligence and programming languages Association for Computing Machinery New York NY USA 60 66 DOI https doi org 10 1145 800228 806933 Conway Richard 1978 A primer on disciplined programming using PL I PL CS and PL CT Winthrop Publishers ISBN 978 0 87626 712 7 Conway Richard Gries David 1979 An Introduction to Programming 3rd ed Little Brown ISBN 978 0 316 15414 7 Boehm Barry W May 1988 A spiral model of software development and enhancement IEEE Computer 21 2 61 72 doi 10 1109 2 59 S2CID 1781829 Noll Paul 1977 Structured programming for the COBOL programmer design documentation coding testing M Murach amp Associates Schwille Jurgen 1993 Use and abuse of exceptions 12 guidelines for proper exception handling Lecture Notes in Computer Science Ada Europe 93 Proceedings Lecture Notes in Computer Science Vol 688 Springer Berlin Heidelberg pp 142 152 doi 10 1007 3 540 56802 6 12 ISBN 978 3 540 56802 5 MTSBS clarification needed March April 1981 BASICally speaking FORTRAN bytes The Michigan Technic 99 4 a href Template Cite journal html title Template Cite journal cite journal a CS1 maint multiple names authors list link Hamming Richard 1996 The Art of Doing Science and Engineering ISBN 9056995006 Troyer O De 13 May 1991 The OO binary relationship model A truly object oriented conceptual model Advanced Information Systems Engineering Notes on Numerical Fluid Mechanics and Multidisciplinary Design Vol 141 pp 561 578 doi 10 1007 3 540 54059 8 104 ISBN 978 3 319 98176 5 S2CID 10894568 a href Template Cite book html title Template Cite book cite book a Missing or empty title help Tomov Latchezar Ivanova Valentina October 2014 Teaching Good Practices In Software Engineering by Counterexamples Computer Science and Education in Computer Science 1 397 405 Retrieved 5 March 2018 External links EditGo To Statement Considered Harmful The classic repudiation of spaghetti code by Edsger Dijkstra We don t know where to GOTO if we don t know where we ve COME FROM by R Lawrence Clark from DATAMATION December 1973 Archived 2018 07 16 at the Wayback Machine Refactoring Java spaghetti code into Java bento code separating out a bowl full of code from one class into seven classes Objects and Frameworks Taking a Step Back by Brian Rinaldi Programming Pasta Spaghetti Lasagna Ravioli and Macaroni Code Pasta Theory of Programming Retrieved from https en wikipedia org w index php title Spaghetti code amp oldid 1134875206, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.