refactorizacion - ¿Hay una herramienta de refactorización C++ en funcionamiento?
refactorizacion de codigo (17)
Actualmente no puedo recomendar ninguna herramienta de refactorización para C ++, ciertamente no para grandes bases de códigos de 100k líneas o más. He estado esperando que esto cambie, como el OP, y espero que algún día haya algo. Me temo que el lenguaje en sí debería cambiar significativamente antes de que veamos alguna herramienta realmente buena.
Por cierto, ¿ha dejado SlickEdit sus características de refactorización?
¿Alguien sabe una herramienta de refactorización con todas las características para C ++ que funciona de manera confiable con grandes bases de código (unas 100.000 líneas)?
Intenté lo que puedo encontrar una y otra vez en los últimos años: SlickEdit, Eclipse CDT. Todos ellos no eran utilizables en absoluto.
RESUMEN : Tomé tiempo y evalué "Visual Assist X" así como también "Refactor for C ++". Ambos tienen algunas características impresionantes, pero ambos también están lejos de ser perfectos. La extracción de un gran bloque de código generalmente no se realiza satisfactoriamente sin modificaciones manuales y, por lo tanto, no da resultado.
"Visual Assist X" tiene buenas características como autocompletición mucho más completa, etc. Pero lleva a mucho parpadeo y se ralentiza mucho en ciertos puntos.
En mi opinión, la respuesta es: "No, no hay una herramienta de refactorización lista para producción para C ++"
ACTUALIZACIÓN de marzo de 2015 En cuanto a la respuesta de hdoghmens, hoy probé Resharper para C ++. Su enlace https://www.jetbrains.com/resharper/ no dice nada sobre C ++. Pero encontré Resharper C ++ que se anunció hace más de un año aquí:
https://www.jetbrains.com/resharper/features/cpp.html
Lo probé con VC2010 usando una base de código de 20MB.
Prueba 1: Método de extracción: da como resultado una excepción de Resharper. No se cambió el código fuente.
Prueba 2: Método de extracción con diferente fuente: Funciona bien
Prueba 3: cambiar la firma de la función extraída: resultados en el código C ++ roto:
bool myclass::do_work123(<unknown long Color>int& Filled*&, long, int&)
Tal vez por eso C ++ no aparece en la página principal.
En mi opinión, la respuesta a esta pregunta sigue siendo "NO" .
Ahora hay una extensión de refactorización de C ++ para Visual Studio 2013 de Microsoft: http://visualstudiogallery.msdn.microsoft.com/164904b2-3b47-417f-9b6b-fdd35757d194
El kit de herramientas de ingeniería de software DMS hace esto, creo. Es un motor de transformación de código, diseñado para gran escala y maneja C ++. Sin embargo, no tengo idea de lo elegante que es la salida.
Encontré el siguiente complemento para Visual Studio 2013: Refactorización de Visual C ++ por Microsoft.
Es solo una herramienta de cambio de nombre simple, pero funciona sin problemas. Agrega el siguiente menú contextual después de hacer clic derecho en un símbolo:
Encuentro Visual Assist X con Visual Studio muy útil. Otra opción es Refactor para C ++ .
Espero que el clang cambie significativamente el panorama de las herramientas de refactorización de C ++ en los próximos años. Es un compilador modular de fuente abierta que expone una API para analizar sintácticamente y analizar el código C ++. Los IDEs y otras herramientas podrán usar esta API en lugar de hacer el difícil trabajo de escribir su propio analizador sintáctico y semántico.
Google ya creó una herramienta de refactorización a gran escala con clang .
Mozilla tiene su propia herramienta de refactorización llamada Pork ( Wiki , Developer Wiki ). Here está el blog del desarrollador detrás de Pork. Por lo que he leído, Pork fue utilizado con éxito en refactorizaciones en Mozilla.
El cerdo debería ayudar si vienes de * nix land, para Visual Studio también recomiendo la asistencia visual.
Nuestro DMS Software Reengineering Toolkit es un motor de transformación diseñado para llevar a cabo transformaciones complejas en grandes cantidades de código, incluido C ++. Se ha utilizado para realizar cambios confiables en sistemas de millones de líneas de código. Opera mediante el uso de analizadores y transformadores de lenguajes con compilación precisa.
Tiene un analizador completo de C ++ con nombre y resolución de tipo, construye AST de código, puede aplicar transformaciones procedurales o de fuente a fuente (con sintaxis de superficie C ++) para revisar esos árboles y regenerar resultados compilables con comentarios preservados. (Editar: 01/07/2011: Ahora hace C ++ 1X en la medida en que entendemos el estándar :)
Se ha utilizado en proyectos de reingeniería a gran escala, incluida la remodelación de componentes de C ++ y traducciones 100% totalmente automáticas entre idiomas. Puede leer sobre esto en el sitio web.
DMS también se usa para crear herramientas de análisis de fuentes arbitrarias. Los ejemplos incluyen detección de clones, cobertura de prueba, diferencia inteligente (comparación de estructuras de código fuente y operaciones de edición abstracta en lugar de líneas con inserción y eliminación simples), etc.
Lo que no es (actualmente) es una herramienta de refactorización interactiva. Creemos que para hacer la mayoría de las refactorizaciones, necesita un control profundo y análisis de flujo de datos. DMS tiene una maquinaria genérica para soportar esto, y esa maquinaria se implementa para C, COBOL y Java en este punto, con C ++ siendo el siguiente en la línea. Este es un trabajo difícil. No verá muchas herramientas serias de refactorización en C ++ hasta que este tipo de problema se haya resuelto bien. Primero necesita un analizador de C ++ completo: -}
EDITAR 5/7/2011: Parece que vamos a echar un vistazo a la versión interactiva. Hemos ganado un Departamento de Energía Fase I SBIR para investigar cómo hacer esto. Consulte http://science.energy.gov/sbir/awards-and-general-stats/fy-2011/phase-i-by-state/?p=1#tx (busque diseños semánticos en "Texas"). No esperes un resultado de prisa; esto es solo el comienzo de un programa multianual de 3 fases para llegar a una herramienta.
EDITAR 8/11/2011: Primer avance ... ahora manejamos todas las directivas C ++ 0x y OpenMP.
EDITAR 1/4/2012: ¿Tiene control de flujo completo de código C ++.
EDITAR 15/9/2014: Ahora tiene el motor de transformación / analizador frontal C ++ 14 bien a mano. Incluso cambia el nombre bastante confiablemente en este punto: -}
Recomiendo probar rtags si usa emacs y aún no lo ha probado (también hay un package para vim disponible). Es una aplicación cliente / servidor basada en clang que indexa el código C / C ++, con estas características incluidas:
- ir a definición / declaración
- encuentra todas las referencias, ve a siguiente / anterior
- cambiar el nombre del símbolo
- integración con los "fixits" de clang
Decidí probarlo después de ver esta talk que presentó rtags (y emacs) para mí.
(Debo decir que he llegado tan lejos solo después de que mi QtCreator no haya podido cambiar el nombre de algunos símbolos correctamente, lo cual es un obstáculo para el uso de este gran IDE por ahora)
Además de lo que admiten rtags, también necesito algunas características adicionales, que incluyen:
- crear definición / prototipo de función
- función de extracción
- crear métodos getter / setter
Para estos, recomiendo usar un paquete de semantic-refactor para emacs (no estoy seguro si hay alternativas para vim)
En general, las herramientas basadas en clang parecen muy prometedoras. Si está interesado en obtener más información acerca de las herramientas clang para la refactorización en C ++, incluso para proyectos con una gran base de código, Chandler Carruth ofrece great charlas.
Seguramente se debe mencionar a Klocwork como una suite de refactoreo de códigos comerciales. Parece muy prometedor cuando pasas por el video de demostración.
Si buscas rediseñar tu código base: MOOSE. Pero esa es una gran colección de herramientas de análisis y reingeniería, no un editor.
Si estás usando emacs, prueba Xrefactory . Es compatible con la extracción de métodos, cambio de nombre de clases / funciones / variables e insertar / eliminar / mover parámetros. También tiene un motor de finalización de código muy bueno / rápido.
Si usa Visual C ++ (Express Edition es gratuito), puede usar Visual Assist en www.wholetomato.com (enlace a las funciones de refactorización de C ++).
Tiene un período de prueba de 30 días y hemos descubierto que es más rápido y completo que el intellisense integrado en el producto Visual C ++.
Te recomiendo que pruebes Lattix . Le permite analizar grandes bases de código C / C ++ para descubrir la arquitectura, identificar dependencias problemáticas y rediseñar el código para mejorar la modularidad y reducir la deuda técnica. Lattix también proporciona una serie de algoritmos para ayudar en el proceso de refactorización. Estos algoritmos lo ayudan a descubrir cómo mover elementos de una parte de la jerarquía a otra, romper ciclos y mover subsistemas para que se pueda mejorar el acoplamiento y la cohesión de los subsistemas. Estos son los resultados de Lattix analizando el Kernel de Android (1.6 millones de LOC de C / C ++). Divulgación completa: trabajo para Lattix
Visual Assist y Visual Studio hacen que trabajar con bases de datos grandes sea mucho más fácil. La asistencia visual es buena para rastrear cómo se usa una clase o miembro y es más efectiva para cambiar el nombre sin falsos positivos que buscar y reemplazar.
CLion ve muy prometedor.
Descargo de responsabilidad: aún no lo he probado, ya que necesito convertir mis proyectos al formato CMake para usarlo.
https://www.jetbrains.com/resharper/ es el camino a seguir. Felicidad garantizada :)
En la versión Beta a partir de marzo de 2015.