Visão geral dos recursos do PVS-Studio versão 7.07

Quadro 30

O objetivo deste artigo é uma demonstração geral dos recursos do analisador estático PVS-Studio. A maneira mais fácil e visual de fazer isso é mostrar o funcionamento da ferramenta com exemplos. A verificação do projeto usando o plug-in do Visual Studio será mostrada, iniciando o analisador no sistema operacional Linux, importando os resultados da análise para o SonarQube.

informação geral


O PVS-Studio é um analisador de código estático escrito em C, C ++, C # e Java. O PVS-Studio realiza uma ampla variedade de verificações de código, mas é mais poderoso para encontrar erros de digitação e as conseqüências de uma falha de copiar e colar (exemplos: um , dois , três , quatro ). A análise estática é um bom complemento para um dos métodos mais antigos e mais confiáveis ​​para detectar defeitos - a revisão de código. É difícil encontrar alguns erros durante uma revisão conjunta do código (por exemplo, os mesmos erros de digitação). Por exemplo:

int trans_rest(transcoder_settings *trans)
{
  ....
  for(i=0; i<16; i++);
  {
    trans->eq.eq.preamp[i]   = 0.0;
    for(j=0; j<32; j++)
    {
      trans->eq.eq.boost[i][j] = 0.0;
    }
  }
}

Para quem não notou, preste atenção ao ponto e vírgula após o primeiro para . Ou:

private class ObjectArrayComparer : IEqualityComparer<object[]>
{
  public bool Equals(object[] x, object[] y)
  {
    ....
    for (int i = 0; i < x.Length; i++)
    {
      if (!object.Equals(x[0], y[0])) 
      {
        return false;
      }
    }
    return true;
  }
  ....
}

Os mesmos elementos são sempre comparados. Para não perder tempo pesquisando esses erros, vale a pena introduzir um analisador estático. Você pode baixar e experimentar o PVS-Studio neste link.

Plugin para visual studio


O PVS-Studio possui um plug-in para o Visual Studio 2010-2019. Antes de prosseguirmos diretamente para a verificação, demonstrarei os recursos do plug-in. Vamos examinar alguns pontos que podem levantar questões no espírito de "sobre o que é tudo isso?"

Quadro 13


Chamarei a atenção o item Suprimir Mensagens, que abre uma janela para trabalhar com avisos de analisador suprimidos e agora vou explicar o que é esse item. O fato é que o PVS-Studio pode suprimir avisos, o que facilita o uso do analisador, mesmo em um projeto grande. Isso permite incorporar rápida e facilmente um analisador estático ao processo de desenvolvimento.

Se seu projeto for pequeno, a implementação do analisador será bastante simples. No entanto, se o projeto estiver “com histórico”, você provavelmente terá dúvidas: quem estará envolvido no processamento e filtragem dos resultados, quanto tempo você precisará dedicar a isso etc. Vou tentar dissipá-los.

O uso ideal do analisador neste caso é o seguinte. Você o executa no seu projeto e vê várias mensagens do analisador. Em seguida, usando o mecanismo de supressão de aviso, instrua o PVS-Studio a não exibir essas mensagens. Porque Como o seu projeto está em desenvolvimento há muito tempo, no relatório do analisador quase certamente haverá poucos avisos relacionados a alguns defeitos críticos. Além disso, durante o processo de desenvolvimento, você e seus colegas veem apenas os erros relacionados ao código alterado ou novo. Esses avisos que foram suprimidos agora são seu dever técnico, ao qual você pode retornar gradualmente. O mecanismo de supressão de aviso é descrito em mais detalhes aqui .

Quadro 14


Em seguida, vá para o item "Exibir códigos CWE na janela de saída". O PVS-Studio é uma ferramenta para testes de segurança de aplicativos estáticos (Static Application Security Testing, SAST). Os alertas do PVS-Studio podem ser classificados de acordo com a Common Weakness Enumeration (CWE). Para aprender sobre a classificação dos alertas do PVS-Studio de acordo com o CWE, por que o CWE é necessário, o que é e assim por diante, sugiro que você leia os seguintes links:


Vamos para a aba "Opções".

Quadro 6

Na seção "Erros detectáveis ​​(C, C ++)", podemos controlar a exibição dos tipos de mensagens do analisador. As mensagens de diagnóstico que, por algum motivo, não são relevantes para este projeto, podem ser ocultadas ou desabilitadas. Por exemplo, é improvável que os diagnósticos MISRA interessem a ninguém que não sejam desenvolvedores incorporados. Portanto, eles estão desabilitados por padrão . O usuário que primeiro decidiu usar o analisador, o número de avisos MISRA pode assustar e entrar em um estupor. E a parte dos usuários que propositalmente iniciaram o analisador para verificar a conformidade de seus projetos com os padrões MISRA pode simplesmente ativá-los nas configurações.

Quadro 10

Aqui você pode inserir caminhos / máscaras para excluir alguns arquivos ou pastas da análise. Você pode escolher uma máscara pelo caminho (Path Mask) ou uma máscara pelo nome do arquivo (FileName Mask). Eles são necessários se você deseja excluir bibliotecas de terceiros, arquivos gerados automaticamente etc. da análise. Após definir as máscaras de exclusão, as mensagens dos arquivos correspondentes desaparecerão da janela de saída do PVS-Studio e não serão incluídas na próxima varredura. Assim, a exclusão de arquivos e diretórios por meio de máscaras pode reduzir significativamente o tempo de análise geral de todo o projeto.

Mais detalhes aqui .

Quadro 8

Você também pode filtrar a saída do analisador de acordo com o texto contido nele. Por exemplo, no seu relatório do analisador, existem avisos no texto dos quais a função my_super_function é mencionada , no entanto, você tem certeza de que todos esses avisos são falsos. Em seguida, você pode adicionar a palavra my_super_function neste campo. Todos os avisos que continham essa palavra serão filtrados. Bem, por via das dúvidas, deixarei um link aqui para a seção correspondente da documentação .

Nota. No PVS-Studio, existem outras maneiras de marcar avisos falsos em código ou macros. Eles são descritos na documentação na seção Suprimindo alertas falsos .

Depois de concluirmos uma visão geral das configurações, vamos verificar o projeto. Como você deve ter notado, o artigo tinha várias configurações relacionadas aos projetos C ++, mas não havia detalhes específicos para C # e Java. Existem simplesmente mais configurações para C ++ do que para C #, por isso decidimos nos aprofundar nessas breves revisões. Mas, para uma mudança de história, vamos verificar com a ajuda do plug-in do Visual Studio não um C ++, mas um projeto C # e ver como é o relatório do analisador.

Naturalmente, após a primeira verificação do projeto, você precisará retornar às configurações para reduzir a porcentagem de falsos positivos. Os falsos positivos são inevitáveis, mas sua porcentagem pode ser reduzida configurando um valor aceitável. Consulte o artigo: " Características do analisador PVS-Studio usando o exemplo EFL Core Libraries, 10-15% de falsos positivos ".

Imagem 1

Selecione o item “Analyze Solution with PVS-Studio”.

Quadro 2

Uma janela com uma barra de progresso será exibida.

Quadro 3

E então podemos ver o relatório do analisador.

Quadro 11

A propósito, aqui você também pode filtrar alguns avisos. Por exemplo, você pode ocultar o primeiro aviso em nosso relatório, selecionando-o e clicando no item "Marcar mensagens selecionadas como alarmes falsos". Para mais detalhes, consulte novamente a seção Suprimindo alertas falsos .

Linux


Anteriormente, testamos o projeto C #. Agora vamos tentar verificar o código escrito em C ++. Para adicionar variedade ao artigo, vamos testá-lo no Linux. A propósito, no Windows, Linux e macOS, você pode verificar projetos em qualquer idioma (C, C ++, C #, Java).

Quadro 20

Clonamos um repositório.

Quadro 18

Lançamos um script de configuração para montagem.

Quadro 16

Lançamos o PVS-Studio no modo de rastreamento e montamos o projeto. É necessário um utilitário de rastreamento instalado . Em vez do comando make, no seu caso, pode haver qualquer comando para começar a criar o projeto com todos os parâmetros necessários.

Quadro 12

Analisamos os arquivos do projeto usando os resultados da etapa anterior. A opção -a permite especificar quais avisos devem ser incluídos no relatório.

Quadro 4

Convertemos o log em html e aproveitamos os resultados.

Descrevi apenas uma opção para verificar um projeto no Linux e muito formalmente, sem entrar em detalhes. Existem outras maneiras de testar o projeto, por exemplo, escrevendo a chamada do analisador no makefile. Para uma revisão mais detalhada, recomendo consultar os seguintes links:

Sonarquube


O SonarQube é uma plataforma de código-fonte aberto para análise e medição contínuas da qualidade do código, suportando um grande número de linguagens de programação e permitindo que você receba relatórios sobre métricas como duplicação de código, conformidade com padrões de codificação, cobertura de teste, complexidade de código, possíveis erros, etc.

O PVS-Studio possui um plug-in para importar resultados da análise para o SonarQube, vamos tentar usá-lo.

Quadro 9

Para começar, obtemos o relatório do analisador e o arquivo de configuração sonar-project.properties.

Quadro 27

Em seguida, precisamos de um comando de inicialização do scanner.

Quadro 28

Resultado :)

Quadro 23

Além disso, o arquivo de configuração pode ser criado (ou editado). Por exemplo, na captura de tela acima, habilitamos a adição do identificador MISRA aos avisos do analisador. Sim, ou seja, por padrão, o MISRA está desativado aqui. Se você precisar verificar seu código quanto à conformidade com MISRA, adicione "ativo" ao seu arquivo de configuração para incluir.

Quadro 25

Na guia Medidas, várias métricas e gráficos de código estão disponíveis.

Quadro 26

Você também pode criar gráficos usando a seção PVS-Studio. Você pode aprender mais sobre a integração dos resultados da análise do PVS-Studio no SonarQube nesta seção do manual.

PVS-Studio Java


Agora examinamos as configurações dos projetos C ++, testamos o projeto em C #, mas o Java de alguma forma ficou fora do artigo. É necessário corrigir isso e informar sobre o que é o analisador Java do PVS-Studio. O analisador possui várias maneiras diferentes de integrar um projeto. Dependendo do sistema de compilação, você pode usar o plug-in para Maven ou Gradle. Você também pode usar o núcleo do analisador diretamente. O uso de plugins Gradle, Maven ou kernel diretamente permite que você trabalhe facilmente com o Sonar Qube ou CI (Jenkins). Se você tiver esses plug-ins ativados, o projeto Java será verificado pela análise estática diretamente durante o processo de construção e, como resultado, você receberá não apenas seu projeto montado, mas também um log do analisador PVS-Studio.

O analisador Java PVS-Studio também pode ser usado como um plug-in para o IntelliJ IDEA. Nesse caso, a análise da estrutura do projeto é realizada por meio desse IDE, e o plug-in fornece uma interface gráfica conveniente para trabalhar com o analisador.

Quadro 40

Sugiro a leitura com mais detalhes na seção sobre como iniciar o PVS-Studio Java .

Além disso, ao verificar um projeto Java, é possível suprimir as mensagens do analisador para que a integração em um projeto grande seja rápida e fácil.

No IntelliJ IDEA, é assim.

Quadro 42

Nesta janela, vemos o relatório do analisador.

Quadro 43

Ao clicar com o botão direito do mouse na mensagem selecionada, vemos um menu de contexto. Nele, podemos selecionar o item destacado e a mensagem desaparecerá da saída do analisador.

Quadro 44

Também podemos suprimir todas as mensagens do analisador.

Para suprimir os avisos do analisador no Gradle, execute o comando:

./gradlew pvsSuppress "-Ppvsstudio.report=/path/to/report.json"
  "-Ppvsstudio.output=/path/to/suppress_base.json"

Para suprimir avisos do analisador no Maven, execute o comando:
mvn pvsstudio:pvsSuppress "-Dpvsstudio.report=/path/to/report.json"
  "-Dpvsstudio.output=/path/to/suppress_base.json"

Leia mais sobre o mecanismo de supressão aqui .

Resumir


O objetivo deste artigo foi mostrar os recursos do analisador estático PVS-Studio, como trabalhar facilmente com ele usando o plug-in para Visual Studio e Linux. Graças à capacidade de integração com a plataforma SonarQube, você pode fornecer análise contínua e gerenciamento de qualidade do seu código, que é apenas um dos muitos recursos descritos na documentação.

A integração do analisador estático no sistema de IC permite detectar erros imediatamente após a criação do projeto. Isso reduz o custo de encontrar e corrigir erros. Abaixo estão os links para artigos com integrações com os serviços de nuvem mais populares:

  1. PVS-Studio vai para as nuvens: Travis CI
  2. O PVS-Studio vai para as nuvens: Azure DevOps
  3. PVS-Studio vai para as nuvens: CircleCI
  4. O PVS-Studio vai para as nuvens: GitLab CI / CD
  5. Inicie o PVS-Studio no TeamCity


Se você deseja compartilhar este artigo com um público que fala inglês, use o link para a tradução: Ekaterina Nikiforova. PVS-Studio 7.07: Visão geral dos recursos .

All Articles