sonar - Elegir una herramienta de análisis de código estático
sonarqube (15)
Estoy trabajando en un proyecto en el que estoy codificando en C en un entorno UNIX. He estado usando la herramienta de pelusa para verificar mi código fuente. Lint ha existido desde hace mucho tiempo (desde 1979), ¿alguien puede sugerir una herramienta de análisis de código más reciente que podría utilizar? Preferiblemente una herramienta que es gratis.
Descubrí que generalmente es mejor usar múltiples herramientas de análisis estático para encontrar errores. Cada herramienta está diseñada de manera diferente, y pueden encontrar cosas muy diferentes entre sí.
Hay algunas buenas discusiones en algunas de las charlas here . Es de una conferencia celebrada por el Departamento de Seguridad Nacional de EE. UU. Sobre análisis estático.
Es posible que la herramienta Uno sea útil. Es una de las pocas opciones gratuitas que no son juguetes. Difiere de lint, Flexelint, etc. al centrarse en un pequeño número de errores "semánticos" (índices de matriz nulos, índices de matriz fuera de límites y uso de variables no inicializadas). También permite comprobaciones definidas por el usuario, como la disciplina de bloqueo y desbloqueo.
Estoy trabajando para lanzar públicamente una herramienta sucesora, Orion ( CONTENIDO NO DISPONIBLE MÁS )
Escuché cosas buenas sobre el analizador estático clang , que IIRC utiliza LLVM como back-end. Si eso se implementa en su plataforma, esa podría ser una buena opción.
Por lo que entiendo, hace un poco más que simplemente analizar la sintaxis. "Búsqueda automática de errores", por ejemplo.
Gday,
Estoy totalmente de acuerdo con las sugerencias para leer y resumir lo que el compilador te dice después de configurar -Wall.
Una buena herramienta de análisis estático para la seguridad es FlawFinder escrito por David Wheeler. Hace un buen trabajo buscando varios exploits de seguridad,
Sin embargo, no reemplaza el hecho de que un conocedor lea su código. Como dice David en su página web: "¡Un tonto con una herramienta sigue siendo un tonto!"
aclamaciones,
Robar
Hay una opción "-Weffc ++" para gcc que de acuerdo con la página man de Mac OS X:
Advierta acerca de las violaciones de las siguientes pautas de estilo del libro Effective C ++ de Scott Meyers:
[recorte]
Sé que preguntaste sobre C, pero esto es lo más cercano que sé ...
Hemos estado usando Coverity Prevent para verificar el código fuente de C ++.
No es una herramienta gratuita (aunque creo que ofrecen escaneo gratuito para proyectos de código abierto), pero es una de las mejores herramientas de análisis estático que encontrarás. He escuchado que es aún más impresionante en C que en C ++, pero nos ha ayudado a evitar una gran cantidad de errores hasta el momento.
Las herramientas tipo pelusa generalmente sufren un problema de "falsa alarma": informan muchos más problemas de los que realmente existen. Si la proporción de advertencias genuinamente útiles es demasiado baja, el usuario aprende a ignorar la herramienta. Las herramientas más modernas gastan un poco de esfuerzo para enfocarse en las advertencias más probables / interesantes.
No pase por alto el compilador en sí.
Lea la documentación del compilador y encuentre todas las advertencias y errores que puede proporcionar, y luego habilite todas las que le parezcan adecuadas.
También asegúrese de decirle a su compilador que trate las advertencias como errores, de modo que se ve obligado a corregirlas de inmediato. ("-Werror" en gcc)
Además: "-Wall" en gcc no habilita todas las advertencias, no te dejes engañar.
También también: echa un vistazo a valgrind (¡gratis!) - "detecta automáticamente [s] muchos problemas de gestión de memoria y errores, y perfila [s] tus programas en detalle".
Valgrind no es un comprobador estático, ¡pero es una gran herramienta! http://valgrind.org
Para el código C, definitivamente debes usar Flexelint . Lo usé por casi 15 años y lo juro. Una de las mejores características que tiene es que las advertencias se pueden activar y desactivar selectivamente mediante comentarios en el código ("/ * lint -e123 * /"). Resultó ser una poderosa herramienta de documentación cuando querías algo fuera de lo común. "Estoy apagando la advertencia X, por lo tanto, hay una buena razón por la que estoy haciendo X".
Para cualquiera en preguntas C / C ++ interesantes, mira algunos de sus ejemplos en su sitio y mira si puedes descubrir los errores sin mirar los consejos.
Puede probar CppDepend , un analizador estático bastante completo disponible en Windows y Linux, a través de VS Plugin, IDE o línea de comandos, y es gratuito para los colaboradores de código abierto
Puede usar cppcheck . Es una herramienta de análisis de código estático fácil de usar.
Por ejemplo:
cppcheck --enable=all .
verificará todos los archivos C / C ++ en la carpeta actual.
Sparse es una herramienta de software de computadora, ya disponible en Linux, diseñada para encontrar posibles fallas de codificación en el kernel de Linux.
Hay dos proyectos activos del Centro de Verificación de Linux destinados a mejorar la calidad de los módulos de kernel cargables.
- Verificación de controladores de Linux (LDV): un conjunto de herramientas completo para la verificación de código fuente estático de los controladores de dispositivos Linux.
- KEDR Framework: un marco extensible para el análisis dinámico y la verificación de los módulos kernel.
- Otro proyecto en curso es la verificación del sistema de archivos de Linux que tiene como objetivo desarrollar un conjunto de herramientas dedicado para la verificación de las implementaciones del sistema de archivos de Linux.
PC-lint/Flexelint son herramientas de análisis estáticas muy potentes y útiles, y altamente configurables, aunque lamentablemente no gratuitas.
Cuando usan por primera vez una herramienta como esta, pueden producir un gran número de advertencias, lo que puede dificultar la diferenciación entre las principales y las menores. Por lo tanto, es mejor comenzar a utilizar la herramienta en su código lo más temprano posible en el proyecto, y luego ejecutarlo en su código con la mayor frecuencia posible, de modo que pueda lidiar con las nuevas advertencias a medida que se presenten.
Con un uso continuo como este, pronto aprenderá cómo escribir su código de una manera que confirme las reglas aplicadas por la herramienta.
Debido a esto, prefiero herramientas como Lint, que se ejecutan con relativa rapidez, y así fomentar el uso continuo, en lugar de las herramientas más engorrosas que puede terminar usando con menos frecuencia, en todo caso.
la pelusa se actualiza constantemente ... entonces ¿por qué querrías una más reciente?
BTW flexelint es pelusa