Reescritura (programación)
# Reescritura (programación)

Una reescritura en la programación de computadoras es el acto o resultado de volver a implementar una gran parte de la funcionalidad existente sin reutilizar su código fuente. Cuando la reescritura no usa código existente en absoluto, es común hablar de una reescritura desde cero .

## Motivaciones

Por lo general, una pieza de software se reescribe cuando se da uno o más de los siguientes puntos:

* su código fuente no está disponible o solo está disponible con una licencia incompatible
* su código no se puede adaptar a una nueva plataforma de destino
* su código existente se ha vuelto demasiado difícil de manejar y extender
* la tarea de depurar parece demasiado complicada
* el programador tiene dificultades para entender el código fuente de la aplicación
* los desarrolladores aprenden nuevas técnicas o desean hacer una gran revisión de funciones que requiere muchos cambios
* los desarrolladores desean intentar nuevas soluciones a los problemas previos.
* el lenguaje de programación del código fuente debe cambiarse

## Riesgos

Varios ingenieros de software, como Joel Spolsky han advertido contra las reescrituras totales, especialmente bajo restricciones de programación o presiones competitivas. Si bien los desarrolladores pueden agradecer inicialmente la oportunidad de corregir errores de diseño históricos, una reescritura también descarta aquellas partes del diseño que funcionan según sea necesario. Una reescritura compromete al equipo de desarrollo a entregar no solo nuevas características, sino todas las que existen en el código anterior, mientras que potencialmente introduce nuevos errores o regresiones de errores previamente corregidos. Una reescritura también interfiere con el seguimiento de errores no corregidos en la versión anterior.

Un enfoque alternativo es la reescritura incremental, en el que los desarrolladores reemplazan gradualmente el código existente con llamadas a una nueva implementación, expandiendo esa implementación hasta que reemplaza completamente a la anterior. Este enfoque evita una gran pérdida de funcionalidad durante la reescritura. La ingeniería de software de sala limpia 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.

