usted está probablemente va a tener que lidiar con una buena cantidad de falsos positivos, sobre todo si su base de código es grande.
herramientas de análisis más estáticas funcionan usando el "análisis intra-procesal", lo que significa que ellos consideran cada procedimiento de forma aislada, en lugar de "un análisis completo del programa", que considera la totalidad del programa.
Suelen utilizar el análisis "dentro del procedimiento" porque el "análisis de todo el programa" tiene que considerar muchas rutas a través de un programa que nunca ocurrirá en la práctica, y por lo tanto a menudo puede generar resultados falsos positivos.
análisis Intra-procedimiento elimina esos problemas por sólo se centra en un solo procedimiento. Sin embargo, para poder trabajar, generalmente necesitan introducir un "lenguaje de anotación" que use para describir metadatos para argumentos de procedimiento, tipos de devolución y campos de objeto. Para C++, esas cosas generalmente se implementan a través de macros con las que se decora. Las anotaciones describen cosas como "este campo nunca es nulo", "este búfer de cadena está protegido por este valor entero", "este campo solo se puede acceder mediante el hilo etiquetado como 'fondo'", etc.
El análisis herramienta tomará las anotaciones que proporcione y verificará que el código que escribió en realidad se ajuste a las anotaciones. Por ejemplo, si potencialmente puede pasar un valor nulo a algo que está marcado como no nulo, marcará un error.
En ausencia de anotaciones, la herramienta tiene que asumir lo peor, y así reportarán una gran cantidad de errores que no son realmente errores.
Dado que parece que ya no está utilizando una herramienta de este tipo, debe suponer que tendrá que dedicar una cantidad considerable de tiempo a anotar su código para deshacerse de todos los falsos positivos que inicialmente se informarán. Primero ejecutaba la herramienta y contaba el número de errores. Eso debería darte una estimación del tiempo que necesitarás para adoptarlo en tu código base.
Ya sea que la herramienta valga o no, la herramienta depende de su organización. ¿Cuáles son los tipos de errores que más te muerden? ¿Son errores de desbordamiento del búfer? ¿Son nero-dereference o errores de fuga de memoria? ¿Están enhebrando problemas? ¿Son "oops que no consideramos ese escenario", o "no probamos una versión de Chineese de nuestro producto que se ejecuta en una versión lituana de Windows 98?".
Una vez que descubra cuáles son los problemas, entonces debe saber si vale la pena el esfuerzo.
La herramienta probablemente ayudará con desbordamiento de búfer, desreferencia nula y errores de fuga de memoria. Existe la posibilidad de que pueda ayudar con el roscado de errores si tiene soporte para el "coloreado de hilos", los "efectos" o el análisis de "permisos". Sin embargo, esos tipos de análisis son bastante vanguardistas y tienen GRANDES cargas de notación, por lo que tienen algún costo. La herramienta probablemente no ayudará con ningún otro tipo de errores.
Por lo tanto, realmente depende del tipo de software que escriba y del tipo de errores que encuentre con más frecuencia.
John Carmack escribió recientemente acerca de esto: http://altdevblogaday.com/2011/12/24/static-code-analysis/ –
John Carmack. Análisis de código estático. Nuevo enlace: http://www.viva64.com/en/a/0087/ –
@DavidNorman: Todos ellos solo realizan análisis de archivo por archivo, por lo que si desea analizar cómo interactúan las funciones entre los archivos de fuentes, necesita acero para contratar varias personas * (dado que esas herramientas no pueden realizar un análisis completo del programa) *. – user2284570