El código duplicado es un término en programación de computadores para una secuencia de código fuente que ocurre más de una vez, dentro de un programa o a través de diferentes programas, de propiedad, o mantenido, por la misma entidad. El código duplicado es considerado indeseable por una serie de razones.[1]​ Un requisito mínimo es usualmente aplicado a la cantidad de código que debe aparecer en una secuencia para ser considerado duplicado en vez de coincidentemente similar. Secuencias de código duplicado se conocen como clones de código o simplemente clones.

Las siguientes son algunas de las maneras en que dos secuencias de código pueden ser duplicadas una de la otra:

  • idénticas carácter por carácter
  • idénticas carácter por carácter cuando son ignorados los caracteres de espacio en blanco y los comentarios
  • idénticas token-por-token
  • idénticas token-por-token con variación ocasional (es decir, inserción/eliminación/modificación de tokens)
  • funcionalmente idénticas

¿Cómo es creado el código duplicado?

editar

Hay un número de razones del por qué el código duplicado puede ser creado, incluyendo:

  • Programación basada en copia y pega, en donde una sección de código es copiada "porque funciona". En la mayoría de los casos esta operación implica ligeras modificaciones en el código clonado como cambio de nombre de variables o insertar/eliminar código.
  • Es requerida funcionalidad que es muy similar a la que está en otra parte de un programa, y un desarrollador independiente escribe código que es muy similar a lo que ya existe en otro lugar.
  • Plagio, donde el código es simplemente copiado sin permiso o atribución.

Problemas asociados con el código duplicado

editar

La duplicación de código es generalmente considerada una señal de estilo de programación pobre o perezoso. Buen estilo de codificación es generalmente asociado con la reutilización de código. Puede ser ligeramente más rápido desarrollar por duplicación de código, porque el desarrollador no necesita preocuparse en cómo es utilizado el código actualmente o cómo puede ser usado en el futuro. La dificultad es que el desarrollo original es sólo una pequeña fracción del ciclo de vida de un producto, y con la duplicación de código, los costos de mantenimiento son mucho mayores. Algunos de los problemas específicos incluyen:

  • Un montón de código afecta la comprensión: El código duplicado con frecuencia crea largas secciones repetidas de código que difieren en sólo unas pocas líneas o caracteres. La longitud de estas rutinas puede hacerlo difícil de comprenderlas rápidamente. Esto está en contraste con las "mejores prácticas" de descomposición de código.
  • Enmascaramiento de propósito: La repetición de largas secciones idénticas de código pueden ocultar cómo difieren unas de las otras, y por lo tanto, cuál es el propósito específico de cada sección de código. A menudo, la única diferencia es un valor de parámetro. La mejor práctica en tales casos es una subrutina reutilizable.
  • Anomalías de actualización: El código duplicado contradice el principio fundamental de la teoría de base de datos que se aplica aquí: evitar la redundancia. La inobservancia incurre en anomalías de actualización, que aumentan los costos de mantenimiento, en donde cualquier modificación a una pieza redundante de código debe hacerse separadamente para cada duplicado. En el mejor caso, el tiempo de codificación y pruebas son multiplicados por el número de duplicaciones. En el peor de los casos, puede faltar actualizar en algunos lugares, y por ejemplo erroresque se piensan fueron corregidos pueden persistir en lugares duplicados durante meses o años. La mejor práctica aquí es una biblioteca de código.
  • Tamaño del archivo: A menos que una compresión sin pérdida sea aplicada, el archivo tomará más espacio en el computador.

Detectando el código duplicado

editar

Se han propuesto una serie de algoritmos para detectar el código duplicado. Por ejemplo:

Ejemplo de código duplicado funcional

editar

Considere el siguiente fragmento de código para calcular el promedio de un arreglo de enteros

extern int arreglo1[];
extern int arreglo2[];
 
int suma1 = 0;
int suma2 = 0;
float promedio1 = 0.0;
float promedio2 = 0.0;
 
for (int i = 0; i < 4; i++)
{
   suma1 += arreglo1[i];
}
promedio1 = suma1 / 4;
 
for (int i = 0; i < 4; i++)
{
   suma2 += arreglo2[i];
}
promedio2 = suma2 / 4;

Los dos bucles pueden ser reescritos en una simple función:

int calculaPromedio (int* arreglo_de_4)
{
   int suma = 0;
   for (int i = 0; i < 4; i++)
   {
       suma += arreglo_de_4[i];
   }
   return suma / 4;
}

Usando la función de arriba, dará código fuente que no tiene duplicación de bucles:

extern int arreglo1[];
extern int arreglo2[];

float promedio1 = calculaPromedio(arreglo1);
float promedio2 = calculaPromedio(arreglo2);

Referencias

editar
  1. Spinellis, Diomidis. «The Bad Code Spotter's Guide». InformIT.com. Archivado desde el original el 18 de octubre de 2012. Consultado el 6 de junio de 2008. 
  2. Brenda S. Baker. A Program for Identifying Duplicated Code. Computing Science and Statistics, 24:49–57, 1992.
  3. Ira D. Baxter, et al. Clone Detection Using Abstract Syntax Trees
  4. Visual Detection of Duplicated Code Archivado el 29 de junio de 2006 en Wayback Machine. by Matthias Rieger, Stephane Ducasse.

Véase también

editar

Enlaces externos

editar

📚 Artikel Terkait di Wikipedia

Aaron Kwok

Remember Me? 1997 - Love Call 1997 - Duplicate Soul - Duplicate Again 1997 - Devoted 1997 - Generation Next 1998 - Code In The Wind 1998 - Warner Music Collection:

Toybox

part of a file taskset — Retrieve or set a process's CPU affinity tee — Duplicate standard input time — time a simple command timeout — Run a command with

Licencia Ruby

the source form of the software without restriction, provided that you duplicate all of the original copyright notices and associated disclaimers. 2. You

Neighbor Discovery

inalcanzable): es el proceso que determina si un vecino puede ser o no contactado. Duplicate Address Detection (Detección de direcciones duplicadas): determina si

Robustez (evolución)

Steinmetz, LM; Gu, X; Scharfe, C; Davis, RW; Li, WH (Jan 2, 2003). «Role of duplicate genes in genetic robustness against null mutations.». Nature 421 (6918):

Pantalla dividida (producción de video)

para mostrar comparaciones. Polyvision «Using the Split-screen Effect to Duplicate an Actor». www.mediacollege.com. Consultado el 8 de julio de 2024.  Hunsucker

Enlace de registro

Ahmed; Panagiotis G. Ipeirotis; Vassilios Verykios (January 2007). «Duplicate Record Detection: A Survey». IEEE Transactions on Knowledge and Data Engineering