PVS-Studio: suporte para padrões de codificação MISRA C e MISRA C ++

PVS-Studio, MISRA C, MISRA C ++

A partir da versão 6.27, o analisador de código estático do PVS-Studio pode classificar seus avisos de acordo com os padrões MISRA C e MISRA C ++. Graças ao suporte desses padrões, o analisador tornou-se possível de usar com eficácia para melhorar a segurança, portabilidade e confiabilidade dos programas para sistemas embarcados.

Este ano, começamos a oferecer suporte a padrões como CWE e SEI CERT no analisador PVS-Studio . Basicamente, o suporte se resumia à classificação dos diagnósticos já implementados no analisador de acordo com esses padrões. Além disso, vários novos diagnósticos foram implementados ou vários diagnósticos antigos foram expandidos para atender mais plenamente a esses padrões.

Tabelas de conformidade dos diagnósticos do PVS-Studio para vários padrões:


Agora é hora dos padrões MISRA C e MISRA C ++. Esses são os padrões de desenvolvimento de software C e C ++ criados pela MISRA (Motor Industry Software Reliability Association). O objetivo dos padrões é melhorar a segurança, portabilidade e confiabilidade dos programas incorporados. O texto dos padrões é pago.

Consideramos a força do nosso analisador capaz de capturar e começar a usá-lo em um grande projeto existente. Você pode executar o PVS-Studio com base no código, detectar erros antigos e usar o analisador regularmente para encontrar novos defeitos o mais cedo possível.

Muitos analisadores seguem um caminho diferente e implementam diagnósticos relacionados aos padrões de codificação. Eles sugerem como nomear melhor as variáveis, lembrá-lo de inserir comentários no início de um arquivo e assim por diante. É necessário e útil. No entanto, neste caso, os analisadores são muito “barulhentos” e geram um grande número de avisos nos quais os avisos sobre erros são afogados.

Decidimos que o PVS-Studio seria um analisador que procurava por erros. Essa é sua vantagem competitiva. O programador pode executá-lo em uma grande base de código e ter certeza de que ele não ficará sobrecarregado com um número incrível de mensagens sobre o design do código e poderá focar em bugs.

Portanto, inicialmente criticamos os padrões MISRA e, durante muito tempo, não planejamos implementá-los. Os padrões MISRA são projetados para simplificar e melhorar a qualidade do código como um todo, o que ajuda a evitar erros. Ou seja, apenas a maioria dos diagnósticos está relacionada ao estilo de escrever código. Isso é melhor explicado com um exemplo.

Existe uma regra no padrão MISRA segundo a qual os corpos das declarações if devem ser colocados entre chaves. No MISRA C, esta é a regra 15.6, e no MISRA C ++ é 6-4-1. Exemplo de código incorreto:

if (i == bestOffs) continue; 

O código correto é:

 if (i == bestOffs) { continue; } 

Esses diagnósticos não podem ser aplicados a projetos existentes escritos para funcionar sob o controle do sistema operacional Winodws, Linux ou macOS. Por exemplo, apenas a regra descrita sobre colchetes fornece operações de diagnóstico V2507 de 1947 (MISRA C 15.6, MISRA C ++ 6-4-1) para o projeto WinMerge. Mas o WinMerge é um projeto pequeno! Apenas cerca de 250.000 linhas de código em C e C ++.

Até 2018, o analisador PVS-Studio estava focado em testar aplicativos de desktop em execução no Windows, Linux e macOS. Consequentemente, o apoio ao MISRA fazia pouco sentido prático. Ninguém implementará esse padrão em um grande projeto de desktop existente.

Tudo mudou quando, em 2018, começamos a suportar sistemas embarcados. Este ano, o analisador suportou:

  • Windows 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, Ferramentas de geração de código ARM C, C ++
  • Windows / Linux / macOS. GNU Arm Embedded Toolchain, compilador Arm Embedded GCC, C, C ++

Ao contrário dos projetos de desktop, muitos desenvolvedores incorporados já escrevem projetos levando em consideração as recomendações MISRA, e seu suporte em nosso analisador será exclusivamente útil para desenvolvedores.

No entanto, ainda tememos que um dos desenvolvedores, sem entender, considere que “estragamos” o analisador, introduzindo “diagnósticos estranhos” nele. Portanto, o diagnóstico MISRA é desativado por padrão. Consideramos isso uma decisão muito correta. Esses diagnósticos podem ser incluídos apenas se você souber exatamente para que servem e como usá-los.

Por exemplo, para programadores de aplicativos, pode não estar claro por que o analisador os proíbe repentinamente de usar memória dinâmica. I.e. por que de repente você não pode alocar memória usando a função malloc ou o novo operador. Mas essas limitações ( V2511 ) são bem conhecidas pelos desenvolvedores de dispositivos incorporados. Em alguns dispositivos que operam continuamente, é realmente inaceitável usar programas para os quais a memória pode acabar subitamente.

Portanto, agora você pode instalar ou atualizar o PVS-Studio e começar a usar diagnósticos que implementam as regras do MISRA C e MISRA C ++. O conjunto de regras suportadas está incompleto, mas isso não deve ser um obstáculo para iniciar o uso do PVS-Studio. No momento, não há um único analisador estático que implemente absolutamente todas as regras MISRA. No futuro, planejamos expandir o conjunto de regras de diagnóstico implementadas no MISRA e esperamos nos tornar uma ferramenta líder na integridade de seu suporte.

Para habilitar o diagnóstico MISRA no Visual Studio ou no utilitário PVS-Studio Standalone, você precisa alterar Desativado para Mostrar tudo nas configurações.

Ativar misra

Como Desativado significa que os avisos não são gerados e não entram no relatório, será necessária uma reinicialização da análise. O modo desativado é definido por padrão para reduzir o tamanho do relatório. A inclusão do diagnóstico MISRA pode levar a um grande número de operações e a um forte aumento nos arquivos com o relatório (arquivos * .plog).

Para análise de projetos nos sistemas operacionais Linux e macOS, existe um utilitário pvs-studio-analyzer. Por padrão, apenas os diagnósticos de uso geral (Análise Geral, GA) são incluídos lá. Regras adicionais podem ser ativadas usando a opção -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 alertas GA e MISRA, você deve executar uma análise com os seguintes parâmetros:

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

O valor 36 é um OR bit a bit para 4 (GA - General Diagnostics) e 32 (MISRA).

Além disso, é recomendável criar vários relatórios com diferentes tipos de alertas, por exemplo, como este:

 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 

O primeiro relatório ga_results.tasks conterá avisos gerais dos níveis de confiança Alto e Médio.

E o segundo relatório "misra_results.tasks" receberá apenas avisos relacionados ao MISRA de todos os níveis. A opção "-m misra" indica que, além dos números no formato PVS-Studio, o relatório incluirá números de diagnóstico de acordo com a classificação MISRA.

Todos os modos de inicialização do analisador no Linux e macOS, bem como os formatos de relatório, são descritos na documentação .

PS Queremos avaliar quanto adivinhámos escolhendo MISRA como uma das instruções de desenvolvimento do PVS-Studio. Se você está interessado neste tópico, escreva-nos . Mesmo se você ainda não planeja usar o PVS-Studio, escreva. Queremos fazer algumas perguntas esclarecedoras.

Links adicionais:

  1. Baixar PVS-Studio
  2. Como executar o PVS-Studio no Linux e macOS
  3. O analisador de código estático PVS-Studio 6.22 é adaptado para compiladores ARM (Keil, IAR)
  4. PVS-Studio inclui suporte para o GNU Arm Embedded Toolchain



Se você deseja compartilhar este artigo com um público que fala inglês, use o link para a tradução: Andrey Karpov. PVS-Studio: Suporte aos padrões de codificação MISRA C e MISRA C ++ .

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


All Articles