Recientemente, hemos fortalecido nuestra presencia en varias conferencias especializadas de TI en Rusia y en el extranjero. En la mayoría de los eventos, tratamos de ponernos de pie con un stand; en algunos, hacemos presentaciones. Las conferencias nos permiten no solo aumentar el reconocimiento de nuestro producto (analizador de código estático PVS-Studio), sino también, lo más importante, conocer mejor a los usuarios actuales y potenciales. Al comunicarse con los visitantes en el stand, nuestros empleados a menudo responden las mismas preguntas, que a veces son bastante curiosas. En este artículo intentaré responder las preguntas más frecuentes de los visitantes sobre el análisis estático en general y sobre PVS-Studio en particular.
Para empezar, un poco de humor sobre el tema de "Expectativa y realidad". Escribimos muchos artículos e ingenuamente creemos que si las personas los leen, al menos en términos generales conocen nuestro producto y sus características. Desafortunadamente, este no es siempre el caso. Aquí hay un ejemplo de comunicación real con un visitante en una conferencia reciente. El visitante: "Leemos sus artículos sobre Habré. Interesante Es una pena que su analizador no sea adecuado para nosotros. Tenemos todos los códigos fuente secretos, no podemos enviarlos. Pero todo
en la nube funciona para ti allí ”.
Nuestro departamento de marketing probablemente tiene algo en qué trabajar.
A continuación, haré otras preguntas comunes del visitante promedio a nuestro stand en la exposición, así como las respuestas a ellas en un formato de diálogo improvisado.
P: Escuché algo sobre ti. ¿De dónde eres, qué estás haciendo y cómo saber más sobre ti?
A: Somos un pequeño equipo independiente de Tula. Estamos desarrollando PVS-Studio, un analizador de código estático para los lenguajes Java C, C ++, C #. Puede obtener más información sobre nosotros en
el sitio web de PVS-Studio . También escribimos artículos y los publicamos en
nuestro blog , en
Habré y otros recursos.
P: ¿Qué tipo de análisis estático? Nuestro equipo tiene suficientes advertencias del compilador y revisiones conjuntas de códigos.
R: El compilador solo puede señalar errores graves y bastante obvios. Por ejemplo, código inalcanzable o el uso de variables no inicializadas. La detección de errores para el compilador es una tarea secundaria. Sí, los compiladores se han vuelto bastante inteligentes últimamente. Pero cualquier herramienta especializada para encontrar errores en el código es significativamente superior al compilador, lo que le permite realizar un análisis detallado del código e identificar errores tipográficos, errores lógicos, el uso potencial de punteros / enlaces nulos, etc.
Las revisiones conjuntas de códigos son una buena tecnología probada en el tiempo. Pero también tiene inconvenientes asociados con la necesidad de atraer empleados adicionales para trabajar en el código de otras personas. Esto aumenta el costo de desarrollo, mientras que la probabilidad de omitir un error o agregar uno nuevo permanece, ya que es la naturaleza humana cometer errores.
El análisis estático es la verificación del código fuente de un programa sin la necesidad de su ejecución. Recomendamos el uso de herramientas de análisis de código estático como
una barrera
adicional al error.
P: ¿PVS-Studio analiza archivos ejecutables o directamente el código fuente?
R: Si hablamos de buscar vulnerabilidades, entonces el análisis del código ejecutable es más similar a cómo funciona el antivirus buscando firmas en un código binario de una determinada base de datos.
PVS-Studio analiza el
código fuente . Esto le permite identificar una gama mucho más amplia de errores y vulnerabilidades potenciales, aumenta la velocidad del trabajo y brinda resultados más confiables.
Sí, por supuesto, puede intentar desmontar el código y encontrar el error en el algoritmo. Pero debe comprender que en el código binario se pierde mucha información. Por ejemplo, la verdadera condición siempre se eliminará simplemente cuando se compila el código, y no hay forma de descubrir que algo estaba mal con esta condición.
P: ¿Y cuáles son las opciones de integración? ¿Tienes complementos para algún IDE?
R: Actualmente, PVS-Studio se está integrando en Visual Studio 2010-2017 como un complemento. Hay un complemento de Java para IntelliJ IDEA. Además, gracias a un módulo especializado, puede gestionar proyectos CMake en Qt Creator y CLion.
El analizador está en constante evolución, por lo que puede encontrar la información más actualizada sobre las características del producto visitando
nuestro sitio web .
P: Usamos SonarQube.
A: gran elección. El complemento PVS-Studio para SonarQube le permite importar resultados de análisis en SonarQube y trabajar con ellos de la manera habitual.
P: Bueno, necesito integrar de alguna manera el análisis en nuestro sistema de compilación.
A: PVS-Studio se puede usar desde la línea de comandos. El analizador contiene un gran conjunto de configuraciones para resolver una amplia gama de tareas. Además, independientemente del escenario de uso, brindamos asistencia a nuestros clientes durante la fase de implementación del analizador y soporte técnico durante todo el período de licencia.
P: ¿Cómo probar su analizador?
R: Use
la página de descarga , descargue el kit de distribución necesario y trabaje con PVS-Studio en modo de prueba. Si necesita más tiempo para evaluar nuestro producto o no está satisfecho con las limitaciones de la versión demo,
contáctenos .
También en las exposiciones, nuestros visitantes pueden recibir una clave Enterprise, cuya validez es de un mes. Para hacer esto, solo ven a nuestro stand con un unicornio. Además, puede convertirse en miembro de la lotería y recibir un premio de PVS-Studio.
P: Soy estudiante, ¿es posible usar PVS-Studio gratis?
R: Esto es posible si agrega comentarios de un tipo especial a su código fuente. Los archivos marcados de esta manera se verificarán en busca de errores sin ninguna restricción. Puede obtener más información sobre este modo de funcionamiento en el artículo "
Cómo usar PVS-Studio de forma gratuita ".
P: ¿Quiénes son sus clientes?
R: Por el momento, más de 200 empresas en todo el mundo se han convertido en nuestros clientes. El alcance de sus actividades es muy diverso. Puede encontrar una lista de clientes existentes en
nuestro sitio web .
P: ¿Entonces tiene un modo de operación local o no?
R: El analizador PVS-Studio se instala localmente en una (s) computadora (s) dedicada (s) y puede funcionar completamente de forma aislada. Es necesaria una conexión a Internet para recibir actualizaciones, así como enlaces rápidos a la documentación (descripción de diagnósticos, etc.) desde los complementos. Actualmente estamos pensando en opciones para trabajar a través de la "nube", pero esto será una adición al modo de operación estándar.
P: ¿Y en qué es exactamente mejor en, por ejemplo, el analizador de cobertura?
R: Es imposible dar una respuesta simple e integral a esta pregunta. Todos nuestros intentos de comparar con otros analizadores han fallado. Fuimos acusados de parcialidad, "liquidando" los resultados, usando una base de prueba especialmente preparada y otros pecados mortales. Además, los analizadores no se pueden comparar simplemente "de frente". Cada herramienta es única y tiene sus propias fortalezas y debilidades. Algunas herramientas se centran en el rendimiento, otras se centran en encontrar "olores" en el código y mejorar el estilo. Buscamos errores y vulnerabilidades potenciales.
Si tiene un deseo y una metodología adecuada, puede realizar un estudio y comparar nuestro analizador con otros, y luego escribir un artículo al respecto. Para hacer esto, incluso le emitiremos una clave de licencia temporal sin restricciones. Pero prepárate para las críticas.
P: No entiendo, ¿está buscando errores solo en el código sin compilar? Es decir, ¿el programa ni siquiera pasó la verificación del compilador?
A: Eso no es así. PVS-Studio busca y encuentra errores solo en programas compilados. En aplicaciones de la vida real. Estos programas no solo se compilan sin errores, algunos de ellos son verificados por otros analizadores. Y aún buscamos errores allí. Sobre esto, a menudo escribimos
artículos en nuestro blog, revisando proyectos de código abierto.
P: ¿Y qué errores podrá detectar PVS-Studio en nuestro proyecto? ¿Solo errores tipográficos?
R: Los errores tipográficos, por supuesto, pertenecen a la clase de errores clásicos detectados por análisis estático. Pero además de esto, PVS-Studio puede detectar
varios cientos de patrones de error
más . Ejemplos: desreferenciar un puntero nulo, dividir por cero, la condición siempre es falsa o verdadera, operaciones incorrectas con el índice, salir de los límites de la matriz y muchos otros. Se proporciona una lista completa de errores en la página de
documentación .
P: Después de verificar con su analizador, ¿puedo estar seguro de que el programa no contiene errores?
A: no. PVS-Studio no es una herramienta para probar la corrección de los programas. Esta es una clase separada de herramientas. La tarea de nuestro analizador es
indicar de manera rápida y confiable un
posible error en el código. La decisión sobre la falibilidad de un diseño en particular siempre la toma el desarrollador, utilizando el contexto de la ocurrencia del error y su conocimiento del proyecto. Y el analizador ayuda al desarrollador, posiblemente minimizando el número de falsos positivos y proporcionando capacidades adicionales para procesar la lista de advertencias recibidas.
P: ¿Cómo funciona exactamente PVS-Studio? ¿Qué tipo de mecanismos de búsqueda de errores? Probablemente estés usando expresiones regulares.
R: Usar expresiones regulares es extremadamente ineficiente. Le permite encontrar solo los errores más primitivos, por ejemplo, en condiciones (compare dos subexpresiones idénticas):
if ((a+b+) == (a+b+)) {....}
Al mismo tiempo, un pequeño cambio en el código (sin cambiar la lógica de trabajo) probablemente pondrá a un analizador en un callejón sin salida:
if ((a+b+) == (b+a+)) {....}
El analizador PVS-Studio es mucho más inteligente y utiliza los siguientes mecanismos:
- Coincidencia de patrones basada en un árbol sintáctico abstracto.
- Construcción de un modelo semántico con inferencia de tipo posterior.
- Ejecución simbólica, que le permite calcular los valores de variables que pueden conducir a errores, así como verificar rangos de valores (verificación de rango).
- Análisis de flujo de datos (análisis de flujo de datos).
- Método de anotaciones
Todo esto fue descrito con más detalle por mi colega Andrei Karpov en un artículo reciente, "
Tecnologías utilizadas en el analizador de código PVS-Studio para encontrar errores y vulnerabilidades potenciales ".
P: Bueno, tenemos un proyecto C / C ++, 15 años de desarrollo y cinco millones de líneas de código. ¿Realmente podemos comenzar a usar PVS-Studio ahora?
A: si. En la etapa de implementación, será necesario realizar una verificación completa de su proyecto una vez. Entonces, todas las advertencias recibidas (probablemente habrá muchas) pueden notarse como poco interesantes (suprimir temporalmente su conclusión) para volver a esta deuda técnica más adelante. Después de eso, puede usar PVS-Studio para verificar regularmente solo el código nuevo. Puede obtener más información sobre esta y otras características del analizador en
la página de documentación .
P: ¿Con qué frecuencia debo ejecutar una prueba? ¿Y qué, verifique todo el código base cada vez?
R: El uso más eficiente del análisis estático implica verificar el nuevo código con la mayor frecuencia posible. Para esto, el modo de análisis incremental se implementa en PVS-Studio. Los archivos que se han modificado desde la última compilación del proyecto se envían para su verificación. Hay otros modos de operación. Esto le permite identificar errores que ya están en la etapa de desarrollo, lo que reduce el riesgo de que entren en la versión.
P: Utilizamos PVS-Studio. El analizador encuentra errores, pero muchos de ellos están en código o pruebas no utilizados. Esta bien?
A: es bastante normal. Una de las características del análisis estático, en contraste con el análisis dinámico, es la verificación de
todo el código base, y no solo lo que se ejecuta cuando se ejecuta el código. Digamos que pasó mucho tiempo y esfuerzo depurando el código del programa, y todo funciona de manera estable. Pero hay una función que rara vez se usa, o que aún no se usa en absoluto. La probabilidad de encontrar un error en dicha función es alta. Y cuando en un momento comienzan a usar la función, algo puede salir mal. El uso del análisis estático minimizará los riesgos de tal situación.
Además, el código puede contener construcciones obviamente incorrectas (esto generalmente ocurre en las pruebas), por lo tanto, a menudo tiene sentido excluirlas del escaneo (especificando proyectos o rutas) a través de la configuración de PVS-Studio. Sin embargo, a veces las pruebas en sí contienen errores. Tales situaciones son difíciles de identificar y, en este caso, la decisión debe ser tomada por el desarrollador.
P: ¿Qué pasa con la búsqueda de vulnerabilidades?
R: El analizador PVS-Studio es una herramienta SAST (Static Application Security Testing) y le permite identificar vulnerabilidades
potenciales clasificadas de acuerdo con
CWE (Common Weakness Enumeration). Las alertas de CWE se superponen en gran medida con las alertas clásicas de PVS-Studio. Puede obtener más información sobre SAST de la
documentación . Es importante comprender que
las vulnerabilidades
potenciales no necesariamente conducen a vulnerabilidades reales que pueden ser explotadas por un hacker. Las vulnerabilidades identificadas se clasifican por
CVE (vulnerabilidades y exposiciones comunes). Sin embargo, la eliminación de vulnerabilidades
potenciales claramente contribuye a mejorar la seguridad del programa y minimiza el riesgo de identificar vulnerabilidades reales en el futuro.
P: Lidero el equipo de desarrollo. ¿Cómo me ayudará exactamente PVS-Studio?
R: Además de mejorar la calidad y confiabilidad del código, la implementación de PVS-Studio permitirá resolver tareas puramente administrativas relacionadas, por ejemplo, con la división de responsabilidades. El paquete del analizador incluye la utilidad BlameNotifier, que le permite identificar automáticamente a los empleados que enviaron un código erróneo al sistema de control de versiones. Al mismo tiempo, se envían notificaciones por correo tanto al contratista como a su gerente.
También puede configurar la conversión de informes de errores a cualquier forma que sea conveniente para usted, incluido un informe html detallado, conveniente para su uso por parte del responsable.
Finalmente, si se utiliza SonarQube, puede utilizar todas las ventajas de esta herramienta para garantizar un control continuo de la calidad del código cargando los resultados de la verificación del proyecto en SonarQube utilizando el analizador PVS-Studio utilizando un complemento especializado.
P: ¿ Usa o planea usar el aprendizaje automático?
A: Este es un tema grande e interesante. Planeamos escribir un artículo crítico sobre esto. Ahora solo expresaré algunos pensamientos cortos.
No es necesario hacer una calculadora utilizando el aprendizaje automático. Hay una cierta regla (fórmula), y debe aplicarse al código y sacar algún tipo de conclusión. No está claro por qué la red neuronal necesita ser configurada para detectar un nuevo patrón de error cuando estos patrones ya existen, y solo necesita aplicarlos correctamente. Y, lo más importante, no está claro dónde obtener la base para dicha capacitación. ¿Dónde está esa muestra de cientos de miles de proyectos con errores escritos de los que puede aprender?
El único lugar donde, en nuestra opinión, podría tener sentido usar algoritmos de aprendizaje automático es filtrar los falsos positivos.
P: ¿Comprueba el código de PVS-Studio con PVS-Studio?
R: por supuesto! Además, en caso de errores, la lista de perpetradores se hace pública con su posterior excomunión del refrigerador con helado. Pero en serio, creemos que es muy útil usar su propia herramienta. Esto le permite mirar el producto desde el punto de vista del usuario y notar algunas desventajas.
P: ¿Cómo obtener su maravilloso estado para el escritorio y la gorra de marca con orejeras?
R: Ven a nuestro stand con un unicornio en la exposición más cercana, donde estaremos presentes con un stand. Se nos ocurrirá algo :)
Espero haber podido responder las preguntas más populares de los visitantes de nuestros stands en las exposiciones. Por supuesto, hay preguntas más complejas que pueden requerir escribir un artículo separado para responder.
Cuando nos comunicamos con los visitantes, tratamos de transmitir la idea principal: un análisis estático no es una panacea para todos los males, pero su uso es muy útil para la salud (sus programas). ¡Usa PVS-Studio y no te enfermes!
En conclusión, nuevamente daré una serie de enlaces útiles:

Si desea compartir este artículo con una audiencia de habla inglesa, utilice el enlace a la traducción: Sergey Khrenov.
Todo lo que quería saber sobre PVS-Studio y se atrevió a preguntar