2010-11-23 9 views
10

¿Qué herramientas serían más útiles para analizar una base de código de C++? ¿Cuánto cuestan?
¿Podemos gestionar con software gratuito y de prueba, o hay un software comercial que es bueno y que realmente deberíamos pagar?Herramientas para analizar la base de código de C++

El objetivo principal sería comprender la calidad, problemas de memoria, etc., también para comprender el código (para detectar problemas arquitectónicos, por ejemplo), quizás normas de codificación.

Análisis principalmente estático, pero esperamos poder ejecutar el código. . Piense que tiene que ser "robusto en el sentido de que debe trabajar con código para compiladores arcanos

+0

¿Qué hay del bueno de Boundschecker and Purify? ¿Siguen siendo las principales aplicaciones? – Olav

+0

Es extraño que pida un análisis estático y luego ofrezca herramientas de análisis dinámico como ejemplos. –

+0

Boundschecker también tiene capacidades estáticas, creo. De todos modos, creo que es mejor hacerlo de forma dinámica, pero no sé si llegaremos tan lejos. – Olav

Respuesta

5

La mejor herramienta gratuita es su c errores de advertencia de ompiler, siempre los uso en el nivel máximo. El primer objetivo debe ser una construcción limpia sin ningún tipo de trampa (por ejemplo, deshabilitar o descartar advertencias desconocidas).

Visual C++ ha incorporado Code Analysis que es bueno para detectar algunos errores y el uso indebido API Win32, pero no está incluido en la versión gratuita y es (obviamente) específico de Windows. Esto solía ser una herramienta interna de Microsoft llamada Prefast, análoga a FxCop en .Net.

PC-Lint es bueno, pero prolijo y no gratuito. Si puede obtener un archivo de configuración para atrapar "cosas útiles" e ignorar el ruido, eso sería una gran ventaja. De nuevo, esto es para Windows, pero sé que hay versiones para otras plataformas.

+0

Aunque solo está en la versión de equipo súper caro, ¿verdad? –

+0

@Noah - para VS2010 está en Premium y Ultimate. Para VS2008, Team System y Team Suite. Para 2005, Team Edition para desarrolladores de software. En general: sí, es solo en las versiones más caras, con VS2010 siendo un poco menos exorbitante si quieres esto. –

+0

Así es, todas las versiones cambiaron con la nueva versión. Pierdo la pista +1 para las advertencias del compilador, pero agregaría la regla "Hazlo compilar sin ninguna". Puede ser difícil, especialmente si usa boost, pero es mucho más evidente que hay un problema si todavía no tiene 5000 advertencias que le gritan. –

0

Theres CCCC: http://cccc.sourceforge.net/ - resultado de un proyecto de investigación sobre métricas.

A decir verdad, no he encontrado mucho beneficio en tales cosas. ¿Qué esperas obtener?

2

He oído cosas muy buenas sobre Valgrind. "detecta automáticamente muchos errores de administración de memoria y de subprocesos, y describe sus programas en detalle"

+2

Una buena sugerencia, pero Valgrind no realiza análisis estáticos: debe ejecutar el código (e idealmente para ejecutarlo con la cobertura adecuada) para aprovechar Valgrind. –

1

El hedor número uno en los programas es code duplication. Puede usar detectores clónicos para encontrar duplicados. Muchos detectores clónicos solo comparan líneas de texto para coincidencias exactas; otros compararán las secuencias token y encontrarán coincidencias casi exactas donde las diferencias son solo identificadores modificados. Puede usar nuestro CloneDR para encontrar la duplicación en la que se insertan o eliminan estructuras de lenguaje arbitrarias, utilizando la gramática del idioma como una guía. CloneDR funciona para sistemas grandes de C++, así como para muchos otros idiomas. En el enlace, puede encontrar informes típicos de detección de clones.

Un popular comprobador estático de amplio espectro es PCLint. Esto comprueba una variedad de errores de codificación comunes predefinidos por la herramienta. No sé qué tan bien maneja dialectos "arcanos" (compiladores) de C++.

Si desea definir comprobaciones personalizadas, necesita un full C++ front end parser y la posibilidad de configurar sus comprobaciones arbitrariamente. Nuestro DMS Software Reengineering Toolkit es un motor que se puede configurar para lograr esto.La interfaz de C++ de DMS se puede configurar para manejar dialectos C++ "arcanos", pero ya cubre ANSI, GCC3 y GCC4, MS Visual Studio 7 y 2005. Como DMS es un motor de transformación de programas, incluso se puede usar para "mejorar" el código calidad mediante la sustitución de construcciones pobres con mejores.

Aunque no es un análisis estático, las herramientas test coverage para medir qué tan bien ha probado su código son muy útiles para evaluar la calidad de su código. El hecho de que todas tus pruebas pasen, no significa que hayas probado bien; el código sin ejercer puede tener cualquier/todo tipo de problemas.

0

Puede probar Vigilant Sentry, que analiza C y C++ y busca errores avanzados en su software. Esto incluye fugas de memoria o recursos y bloqueo que causa daños en la memoria, entre otras cosas.

La edición de la pequeña empresa es actualmente solo $ 795 (de lejos la más barata en el mercado por el valor) y la empresa es $ 4995. Buena suerte para encontrar lo que necesitas.

Cuestiones relacionadas