Pregunta

Recientemente me preguntaron sobre alternativas a Coverity Prevent para un código base que incluye tanto C / C ++ como Java. Obviamente, en el lado de Java, las herramientas gratuitas disponibles incluyen Findbugs (análisis de código compilado) y PMD (análisis de código estático). Son muy potentes, especialmente cuando comienzas a investigar la integración con IDEs (que, de nuevo, son gratuitos).

Sin embargo, las cosas son complicadas cuando comienzas a moverte al reino C / C ++ con los diversos compiladores, arquitecturas, etc.

He propuesto una variedad de herramientas para el lado de Java, incluyendo Findbugs y PMD. Lo que estoy buscando es la mejor opción para el lado de C / C ++ cuando se considera el uso de las siguientes métricas:

  1. Precio: gratis es mejor pero puede ser mejor por un mejor valor. Sin embargo, los modelos de precios que cobran por línea de código son horribles.
  2. Conjunto de características: ¿cómo mejora esta herramienta mi vida? ¿De qué manera detecta mis errores antes de registrarlos, antes de enviar el código, etc.?
  3. Usabilidad: ¿puedo usar la herramienta en mi escritorio? ¿Puedo compartir los informes y / o hallazgos? ¿Puedo integrar la herramienta con Fogbugz (que usamos en mi grupo)? ¿Puedo integrar la herramienta en CruiseControl (o el equivalente)? ??

La herramienta definitiva sería algo tan útil y útil como una combinación de Findbugs y PMD con un conjunto de características idénticas, todo por cero dólares por asiento.

¿Fue útil?

Solución

Los dos que vienen a la mente son Splint para C y Cppcheck para C ++.

Si desea buscar más opciones, esta función de estas herramientas es "análisis de código estático". Eso podría ayudarlo a encontrar más herramientas para C y / o C ++. Además, puede estar interesado en la respuesta a la pregunta " ¿Qué herramientas de análisis estático de C ++ de código abierto están disponibles? & Quot;

Otros consejos

C ++ es un lenguaje lo suficientemente complicado como para que las herramientas (como la refactorización o las herramientas de análisis estático) no sean tan buenas como Java o C #.

PC-lint de Gimpel Software es lo más parecido a una herramienta estándar de verificación de errores para C ++ que yo saber de. Es comercial con un modelo de precios razonable. No sé qué tan bien se integra con otras herramientas.

El proyecto de código abierto Clang eventualmente debería poder hacer mucho de lo que desea (y se ve < em> realmente genial), pero todavía está en desarrollo.

PC-Lint es el camino a seguir. A diferencia de la mayoría de las otras herramientas, tiene un seguimiento completo de los valores entre funciones y entre módulos y también admite todos los bordes peludos de la compilación / análisis de plantillas. Me compré una copia personal hace unos 9 años, solo porque es muy barata. Terminé usándolo mucho en proyectos de código abierto. PC-Lint no tiene licencia basada en LOC, no llama a casa y no hay servidor de licencias. Está muy en el sistema de honor y muy sin sentido. A lo largo de los 9 años, he encontrado algunos problemas (y esos han sido pocos y distantes), pero casi siempre se han solucionado en unas pocas semanas.

En cuanto al código abierto, existe SMatch, basado en las técnicas de análisis de metacompilación de Coverity, que el proyecto del vino utiliza en gran medida con gran efecto. La subherramienta cpd (detector de copiado y pegado) de PMD funciona en C ++ y es realmente rápida. Para la complejidad ciclomática, está pmccabe, que se puede instalar fácilmente a través de apt-get (en Linux; en Windows, compilo la fuente en cygwin).

PC-Lint requiere cierta configuración para que funcione bien, uno o dos días como máximo. Las otras herramientas no funcionan tan profundamente, por lo que puede comenzar a ejecutar con un comando como "encontrar". -name .c | xargs pmccabe | ordenar -n | cola -n 20 "

He usado Klocwork y Rational Software Analyzer en el pasado, y ambos funcionan bien, aunque ambos son comerciales / no libres.

Utilizo flawfinder.py que analiza 160 funciones peligrosas en C / C ++. http://www.dwheeler.com/flawfinder/

Si desea un puerto ruby ??basado en flawfinder, puede usar vulnxpose.rb. https://github.com/nanotechz9l/Source-code-analyzer

Ambas herramientas escanean archivos de código fuente C / C ++ en busca de vulnerabilidades conocidas, incluidos desbordamientos de búfer, condiciones de carrera, criptografía débil, configuraciones de cárcel chroot ... & amp; más).

Rick

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top