tecnicas sinonimo refactory refactorizar refactorizacion español codigo book c++ refactoring automated-refactoring

c++ - sinonimo - refactory



Código de refactorización (6)

Estoy a punto de comenzar a trabajar en un proyecto que implica refactorizar y modificar el código existente que está en c & c ++. El código es inflado y está en gran volumen. Por supuesto, ya que el código necesita ser modificado, se debe desarrollar una comprensión del código y en un lapso muy corto de tiempo, ya que tenemos bastante tiempo programado para el proyecto. ¿Puede alguien sugerir alguna herramienta de código abierto que ayude a lograr lo anterior? En resumen, lo que busco es una herramienta que puede:

  1. Herramientas de ingeniería inversa que ayudarán a entender el diseño.
  2. Herramientas del generador de secuencias que ayudarán a dibujar secuencias en el tiempo de ejecución (lo más probable es que podamos ejecutar el código, pero al menos no en las etapas iniciales) o mediante el examen del código.
  3. Buenas herramientas de navegación de código para estudiar la base de código existente.
  4. Herramienta adecuada que puede auto refactorar código con esfuerzos mínimos.

Por favor, cuénteme sobre experiencias, preferencias o favoritos que valgan la pena mirar.

[EDITAR] Se presentó con una lista de herramientas para ayudar en lo anterior. Aquí está la lista:

  1. Graphviz & Doxygen
    Genera diagramas de clase UML desde la base de código existente

  2. UMLStudio
    Crear un modelo de objeto para su código heredado OO es el mejor enfoque para analizarlo, comprenderlo y mantenerlo. UMLStudio puede convertir automáticamente el código C ++, Java, CORBA IDL, PHP 5 y Ada 95 en notación OOA & D más rápido que cualquier otra herramienta CASE.

  3. CodeDrawer para C ++
    CodeDrawer convierte el código fuente en diagramas visuales. Se pueden mostrar diagramas de clase, estructura y cualquier elemento del código fuente. También muestra las lógicas de una función y un método. CodeDrawer ayuda a comprender el código fuente de su proyecto

  4. Imagix
    La ingeniería inversa y la visualización del código fuente llevan a una mejor comprensión del programa. Velocidades: aprendizaje Análisis de impacto de cambio de código no familiar Integración de código de código fuente abierto Reutilización Mantenimiento del software

  5. AgileJ AgileJ StructureViews es un complemento para Eclipse Java IDE que genera diagramas de clase UML altamente personalizables a escala industrial, ideal para el desarrollo ágil o la exploración de cualquier base de código Java existente.

  6. MaintainJ Si puede ejecutar el código base, entonces MaintainJ genera la secuencia UML y los diagramas de clase en tiempo de ejecución cuando ejecuta un caso de uso particular.

  7. Java Reverse Engineering Tool Genera diagramas de clase y relaciones entre clases desde el código fuente de Java.

  8. Source Insight Gran software de navegación de fuente

Una más, gracias a Steve Townsend.
Klocwork


5 agilej ( AgileJ ) AgileJ StructureViews es un complemento para Eclipse Java IDE que genera diagramas de clase UML altamente personalizables a escala industrial, ideal para el desarrollo ágil o la exploración de cualquier base de código Java existente.

AgileJ se aplica a sus puntos 1 (ingeniería inversa para ayudar a entender el diseño) y 3 (buenas herramientas de navegación de códigos para estudiar la base de códigos existente). El código hinchado que se ha juntado rápidamente se muestra como cosas como:

  • Una o dos clases grandes que actúan como el vertedero para cada bit de la funcionalidad de último minuto (el anti patrón de burbujas)
  • Corte y pegue el código donde se ha copiado y ajustado una clase completa para un nuevo propósito en lugar de factorizar las partes comunes a una clase base primero
  • Falta de OO como lo demuestran muchas clases con solo métodos de obtención y configuración
  • Las dependencias están enmarañadas, todo depende de todo lo demás a lo largo del proyecto y no hay capas dentro de la arquitectura.

Hay muchos más rasgos que se pueden agregar a esta lista, pero los anteriores se hacen más obvios en un diagrama de clase.


El código es inflado y está en gran volumen. Por supuesto, ya que el código necesita ser modificado, se debe desarrollar una comprensión del código y en un lapso muy corto de tiempo, ya que tenemos bastante tiempo programado para el proyecto.

Entonces tienes un problema de administración: si ya sabes que tienes poco tiempo para ENTENDER un montón de código, estás condenado. Para entender este código, deberás hacerlo funcionar e ir a través de él y tomará tiempo. Las herramientas solo te darán un gran mapa de cosas pero no te mostrarán el camino real.

Herramienta adecuada que puede auto refactorar código con esfuerzos mínimos.

Estás viviendo en el país de las maravillas.

Existen herramientas que le proporcionan la arquitectura estructural de su aplicación, pero que realmente no le ayudarán sin pasar por cada módulo uno por uno y leer el código. Primero el código que usa los módulos, luego el código dentro de los módulos.

El hecho de que sea C y C ++ hace que sea aún más difícil definir el tiempo que le tomará, ya que también es relativo al conocimiento que tiene de esos idiomas y al nivel de conocimiento de las personas que escribieron la aplicación.


  1. Si tiene la fuente, técnicamente no es ingeniería inversa. Puede utilizar el muy buen Doxygen para generar documentación (incluidos los diagramas, ¡instale GraphViz también!): Doxygen
  2. No tengo idea, no estoy seguro de que exista.
  3. Su navegador web, junto con Doxygen, si habilita la búsqueda de código fuente. Visual Studio, con un clic derecho para saltar a las definiciones, y el depurador para recorrer el código y obtener una comprensión de su funcionamiento (usar y abusar del comando Salir).
  4. Hay herramientas para hacer refactorización, pero el esfuerzo mínimo y el "auto refactor" son muy difíciles de lograr, no creo que encuentres herramientas para eso.

Hay muy pocas herramientas que pueden analizar y transformar los códigos C y C ++. Como primer paso, el análisis de estos lenguajes se considera difícil por sí mismo. Otro problema clave es el preprocesador, que se usa de forma bastante abusiva (por ejemplo, no de forma estructurada) en los programas de C y dificulta que el analizador vea la estructura del programa y, por lo tanto, difícil para un analizador (necesario para decidir cuándo se realizan refactorizaciones). legal) para hacer su analisis correctamente.

Modulo estos fallos, nuestro kit de herramientas de reingeniería de software DMS se puede configurar para realizar refactorizaciones en código C y C ++. DMS tiene analizadores de fuerza industrial para C y C ++ y puede capturar de manera única la mayoría de los usos de preprocesadores como parte de las estructuras de código internas (normalmente, las personas que intentan analizar C / C ++ expanden las directivas de preprocesadores, y eso no es una opción para refactorizar).

Lo hemos usado para llevar a cabo reorganizaciones de código masivas en código C ++ (donde el abuso del preprocesador es mínimo porque C ++ tiene una variedad de otras formas de configurar el código). También realizamos una reingeniería automatizada de sistemas C, pero con un poco más de esfuerzo para manejar los usos abusivos del preprocesador.

Lo que no es es interactivo . Debe planificar las transformaciones de refactorización y especificarlas con un lenguaje de coincidencia de patrones. Pero es fiable.


La primera pregunta que debe hacer es "¿Cómo me aseguro de que cualquier cambio que hagamos no rompa el sistema?". Sin embargo, su pregunta no menciona las pruebas en absoluto. Eso es una bandera roja para mí.

Estoy de acuerdo con los demás en que las herramientas no son la solución (no es probable que aparezcan de la forma que usted desea, no es probable que sean 100% confiables por sí mismas).

Su objetivo debe ser identificar rápidamente el área (s) que se va a cambiar. Lo haría a través de la inspección y la ejecución del código (preferiblemente en las pruebas existentes, ¿las tiene?) Y me aseguro de tener una cobertura completa de pruebas de unidades y sistemas. en ellos antes de tocar una sola línea. Sin esa base, estarás volando a ciegas y los plazos están más en riesgo.

Como mínimo, si no tiene buenas pruebas, comunique esta inquietud a su línea por adelantado para que, si las cosas van en forma de pera, se vea que ha planteado el problema.

Podrías mirar algo como esto, aunque no lo use yo: Klocwork


Simplemente pensé que agregaría una nota de que CTAGS/ECTAGS es muy útil al estudiar / refactorizar una base de código desconocida, especialmente al usar una herramienta como Emacs / CEDET .