Después de meses de frustración y de tiempo dedicado a insertar agujas en muñecos vudú de desarrolladores anteriores, decidí que era mejor intentar refactorizar el código heredado.UnitEvaluación de una clase que devuelve un conjunto de datos complejo
Ya pedí Micheal Feather's book, estoy en Fowler's refactoring y realicé algunos proyectos de muestra con DUnit.
Así que incluso si no domino el tema siento que es hora de actuar y poner en práctica algunas ideas.
Casi el 100% del código en el que trabajo tiene la lógica de negocios atrapada en la interfaz de usuario, además, todo es programación de procedimientos (con algunas pocas excepciones). La aplicación comenzó como rápida & sucia y continuó como tal.
Ahora escribir pruebas para toda la aplicación es una tarea sin sentido en mi caso, pero me gustaría tratar de probar algo que necesito para refactorizar.
Una de las tareas complejas que una gran "clase de lógica comercial de TForm" hace es leer datos de BD, realizar algunos cálculos y rellenar un componente del planificador. Me gustaría eliminar la parte de datos de lectura DB y la parte de cálculo y asignar a una nueva clase esta tarea. Por supuesto, esta es una forma de mejorar el diseño actual, no es la mejor manera de comenzar desde cero, pero me gustaría hacerlo porque los datos devueltos por esta nueva clase también son útiles de otras maneras, por ejemplo, ahora Se me ha pedido que envíe notificaciones por correo electrónico de los datos del planificador.
Para evitar una operación masiva de copiar y pegar, necesito la nueva clase.
Ahora que el planificador se rellena desde un enorme conjunto de datos (enorme en tamaño y en número de campos), probablemente un primer paso de refactorización podría ser obtener el conjunto de datos de la nueva clase. Pero en el futuro, será mejor usar una nueva clase (como TSchedulerData u otro nombre menos vinculado al planificador) para administrar los datos, y en lugar de tener un conjunto de datos como resultado, puedo tener un objeto TSchedulerData.
Dado que el refactor se produce en pequeños pasos y se necesitan pruebas para refactorizar mejor, estoy un poco confundido sobre cómo proceder.
Los siguientes puntos no son claras para mí:
1) la forma de probar un conjunto de datos compleja? ¿Debo ejecutar la aplicación en funcionamiento, guardar un conjunto de resultados en xml y escribir una prueba donde use un TClientDataSet que contenga esos datos xml?
2) ¿Cuánto me tiene que importar TSchedulerData? Quiero decir, no estoy 100% seguro de que usaré TSchedulerData, puede ser que me quede con el Dataset, de todos modos, pensar en crear pruebas complejas que se descartarán en 2 semanas no es atractivo para un DUnitNewbee. De todos modos, probablemente así es como funciona. No me puedo imaginar la cantidad de errores que enfrentaría sin una prueba.
Nota final: Sé que alguien piensa que reescribir desde cero es una mejor opción, pero esta no es una opción. "La aplicación es enorme y se vende hoy y hoy se requieren nuevas funciones para no cerrar". Esto es lo que me han dicho, de todos modos la refactorización puede salvar mi vida y extender la vida de la aplicación.
Ok gracias. El temor que tengo es que las pruebas de escritura tomarán mucho tiempo, porque los datos son complejos. Los volcados de archivos son complejos, así que siendo este mi primer intento de prueba unitaria en la vida real, me temo perder una semana y terminar con pruebas sin éxito. De todos modos, no tengo otro lugar para comenzar, quiero decir, necesito cambiar ESTE CÓDIGO y entonces debería comenzar desde aquí. – LaBracca