fbpx
Wikipedia

Código duplicado

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?

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

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

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

Ejemplo de código duplicado funcional

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

  1. Spinellis, Diomidis. . 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 el 29 de junio de 2006 en Wayback Machine. by Matthias Rieger, Stephane Ducasse.

Véase también

Enlaces externos

  • The University of Alabama at Birmingham: Code Clones Literature
  • Finding duplicate code in C#, VB.Net, ASPX, Ruby, Python, Java, C, C++, ActionScript, or XAML
  •   Datos: Q1105830

código, duplicado, código, duplicado, término, programación, computadores, para, secuencia, código, fuente, ocurre, más, dentro, programa, través, diferentes, programas, propiedad, mantenido, misma, entidad, código, duplicado, considerado, indeseable, serie, r. El codigo duplicado es un termino en programacion de computadores para una secuencia de codigo fuente que ocurre mas de una vez dentro de un programa o a traves de diferentes programas de propiedad o mantenido por la misma entidad El codigo duplicado es considerado indeseable por una serie de razones 1 Un requisito minimo es usualmente aplicado a la cantidad de codigo que debe aparecer en una secuencia para ser considerado duplicado en vez de coincidentemente similar Secuencias de codigo duplicado se conocen como clones de codigo o simplemente clones Las siguientes son algunas de las maneras en que dos secuencias de codigo pueden ser duplicadas una de la otra identicas caracter por caracter identicas caracter por caracter cuando son ignorados los caracteres de espacio en blanco y los comentarios identicas token por token identicas token por token con variacion ocasional es decir insercion eliminacion modificacion de tokens funcionalmente identicasIndice 1 Como es creado el codigo duplicado 2 Problemas asociados con el codigo duplicado 3 Detectando el codigo duplicado 4 Ejemplo de codigo duplicado funcional 5 Referencias 6 Vease tambien 7 Enlaces externos Como es creado el codigo duplicado EditarHay un numero de razones del por que el codigo duplicado puede ser creado incluyendo Programacion basada en copia y pega en donde una seccion de codigo es copiada porque funciona En la mayoria de los casos esta operacion implica ligeras modificaciones en el codigo clonado como cambio de nombre de variables o insertar eliminar codigo Es requerida funcionalidad que es muy similar a la que esta en otra parte de un programa y un desarrollador independiente escribe codigo que es muy similar a lo que ya existe en otro lugar Plagio donde el codigo es simplemente copiado sin permiso o atribucion Problemas asociados con el codigo duplicado EditarLa duplicacion de codigo es generalmente considerada una senal de estilo de programacion pobre o perezoso Buen estilo de codificacion es generalmente asociado con la reutilizacion de codigo Puede ser ligeramente mas rapido desarrollar por duplicacion de codigo porque el desarrollador no necesita preocuparse en como es utilizado el codigo actualmente o como puede ser usado en el futuro La dificultad es que el desarrollo original es solo una pequena fraccion del ciclo de vida de un producto y con la duplicacion de codigo los costos de mantenimiento son mucho mayores Algunos de los problemas especificos incluyen Un monton de codigo afecta la comprension El codigo duplicado con frecuencia crea largas secciones repetidas de codigo que difieren en solo unas pocas lineas o caracteres La longitud de estas rutinas puede hacerlo dificil de comprenderlas rapidamente Esto esta en contraste con las mejores practicas de descomposicion de codigo Enmascaramiento de proposito La repeticion de largas secciones identicas de codigo pueden ocultar como difieren unas de las otras y por lo tanto cual es el proposito especifico de cada seccion de codigo A menudo la unica diferencia es un valor de parametro La mejor practica en tales casos es una subrutina reutilizable Anomalias de actualizacion El codigo duplicado contradice el principio fundamental de la teoria de base de datos que se aplica aqui evitar la redundancia La inobservancia incurre en anomalias de actualizacion que aumentan los costos de mantenimiento en donde cualquier modificacion a una pieza redundante de codigo debe hacerse separadamente para cada duplicado En el mejor caso el tiempo de codificacion y pruebas son multiplicados por el numero 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 anos La mejor practica aqui es una biblioteca de codigo Tamano del archivo A menos que una compresion sin perdida sea aplicada el archivo tomara mas espacio en el computador Detectando el codigo duplicado EditarSe han propuesto una serie de algoritmos para detectar el codigo duplicado Por ejemplo Algoritmo de Baker 2 Usando el algoritmo Karp Rabin Utilizando arboles de sintaxis abstracta 3 Deteccion visual del clon 4 Ejemplo de codigo duplicado funcional EditarConsidere el siguiente fragmento de codigo 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 lt 4 i suma1 arreglo1 i promedio1 suma1 4 for int i 0 i lt 4 i suma2 arreglo2 i promedio2 suma2 4 Los dos bucles pueden ser reescritos en una simple funcion int calculaPromedio int arreglo de 4 int suma 0 for int i 0 i lt 4 i suma arreglo de 4 i return suma 4 Usando la funcion de arriba dara codigo fuente que no tiene duplicacion de bucles extern int arreglo1 extern int arreglo2 float promedio1 calculaPromedio arreglo1 float promedio2 calculaPromedio arreglo2 Referencias Editar 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 Brenda S Baker A Program for Identifying Duplicated Code Computing Science and Statistics 24 49 57 1992 Ira D Baxter et al Clone Detection Using Abstract Syntax Trees Visual Detection of Duplicated Code Archivado el 29 de junio de 2006 en Wayback Machine by Matthias Rieger Stephane Ducasse Vease tambien EditarHediondez del codigo No te repitas Anexo Herramientas para el analisis estatico de softwareEnlaces externos EditarThe University of Alabama at Birmingham Code Clones Literature Finding duplicate code in C VB Net ASPX Ruby Python Java C C ActionScript or XAML Datos Q1105830Obtenido de https es wikipedia org w index php title Codigo duplicado amp oldid 125248742, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos