Para dar mi vista:
Pequeños cambios incrementales que dejan el código en un mejor estado del que se encontró
Definitivamente si: cambios "cosméticos" que no están directamente relacionados con las funciones (es decir, no se pueden facturar como una solicitud de cambio).
Definitivamente no: reescribir partes grandes claramente viola la parte "pequeña, incremental". La refactorización se usa a menudo como lo opuesto a una reescritura: en lugar de hacerlo de nuevo, mejora lo existente.
Definitivamente Quizás: Reemplazar estructuras de datos y algoritmos es algo así como un caso límite. La diferencia decisiva aquí, en mi opinión, son los pequeños pasos: esté listo para entregar, esté listo para trabajar en otro caso.
Ejemplo: Imagine que tiene un módulo de aleatorización de informes que se ralentiza por el uso de un vector. Ha perfilado que las inserciones vectoriales son el cuello de botella, pero desafortunadamente el módulo se basa en la memoria contigous en muchos lugares, por lo que al usar una lista, las cosas se rompen silenciosamente.
Reescribir significaría deshacerse del Módulo y construir uno mejor y más rápido desde cero, simplemente recogiendo algunas piezas del anterior. O escribiendo un nuevo núcleo y luego ajustándolo al diálogo existente.
Refactorizar significaría tomar pequeños pasos para eliminar la aritmética del puntero, de modo que el cambio. Tal vez incluso cree una función de utilidad que envuelva la aritmética del puntero, reemplazando la manipulación directa del puntero con llamadas a esa función, luego cambie a un iterador para que el compilador se queje de lugares donde todavía se usa la aritmética del puntero, luego cambie a ay list
luego elimine el función de ultilidad.
La idea detrás es que el código empeora por sí solo. Al corregir errores y agregar funciones, la calidad decae en pequeños pasos: el significado de una variable cambia sutilmente, una función obtiene un parámetro adicional que rompe el aislamiento, un bucle se vuelve un poco complejo, etc. Ninguno de estos es un error real, puede No dice un recuento de líneas que hace que el ciclo sea complejo, pero perjudica la legibilidad y el mantenimiento.
Del mismo modo, cambiar el nombre de una variable o extraer una función no son mejoras tangibles en sí mismas. Pero todos juntos, luchan contra la lenta erosión.
Como un muro de guijarros donde todos los días uno cae al suelo. Y todos los días, un transeúnte lo recoge y lo devuelve.