java - que - sonar codigo fuente
¿Hay un Findbugs y/o un PMD equivalente para C/C++? (5)
C ++ es un lenguaje lo suficientemente complicado como para que las herramientas para él (como las herramientas de refactorización o análisis estático) no sean tan buenas como Java o C #.
La huella de PC-lint Gimpel Software es lo más parecido a una herramienta de comprobación de errores estándar para C ++ que yo sepa. 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 debería poder hacer mucho de lo que quieres (y se ve muy bien), pero aún está en desarrollo.
Recientemente me preguntaron sobre alternativas a Coverity Prevent para una base de código que incluye C / C ++ y 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 poderosos, especialmente cuando comienzas a investigar la integración con IDE (que, de nuevo, son gratis).
Sin embargo, las cosas son peligrosas 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 tanto Findbugs como PMD. Lo que estoy buscando es la mejor opción para el lado C / C ++ cuando se considera el uso de las siguientes métricas:
- Precio: gratis es mejor pero puede ser batido por un mejor valor. Sin embargo, los modelos de precios que cobran por línea de código son horribles.
- Conjunto de características: ¿cómo esta herramienta hace que mi vida sea mejor? ¿De qué manera detecta mis errores antes de registrarlos, antes de que enviemos el código, etc.?
- Usabilidad: ¿Puedo usar la herramienta en mi escritorio? ¿Puedo compartir los informes y / o resultados? ¿Puedo integrar la herramienta con Fogbugz (que utilizamos en mi grupo)? ¿Puedo integrar la herramienta en CruiseControl (o su equivalente)?
La herramienta definitiva sería algo tan útil y utilizable como una combinación de Findbugs y PMD con un conjunto de características idénticas, todo por cero dólares por asiento.
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 el "análisis de código estático". Eso podría ayudarlo a encontrar más herramientas para C y / o C ++. Además, podría interesarle la respuesta a la pregunta "¿Qué herramientas de análisis estático de C ++ de código abierto están disponibles?"
PC-Lint es el camino a seguir. A diferencia de la mayoría de las otras herramientas, tiene un completo seguimiento de valores entre funciones y entre módulos y es compatible con todos los bordes vellosos de la compilación / análisis de plantillas también. 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 otorga licencias basadas en LOC, no llama a casa y no hay un servidor de licencias. Está muy relacionado con el sistema de honor y no tiene sentido. A lo largo de los 9 años, he encontrado algunos problemas en él (y esos han sido muy pocos), 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 meta-compilación de Coverity, que el proyecto de vino utiliza bastante para un gran efecto. La sub-herramienta cpd (detector de pegado de copia) de PMD funciona en C ++ y es realmente rápida. Para la complejidad ciclomática, hay pmccabe que es fácilmente instalable a través de apt-get (en Linux; en Windows, compilo la fuente bajo cygwin).
PC-Lint requiere alguna configuración para que funcione bien, como máximo uno o dos días. Las otras herramientas no funcionan tan profundamente, por lo que puedes comenzar a ejecutar con un comando como "buscar. -Nombre .c | xargs pmccabe | sort -n | tail -n 20"
Uso flawfinder.py que escanea 160 funciones peligrosas en C / C ++. http://www.dwheeler.com/flawfinder/
Si desea un puerto ruby basado en un buscador de fallas, puede usar vulnxpose.rb. https://github.com/nanotechz9l/Source-code-analyzer
Ambas herramientas analizan los archivos de código fuente de C / C ++ en busca de vulnerabilidades conocidas, incluidos desbordamientos de búfer, condiciones de carrera, criptografía débil, configuraciones de la cárcel chroot ... y más.
Almiar
He usado Klocwork y Rational Software Analyzer en el pasado, y ambos funcionan bien, aunque ambos son comerciales / no gratuitos.