Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-04-2023
juggern juggern is offline
Miembro
 
Registrado: jun 2020
Posts: 79
Poder: 4
juggern Va por buen camino
Limpieza de código

Buenos días,

Verán, tengo una aplicación en Delphi 7 muy muy antigua, ha pasado por muchas manos y tiene mucho código generado.
Me gustaría ir haciendo una limpieza de código, es decir, me he encontrado muchas variables que no se usan, uses agregados que no son necesarios, etc...
Mi pregunta lo mismo es una chorrada pero ¿Cómo hacéis vosotros para revisar todo esto? ¿Hay alguna manera de que me marque las variables que no se usan o este tipo de cosas? Veo que los uses se pueden limpiar los no usados, con una opción, pero y las variables, procedimientos y funciones?

Muchas gracias
Responder Con Cita
  #2  
Antiguo 10-04-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Una cosa distinta es que una variable "no se use" a que "se use pero no siva para nada".
Si borras la variable en la declaración entonces dará error al compilar si se está usando.

De todas formas, lo que preguntas es sólo cuestión de paciencia, ir poco a poco, probar una sola cosa cada vez y tiempo, mucho tiempo
Responder Con Cita
  #3  
Antiguo 10-04-2023
juggern juggern is offline
Miembro
 
Registrado: jun 2020
Posts: 79
Poder: 4
juggern Va por buen camino
Hola!

Si, me refiero a que se declaren pero luego no se usen, porque hay muchas de esas y el código es enorme.

Le echaré paciencia jeje
Responder Con Cita
  #4  
Antiguo 10-04-2023
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
. .
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #5  
Antiguo 10-04-2023
juggern juggern is offline
Miembro
 
Registrado: jun 2020
Posts: 79
Poder: 4
juggern Va por buen camino
jajajaja eso mismo pensé yo, pero es que el código es muy extenso y cada vez que va acumulando mas mierda.
No crees que se debería limpiar?
Hay muchas variables que en su día se declararon, luego se borró el código pero dejaron las variables declaradas, o uses añadido que en su día necesitaron y ahora ya no... Entonces la compilación se va haciendo más y más lenta.
De hecho, en la compilación, me lanza una lista de warning que pasado a un documento mas grande que la biblia.

Última edición por juggern fecha: 10-04-2023 a las 17:19:15.
Responder Con Cita
  #6  
Antiguo 10-04-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
De las variables no usadas ya te avisa el compilador. Puedes eliminarlas directamente con lo que te diga.
Y para los uses no usados tienes utilidades varias que te informa de cuáles son, creo recordar que cnpack y/o gexperts te lo indican.
Responder Con Cita
  #7  
Antiguo 10-04-2023
juggern juggern is offline
Miembro
 
Registrado: jun 2020
Posts: 79
Poder: 4
juggern Va por buen camino
Hola!

Si, estoy usando la que viene en el cnPack y las variables, pues con paciencia y el compilador.

Era por verificar como hacíais vosotros y ver si más o menos iba bien encaminado.

Muchas gracias!
Responder Con Cita
  #8  
Antiguo 10-04-2023
engranaje engranaje is offline
Miembro
 
Registrado: may 2011
Posts: 163
Poder: 13
engranaje Va por buen camino
Bueno, a pesar de todo y si quieres enfangarte, existen herramientas como Pascal analyzer de Peganza que pueden ayudarte a la hora de ver donde están las cosas que podría interesarte cambiar. Tiene una versión Lite y también puedes probar la de evaluación. Igual te interesa.
Responder Con Cita
  #9  
Antiguo 10-04-2023
Avatar de pgranados
pgranados pgranados is offline
Miembro
 
Registrado: sep 2022
Ubicación: México
Posts: 261
Poder: 2
pgranados Va por buen camino
Yo lo he estado haciendo con código que hacia cuando recién empezaba en Delphi, en mi caso lo que hago es acortar o simplificar la sintax del código.

Ejemplo: en lugar de escribir
Código Delphi [-]
Datamodule.FDQuery.SQL.Text: 'select * from clientes';
Datamodule.FDQuery.Open;

if true then
begin
 showMessage('Prueba');
end;



Lo reemplazo por:
Código Delphi [-]
Datamodule.FDQuery.Open('select * from clientes');

if true then
 showMessage('Prueba');

Y también trato de no declarar variables a lo bruto
Responder Con Cita
  #10  
Antiguo 11-04-2023
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por juggern Ver Mensaje
Buenos días,

Verán, tengo una aplicación en Delphi 7 muy muy antigua, ha pasado por muchas manos y tiene mucho código generado.
Me gustaría ir haciendo una limpieza de código...
Hay un libro que habla de todo esos temas: https://www.amazon.com/Working-Effec.../dp/B005OYHF0A, pero en caso de que te interese unos tips cortos:

Asumiré que ya sabes de que va la app, y que puedes consultar los resultados esperados a alguien (asi no sepa como están hechas por dentro las cosas)

El arranque:
  • TIENES que usar un herramienta como Git. Creas un"branch" donde vas aplicando los cambios y mejoras. Es mejor que cada mayor tarea tenga su propio branch. Pasara que tengas que hacer "arreglos" en lo viejo, y en ese caso te alegrara haber hecho caso.
  • Creas una lista de tareas (o usas una herramienta como pivotal tracker) y ademas vas documentando lo que vas encontrando importante, y vas con disciplina haciendo tracking del progreso.
  • Haces todos los arreglos "mecanicos": Arregla todos los warnings y formatea el codigo con un auto-formater. Esto hazlo POR PASOS! No todo el proyecto! asi puedes ver si algo se rompe


A partir de aqui ahi 2 mayores rutas que tomar.
  • Hacer cambios pequeños y progresivos. Tiene sentido si es mas modernizar el codigo y la app es "estable" desde punto de vista del usuario (en adelante SMALL STEPS), y es importante que cada cambio este MUY bien testeado
  • Hacer grandes cambios, casi que reescribir todo. Tiene sentido si el codigo es insalvable y ves que "arreglarlo" es tan o mas lento que volver a hacer (en adelante BIG STEPS) y el cliente aguante que tenga que probar algo "incompleto" y tener downtime (ej: Montaste lo nuevo, algo no funciona, toca devolver a lo viejo y quizar re-aplicar los datos cambiados de la bd nueva a la vieja)


El paso MAS importante es que entiendas los DATOS. Si la BD/archivos que usa la app es terrible, *el codigo reflejara eso*.


Ahora, estrategia general cambia en base al camino a elejir:


SMALL STEPS

En tal caso, aqui toca algo salvaje: Cojer la BD y por medio de vistas, funciones y stored procedures limpieza de sus estructuras y/o interfazes de las mismas. Esto es la forma de "limpiar el codigo de la BD"

Si estas de malas, y la bd no SQL, migraria eso primero y cambiaria lo que hay pa que cuadre. Si estas de buenas y la version del motor es "vieja", tu paso es subir a lo ultimo, porque para hacer lo anterior hay que jalar de SQL moderno.

Esto se ve asi. Digamos que la BD es un asco y tienen los usuariso como

Código SQL [-]
CREATE TABLE usr01 {
   id PRIMARY KEY
   n CHAR(5)
  pwd MEMO
}

-- Creas una vista ACTUALIZABLE:

CREATE UPDATABLE VIEW users 
SELECT 
  id as user_id,
  n AS user_name,
  pwd

Una vez tienes limpia la BD puedes proceder con el resto.


Cuando quieras mejora algo hace un ruteo

Código Delphi [-]

//un monton de archivos terribles
class Horrible
vars terribles
procedure un_asco() // lo que tienes


//todo organizado
procedure elegante() // lo que quieres


//ruteador:

procedure rutear()
begin
  if VIEJO then un_asco() ELSE elegante() end
end

Esto tiene una razon importante: No borras ni cambias lo horrible, solo creas una version del programa donde lo viejo queda pero lo nuevo se ejecuta, pero a la vez, peudes hacer una *copia* y comparar ambos programas y mirar si y donde hay desviacion.

Esto puede ser con compilacion condicional o una variable de entorno que se ejecuta en runtime.

Una vez que `elegante` esta aprobado, borras `un_asco` y sigues. Todo esta en git, asi que no hay que temer perder nada.

Asi sigues hasta completar


BIG STEPS

Creas otra bd, con estructuras elegantes. Creas un *importador* que jale los datos viejos y lo sube a lo nuevo. Esto es fundamental y el peor error es tratar de saltarse este paso.

Luego hacer cambios por modulos. Aqui es parecido a los cambios del codigo "small steps". La diferencia enorme es que no estas tratando de que hay 2 codigos que A LA VEZ corran sobre la MISMA bd. Asi que puedes hacer cambios estructurales mas pronto. La pega es que cualquier divergencia o logica no obvia que "funciona" en lo viejo te tocara descubrir mas tarde, y como tienes que hacer el RESTO de los grandes modulos para ver todos los efectos (ej: no veras que facturas determina si puede vender o no a ese cliente hasta que esta cartera,usuarios, pagos, listo).

---

Cual es mejor? Es dificil saber. SMALL STEPS es la opcion de algo que es MUY riesgoso de cambiar y BIG STEPS requiere mucha abilidad para recuperar toda la logica que si tiene sentido de lo viejo.

Tal vez toque combinar, o invertir algunos pasos (ej: Es poco probable que tenga sentido salvar la tabla usuarios si esta muy horrible: Mejor hazla bien y le haces una vista para que lo VIEJO crea que esta como antes!)
__________________
El malabarista.

Última edición por mamcx fecha: 11-04-2023 a las 00:46:26.
Responder Con Cita
  #11  
Antiguo 11-04-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por juggern Ver Mensaje
¿Cómo hacéis vosotros para revisar todo esto? ¿Hay alguna manera de que me marque las variables que no se usan o este tipo de cosas? Veo que los uses se pueden limpiar los no usados, con una opción, pero y las variables, procedimientos y funciones?
Nosotros tenemos la política de "0 warnigs / 0 Hints" en la aplicación. Estos problemas que comentas aparecen en los Hints y Warnings de la aplicación. Tal vez deberías empezar por ahí.





Eso y si quieres asegurarte más, empezar a refactorizar utilizando tests unitarios (donde se pueda). Eso asegura que las modificaciones no alteran los resultados anteriores. No es aplicable a todo el código, pero sí a funciones, procedimientos, clases,....
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 11-04-2023 a las 16:10:48.
Responder Con Cita
  #12  
Antiguo 13-04-2023
juggern juggern is offline
Miembro
 
Registrado: jun 2020
Posts: 79
Poder: 4
juggern Va por buen camino
Si si, yo quiero ir reduciendo los hint/warnings, porque la lista que sale es inacabable.
Voy a ir empezando por los uses que puedo quitar y las variables declaradas que no se usan, poco a poco, e ir reduciendo.
Cuando consiga reducir eso, que es lo básico, ya me meteré más a fondo con el resto.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Limpieza de base de datos chipsoni SQL 5 09-02-2007 04:26:11
Limpieza del DBgrid Alexita22 OOP 3 09-08-2006 09:27:15
Omitir limpieza de cabezal de impresora emeceuy Impresión 5 06-08-2005 06:07:47
de vuelta con la limpieza de edit botones67 Varios 3 06-06-2005 20:47:07


La franja horaria es GMT +2. Ahora son las 00:59:01.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi