¿Alguien conoce una herramienta de refactorización con todas las funciones para C ++ que funcione de manera confiable con bases de código grandes (unas 100.000 líneas)?
Intenté lo que puedo encontrar una y otra vez en los últimos años: SlickEdit, Eclipse CDT. No todos eran utilizables en absoluto.
RESUMEN : Me tomé el tiempo y evalué "Visual Assist X" y "Refactor for C ++". Ambos tienen algunas características impresionantes, pero ambos están lejos de ser perfectos. Extraer un gran bloque de código por lo general no se realiza de manera satisfactoria sin modificaciones manuales, y por lo tanto no vale la pena.
"Visual Assist X" tiene características agradables, como una autocompletación mucho más completa, etc. Pero genera muchos parpadeos y se ralentiza mucho en ciertos puntos.
Por lo tanto, en mi opinión, la respuesta es: "No, no hay una herramienta de refactorización lista para producción para C ++"
ACTUALIZACIÓN 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 20 MB.
Prueba 1: Método de extracción: produce una excepción Resharper. No se cambió el código fuente.
Prueba 2: Método de extracción con una fuente diferente: funciona bien
Prueba 3: Cambiar la firma de la función extraída: Resultados en código C ++ roto:
bool myclass::do_work123(<unknown long Color>int& Filled*&, long, int&)
Quizás por eso C ++ no está en la lista de la página principal.
En mi opinión, la respuesta a esta pregunta sigue siendo "NO" .
fuente
Respuestas:
Encuentro Visual Assist X con Visual Studio muy útil. Otra opción es Refactor para C ++ .
fuente
Visual Assist y Visual Studio facilitan mucho el manejo de grandes bases de código. La asistencia visual es buena para rastrear cómo se usa una clase o miembro y es más efectiva para renombrarla sin falsos positivos que buscar y reemplazar.
fuente
Espero que el sonido metálico cambie significativamente el panorama de las herramientas de refactorización de C ++ en los próximos años. Es un compilador modular de código abierto que expone una API para analizar y analizar semánticamente el código C ++. Los IDE y otras herramientas podrán usar esta API en lugar de hacer el difícil trabajo de escribir su propio analizador semántico y analizador.
Google ya hizo una herramienta de refactorización a gran escala usando clang .
fuente
Mozilla tiene su propia herramienta de refactorización llamada Pork ( Wiki , Developer Wiki ). Aquí está el blog del desarrollador detrás de Pork. Por lo que he leído, el cerdo se utilizó con éxito en refactorizaciones en Mozilla.
El cerdo debería ayudar si vienes de * nix land, para Visual Studio también recomiendo Visual Assist.
fuente
Nuestro kit de herramientas de reingeniería de software DMS es un motor de transformación diseñado para llevar a cabo transformaciones complejas en grandes cuerpos de código, incluido C ++. Se ha utilizado para realizar cambios confiables en los sistemas de millones de líneas de código. Funciona mediante el uso de transformadores y analizadores de idiomas con precisión de compilador.
Tiene un analizador completo de C ++ con resolución de nombre y tipo, crea AST de código, puede aplicar transformaciones de procedimiento o de fuente a fuente (con sintaxis de superficie C ++) para revisar esos árboles y regenerar la salida compilable con comentarios conservados. (Edición: 7/1/2011: ahora C ++ 1X en la medida en que entendemos el estándar :)
Se ha utilizado en proyectos de reingeniería a gran escala, incluida la rediseño de componentes C ++ y traducciones 100% totalmente automatizadas entre idiomas. Puedes leer sobre esto en el sitio web.
DMS también se utiliza para construir 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 interactiva de refactorización. Creemos que para hacer bien 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 ++ como el siguiente en la línea. Este es un trabajo duro. No verá muchas herramientas serias de refactorización de 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 correr en la versión interactiva. Hemos ganado un SBIR del Departamento de Energía Fase I para investigar cómo hacer esto. Ver 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 apurado; Este es solo el comienzo del programa trianual de tres fases para llegar a una herramienta.
EDITAR 11/08/2011: Primer progreso ... ahora manejamos todas las directivas C ++ 0x y OpenMP.
EDITAR 1/4/2012: hace un análisis de flujo de control total del código C ++.
EDITAR 15/09/2014: ahora tenga el motor de análisis / transformación de front-end C ++ 14 bien en la mano. Incluso cambia el nombre de manera bastante confiable en este punto: -}
fuente
Si está utilizando emacs, intente Xrefactory . Es compatible con la extracción de métodos, renombrar clases / funciones / variables e insertar / eliminar / mover parámetros. También tiene un motor de finalización de código muy bueno / rápido.
fuente
Actualmente no puedo recomendar ninguna herramienta de refactorización para C ++, ciertamente no para grandes bases de código de 100k líneas y superiores. He estado esperando que esto cambie, como el OP, y espero que algún día haya algo. Temo que el lenguaje en sí tenga que cambiar significativamente antes de que veamos herramientas realmente buenas.
por cierto, ¿SlickEdit ha eliminado sus funciones de refactorización?
fuente
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.
fuente
Recomiendo probar rtags si usa emacs y aún no lo ha probado (también hay un paquete para vim disponible). Es una aplicación cliente / servidor basada en clang que indexa el código C / C ++, con estas características incluidas:
Decidí probarlo después de ver esta charla que introdujo rtags (y emacs) para mí.
(Tengo que decir que llegué tan lejos solo después de que mi QtCreator no pudo cambiar el nombre de algunos símbolos correctamente, lo que es un obstáculo para mi uso de este gran IDE por ahora)
Además de lo que es compatible con rtags, también necesito algunas características adicionales, como:
Para estos, recomiendo usar un paquete semántico-refactor para emacs (no estoy seguro si hay alternativas para vim)
En general, las herramientas basadas en el sonido metálico parecen muy prometedoras. Si está interesado en obtener más información acerca de las herramientas clang para C ++ refactorización, incluso para proyectos con gran base de código, hay algunas grandes conversaciones por Chandler Carruth.
fuente
Seguramente hay que mencionar a Klocwork como una suite de refactorización de código comercial. Parece muy prometedor cuando revisas el video de demostración.
fuente
El problema son las plantillas C ++. A partir de 2019, no conozco ninguna herramienta de refactorización que admita plantillas de C ++. He intentado VS2019, VisualAssist, Clion, QtCreator.
Considere un ejemplo:
Si ejecuto Rename Refactoring
foo::print
,bar::print
también debería cambiar el nombre automáticamente. Porque están vinculados a través decall_print
instancias de plantilla de función.fuente
Si está utilizando Visual C ++ (Express Edition es gratis), puede usar Visual Assist desde www.wholetomato.com (enlace a las características de refactorización de C ++).
Tiene un período de prueba de 30 días y hemos encontrado que es más rápido y tiene más funciones que el intellisense incorporado en el producto Visual C ++.
fuente
Si está buscando rediseñar su base de código: MOOSE. Pero esa es una gran colección de herramientas de análisis y reingeniería, no un editor.
fuente
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
fuente
Definitivamente ReSharper último es el camino a seguir. Felicidad garantizada :)
En versión Beta a partir de marzo de 2015.
fuente
CLion se ve muy prometedor.
Descargo de responsabilidad: aún no lo he probado, ya que necesito convertir mis proyectos al formato CMake para poder usarlo.
fuente
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 le 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. Aquí están los resultados de Lattix analizando el kernel de Android (1.6 millones de LOC de C / C ++). Divulgación completa: trabajo para Lattix
fuente
Perdón por encontrar esta pregunta tan tarde. Mis alumnos y asistentes trabajan en la refactorización de C ++ desde aproximadamente 2006. La mayor parte de la infraestructura de refactorización de CDT fue construida por mi equipo en el instituto de software IFS. Desde hace un par de años, proporcionamos a Cevelop nuestra versión de CDT con soporte para refactorizaciones de modernización de código C ++, etc. Cevelop puede trabajar con bases de código grandes, si el espacio de trabajo está configurado correctamente. Gratis disponible en https://cevelop.com
fuente
Encontré el siguiente complemento para Visual Studio 2013: Visual C ++ Refactoring by Microsoft.
Es solo una herramienta de cambio de nombre simple pero funciona perfectamente. Agrega el siguiente menú contextual después de hacer clic derecho en un símbolo:
fuente