code review - software - ¿Qué es el análisis de código estático?




reglas de analisis estatico de codigo (5)

Hay muchas opciones para el análisis estático, y es un tema candente, así que:

¿Qué es el análisis estático?

¿Cuándo debería usarlo y cuándo no debería usarse?

¿Cuáles son los posibles problemas con respecto al uso / aplicación adecuada e incorrecta del análisis estático?

¿Algún idioma que no tiene una buena herramienta de análisis estático y qué hace cuando no tiene una opción para el análisis automatizado?

-Adán


Además de encontrar errores en su código (como desreferenciación de puntero nulo garantizado, bucles infinitos, etc.), el análisis estático se puede utilizar para el análisis de seguridad del código. Recomiendo encarecidamente ver la presentación "Programación segura con análisis estático" de Brian Chess del software Fortify.


El análisis estático analiza el código fuente para detectar posibles problemas. Se llama estático porque el código no se ejecuta para encontrar los problemas, la fuente se analiza analíticamente.

Por el momento, el análisis estático es muy inmaduro. La mayoría de las herramientas solo encuentran los errores más estúpidos. Por ejemplo, ninguna herramienta de la que yo sepa puede encontrar todas las desreferencias de puntero nulo, pero este es un error obvio al que le gustaría apuntar con análisis estático. Puede olvidar tratar de encontrar errores más difíciles, como las condiciones de carrera con análisis estático, al menos por el momento.

El análisis estático es particularmente útil para aplicar los estándares de codificación. FXCop, que analiza el código .NET, contiene reglas para todo tipo de defectos en las normas de codificación.

Como dices, hay muchas herramientas que hacen análisis estáticos. Aquí hay una lista de productos gratis que personalmente he usado:

  • FindBugs (Java)
  • FXCop (.NET)
  • PyLint (Python)

Puedo recomendarlos a todos.


¿Qué es el análisis estático?

Analizando código sin ejecutarlo. Generalmente se usa para encontrar errores o garantizar el cumplimiento de las pautas de codificación. El ejemplo clásico es un compilador que encuentra errores léxicos, sintácticos e incluso algunos errores semánticos.

¿Cuándo debería usarlo y cuándo no debería usarse?

Las herramientas de análisis estáticos deberían usarse cuando ayudan a mantener la calidad del código. Si se utilizan, deben integrarse en el proceso de compilación, de lo contrario serán ignorados.

¿Cuáles son los posibles problemas con respecto al uso / aplicación adecuada e incorrecta del análisis estático?

Dos patologías comunes ocurren cuando se usan herramientas de análisis estático:

  1. Las herramientas producen advertencias / errores espurios que los desarrolladores no pueden silenciar. Finalmente, la mayoría de las advertencias son falsas y los desarrolladores dejan de prestar atención a la salida. Esta es la razón por la cual muchos equipos requieren que el código se compile limpiamente. Si los desarrolladores se sienten cómodos ignorando las advertencias del compilador, la fase de compilación se llenará con una advertencia a la que nunca se le presta atención, aunque puedan ser errores.

  2. Las herramientas tardan demasiado en ejecutarse y los desarrolladores nunca se molestan en ejecutarlas.

¿Algún idioma que no tiene una buena herramienta de análisis estático y qué hace cuando no tiene una opción para el análisis automatizado?

Por una serie de razones, muchos de los lenguajes dinámicos (ruby, python, perl) no tienen herramientas de análisis estáticas que sean tan sólidas como las disponibles en los lenguajes estáticos. El método estándar para encontrar errores y asegurarse de que el código esté funcionando en idiomas dinámicos son las pruebas unitarias que ayudan a construir la confianza de que el código realmente funciona (hat-tip: Chris Conway).


El análisis estático (también conocido como análisis de código estático, análisis de código fuente, análisis de programa estático) es una actividad de verificación de software en la que se analiza el código fuente en cuanto a calidad, seguridad y seguridad. Este análisis permite a los desarrolladores y probadores de software identificar y diagnosticar varios tipos de errores / fallas tales como desbordamientos, división por cero, errores de memoria y de puntero, errores de tiempo de ejecución y otros problemas.

Las métricas producidas por el análisis de código estático proporcionan un medio por el cual la calidad del software se puede medir y mejorar. A diferencia de otras técnicas de verificación, el análisis estático es automático y, por lo tanto, puede realizarse sin ejecutar el programa o desarrollar casos de prueba.

Las técnicas sofisticadas combinan el análisis del código estático con métodos formales. Los métodos formales aplican los fundamentos teóricos de la informática para resolver problemas difíciles en el software, como probar que el software no fallará con un error de tiempo de ejecución. La combinación de análisis de código estático y métodos formales permite a los desarrolladores detectar errores difíciles de encontrar y demostrar la ausencia de ciertos tipos de errores / errores. Por ejemplo, estas técnicas pueden demostrar que la siguiente línea de código nunca fallará con un error de división por cero en tiempo de ejecución:

int x, y;
...
x = x / (x - y);

En general, el análisis estático debe usarse al principio del proceso de desarrollo, preferiblemente antes de la prueba unitaria. Esto permite el desarrollo de código robusto. El análisis estático también se puede combinar con los sistemas de compilación para generar métricas de calidad y proporcionar orientación sobre la seguridad y la fiabilidad del software. Sin embargo, el uso tardío del análisis estático en general puede requerir más tiempo y recursos para abordar los problemas identificados.

Una variedad de herramientas de análisis estático de código abierto, académicas y comerciales están disponibles. La mayoría de los idiomas son compatibles. Obtenga más información sobre este tema en los siguientes enlaces