Estoy a punto de asumir la tarea de volver a implementar una interfaz ya definida (un conjunto de archivos de encabezado C ++) en una base de código relativamente grande y antigua. Antes de hacer esto, me gustaría tener una cobertura de prueba tan completa como sea posible, para poder detectar errores de reimplementación tan pronto y fácilmente como sea posible. El problema es que la base de código ya existente no fue diseñada para ser fácilmente comprobable, con (muy) grandes clases y funciones, un alto grado de acoplamiento, funciones con (muchos) efectos secundarios, etc.
Sería bueno saber de cualquier experiencia previa con tareas similares, y algunos consejos buenos y concretos sobre cómo hizo para adaptar las pruebas automatizadas (unidad, integraciones, regresión, etc.) a su código heredado.
Respuestas:
En primer lugar, obtenga y lea Trabajar eficazmente con código heredado de Michael Feathers: es una ayuda indispensable para tales tareas.
Luego, algunas notas:
fuente
El mejor método es saber es el Método Mikado. http://mikadomethod.wordpress.com/2010/08/04/the-mikado-method-book/ Esto es solo la generalización de una técnica simple, pero es la única manera que sé para comenzar a mejorar la calidad del código en una base de código grande sin correr riesgos innecesarios.
WEWLC también es un libro muy bueno al respecto, pero estar escrito en C ++ no siempre es útil con código Java o Ruby.
fuente
Las pruebas de ajuste retro en una base de código antigua pueden ser bastante difíciles si su diseño es monolítico.
Si es posible (tiene el tiempo / dinero), una forma de avanzar sería refactorizando el código en unidades más comprobables.
fuente
Me gustaría agregar un enlace . Hay pocos ejemplos de implementaciones no tan fácilmente comprobables refactorizadas en un código más compatible con xUnit. En cuanto al enfoque general, intente con los enlaces ya mencionados (publicación de Joel, código Working With Legacy)
fuente