Soy un gran creyente en la Regla de los Boy Scouts :
Siempre revise un módulo más limpio que cuando lo revisó ". No importa quién sea el autor original, ¿qué pasaría si siempre hiciéramos algún esfuerzo, no importa cuán pequeño, para mejorar el módulo? ¿Cuál sería el resultado? Creo que si todos seguían esa simple regla, veríamos el final del incesante deterioro de nuestros sistemas de software. En cambio, nuestros sistemas mejorarían gradualmente a medida que evolucionaran. También veríamos equipos cuidando el sistema en su conjunto, más bien que solo las personas que cuidan su propia pequeña parte.
También creo firmemente en la idea relacionada de la refactorización oportunista :
Aunque hay lugares para algunos esfuerzos de refactorización programados, prefiero alentar la refactorización como una actividad oportunista, realizada cuando sea y donde sea que el código necesite ser limpiado, por quien sea. Lo que esto significa es que en cualquier momento que alguien vea algún código que no sea tan claro como debería ser, debería aprovechar la oportunidad para solucionarlo allí mismo o en ese momento, o al menos en unos minutos.
Particularmente tenga en cuenta el siguiente extracto del artículo de refactorización:
Tengo cuidado con las prácticas de desarrollo que causan fricción para la refactorización oportunista ... Mi sensación es que la mayoría de los equipos no refactorizan lo suficiente, por lo que es importante prestar atención a cualquier cosa que desaliente a las personas a hacerlo. Para ayudar a eliminar esto, tenga en cuenta cada vez que se sienta desanimado de realizar una pequeña refactorización, una que está seguro que solo tomará uno o dos minutos. Cualquier barrera de este tipo es un olor que debería provocar una conversación. Por lo tanto, tome nota del desánimo y créelo con el equipo. Por lo menos, debe discutirse durante su próxima retrospectiva.
Donde trabajo, hay una práctica de desarrollo que causa mucha fricción: la revisión de código (CR). Cada vez que cambio algo que no está dentro del alcance de mi "asignación", mis revisores me reprochan que haga que el cambio sea más difícil de revisar. Esto es especialmente cierto cuando se trata de refactorizar, ya que dificulta la comparación de diferencias "línea por línea". Este enfoque es el estándar aquí, lo que significa que la refactorización oportunista rara vez se realiza, y solo se lleva a cabo la refactorización "planificada" (que generalmente es muy poco, demasiado tarde), si es que se realiza.
Afirmo que los beneficios valen la pena, y que 3 revisores trabajarán un poco más duro (para comprender realmente el código antes y después, en lugar de analizar el alcance limitado de qué líneas cambiaron; la revisión en sí misma sería mejor solo por eso ) para que se beneficien los próximos 100 desarrolladores que leen y mantienen el código. Cuando presento este argumento, mis revisores dicen que no tienen ningún problema con mi refactorización, siempre que no esté en el mismo CR. Sin embargo, afirmo que esto es un mito:
(1) La mayoría de las veces solo te das cuenta de qué y cómo quieres refactorizar cuando estás en medio de tu tarea. Como dice Martin Fowler:
A medida que agrega la funcionalidad, se da cuenta de que parte del código que está agregando contiene cierta duplicación con algún código existente, por lo que debe refactorizar el código existente para limpiar las cosas ... Puede que algo funcione, pero tenga en cuenta que sería mejor si se cambia la interacción con las clases existentes. Aproveche la oportunidad de hacer eso antes de considerarse terminado.
(2) Nadie te mirará favorablemente al liberar CR "refactorizadoras" que no debías hacer. Un CR tiene ciertos gastos generales y su gerente no quiere que "pierda su tiempo" en la refactorización. Cuando se incluye con el cambio que se supone que debes hacer, este problema se minimiza.
Resharper exacerba el problema, ya que cada archivo nuevo que agrego al cambio (y no puedo saber de antemano exactamente qué archivos terminarían modificados) generalmente está lleno de errores y sugerencias, la mayoría de los cuales son correctos y merecen totalmente fijación.
El resultado final es que veo un código horrible, y lo dejo allí. Irónicamente, siento que arreglar ese código no solo no mejorará mi posición, sino que en realidad los bajará y me pintará como el tipo "desenfocado" que pierde el tiempo arreglando cosas que a nadie le importan en lugar de hacer su trabajo. Me siento mal porque realmente desprecio el mal código y no puedo soportar verlo, ¡mucho menos llamarlo desde mis métodos!
¿Alguna idea sobre cómo puedo remediar esta situación?
your manager doesn't want you to "waste your time" on refactoring