2008-09-26 34 views
274

Java tiene algunas muy buenas herramientas de análisis estático de código abierto como FindBugs, Checkstyle y PMD. Esas herramientas son fáciles de usar, muy útiles, se ejecuta en múltiples sistemas operativos y gratis.¿Qué herramientas de análisis estático de código abierto C++ están disponibles?

Los productos comerciales de análisis estático 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 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 se muestra una breve lista de herramientas de análisis estático de C++ que han sido encontradas o sugeridas por otros.

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

Algunos enlaces relacionados.

+0

Comercial, DMS Software Reengineering Toolki, maneja Java, C, C++, y COBOL, proporciona análisis, construcción de AST, resolución de nombre/tipo, control/análisis de flujo de datos, análisis personalizado y transformación. Ver http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html. –

+1

Para la herramienta comercial también hay CppDepend (http://www.cppdepend.com), y tal vez la versión de prueba podría ser suficiente para los estudiantes. –

+4

Visto 71000 veces y "cerrado como no constructivo"? Yo voto para reabrir –

Respuesta

19

Oink es una herramienta integrada en la parte superior del frontal del Elsa C++. El cerdo de Mozilla es una bifurcación de Elsa/Oink.

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

+0

He compilado más de 1000 programas en mi vida, pero por el amor de Dios no puedo compilar este paquete pase lo que pase. Traté de usar Fedora, Ubuntu, WSL, Cygwin, MSYS2, Windows, pero no. Algo siempre falta y la documentación es sencillamente horrible. No me malinterpreten, creo que la herramienta es excelente. Pero el sitio web y la documentación parecen que nadie los tocó en 10-15 años. – Shiki

4

Splint parece llenar el factura por C.

Si no especificó código abierto, diría Gimpel SoftwarePCLint 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 
+0

En segundo lugar, la recomendación para PCLint, un increíble verificador de código estático. –

+1

Pero es caro para un solo desarrollador :) Me gusta gratis mejor –

+5

splint es para C, no para C++. No sé si planean expandir la cobertura o no. ¡Eso espero! –

7

Si por Open Source, que en realidad quería decir "libre", entonces prefast análisis de Microsoft es una buena. Por supuesto, solo para Windows. Está completamente integrado en Visual Studio & el compilador. p.ej.:

cl/analizar Sample.cpp

+0

¿Qué versión y edición está disponible? – twk

+0

VS2005/2008 Equipo solo –

+0

Parece estar integrado en el compilador, que es gratis. La integración es probly solo edición de equipo. – JBRWilkinson

50

En cuanto al compilador GNU, gcc ya tiene una opción incorporada que habilita advertencia adicional a las de -Wall. La opción es -WeffC++ y se trata de las infracciones de algunas pautas de Scott Meyers publicadas en sus libros "Eficaz y más eficaz C++".

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

  • definir un constructor de copia y un operador de asignación para las clases con memoria asignada dinámicamente.
  • Prefieren 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 los operadores de incremento y decremento.
  • Nunca sobrecargar "& &", "||" o ",".
+4

Además de gcc's -Wall y -WeffC++, -Wextra realiza algunos buenos análisis estáticos libres, por ejemplo, ramas que no devuelven un valor, o que comprueban unsigned por ser menor que cero. Es notable la frecuencia con la que los programadores profesionales piensan que esta última es una buena idea ... –

+19

Yuck, '-WeffC++' advierte sobre * toneladas * de construcciones que están perfectamente bien en una gran base de código. No obstante, subo la sugerencia de '-Wextra'; no salgas de casa sin eso! – Tom

26

En desarrollo por ahora, pero clang realiza el 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 continuo trabajo en progreso", es, sin embargo, ahora documented como un analizador estático tanto para C y C++.

Pregunta: How can I run GCC/Clang for static analysis? (warnings only)

opción del compilador: -fsyntax sólo

+1

LLVM es un proyecto muy interesante que, comparado con gcc, genera más binarios optimizados en menos tiempo; y clang, cuando esté completo, será su front-end ... –

+0

Otro editor agregó la información sobre el modificador -syntax-only. Solo tenga en cuenta que es esencialmente una solicitud para ejecutar el análisis que el compilador ejecutaría sin realmente compilar y emitir las advertencias. No estoy seguro, pero creo que eso es diferente del análisis estático. –

0

Doxygen hace algo de 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.

68

CppCheck es de código abierto y multiplataforma.

Mac OS X:

brew install cppcheck 
+2

+1 Lo uso la mayor parte del tiempo a través del plugin eclipse. Ha sido realmente útil para encontrar código que podría tener fugas. –

+1

@gio No he visto ningún problema personalmente. Creo que CppCheck tiene la capacidad de ignorar o excluir ciertas rutas o archivos, lo que ayuda a reducir el alcance. –

+0

En Windows: 'choco install cppcheck' – KindDragon

1

Usted debe tratar oo-explorador que tiene la integración impresionante con xemacs

3

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

Los documentos de Microsoft indican que solo se debe ejecutar con código de controlador, pero este (anterior) blog post establece los pasos para ejecutarlo. Tal vez se puede integrar en un proceso de construcción normal?

+0

PREFast ralentizará mucho su proceso de construcción, para cualquier proyecto real, su servidor de compilación quizás no pueda pagarlo. – zhaorufei

+0

@zhaorufei: la mayoría de los análisis estáticos no son "rápidos"; tienen un trabajo de análisis de código bastante complejo que hacer, por definición.Si no te gusta el costo de compilación todo el tiempo, solo hazlo opcional. –

1

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.

+2

He leído uno de los PDF sobre MELT y extiendo gcc con derretimiento, mi sensación es que todavía es demasiado complejo/difícil agregar tus propios complementos a gcc. No es una forma práctica para el usuario común. – zhaorufei

+1

Extender GCC es complejo, como sea que lo hagas (a través de los complementos C, a través de MELT o incluso a través de Python). Esto es porque GCC es complejo. Y la personalización * cualquier * herramienta de análisis estática C++ es * difícil * porque la especificación del lenguaje C++ es muy compleja, y tendrá que manejar la mayor parte de esa complejidad (cualquier programa C++ no trivial usa muchas características C++, quizás a través del Biblioteca estándar de C++). –

14

John Carmack también menciona PVS-Studio en este interesante blog post on "Static Code Analysis".

+4

No es "de código abierto" y absoluta y positivamente no "gratis" en ningún tipo de significado de esa palabra. Es una herramienta de análisis estático bien conocida (segundo después de la mera cobertura, creo), pero su precio es bastante alto. – AoeAoe

2

Hemos estado trabajando en un plug-in Eclipse CDT llamado metriculador. Todavía está en desarrollo, pero algunas medidas importantes (por ejemplo, LSLOC, McCabe, Efecto de conexión) 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 nightly build está disponible para su instalación a través de sitio de actualización en: http://sinv-56013.edu.hsr.ch/metriculator/updatesite-nightly/site/

detallada Descripción

Metriculator estáticamente análisis de código fuente de 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 puede:

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

Actualmente metriculator viene con las siguientes mediciones:

  • McCabe (Ciclomática la complejidad)
  • EfferentCoupling según el tipo de
  • Líneas fuente lógica de Código
  • número de miembros por Tipo
  • Número de Parámetros por función
15

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 el complete list of recommended warnings.

En resumen:

-pedantic -Wall -Wextra -Wcast a alinear -Wcast-cali--Wctor dtor-privacidad -Wdisabled-optimización -Wformat = 2 -Winit-auto -Wlogical-op - Wmissing-declaraciones -Wmissing-include-dirs -Wnoexcept -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow = 5 -Wswitch- predeterminado -Wundef -Werror -Wno-sin usar

Tenga en cuenta que algunos de ellos requieren una nueva versión de gcc, por lo que puede que tenga que eliminar de su lista si usted está atascado de nuevo en 4.5 o alguna cosa.

Cuestiones relacionadas