El análisis estático es el proceso de analizar un software sin ejecutarlo. Esto es muy bueno y recomendado, pero debes tener en cuenta que
- Las diferentes herramientas de análisis estático tienen una comprensión diferente del código que están estudiando, por lo tanto, pueden señalar (o no señalar) diferentes problemas. Una herramienta puede dar un informe limpio, y la otra puede quejarse de un millón de cosas.
- Una herramienta dinámica (por nombrar un ejemplo, piense en valgrind) puede encontrar muchos otros problemas, a costa de una carga grave sobre el consumo de recursos (tiempo, uso de memoria). Esto es así porque generalmente está ejecutando una versión instrumentada del software. Tenga en cuenta que, al estar instrumentado de alguna manera (reemplazar su malloc con un malloc de depuración), no es exactamente idéntico a su software (como puede ver en los tiempos de ejecución)
Ambos enfoques adolecen de la falta de contexto: no saben lo que se supone que debe lograr el sw.
La revisión del código la realiza otro codificador, que supuestamente lo sabe y puede verificar
- si el código es correcto
- si el software es semánticamente correcto
Es mucho más costoso y tiene un grado variable de repetibilidad, pero es de gran ayuda.
Como siempre, no hay una sola bala de plata que repare todos los errores y evite todos los problemas. Se recomienda aplicar: tanto como sea posible dado el lugar, el código, la hora, las tres formas de verificación (estática, dinámica, más ojos (y cerebros) que realmente miran el código).
PD: Debo señalar que, por lo general, es mucho mejor aplicar las herramientas desde cero. La conversión de un sistema heredado es una experiencia mucho menos placentera, debido a los falsos positivos. Si comienza desde cero y siempre apunta a mantener limpia la herramienta de análisis, probablemente evitará muchos problemas.
pps: en cuanto a herramientas, depende del idioma. En el mundo de C y C ++, puede comenzar mirando Visual Studio, que contiene una herramienta de análisis estático incorporada. Se puede encontrar una lista relativamente completa en Wikipedia.
ppps: el análisis estático es más adecuado para lenguajes estáticos, como C o C ++. Para Python puede ser realmente difícil decir si un nombre que se refiere a una lista en un punto se referirá a una lista para el resto del programa, debido a sus propiedades dinámicas. Esto no significa que no se pueda hacer nada, como muestra un esfuerzo JIT como PyPy .