Código espagueti

Elcódigo espagueties un términopeyorativopara los programas decomputaciónque tienen una estructura decontrol de flujocompleja e incomprensible. Su nombre deriva del hecho que este tipo decódigoparece asemejarse a un plato deespaguetis, es decir, un montón de hilos intrincados y anudados.
Tradicionalmente suele asociarse este estilo deprogramacióncon lenguajes básicos y antiguos, donde el flujo se controlaba mediante sentencias de control muy primitivas comogotoy utilizando números de línea.
En los años 60 solo se podía definir el flujo de un programa a base de poner sentencias IF anidadas y variables booleanas para decidir la lógica. Más adelante ya se podían escribir funciones, de lo más general a lo más específico y en la actualidad con laprogramación orientada objetoshay conceptos como la modularidad, abstracción, encapsulamiento, desacoplamiento, herencia, etc. Hay herramientas y conceptos más que suficientes como para evitar escribir este tipo de código.
No es aceptable escribir código espagueti ni siquiera inicialmente ya que ello dificulta la comprensión del problema. Cuando durante el proceso de desarrollo de una función o programa se observa que la complejidad del código crece de forma que el código se está volviendo espagueti, es el momento de repasar la parte ya completada, lo que se conoce como refactorización. Esta limpieza periódica durante el desarrollo permite mantener la complejidad bajo control e incrementa significativamente la productividad del programador y comprensión del problema.
Se puede dar una comparación con las reglas básicas del periodismo de como escribir una noticia. Estas indican que en el titular de la noticia tiene que mostrar la información más importante, a continuación entrar en detalle en el primer párrafo y después desglosar en los apartados subsecuentes. Así pues en el main del programa deben figurar las funciones más generales y cada una de ellas tiene que llamar a continuación a funciones más específicas.
Con "refactorizar- extraer método" se puede realizar automáticamente cada rama de los if's del código espagueti se convierta en una función, mejorando mucho la visibilidad.
Una vez se tienen las funciones claramente visibles es posible identificar cuales conforman una responsabilidad común y no entrelazada con el resto del código y por tanto es posible separarlas en objetos diferentes que ya tendrán los métodos y propiedades (que pueden ser privados, no visibles, desde el resto del código).
Se refiere al código que está compuesto por clases bien estructuradas y fácilmente entendibles por separado, pero muy complicadas de entender como un todo.
El código Ravioli se basa en que el código se refactoriza en demasiados trozos pequeños del mismo que llegan a ser difíciles o imposibles de seguir. Este caso se da también en la programación orientada a objetos, donde el origen del código ya no está disperso entre funciones o procedimientos, sino también entre clases y paquetes, haciendo que el código sea difícilmente trazable.
Se refiere al código cuyas capas son tan complicadas e interconectadas que un cambio en una requeriría cambios en otras.
Se refiere al código que tiene una arquitectura muy plana.
Es aquel código que, al ser tan complicado, basta un pequeño error en el mismo para que todo el programa deje de funcionar.