¿Qué herramientas de análisis estático de C ++ de código abierto están disponibles?

Java tiene algunas herramientas de análisis estático de código abierto muy buenas, como FindBugs , Checkstyle y PMD . Esas herramientas son fáciles de usar, muy útiles, se ejecutan en múltiples sistemas operativos y son gratuitas .

Los productos comerciales de análisis estáticos C ++ están disponibles en los proveedores Klocwork , Gimpel y Coverity . También hay un analizador PVS-Studio menos conocido. Aunque estos productos son geniales, el costo es demasiado para los estudiantes y, por lo general, es bastante difícil obtener la versión de prueba.

La alternativa es encontrar herramientas de análisis estático de C ++ de código abierto que se ejecutarán en múltiples plataformas (Windows y Unix). Al usar una herramienta de código abierto, podría modificarse para adaptarse a ciertas necesidades. Encontrar las herramientas no ha sido tarea fácil.

A continuación hay una breve lista de herramientas de análisis estático de C ++ que fueron encontradas o sugeridas por otros.

  • C ++ Compruebe http://sf.net/projects/cppcheck/
  • Oink http://danielwilkerson.com/oink/index.html
  • Contador de códigos C y C ++ http://sourceforge.net/projects/cccc/
  • Férula (de las respuestas)
  • Cerdo de Mozilla (de las respuestas) (Esto ahora es parte de Oink)
  • Dehydra de Mozilla (de las respuestas)
  • Use la opción -Weffc++ para GNU g ++ (de las respuestas)

¿Cuáles son algunas otras herramientas portátiles de código abierto de análisis C ++ de código abierto que cualquiera conoce y que pueden recomendarse?

Algunos enlaces relacionados.

  • Herramienta de análisis de código estático de C ++ en Windows
  • http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
  • http://www.chris-lott.org/resources/cmetrics/
  • ¿Una herramienta gratuita para verificar el código fuente de C / C ++ contra un conjunto de estándares de encoding?
  • http://spinroot.com/static/
  • Elegir una herramienta de análisis de código estático

Oink es una herramienta construida sobre el front-end de Elsa C ++. El cerdo de Mozilla es una bifurcación de Elsa / Oink.

Ver: http://danielwilkerson.com/oink/index.html

CppCheck es de código abierto y multiplataforma.

Mac OS X:

 brew install cppcheck 

Con respecto al comstackdor de GNU, gcc ya tiene una opción incorporada que habilita una advertencia adicional a las de -Wall. La opción es -Weffc ++ y se trata de las violaciones de algunas pautas de Scott Meyers publicadas en sus libros ” C ++ efectivo y más efectivo “.

En particular, la opción detecta los siguientes elementos:

  • Defina un constructor de copia y un operador de asignación para las clases con memoria asignada dinámicamente.
  • Prefiero la inicialización a la asignación en constructores.
  • Haga que los destructores sean virtuales en las clases base.
  • Haga que “operator =” devuelva una referencia a * this.
  • No intente devolver una referencia cuando deba devolver un objeto.
  • Distinga entre las formas prefijo y posfijo de operadores de incremento y decremento.
  • Nunca sobrecargue “&&”, “||”, o “,”.

En desarrollo por ahora, pero clang hace un análisis C y está destinado a manejar C ++ a lo largo del tiempo. Es parte del proyecto LLVM .

Actualización : Mientras que la página de destino dice “El analizador es un trabajo en progreso continuo”, ahora está documentado como un analizador estático para C y C ++.

Pregunta: ¿Cómo puedo ejecutar GCC / Clang para el análisis estático? (solo advertencias)

Opción de comstackdor: -sintantación-solo

Alguien más mencionó -Weffc ++, pero esa es en realidad una de las únicas advertencias de GCC que no enciendo por defecto. Sin embargo, el conjunto de advertencias que enciendo es la herramienta de análisis estático más importante de mi kit. Puede ver la lista completa de advertencias recomendadas .

En resumen:

-pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat = 2 -Winit-self -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs -Wnoexcept -Wold -style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow = 5 -Wswitch-default -Wundef -Werror -Wno-unused

Tenga en cuenta que algunos de estos requieren una nueva versión de gcc, por lo que es posible que deba eliminarlos de su lista si está atrapado en 4.5 o algo así.

John Carmack también menciona PVS-Studio en esta interesante publicación de blog sobre “Análisis de código estático” .

Si por código abierto realmente quisiste decir “gratis”, entonces el análisis previo de Microsoft es bueno. Por supuesto, solo para Windows. Está completamente integrado en Visual Studio y el comstackdor. p.ej:

cl / analizar Sample.cpp

Es probable que valga la pena echar un vistazo al trabajo de análisis estático de Mozilla .

Splint parece llenar la factura de C.

Si no especificaste código abierto, diría que PCLint de Gimpel Software es probablemente una de las mejores herramientas disponibles para la comprobación de código estático en C ++. Pero, por supuesto, no es de código abierto.

Mac OS X:

 brew install splint 

PREFast de Microsoft también está disponible en el Kit de controladores de Windows. La versión 7.0 se puede descargar aquí .

Los documentos de Microsoft indican que solo se debe ejecutar contra código de controlador, pero esta (antigua) publicación de blog establece los pasos para ejecutarla. Tal vez se puede integrar en un proceso de construcción normal?

Hemos estado trabajando en un complemento Eclipse CDT llamado metriculador. Todavía está en desarrollo, pero algunas medidas importantes (por ejemplo, LSLOC, McCabe, EfectoCompuesto) ya están implementadas.

Consulte http://sinv-56013.edu.hsr.ch/redmine/projects/metricular/wiki/Documentation para obtener más detalles, como demostración de video y documentación.

La última versión nocturna está disponible para la instalación a través del sitio de actualización en: http://sinv-56013.edu.hsr.ch/metriculator/updatesite-nightly/site/

Descripción adicional

Metriculator analiza estadísticamente el código fuente C ++ y genera métricas de software. Las métricas se implementan como inspectores Codan. Los resultados del análisis se pueden explorar en una vista separada. Cada métrica tiene propiedades configurables (por ejemplo, un umbral para ‘líneas máximas de código por función’). Superar estos umbrales reportará un problema y creará un marcador en el editor de código fuente.

con metriculator puedes:

  • analizar archivos C ++ / carpetas / proyectos
  • definir umbrales métricos y habilitar / deshabilitar la métrica usando la página de preferencias de Codans
  • tener marcadores de problemas en los editores de código fuente
  • explorar resultados métricos
  • exportar los resultados de la métrica como nube de tags (disponible como característica opcional a través del sitio de actualización)

Actualmente el metriculador viene con las siguientes métricas:

  • McCabe (Complejidad ciclomática)
  • Efectocompuesto por tipo
  • Líneas de código de origen lógico
  • Número de miembros por tipo
  • Número de parámetros por función

Deberías probar oo-browser, tiene una integración increíble con xemacs

También se pueden codificar las extensiones de GCC en MELT (un lenguaje específico de dominio diseñado para extender GCC) o los complementos de GCC en C (mucho más difícil) para hacer algunos análisis personalizados.

Doxygen realiza algunos análisis de flujo de control y genera gráficos. Es posible que no sean lo que estás buscando, pero les he resultado útil mirarlos.