¿Por qué copy pastear código es malo? (versión remasterizada for dummies)

De esto ya habíamos hablado, pero hace tiempo, eso es verdad, en 2011, hace unos 5 años, en Duplicar, o copy pegar, código no es una buena idea
¿Por qué vuelvo a sacar el tema? Más allá de que cada vez que nos toca mirar software de alguna aplicación en alguna empresa, más si esta es mediana – grande, este es uno de esos clásicos que nunca faltan a la “fiesta”, el copy paste de código.
Aparte de lo anterior, he vuelto a sacar este post a raíz de algún comentario en aquel post, ya de este año, de Mide tu deuda técnica… ¡en 5 min! En este, entre otras coas, había estos párrafos:

Y calcula, te aseguro que es cuestión de minutos, tres métricas, sólo tres, sé que los nombres suenan raros pero confía, no es nada del otro mundo, mide el “porcentaje de código repetido”, la “complejidad ciclomática” y el tamaño en líneas de código de la clase con más líneas de código. Ya está. A ver qué sale.

Más de un 0% de “porcentaje de código repetido”, mal asunto, venga más de un 10%, seamos flexibles (muy flexibles). Algoritmos con más de 30 en “complejidad ciclomática” mal asunto. Clases con… aquí hay debate… ¿más de 300 líneas de código?..2 mal asunto.

Después de lo anterior, hay quien en persona, y en algún comentario, me ha dicho “Javier, no quedan claros esos párrafos, ¿podrías explicarlos?” Como ya estaba posteado el tema del copy paste y la complejidad ciclomática, pues no entré más en ello, pero error mío, aquellos post son demasiado antiguos para que pocos más que yo los recuerden y quizá debí escribirlos más for dummies.
Así que he hecho una remasterización for dummies del “Por qué el copy paste es malo”, pensado, sobre todo, para no programadores (bueno, o para aquellos que programan y aún copy pegan).
Vamos por el principio. El código duplicado, código copy paste o código repetido, es la práctica de coger un trozo de código y copiarlo – pegarlo idénticamente varias veces.
Imagina que estás escribiendo un libro, por si no has programado nunca, y en cierto capítulo, el 7, por ejemplo, necesitas hacer referencia a algo dicho en el epígrafe 3.4 del capítulo 3. E imagina que en vez de escribir en el capítulo 7, cuando necesitas hacer la referencia, algo así como “en este punto ver epígrafe 3.4 del capítulo 3”, en vez de eso, te vas al epígrafe 3.4, copias el texto que hay allí y vas lo pegas allá en en capítulo 7, allá donde lo necesitabas. Eso es copy pegar, ahora tienes ese párrafo, idéntico, dos veces en el libro.
¿Por qué esto es tan malo? Bueno, imagina que no sólo se ha copy megado un párrafo del libro… imagina 500. Yo creo que el ejemplo del libro lo deja claro, pero parece que en el código debe verse menos, pero cuando haces copy paste de trozos de líneas de código…

Aumenta innecesariamente el número de líneas de código

Y está comprobado que a más líneas de código (más si no necesarias y hay mal diseño) más complejo es el mantenimiento. Volvamos al libro, no es lo mismo revisar y mantener 500 paginas que 1000, más si hay párrafos que podrían haberse evitado con referencias, evitando tener tantas páginas.

Implica que si hay que cambiar ese código repetido… hay que cambiarlo en muchos sitios

Hay que buscar todas las repeticiones. Y si se nos olvida cambiarlo en algún sitio… el software acaba siendo incoherente, “diciendo” cosas diferentes para la misma funcionalidad requerida. Por ello baja la productividad y aumenta la probabilidad de error. Lo mismo pasa en el libro, imagina que quieres cambiar dicho párrafo copy pegado, debes buscar todas y cada una de sus apariciones

Normalmente un problema de duplicación de código esconde un problema de, o de falta de, diseño 

Si cosas como Orientación a Objetos, patrones, etc., no te suenan, creeme, el copy pasteo se soluciona con buenos diseños.
 
Por ello, duplicar código no es buena idea, hasta el punto de que incluso Fowler le dedicó un “es el peor enemigo de la mantenibilidad software”.

Javier Garzás

1 comentario en “¿Por qué copy pastear código es malo? (versión remasterizada for dummies)”

  1. Muy cierto. A veces o generalmente ocurre por falta de comunicación. Cuando varios desarrolladores trabajan sobre una misma aplicación, cundo necesitas cierta funcionalidad y te da miedo usar la que existe o moverle…por que no sabes a que le va a pegar. Si no hay buena comunicación, terminamos clonando código.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Ir arriba