PVS-Studio: soporte para los est谩ndares de codificaci贸n MISRA C y MISRA C ++

PVS-Studio, MISRA C, MISRA C ++

A partir de la versi贸n 6.27, el analizador de c贸digo est谩tico PVS-Studio puede clasificar sus advertencias de acuerdo con los est谩ndares MISRA C y MISRA C ++. Gracias al soporte de estos est谩ndares, el analizador ha sido posible usarlo efectivamente para mejorar la seguridad, portabilidad y confiabilidad de los programas para sistemas integrados.

Este a帽o comenzamos a admitir est谩ndares como CWE y SEI CERT en el analizador PVS-Studio . B谩sicamente, el soporte se redujo a la clasificaci贸n de los diagn贸sticos ya implementados en el analizador de acuerdo con estos est谩ndares. Adem谩s, se implementaron varios diagn贸sticos nuevos o se ampliaron varios diagn贸sticos antiguos para cumplir m谩s plenamente con estos est谩ndares.

Tablas de cumplimiento de diagn贸sticos de PVS-Studio a varios est谩ndares:


Ahora es el momento para los est谩ndares MISRA C y MISRA C ++. Estos son est谩ndares de desarrollo de software C y C ++ creados por MISRA (Motor Industry Software Reliability Association). El objetivo de los est谩ndares es mejorar la seguridad, la portabilidad y la confiabilidad de los programas integrados. Se paga el texto de los est谩ndares.

Consideramos la fortaleza de nuestro analizador para poder tomarlo y comenzar a usarlo en un proyecto grande existente. Puede ejecutar PVS-Studio sobre una base de c贸digo, detectar errores antiguos y luego usar el analizador regularmente para encontrar nuevos defectos lo antes posible.

Muchos analizadores toman un camino diferente e implementan diagn贸sticos relacionados con los est谩ndares de codificaci贸n. Sugieren c贸mo nombrar mejor las variables, recordarle que inserte comentarios al comienzo de un archivo, etc. Es necesario y 煤til. Sin embargo, en este caso, los analizadores son muy "ruidosos" y generan una gran cantidad de advertencias en las que las advertencias sobre errores se ahogan.

Decidimos que PVS-Studio ser铆a un analizador que busca errores. Esta es su ventaja competitiva. El programador puede ejecutarlo en una base de c贸digo grande y asegurarse de que no se ver谩 abrumado con una incre铆ble cantidad de mensajes sobre la ejecuci贸n del c贸digo y podr谩 centrarse en los errores.

Por lo tanto, inicialmente fuimos cr铆ticos con los est谩ndares MISRA y durante mucho tiempo no planeamos implementarlos. Los est谩ndares MISRA est谩n dise帽ados para simplificar y mejorar la calidad del c贸digo en su conjunto, lo que ayuda a prevenir errores. Es decir, solo la mayor铆a de los diagn贸sticos se relacionan con el estilo de escritura de c贸digo. Esto se explica mejor con un ejemplo.

Hay una regla en el est谩ndar MISRA seg煤n la cual los cuerpos de las declaraciones if deben encerrarse entre llaves. En MISRA C, esta es la regla 15.6, y en MISRA C ++ es 6-4-1. Ejemplo de c贸digo incorrecto:

if (i == bestOffs) continue; 

El c贸digo correcto es:

 if (i == bestOffs) { continue; } 

Dichos diagn贸sticos no se pueden aplicar a proyectos existentes escritos para trabajar bajo el control del sistema operativo Winodws, Linux o macOS. Por ejemplo, la regla de llaves que se acaba de describir proporciona operaciones de diagn贸stico V2507 de 1947 (MISRA C 15.6, MISRA C ++ 6-4-1) para el proyecto WinMerge. 隆Pero WinMerge es un proyecto peque帽o! Solo alrededor de 250,000 l铆neas de c贸digo en C y C ++.

Hasta 2018, el analizador PVS-Studio se centr贸 en probar aplicaciones de escritorio que se ejecutan en Windows, Linux y macOS. En consecuencia, el apoyo a MISRA ten铆a poco sentido pr谩ctico. Nadie implementar谩 este est谩ndar en un gran proyecto de escritorio existente.

Todo cambi贸 cuando en 2018 comenzamos a admitir sistemas integrados. Este a帽o, el analizador apoy贸:

  • Ventanas IAR Embedded Workbench, compilador C / C ++ para ARM C, C ++
  • Windows / Linux Keil 碌Vision, DS-MDK, compilador ARM 5/6 C, C ++
  • Windows / Linux Texas Instruments Code Composer Studio, Herramientas de generaci贸n de c贸digo ARM C, C ++
  • Windows / Linux / macOS. GNU Arm Embedded Toolchain, compilador Arm Embedded GCC, C, C ++

A diferencia de los proyectos de escritorio, muchos desarrolladores integrados ya escriben proyectos teniendo en cuenta las recomendaciones de MISRA, y su soporte en nuestro analizador ser谩 especialmente 煤til para los desarrolladores.

Sin embargo, a煤n tememos que uno de los desarrolladores, sin entenderlo, pueda considerar que "arruinamos" el analizador al introducir "diagn贸sticos extra帽os" en 茅l. Por lo tanto, los diagn贸sticos MISRA est谩n desactivados de forma predeterminada. Consideramos que esta es una decisi贸n muy correcta. Estos diagn贸sticos solo se pueden incluir si sabe exactamente para qu茅 sirven y c贸mo usarlos.

Por ejemplo, para los programadores de aplicaciones puede que no est茅 claro por qu茅 el analizador les proh铆be de repente usar memoria din谩mica. Es decir por qu茅 de repente no puedes asignar memoria usando la funci贸n malloc o el nuevo operador. Pero tales limitaciones ( V2511 ) son bien entendidas por los desarrolladores de dispositivos integrados. En algunos dispositivos que operan continuamente, es realmente inaceptable usar programas para los cuales la memoria se puede agotar repentinamente.

Entonces, ahora puede instalar o actualizar PVS-Studio y comenzar a usar diagn贸sticos que implementan las reglas de MISRA C y MISRA C ++. El conjunto de reglas admitidas est谩 incompleto, pero esto no deber铆a ser un obst谩culo para comenzar a usar PVS-Studio. Por el momento, no hay un 煤nico analizador est谩tico que implemente absolutamente todas las reglas de MISRA. En el futuro, planeamos expandir el conjunto de reglas de diagn贸stico implementadas en MISRA, y esperamos convertirnos en una herramienta l铆der en la integridad de su apoyo.

Para habilitar los diagn贸sticos MISRA en Visual Studio o en la utilidad PVS-Studio Standalone, debe cambiar Disabled a Show All en la configuraci贸n.

Habilitar misra

Dado que Desactivado significa que las advertencias no se generan en absoluto y no entran en el informe, ser谩 necesario reiniciar el an谩lisis. El modo deshabilitado se establece de manera predeterminada para reducir el tama帽o del informe. La inclusi贸n de los diagn贸sticos MISRA puede conducir a una gran cantidad de operaciones y a un fuerte aumento de los archivos con el informe (archivos * .plog).

Para el an谩lisis de proyectos en sistemas operativos Linux y macOS, existe una utilidad pvs-studio-analyzer. De forma predeterminada, solo se incluyen diagn贸sticos de prop贸sito general (An谩lisis general, GA). Se pueden habilitar reglas adicionales utilizando la opci贸n -a:

 -a [MODE], --analysis-mode [MODE] MODE defines the type of warnings: 1 - 64-bit errors; 2 - reserved; 4 - General Analysis; 8 - Micro-optimizations; 16 - Customers Specific Requests; 32 - MISRA. Modes can be combined by adding the values Default: 4 

Para habilitar las alertas GA y MISRA, debe ejecutar un an谩lisis con los siguientes par谩metros:

 pvs-studio-analyzer analyze ... -a 36 ... -o /path/to/report.log ... 

El valor 36 es un OR bit a bit para 4 (GA - Diagn贸stico general) y 32 (MISRA).

Adem谩s, se recomienda crear varios informes con diferentes tipos de alertas, por ejemplo, as铆:

 plog-converter -a GA:1,2 -t tasklist -o /path/to/ga_results.tasks /path/to/project.log plog-converter -a MISRA:1,2,3 -t tasklist -m misra -o /path/to/misra_results.tasks /path/to/project.log 

El primer informe ga_results.tasks contendr谩 advertencias generales de los niveles de confianza Alto y Medio.

Y el segundo informe "misra_results.tasks" solo recibir谩 advertencias relacionadas con MISRA de todos los niveles. El interruptor "-m misra" indica que, adem谩s de los n煤meros en el formato PVS-Studio, el informe incluir谩 n煤meros de diagn贸stico de acuerdo con la clasificaci贸n MISRA.

Todos los modos de inicio del analizador en Linux y macOS, as铆 como los formatos de informes, se describen en la documentaci贸n .

PD Queremos evaluar cu谩nto adivinamos eligiendo MISRA como una de las direcciones de desarrollo de PVS-Studio. Si est谩 interesado en este tema, escr铆banos . Incluso si a煤n no planea utilizar PVS-Studio, escriba. Queremos hacerle algunas preguntas aclaratorias.

Enlaces adicionales:

  1. Descargar PVS-Studio
  2. C贸mo ejecutar PVS-Studio en Linux y macOS
  3. El analizador de c贸digo est谩tico PVS-Studio 6.22 est谩 adaptado para compiladores ARM (Keil, IAR)
  4. PVS-Studio incluye soporte para GNU Arm Embedded Toolchain



Si desea compartir este art铆culo con una audiencia de habla inglesa, utilice el enlace a la traducci贸n: Andrey Karpov. PVS-Studio: Soporte de los est谩ndares de codificaci贸n MISRA C y MISRA C ++ .

Source: https://habr.com/ru/post/es432660/


All Articles