2011-12-22 11 views
7

Tengo una aplicación Rails muy vieja y mal escrita. Hay alrededor de 9000 líneas de código y cero pruebas. La mayoría del código está en controladores, y aún peor, hay toneladas de llamadas API externas, llamadas al sistema a scripts aleatorios, etc.Trabajando en una aplicación de Rails heredada

Tampoco hay un entorno de desarrollo, todo está configurado para funcionar contra las bases de datos de producción. Bueno, no solo una base de datos, hay alrededor de 10 bases de datos diferentes, ya que la aplicación es un tipo de back-end de administración para un sitio más grande.

Mi primera idea fue obtener al menos una cobertura de prueba decente para las partes en las que voy a trabajar, pero no puedo hacer que la cosa funcione en ningún otro lugar que no sea en los servidores de producción.

También hay toneladas de gemas antiguas y advertencias obsoletas, pero ni siquiera puedo pensar en actualizar las gemas hasta que haya pruebas. Reescribir todo el asunto no es una opción, y voy a tener que agregar/cambiar cosas pronto.

No estoy muy seguro de cómo acercarme a probar una aplicación de este tipo, ya que hay tantas cosas que pueden salir mal. Lo que realmente me gustaría hacer es escribir algunas pruebas de integración y luego comenzar a refactorizar, pero no puedo hacerlo en un entorno de producción.

Escribir pruebas de unidades con muchos trozos y burlas no parece tan útil, ya que el código en el que voy a trabajar básicamente tiene que ser reescrito desde cero.

¿Cuáles son algunos de los pasos que puedo dar para duplicar básicamente un entorno de producción enormemente complejo en mi máquina de desarrollo, para poder hacer cosas de forma aislada?

editar: Un pequeño hecho divertido sobre la aplicación. Cuando traté de ejecutarlo por primera vez, continuó congelando sin ningún mensaje de error ... hasta aproximadamente media hora más tarde descubrí que el tiempo de espera para conectarse a una base de datos (que no estaba disponible) estaba configurado para 90 minutos!

+7

Encuentra a una persona que creó esto, toma como rehén a su familia y haz que te ayude (o al menos explica cómo funciona). –

+2

Puede tomar una instantánea de la máquina de producción y separarla en el laboratorio. –

Respuesta

9

Este es un caso relativamente nuevo/raro, porque las aplicaciones de "LEGACY" de rieles aún no son muy populares (aún son bastante jóvenes).

Sin embargo, me he topado con algunas escrituras diferentes sobre cómo probar las aplicaciones de rieles heredados (no probadas). Unos pocos que recomiendo son:

  1. This slideshare
  2. Capítulo 18 de "Rails Test Presciptions" de programadores pragmáticos.

Lo último y más importante es obtener ALGUNA clase de arnés de prueba funcionando. Esto significa hacer que las fábricas funcionen, hacer funcionar la base de datos de prueba y poner en marcha el rake (incluso si eso significa eliminar pruebas rotas). A partir de ese punto, vuelve atrás y prueba los módulos según los necesites, y ASEGÚRATE de que estás probando todos los códigos nuevos que agregas al proyecto.

Esta es una tarea muy dolorosa, y lo aplaudo por intentar hacerlo de la manera correcta.

¡Salud!

+0

Jaja, no lo estoy haciendo bien debido a la disciplina, pero porque estoy demasiado asustado como para siquiera tocar la maldita cosa sin algunos puntos verdes. Supongo que TDD me echó mucho de menos. –

+1

Tienes razón, lo hizo. Sin embargo, TDD también te dio la inteligencia para abordar esto desde una mentalidad comprobable. Sigan así, pero lo más importante es que consiga una especie de arnés utilizable para que pueda COMENZAR a agregarlo con el tiempo. – andrewpthorp

2

Bienvenido en este tipo de barco horrible.

La última vez que me pasó, me escribió número de pruebas con el capibara y:

  • he comprobado lo que se espera que se creen o no en dB ...

  • ... a continuación, poco después de poco, estoy refactorización

en este caso, no veo ningún otro medio de acercarse a la aplicación al más alto nivel y comprobar el resultado en la parte más baja, sin ningún trozo/simulacro.

0

¿Qué versión de

Rails, 
Ruby, 
Mysql socket, 

se lo utiliza?

Tuve que trabajar en una aplicación como esta. Esto es lo que tenía que hacer:

Copy DB over, 
do not run the migrations, 
installed gems as production environment, 
do not update gems. 

Mi aplicación utiliza una versión muy específica joya (gettext v = 1.10)

+1

Raíles 2.3.algo. Oh sí, ese es otro problema, no tengo acceso directo al servidor de producción, así que no tengo idea de qué versiones de las gemas están instaladas ... y ni siquiera están especificadas en la configuración/entorno. rb, entonces lo que básicamente hice hasta ahora es ejecutar la aplicación, esperar a que falle en una gema perdida, luego instalar alguna versión aleatoria que coincida con las dependencias y rezar para que funcione ... –

+0

Y también olvidé mencionar que no todas las bases de datos son MySQL, algunas de ellas son MS SQL Server ... yay –

+0

Peor caso que el que tenía. Tenía solo 2 db mysql. ¿Qué servidor web usan? – Marrento

3

he trabajado en varias misiones de rescate, en su mayoría proyectos de PHP que estaban muy mal, pero no sólo - propietarios de productos desesperados abandonados por programadores malos del 80% pagan muy bien para terminar sus proyectos abandonados :).

  • Mi enfoque es utilizar la fuerza bruta.
  • Comience en el desarrollo y arregle las cosas hasta que lo ejecute, por medio de potencia pura - corrija, intente, corrija, intente.
  • Usted conseguirá que funcione con el tiempo.
  • 9000 líneas de código no es código mucho, yo diría que es de un tamaño razonable para el código heredado malo, podría haber sido mucho peor.
  • Comience a refactorizar lentamente poco a poco.
  • Estas tareas necesitarán tiempo, así que no espere que sucedan a la vez.
Cuestiones relacionadas