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.
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:
- Baixar PVS-Studio
- Como executar o PVS-Studio no Linux e macOS
- O analisador de código estático PVS-Studio 6.22 é adaptado para compiladores ARM (Keil, IAR)
- 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 ++ .