stringtranslate.com

código de espagueti

Código espagueti es una frase peyorativa para referirse al código fuente no estructurado y difícil de mantener . El código espagueti puede deberse a varios factores, como requisitos volátiles del proyecto, falta de reglas de estilo de programación e ingenieros de software con capacidad o experiencia insuficientes. [1]

Significado

El código que abusa de declaraciones GOTO en lugar de construcciones de programación estructuradas , lo que da como resultado programas complicados e imposibles de mantener, a menudo se denomina código espagueti. [2] Dicho código tiene una estructura de control compleja y enredada , lo que resulta en un flujo de programa que es conceptualmente como un plato de espaguetis , retorcido y enredado. [3]

En una publicación de 1980 de la Oficina Nacional de Estándares de los Estados Unidos , la frase programa espagueti se utilizó para describir programas más antiguos que tenían "archivos fragmentados y dispersos". [4]

El código espagueti también puede describir un antipatrón en el que el código orientado a objetos se escribe en un estilo procedimental, como creando clases cuyos métodos son demasiado largos y confusos, o abandonando conceptos orientados a objetos como el polimorfismo . [5] La presencia de esta forma de código espagueti puede reducir significativamente la comprensibilidad de un sistema. [6]

Historia

No está claro cuándo se volvió de uso común la frase código espagueti; sin embargo, en 1977 aparecieron varias referencias, incluida Macaroni is Better Than Spaghetti de Guy Steele . [7] En el libro de 1978 Introducción a la programación disciplinada utilizando PL/I, PL/CS y PL/CT , Richard Conway describió programas que "tienen la misma estructura lógica limpia que un plato de espaguetis", [8] una frase repetido en el libro de 1979 Introducción a la programación del que fue coautor con David Gries . [9] En el artículo de 1988 Un modelo en espiral de desarrollo y mejora de software , el término se utiliza para describir la práctica más antigua del modelo de código y corrección , que carecía de planificación y finalmente condujo al desarrollo del modelo en cascada . [10] En el libro de 1979 Programación estructurada para el programador COBOL , el autor Paul Noll utiliza las frases código espagueti y nido de ratas como sinónimos para describir un código fuente mal estructurado. [11]

En la conferencia Ada - Europa '93 , se describió que Ada obligaba al programador a "producir código comprensible, en lugar de espagueti", debido a su restrictivo mecanismo de propagación de excepciones. [12]

En una parodia de lenguajes informáticos de 1981 en The Michigan Technic titulada "BÁSICAMENTE hablando... ¡¡bytes de FORTRAN!!", el autor describió FORTRAN afirmando que "consiste enteramente en código espagueti". [13]

Richard Hamming describió en sus conferencias [14] la etimología del término en el contexto de la programación temprana en códigos binarios:

Si, al corregir un error, deseaba insertar algunas instrucciones omitidas, tomaba la instrucción inmediatamente anterior y la reemplazaba por una transferencia a algún espacio vacío. Allí ingresa las instrucciones que acaba de escribir, agrega las instrucciones que desea insertar y luego realiza una transferencia de regreso al programa principal. Así el programa pronto se convirtió en una secuencia de saltos del mando a lugares extraños. Cuando, como casi siempre ocurre, había errores en las correcciones se volvía a utilizar el mismo truco, utilizando algún otro espacio disponible. Como resultado, el recorrido de control del programa hasta el almacenamiento pronto tomó el aspecto de una lata de espaguetis. ¿Por qué no simplemente insertarlos en el conjunto de instrucciones? ¡Porque entonces tendrías que revisar todo el programa y cambiar todas las direcciones que hacen referencia a cualquiera de las instrucciones movidas! ¡Todo menos eso!

Frases relacionadas

Código de raviolis

El código Ravioli es un término específico de la programación orientada a objetos . Describe código que comprende clases bien estructuradas que son fáciles de entender de forma aislada, pero difíciles de entender en su conjunto. [15]

código de lasaña

El código de lasaña se refiere a un código cuyas capas son tan complicadas y entrelazadas que hacer un cambio en una capa requeriría cambios en todas las demás capas. [dieciséis]

Ejemplos

A continuación se muestra lo que se consideraría un ejemplo trivial de código espagueti en BASIC . El programa imprime cada uno de los números del 1 al 100 en la pantalla junto con su cuadrado. La sangría no se utiliza para diferenciar las diversas acciones realizadas por el código y las GOTOdeclaraciones del programa dependen de los números de línea . El flujo de ejecución de un área a otra es más difícil de predecir. Las apariciones de código espagueti en el mundo real son más complejas y pueden aumentar enormemente los costos de mantenimiento de un programa.

1 yo = 0 ; 2 yo = yo + 1 ; 3 IMPRIMIR i ; "cuadrado=" ; yo * yo ; 4 SI i >= 100 ENTONCES IR A 6 ; 5 IR A 2 ; 6 IMPRIMIR "Programa completado". ; 7 FINAL               

Aquí está el mismo código escrito en un estilo de programación estructurado :

1 PARA i = 1 A 100 2 IMPRIMIR i ; "cuadrado=" ; i * i 3 SIGUIENTE i 4 IMPRIMIR "Programa completado". 5 FINAL           

El programa salta de un área a otra, pero este salto es formal y más fácilmente predecible, porque los bucles y funciones for proporcionan control de flujo , mientras que la declaración goto fomenta el control de flujo arbitrario. Aunque este ejemplo es pequeño, los programas del mundo real se componen de muchas líneas de código y son difíciles de mantener cuando se escriben en forma de código espagueti.

Aquí hay otro ejemplo de código Spaghetti con declaraciones GOTO incrustadas.

 ENTRADA "¿Cuántos números se deben ordenar?" ; T DIM n ( T ) FOR i = 1 A T IMPRIMIR "NÚMERO:" ; i ENTRADA n ( i ) SIGUIENTE i 'Cálculos: C = T E180: C = INT ( C / 2 ) SI C = 0 ENTONCES IR A C330 D = T - C E = 1 I220: f = E F230: g = f + C SI n ( f ) > n ( g ) ENTONCES INTERCAMBIAR n ( f ), n ( g ) f = f - C SI f > 0 ENTONCES IR A F230 E = E + 1 SI E > D ENTONCES IR A E180 IR A I220 C330: IMPRIMIR "La lista ordenada es" FOR i = 1 TO T IMPRIMIR n ( i ) SIGUIENTE i                                                                                               

Ver también

Referencias

  1. ^ Markus, Pizka (2004). "¿Enderezar el código espagueti con refactorización?" (PDF) . Investigación y práctica de la ingeniería de software : 846–852. Archivado desde el original (PDF) el 5 de marzo de 2018 . Consultado el 5 de marzo de 2018 .
  2. ^ Abarrotar, David; Hedley, Paul (2005). "Pronombres y significado procesal: la relevancia del código espagueti y el delirio paranoico" (PDF) . Documentos de trabajo de la Universidad de Oxford sobre lingüística, filología y fonética . 10 : 187–210. Archivado desde el original (PDF) el 6 de marzo de 2018 . Consultado el 5 de marzo de 2018 .
  3. ^ Horstmann, Cayo (2008). "Capítulo 6 - Iteración". Conceptos de Java para Ciencias de la Computación AP (5ª ed. [es decir, 2ª ed.]. ed.). Hoboken, Nueva Jersey: J. Wiley & Sons. págs. 235-236. ISBN 978-0-470-18160-7. Consultado el 2 de enero de 2017 .
  4. ^ Oficina Nacional de Normas de Estados Unidos (1980). Publicación técnica especial ASTM . Imprenta del Gobierno de los Estados Unidos.
  5. ^ Moha, N.; Gueheneuc, YG; Duchien, L.; Meur, AF Le (enero de 2010). "DECORACIÓN: Un método para la especificación y detección de olores de código y diseño". Transacciones IEEE sobre ingeniería de software . 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, YG; Antoniol, G. (2011). "Un estudio empírico del impacto de dos antipatrones, el código Blob y Spaghetti, en la comprensión del programa". 2011 XV Congreso Europeo sobre Mantenimiento y Reingeniería de Software . págs. 181-190. CiteSeerX 10.1.1.294.1685 . doi :10.1109/CSMR.2011.24. ISBN  978-1-61284-259-2. S2CID  14152638.
  7. ^ Chico Lewis Steele. 1977. Los macarrones son mejores que los espaguetis. En Actas del simposio de 1977 sobre inteligencia artificial y lenguajes de programación. Association for Computing Machinery, Nueva York, NY, EE. UU., 60–66. DOI: https://doi.org/10.1145/800228.806933
  8. ^ Conway, Richard (1978). Una introducción a la programación disciplinada utilizando PL/I, PL/CS y PL/CT . Editores Winthrop. ISBN 978-0-87626-712-7.
  9. ^ Conway, Ricardo; Gries, David (1979). Introducción a la programación (3ª ed.). Pequeño, Marrón. ISBN 978-0-316-15414-7.
  10. ^ Boehm, Barry W. (mayo de 1988). "Un modelo en espiral de desarrollo y mejora de software". Computadora IEEE . 21 (2): 61–72. doi :10.1109/2.59. S2CID  1781829.
  11. ^ Noll, Paul (1977). Programación estructurada para el programador COBOL: diseño, documentación, codificación, pruebas . M. Murach y asociados.
  12. ^ Schwille, Jürgen (1993). "Uso y abuso de excepciones: 12 pautas para el manejo adecuado de excepciones". Apuntes de conferencias sobre informática . Ada - Europa '93 (Actas). Apuntes de conferencias sobre informática. vol. 688. Springer Berlín Heidelberg. págs. 142-152. doi :10.1007/3-540-56802-6_12. ISBN 978-3-540-56802-5.
  13. ^ MTSBS [ se necesita aclaración ] (marzo-abril de 1981). "BÁSICAMENTE hablando... ¡¡bytes FORTRAN!!". La técnica de Michigan . 99 (4).{{cite journal}}: CS1 maint: multiple names: authors list (link) CS1 maint: numeric names: authors list (link)
  14. ^ Hamming, Richard (1996). El arte de hacer ciencia e ingeniería . Taylor y Francisco. ISBN 9056995006.
  15. ^ Troyer, O. De (13 de mayo de 1991). "El modelo de relación OO-binario: un modelo conceptual verdaderamente orientado a objetos". Apuntes sobre Mecánica Numérica de Fluidos y Diseño Multidisciplinario. vol. 141, págs. 561–578. doi :10.1007/3-540-54059-8_104. ISBN 978-3-319-98176-5. S2CID  10894568. {{cite book}}: |journal=ignorado ( ayuda ) ; Falta o está vacío |title=( ayuda )
  16. ^ Tomov, Latchezar; Ivanova, Valentina (octubre de 2014). "Enseñanza de buenas prácticas en ingeniería de software mediante contraejemplos". Informática y educación en informática (1): 397–405 . Consultado el 5 de marzo de 2018 .

enlaces externos