
Hoje é um dia importante - após 28 lançamentos da sexta versão, lançamos o PVS-Studio 7.00, onde a principal inovação é o suporte à linguagem Java. No entanto, em 2018, muitas outras mudanças importantes foram acumuladas em relação a C ++, C #, infraestrutura e suporte a padrões de codificação. Por isso, chamamos a sua atenção para uma observação que resume as principais alterações que ocorreram recentemente no PVS-Studio.
O PVS-Studio é uma ferramenta para detectar erros e possíveis vulnerabilidades no código fonte de programas escritos em C, C ++, C # e Java. É executado no Windows, Linux e macOS.
Os recursos do analisador são bem demonstrados pela extensa
coleção de erros no código que encontramos durante a
verificação de vários projetos de código aberto.
Começaremos com a alteração, devido à qual, de fato, foi decidido alterar o número da versão de 6.x para 7.x. Esse é o suporte no analisador de linguagem Java, que estamos
preparando há muito tempo.
Java
O mais importante no analisador Java é que ele apareceu :). Convidamos os desenvolvedores Java a baixar a ferramenta e verificar os projetos em que estão trabalhando.
Disponibilizamos aos usuários as formas mais populares de integrar o analisador ao sistema de montagem:
- Plugin para Maven.
- Plugin para Gradle.
- Plugin para IntelliJ IDEA.
No caso de usar sistemas de montagem auto-escritos, é possível executar o analisador diretamente listando as fontes e o
caminho de classe .
Você pode encontrar informações detalhadas sobre todos os métodos para iniciar o analisador na página de documentação "
Como iniciar o PVS-Studio Java ".
Como não podíamos ignorar a plataforma de controle de qualidade de código do SonarQube, tão popular entre os desenvolvedores de Java, adicionamos suporte à linguagem Java ao nosso
plug-in do SonarQube .
C, C ++
Em 2018, nossa equipe trabalhou ativamente no desenvolvimento do analisador C ++. Muitos novos diagnósticos apareceram, bem como
algoritmos aprimorados que permitem coletar e processar informações recuperadas da árvore de sintaxe.
CWE, CERTAs mensagens do analisador C ++ (assim como do analisador C #) foram classificadas de acordo com a Common Weakness Enumeration (
CWE ). O CWE é um sistema de classificação para vulnerabilidades potenciais e confirmadas. É suportado pela comunidade para identificar problemas de software e criar ferramentas automatizadas que podem ser usadas para identificar e corrigir esses problemas.
Além disso, as mensagens foram classificadas de acordo com o Padrão de codificação CERT C e o Padrão de codificação CERT C ++.
SEI CERT Coding Standards é um conjunto de padrões para gravação de software (software) em C, C ++, Java e Perl, desenvolvido pelo CERT Coordination Center (CERT Coordination Center, CERT / CC) para aumentar a confiabilidade e a segurança do software.
A classificação dos diagnósticos C e C ++ de acordo com esses avisos permite usar o PVS-Studio como uma
solução SAST .
MisraEm 2018, o analisador de código estático PVS-Studio começou a 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 incorporados.
Mais detalhes: "
PVS-Studio: suporte para os padrões de codificação MISRA C e MISRA C ++ ".
O suporte ao MISRA tornou-se relevante em conexão com o desenvolvimento no analisador de suporte para vários sistemas embarcados, o que será discutido na próxima seção do artigo.
Desenvolvimento incorporadoEm 2018, o seguinte foi suportado no analisador PVS-Studio:
- 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 ++
Duas notas sobre sistemas embarcados suportam:
- O analisador de código estático PVS-Studio 6.22 é adaptado para compiladores ARM (Keil, IAR) .
- O PVS-Studio introduziu o suporte para o GNU Arm Embedded Toolchain .
Extensão de anotação personalizadaÀs vezes, os projetos usam suas próprias implementações de várias funções do sistema, por exemplo,
memcpy ,
malloc , etc. O analisador é muito bom em procurar erros usando funções padrão, mas era impossível usar esses algoritmos no código do usuário até recentemente. Agora, usando a anotação
V_FUNC_ALIAS, você pode combinar os nomes de suas funções com os do sistema.
Formato do comentário:
- Implementação de chave - define o nome de uma função padrão para a qual um alias é definido.
- Tecla de função - define o nome alternativo. A assinatura da função cujo nome é especificado nesta chave deve corresponder à assinatura da função especificada na chave de implementação.
- A classe- chave é o nome da classe. Pode estar ausente.
- A chave do espaço para nome é o nome do espaço para nome. Pode estar ausente.
Considere um exemplo:
Agora, o analisador manipulará as chamadas para a função
MyMemCpy da mesma maneira que as chamadas para o
memcpy . Por exemplo, um aviso V512 será emitido para esse código:
int buf[] = { 1, 2, 3, 4 }; int out[2]; MyMemCpy (out, buf, 4 * sizeof(int));
C #
Não houve alterações significativas no analisador C # este ano. Houve algumas melhorias nos diagnósticos e correções de erros. As mensagens do analisador C #, como o analisador C ++, foram classificadas de acordo com a Common Weakness Enumeration (
CWE ). A correspondência de diagnósticos C # com identificadores CWE é fornecida
aqui (consulte diagnósticos com os números 3xxx).
Planejamos retornar a um desenvolvimento mais ativo do analisador C # em 2019. Está planejado desenvolver novos diagnósticos e melhorar o mecanismo de análise de fluxo de dados (Análise de fluxo de dados).
Conversores de relatórios
Utilitários O PlogConverter.exe e o plog-converter estão incluídos nas distribuições do PVS-Studio para Windows e Linux / macOS, respectivamente. O código fonte desses utilitários também está disponível no
GitHub .
Com o advento do PVS-Studio for Java, redesenhamos o destaque do código para C, C ++, C # e adicionamos o Java no formato FullHtml (
para um navegador da web ).
Além disso, para o relatório neste formato, a coluna MISRA foi adicionada:
Como o ID da CWE, a coluna MISRA é opcional e é incluída pelos pesquisadores de segurança de código ao examinar os resultados da análise.
SonarQube Plugins
1. Atualização completaReescrevemos nossos plugins usando a nova API. Isso possibilitou adicionar novas funcionalidades e garantir a compatibilidade com o SonarQube 7.x. A versão mínima suportada é agora o
SonarQube 6.7 LTS .
2. PVS-Studio para JavaSuporte de diagnóstico para a linguagem Java foi adicionado à nova versão dos plugins. Agora você pode adicionar o PVS-Studio a outras ferramentas de controle de qualidade do seu projeto Java.
3. padrão MISRARecentemente, anunciamos o
suporte aos padrões MISRA C e MISRA C ++. Novos plugins também têm seu suporte. Por exemplo, um parâmetro foi adicionado (além do CWE):
sonar.pvs-studio.misra=active
que inclui adicionar o identificador MISRA aos avisos do analisador:
Independentemente desse parâmetro, uma pesquisa estará disponível para as
tags misra e
pvs-studio # misra nos resultados da análise. As informações sobre o número de alertas MISRA encontrados também foram adicionadas às métricas, as quais serão discutidas posteriormente.
4. Novas métricasNo menu
Projetos -> Seu projeto -> Mede várias métricas de código disponíveis, entre as quais agora existem várias informações do PVS-Studio:
Para cada uma das métricas, é possível criar gráficos e monitorar a dinâmica da aparência de vários grupos de aviso do analisador.
4. Transições multilinhasAlguns diagnósticos do analisador emitem avisos em várias linhas do arquivo. Às vezes eles estão muito distantes. Na nova versão, adicionamos transições multilinhas:
O SonarQube também suporta transições entre arquivos diferentes. Posteriormente, adicionaremos essas transições para diagnóstico, nas quais há análise intermodular.
6. DocumentaçãoA documentação passou por grandes mudanças. O PVS-Studio é um produto multiplataforma e multilíngue, portanto, todos os processos visavam escrever instruções mais gerais e compreensíveis para trabalhar em um sistema específico.
SAST
Até recentemente, em nossos artigos, posicionamos o PVS-Studio como uma ferramenta para detectar erros no código. Ao mesmo tempo, quase não consideramos o PVS-Studio no contexto de segurança. Este ano, corrigimos essa situação e analisamos a ferramenta do ponto de vista dos testes de segurança de aplicativos e práticas DevSecOps.
O PVS-Studio é uma ferramenta para testes de segurança de aplicativos estáticos (Static Application Security Testing, SAST). Em outras palavras, o analisador PVS-Studio detecta não apenas erros de digitação, código morto e outros erros, mas também possíveis vulnerabilidades.
Para conveniência dos especialistas que usarão o PVS-Studio como ferramenta SAST, o analisador exibe seus avisos nos
padrões de codificação SEI CERT da Enumeração comum de fraqueza . Tabelas de conformidade dos diagnósticos do PVS-Studio para vários padrões:
- Conformidade com a CWE
- Conformidade SEI CERT
Este tópico é descrito em mais detalhes no artigo "
PVS-Studio como uma solução SAST ".
Também oferecemos o conhecimento das publicações:
- Como o PVS-Studio pode ajudar na busca de vulnerabilidades?
- Atiramos no pé, processando os dados de entrada .
- Fornecemos o analisador PVS-Studio a especialistas em segurança .
PVS-Studio Free
Na véspera da celebração do novo ano de 2019, a equipe PVS-Studio decidiu fazer um presente agradável a todos os colaboradores de projetos de código aberto hospedados no GitHub ou Bitbucket. Eles têm a oportunidade de usar gratuitamente o analisador estático PVS-Studio para desenvolver projetos de código aberto.
Detalhes: "
PVS-Studio grátis para quem desenvolve projetos de código aberto ".
macOS
Em 2018, o PVS-Studio aprendeu a trabalhar sob o controle do macOS. Nossa equipe dedicou a verificação do Kernel XNU a este evento: "
Lançamento do PVS-Studio para macOS: 64 pontos fracos no Apple XNU Kernel ".
O XNU é o núcleo dos sistemas operacionais de computador desenvolvidos pela Apple e usados na família de sistemas operacionais OS X (macOS, iOS, tvOS, watchOS).

Se você deseja compartilhar este artigo com um público que fala inglês, use o link para a tradução: Andrey Karpov, Svyatoslav Razmyslov.
PVS-Studio 7.00 .