Tu comentario dice que tienes millones de líneas de código pero no pruebas de unidades, y que te está costando convencer a la dirección de que las pruebas unitarias valen la pena. Según el libro de Fowler, la refacturación debe ir acompañada de pruebas unitarias para proporcionar la confianza de que no se está rompiendo nada mientras se refactoriza. Estoy de acuerdo, y sugeriría que las pruebas unitarias van a proporcionar más valor que cualquier otra cosa en esta etapa, así que apunte primero a ese objetivo. Recomiendo encarecidamente el libro de Michael Feathers "Trabajar eficazmente con código heredado" para obtener sugerencias sobre cómo hacer esto. Ni siquiera tiene que escribir más de unas pocas pruebas unitarias para que sea un esfuerzo que valga la pena, simplemente ejecute el marco.
Paso 0: obtenga un marco de prueba de unidades automatizado en su código.
No vas a tratar de lograr esto solo, ¿o sí? Este es un gran proyecto, y espero que seas parte de un equipo técnico superior que comparte el dolor contigo. Tienes que hacer que todos compren en este 100%. Necesitarás su respaldo cuando vayas a ver a tu jefe, necesitarás su experiencia para compartir la creación del diseño y necesitarás su total acuerdo en el diseño.
Paso 1: juntar un grupo.
Sin un plan y un objetivo, la refacturación no ayudará mucho. ¿Estás esperando simplemente cortar el código y hacer módulos más pequeños? ¿Vas a tener código organizado en dominios? ¿Vas a tratar de encajar algunas interfaces de servicio en él? ¿Vas a refactorizar a una arquitectura de n niveles? ¿Qué piensan usted y el grupo que necesitan hacer? ¿Y cómo vas a comunicar este plan de diseño y refactorización a las PE?
Paso 2: obtener la posición para hacer un diseño arquitectónico inicial y la planificación del estado final.
Ahora para la parte difícil. Está pidiendo el 20% del tiempo de 30 ingenieros, que probablemente sea de más de $ 500,000 por año. Necesitará mucha más justificación que la "deuda técnica acumulada". Necesitará mostrar el retorno de la inversión.
Así que prepárese para responder a la pregunta que su jefe seguramente formulará: "¿por qué debería hacerlo?" ¿Qué esperas obtener refactorizando? ¿Reducirá el esfuerzo de desarrollo en nuevas características en un 10%? 100%? ¿Aumentará la calidad del código/reducirá los errores/reducirá los costos de soporte? ¿Va a acelerar el tiempo de comercialización? ¿Por cuanto? ¿Esto le permitirá reducir el número de SE o contratistas? ¿Cuántos? ¿O podrá agregar más características por lanzamiento? También hay aspectos negativos: ¿cuántas características se retrasarán si le dan un año para montarse con refactorización? ¿Por cuánto tiempo se retrasarán?
Paso 3: hacer una estimación seria.
Ahora que está armado con un diseño, un plan, una justificación monetaria, y cuenta con el respaldo del personal técnico, vuelva con su jefe y presente su caso a él o ella. Tendrás mucha mejor suerte que decir "deberíamos gastar el 20% de nuestro tiempo en refactorizar, algunos tipos en Internet lo dicen".
¡Muchas gracias por sus comentarios! Para dar contexto. Estamos trabajando en un producto que lanzamos todos los años durante los últimos años. La base de código es varios millones de líneas de código, con más de 30 SE trabajando en ello. La calidad del código se está degradando con el tiempo, acumulando deuda técnica. Por muchas razones diferentes, es difícil cambiar la cultura y usar regularmente pruebas unitarias y refactorización. Acabamos de cambiar de cascada anual a sprints mensuales. Para convencer a la gerencia, quería tener métricas sobre cuánto tiempo deberíamos pasar (tal vez por un equipo externo). Gracias, Olivier –
Una deuda técnica en aumento matará su velocidad al final, es por eso que trato de explicarle a la gerencia. Tal vez esto pueda ayudar: http://www.infoq.com/news/2006/11/ken-schwaber-code-quality –