Elegir una herramienta de análisis de código estático

votos
54

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.

Publicado el 05/08/2008 a las 22:19
fuente por usuario
En otros idiomas...                            


15 respuestas

votos
30

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

Respondida el 05/08/2008 a las 23:17
fuente por usuario

votos
14

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.

Respondida el 05/08/2008 a las 22:42
fuente por usuario

votos
12

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.

Respondida el 06/08/2008 a las 01:40
fuente por usuario

votos
5

Hace poco compilé una lista de todas las herramientas de análisis estático que tenía a mi disposición, todavía estoy en el proceso de evaluarlas todas. Tenga en cuenta que estas son principalmente herramientas de análisis de seguridad.

Respondida el 03/09/2008 a las 23:11
fuente por usuario

votos
5

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.

Respondida el 15/08/2008 a las 18:47
fuente por usuario

votos
4

Puede utilizar cppcheck . Es un fácil utilizar la herramienta de análisis de código estático.
Por ejemplo:
cppcheck --enable=all .
se les presentarán todas / C archivos C ++ en la carpeta actual.

Respondida el 25/06/2015 a las 15:54
fuente por usuario

votos
1

Usted puede tratar de CppDepend , un analizador estático bastante completa disponible en Windows y Linux, throught VS Plugin, IDE o línea de comando, y es gratis para los contribuyentes de código abierto

Respondida el 26/06/2015 a las 12:01
fuente por usuario

votos
1

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.

Respondida el 20/12/2008 a las 00:29
fuente por usuario

votos
1

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.

Respondida el 23/08/2008 a las 15:29
fuente por usuario

votos
1

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 )

Respondida el 15/08/2008 a las 23:39
fuente por usuario

votos
0

Escaso es una herramienta de software de ordenador, ya está disponible en Linux, diseñado para encontrar posibles fallos de codificación en el núcleo de Linux.

Hay dos proyectos activos del Centro de Verificación Linux destinadas a mejorar la calidad de los módulos del kernel cargables.

  1. Linux Driver Verificación (LDV) - un amplio conjunto de herramientas para la verificación de código fuente estática de controladores de dispositivos Linux.
  2. Marco KEDR - un marco extensible para el análisis dinámico y la verificación de los módulos del núcleo.
  3. Otro proyecto en marcha es Linux archivo de verificación del sistema que tiene como objetivo desarrollar un conjunto de herramientas dedicadas para la verificación de las implementaciones del sistema de archivos de Linux.
Respondida el 20/12/2012 a las 08:36
fuente por usuario

votos
0

Me he dado cuenta que por lo general es mejor utilizar 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 unos de otros.

Hay algunas buenas discusiones en algunas de las conversaciones aquí . Es de una conferencia llevada a cabo por el Departamento de Seguridad Nacional, el análisis estático.

Respondida el 15/06/2011 a las 07:53
fuente por usuario

votos
0

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

Respondida el 26/08/2008 a las 16:21
fuente por usuario

votos
0

la pelusa se actualiza constantemente ... entonces ¿por qué querrías una más reciente?

BTW flexelint es pelusa

Respondida el 23/08/2008 a las 12:42
fuente por usuario

votos
0

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é ...

Respondida el 15/08/2008 a las 23:03
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more