En programación informática , la reescritura consiste en crear código fuente nuevo para reemplazar un código existente desde cero (una reescritura total ) o para modificar significativamente un código existente de manera que el código resultante conserve aspectos esenciales del original. Los aspectos esenciales que deben conservarse en una reescritura pueden variar, pero suelen incluir el comportamiento, el rendimiento y la interfaz . El resultado de este proceso también se denomina reescritura .
Motivaciones
Entre las motivaciones comunes para reescribir software se incluyen:
- El código fuente no está disponible o está protegido por una licencia incompatible .
- El código no se puede adaptar a una nueva plataforma de destino; quizás sea necesario utilizar un lenguaje de programación diferente , ya que la plataforma de destino no ofrece soporte para el código original.
- El código es demasiado difícil de entender, mantener, ampliar o depurar .
- Existe el deseo de utilizar nuevas técnicas o tecnologías, especialmente cuando las mejoras deseadas requerirían cambios significativos.
Riesgos
Algunos advierten contra una reescritura total, especialmente bajo restricciones de tiempo o presiones competitivas. [ 1 ] Si bien los desarrolladores pueden inicialmente agradecer la oportunidad de corregir errores de diseño históricos, una reescritura también descarta aquellas partes del diseño que funcionan según lo requerido. Una reescritura compromete al equipo de desarrollo a entregar no solo nuevas características, sino todas las que existen en el código anterior, al tiempo que potencialmente introduce nuevos errores o regresiones de errores previamente corregidos. [ 2 ] [ 1 ] Una reescritura también interfiere con el seguimiento de errores no corregidos en la versión anterior. [ 3 ]
La reescritura incremental es un enfoque alternativo, en el que los desarrolladores reemplazan gradualmente el código existente con llamadas a una nueva implementación, expandiendo dicha implementación hasta que reemplaza por completo la anterior. Este enfoque evita una pérdida significativa de funcionalidad durante la reescritura. La ingeniería de software Cleanroom es otro enfoque, que requiere que el equipo trabaje a partir de una especificación escrita exhaustiva de la funcionalidad del software, sin acceso a su código. [ 4 ]
Ejemplos
El proyecto de Netscape para mejorar el diseño HTML en Navigator 4 se ha citado como ejemplo de una reescritura fallida. El nuevo motor de diseño ( Gecko ) se desarrolló independientemente de Navigator y no se integró fácilmente con su código. Por lo tanto, Navigator se reescribió en torno al nuevo motor, lo que provocó la ruptura de muchas funciones existentes y retrasó su lanzamiento varios meses. Mientras tanto, Microsoft se centró en mejoras incrementales para Internet Explorer y no se enfrentó a los mismos obstáculos. [ 1 ] [ 5 ]
Véase también
- Infierno del desarrollo : término para proyectos de medios estancados en desarrollo.
- Recreación de un motor de juego : tipo de proceso de remasterización de un motor de videojuego.
- Desarrollo de software de código abierto : creación y perfeccionamiento de programas informáticos de libre acceso. Páginas que muestran breves descripciones de destinos de redirección.
- Portabilidad : proceso de adaptar el software para que se ejecute en un contexto diferente.
- Ingeniería inversa : proceso de extracción de información de diseño de cualquier cosa artificial.
- Patrón de higo estrangulador : patrón arquitectónico en informática.
- Deuda técnica : costo de mantener un sistema de baja calidad.
Referencias
- 1 2 3 Spolsky, Joel (6 de abril de 2000). "Cosas que nunca debes hacer, parte I" . Joel on Software . Recuperado el 23 de enero de 2015 .
- ↑ Ronkes Agerbeek, Joost (15 de abril de 2005). "Nunca reescribas el código desde cero" . Archivado del original el 10 de octubre de 2008. Recuperado el 11 de septiembre de 2008 .
- ↑ Zawinski, Jamie . "Cascada de adolescentes con déficit de atención" . Recuperado el 11 de septiembre de 2008 .
- ↑ Tilly, Ben (29 de septiembre de 2001). "Reescritura desde cero de una enorme base de código" . Recuperado el 11 de septiembre de 2008 .
- ↑ Zawinski, Jamie (31 de marzo de 1999). "Renuncia y análisis post mortem" . Recuperado el 11 de septiembre de 2008 .
Enlaces externos
- Sneed, Harry; Verhoef, Chris (1 de septiembre de 2019). "Reimplementación de un sistema heredado" . Journal of Systems and Software . 155 : 162–184 . doi : 10.1016/j.jss.2019.05.012 . ISSN 0164-1212 .
- RewriteCodeFromScratch en la Wiki de C2
- Cosas que nunca deberías hacer, Parte I por Joel Spolsky
- Programación informática