Tudo o que você queria saber sobre o PVS-Studio e não hesitou em perguntar

Quadro 1

Recentemente, reforçamos nossa presença em várias conferências especializadas de TI na Rússia e no exterior. Na maioria dos eventos, tentamos ficar de pé; em alguns, fazemos apresentações. As conferências podem não apenas aumentar o reconhecimento do nosso produto (analisador de código estático PVS-Studio), mas também, o mais importante, conhecer melhor os usuários existentes e potenciais. Ao se comunicar com os visitantes no estande, nossos funcionários costumam responder às mesmas perguntas, que às vezes são bastante curiosas. Neste artigo, tentarei responder às perguntas mais freqüentes dos visitantes sobre análise estática em geral e o PVS-Studio em particular.

Para começar, um pouco de humor sobre o tema "Expectativa e realidade". Escrevemos muitos artigos e acreditamos ingenuamente que, se as pessoas os lêem, pelo menos em termos gerais, conhecem o nosso produto e seus recursos. Infelizmente, esse nem sempre é o caso. Aqui está um exemplo de comunicação real com um visitante em uma conferência recente. O visitante: "Lemos seus artigos sobre Habré. Interessante. É uma pena que o seu analisador não seja adequado para nós. Temos todos os códigos fonte secretos, não podemos enviá-los. Mas tudo na nuvem funciona para você lá. ”

Quadro 4

Nosso departamento de marketing provavelmente tem algo para trabalhar.

A seguir, darei outras perguntas comuns do visitante médio ao nosso estande na exposição, bem como as respostas para eles em um formato de diálogo improvisado.

P: Eu ouvi algo sobre você. De onde você é, o que está fazendo e como descobrir mais sobre você?

A: Somos uma pequena equipe independente da Tula. Estamos desenvolvendo o PVS-Studio - um analisador de código estático para as linguagens C, C ++, C #, Java. Você pode aprender mais sobre nós no site do PVS-Studio . Também escrevemos artigos e os publicamos em nosso blog , no Habré e outros recursos.

P: Que tipo de análise estática? Nossa equipe possui avisos suficientes do compilador e revisões conjuntas de código.

R: O compilador é capaz de apontar apenas erros graves e bastante óbvios. Por exemplo, código inacessível ou o uso de variáveis ​​não inicializadas. A detecção de erros para o compilador é uma tarefa paralela. Sim, os compiladores tornaram-se bastante inteligentes ultimamente. Mas qualquer ferramenta especializada para encontrar erros no código é significativamente superior ao compilador, permitindo realizar uma análise detalhada do código e identificar erros de digitação, erros lógicos, o uso potencial de ponteiros / links nulos etc.

Revisões conjuntas de código são uma boa tecnologia testada pelo tempo. Mas também tem desvantagens associadas à necessidade de atrair funcionários adicionais para trabalhar no código de outras pessoas. Isso aumenta o custo do desenvolvimento, enquanto a probabilidade de pular um erro ou adicionar um novo permanece, pois é da natureza humana cometer erros.

Análise estática é a verificação do código fonte de um programa sem a necessidade de sua execução. Recomendamos o uso de ferramentas de análise de código estático como uma barreira adicional ao erro.

P: O PVS-Studio analisa arquivos executáveis ​​ou diretamente o código fonte?

R: Se falamos de pesquisa de vulnerabilidades, a análise do código executável é mais semelhante à maneira como o antivírus funciona, procurando assinaturas em um código binário de um determinado banco de dados.

O PVS-Studio analisa o código fonte . Isso permite identificar uma gama muito mais ampla de erros e possíveis vulnerabilidades, aumenta a velocidade do trabalho e fornece resultados mais confiáveis.

Sim, é claro, você pode tentar desmontar o código e encontrar o erro no algoritmo. Mas você precisa entender que no código binário muitas informações são perdidas. Por exemplo, a condição verdadeira sempre será simplesmente excluída quando o código for compilado, e não há como descobrir que algo estava errado com essa condição.

P: E quais são as opções de integração? Você tem plugins para algum IDE?

R: Atualmente, o PVS-Studio está se integrando ao Visual Studio 2010-2017 como um plug-in. Existe um plug-in Java para o IntelliJ IDEA. Além disso, graças a um módulo especializado, você pode gerenciar projetos do CMake no Qt Creator e no CLion.

O analisador está em constante evolução, para que você possa descobrir as informações mais recentes sobre os recursos do produto, visitando nosso site .

P: Usamos o SonarQube.

A: Ótima escolha. O plug-in PVS-Studio para SonarQube permite importar resultados de análises para o SonarQube e trabalhar com eles da maneira usual.

P: Bem, preciso de alguma forma integrar a análise em nosso sistema de compilação.

R: O PVS-Studio pode ser usado na linha de comando. O analisador contém um grande conjunto de configurações para resolver uma ampla variedade de tarefas. Além disso, independentemente do cenário de uso, prestamos assistência aos nossos clientes durante a fase de implementação do analisador e suporte técnico durante todo o período da licença.

P: Como experimentar o seu analisador?

R: Use a página de download , faça o download do kit de distribuição necessário e trabalhe com o PVS-Studio no modo de teste. Se você precisar de um tempo extra para avaliar nosso produto ou se não estiver satisfeito com as limitações da versão demo, entre em contato conosco .

Também em exposições, nossos visitantes podem receber uma chave da empresa, cuja validade é de um mês. Para fazer isso, basta ir ao nosso estande com um unicórnio. Além disso, você pode se tornar um membro da loteria e receber um prêmio do PVS-Studio.

P: Sou estudante, é possível usar o PVS-Studio gratuitamente?

R: Isso é possível se você adicionar comentários de um tipo especial ao seu código-fonte. Os arquivos marcados dessa maneira serão verificados quanto a erros sem nenhuma restrição. Você pode aprender mais sobre este modo operacional no artigo " Como usar o PVS-Studio de graça ".

P: Quem são seus clientes?

R: No momento, mais de 200 empresas em todo o mundo se tornaram nossos clientes. O escopo de suas atividades é muito diversificado. Uma lista de clientes existentes pode ser encontrada em nosso site .

P: Você tem um modo de operação local ou não?

R: O analisador PVS-Studio é instalado localmente em computadores dedicados e pode funcionar completamente isolado. É necessária uma conexão com a Internet para receber atualizações, bem como links rápidos para a documentação (descrição dos diagnósticos, etc.) dos plug-ins. Atualmente, estamos pensando em opções para trabalhar na “nuvem”, mas isso será uma adição ao modo padrão de operação.

P: E em que exatamente você é melhor, digamos, analisador de cobertura?

R: É impossível dar uma resposta simples e abrangente a esta pergunta. Todas as nossas tentativas de comparação com outros analisadores falharam. Fomos acusados ​​de preconceito, “acabando” os resultados, usando uma base de teste especialmente preparada e outros pecados capitais. Além disso, os analisadores não podem simplesmente ser comparados "de frente". Cada ferramenta é única e possui seus próprios pontos fortes e fracos. Algumas ferramentas se concentram no desempenho, outras, na busca de "cheiros" no código e na melhoria do estilo. Procuramos bugs e possíveis vulnerabilidades.

Se você deseja uma metodologia adequada, pode realizar um estudo e comparar nosso analisador com outros e, em seguida, escrever um artigo sobre o assunto. Para fazer isso, emitiremos uma chave de licença temporária sem restrições. Mas esteja preparado para críticas.

P: Como não entendo, você está procurando erros apenas no código não compilado? Ou seja, o programa nem passou na verificação do compilador?

A: Isso não é verdade. O PVS-Studio pesquisa e encontra erros apenas em programas compilados. Em aplicações da vida real. Esses programas não são apenas compilados sem erros, alguns deles são verificados por outros analisadores. E ainda procuramos erros por lá. Sobre isso, costumamos escrever artigos em nosso blog, verificando projetos de código aberto.

P: E quais erros o PVS-Studio poderá detectar em nosso projeto? Apenas erros de digitação?

R: Os erros tipográficos, obviamente, pertencem à classe de erros clássicos detectados pela análise estática. Além disso, o PVS-Studio pode detectar várias centenas de padrões de erro. Exemplos: cancelando a referência a um ponteiro nulo, dividindo por zero, a condição é sempre falsa ou verdadeira, operações incorretas com o índice, saindo dos limites da matriz e muitas outras. Uma lista completa de erros é fornecida na página de documentação .

P: Após verificar com o analisador, posso ter certeza de que o programa não contém erros?

A: Não. O PVS-Studio não é uma ferramenta para provar a correção dos programas. Esta é uma classe separada de ferramentas. A tarefa do nosso analisador é indicar de maneira rápida e confiável um possível erro no código. A decisão sobre a falibilidade de um determinado design é sempre tomada pelo desenvolvedor, usando o contexto da ocorrência do erro e seu conhecimento do projeto. E o analisador ajuda o desenvolvedor, possivelmente minimizando o número de falsos positivos e fornecendo recursos adicionais para processar a lista de avisos recebidos.

P: Como exatamente o PVS-Studio funciona? Que tipo de mecanismo de busca de erros? Você provavelmente está usando expressões regulares.

R: O uso de expressões regulares é extremamente ineficiente. Ele permite encontrar apenas os erros mais primitivos, por exemplo, em condições (compare duas subexpressões idênticas):

if ((a+b+) == (a+b+)) {....} 

Ao mesmo tempo, uma pequena alteração no código (sem alterar a lógica do trabalho) provavelmente colocará esse analisador em um beco sem saída:

 if ((a+b+) == (b+a+)) {....} 

O analisador PVS-Studio é muito mais inteligente e usa os seguintes mecanismos:

  • Correspondência de padrões com base em uma árvore de sintaxe abstrata.
  • Construindo um modelo semântico com inferência de tipo subsequente.
  • Execução simbólica, que permite calcular os valores de variáveis ​​que podem levar a erros, além de verificar intervalos de valores (verificação de intervalo).
  • Análise de fluxo de dados (análise de fluxo de dados).
  • Anotações de método

Tudo isso foi descrito em mais detalhes pelo meu colega Andrei Karpov em um artigo recente, “ Tecnologias usadas no analisador de código PVS-Studio para encontrar erros e possíveis vulnerabilidades ”.

P: Bem, temos um projeto C / C ++, 15 anos de desenvolvimento e cinco milhões de linhas de código. Podemos realmente começar a usar o PVS-Studio agora?

A: sim Na fase de implementação, será necessário realizar uma verificação completa do seu projeto uma vez. Então todos os avisos recebidos (provavelmente haverá muitos deles) podem ser vistos como desinteressantes (suprimem temporariamente sua conclusão), a fim de retornar a essa dívida técnica posteriormente. Depois disso, você pode usar o PVS-Studio para verificar regularmente apenas o novo código. Você pode aprender mais sobre esse e outros recursos do analisador na página de documentação .

P: Com que frequência preciso executar um teste? E o que, verifique toda a base de código toda vez?

R: O uso mais eficiente da análise estática envolve a verificação do novo código o mais rápido possível. Para isso, o modo de análise incremental é implementado no PVS-Studio. Os arquivos que foram modificados desde a última compilação do projeto são enviados para verificação. Existem outros modos de operação. Isso permite identificar erros já no estágio de desenvolvimento, o que reduz o risco de eles entrarem no release.

P: Usamos o PVS-Studio. O analisador encontra erros, mas muitos deles estão em códigos ou testes não utilizados. Tudo bem?

A: É bastante normal. Um dos recursos da análise estática, em contraste com a análise dinâmica, é a verificação de toda a base de código, e não apenas do que é executado quando o código é executado. Digamos que você gastou muito tempo e esforço depurando o código do programa e tudo funciona de maneira estável. Mas há uma função que raramente é usada ou ainda não é usada. A probabilidade de encontrar um erro em uma função é alta. E quando, em um ponto, eles começam a usar a função, algo pode dar errado. O uso da análise estática minimizará os riscos de tal situação.

Além disso, o código pode conter construções obviamente incorretas (isso geralmente ocorre em testes); portanto, faz sentido excluí-las da varredura (especificando projetos ou caminhos) através das configurações do PVS-Studio. No entanto, algumas vezes os próprios testes contêm erros. Tais situações são difíceis de identificar e, nesse caso, a decisão deve ser tomada pelo desenvolvedor.

P: E quanto à pesquisa de vulnerabilidades?

R: O analisador PVS-Studio é uma ferramenta SAST (Static Application Security Testing) e permite identificar possíveis vulnerabilidades classificadas de acordo com a CWE (Common Weakness Enumeration). Os alertas do CWE se sobrepõem amplamente aos alertas clássicos do PVS-Studio. Você pode aprender mais sobre o SAST na documentação . É importante entender que possíveis vulnerabilidades não levam necessariamente a vulnerabilidades reais que podem ser exploradas por um hacker. As vulnerabilidades identificadas são classificadas pelo CVE (Vulnerabilidades e exposições comuns). No entanto, a eliminação de possíveis vulnerabilidades contribui claramente para melhorar a segurança do programa e minimiza o risco de identificar vulnerabilidades reais no futuro.

P: Eu lidero a equipe de desenvolvimento. Como exatamente o PVS-Studio me ajudará?

R: Além de melhorar a qualidade e a confiabilidade do código, a implementação do PVS-Studio permitirá resolver tarefas puramente gerenciais relacionadas, por exemplo, à divisão de responsabilidades. O pacote do analisador inclui o utilitário BlameNotifier, que permite identificar automaticamente os funcionários que enviaram um código incorreto ao sistema de controle de versão. Ao mesmo tempo, as notificações por email são enviadas ao contratado e ao gerente.

Você também pode configurar a conversão dos relatórios de erros para qualquer formato conveniente para você, incluindo um relatório detalhado em html, conveniente para o uso pelo chefe.

Por fim, se o SonarQube for usado, você poderá usar todas as vantagens dessa ferramenta para garantir o controle contínuo da qualidade do código, carregando os resultados da verificação do projeto no SonarQube usando o analisador PVS-Studio usando um plug-in especializado.

P: Usando ou planejando usar o aprendizado de máquina?

A: Este é um tópico grande e interessante. Planejamos escrever um artigo crítico sobre isso. Agora vou expressar apenas alguns pensamentos curtos.

Não há necessidade de fazer uma calculadora usando o aprendizado de máquina. Existe uma certa regra (fórmula), que deve ser aplicada ao código e tirar algum tipo de conclusão. Não está claro por que a rede neural precisa ser configurada para detectar um novo padrão de erro quando esses padrões já existem, e você só precisa aplicá-los corretamente. E, o mais importante, não está claro onde encontrar a base para esse treinamento. Onde está a amostra de centenas de milhares de projetos com erros escritos com os quais você pode aprender?

O único lugar em que, em nossa opinião, pode fazer sentido usar algoritmos de aprendizado de máquina é filtrar falsos positivos.

P: Você verifica o código PVS-Studio com PVS-Studio?

A: claro! Além disso, em caso de erros, a lista de autores é tornada pública com a subsequente excomunhão da geladeira com sorvete. Mas, falando sério, acreditamos que é muito útil usar sua própria ferramenta. Isso permite que você observe o produto do ponto de vista do usuário e observe algumas desvantagens.

P: Como obter seu status maravilhoso para a área de trabalho e o boné da marca com tampões para os ouvidos?

R: Venha ao nosso estande com um unicórnio na exposição mais próxima, onde estaremos presentes com um estande. Nós vamos criar algo :)

Quadro 2

Espero ter sido capaz de responder às perguntas mais populares dos visitantes de nossos estandes em exposições. Obviamente, existem perguntas mais complexas que podem exigir a redação de um artigo separado para serem respondidas.

Ao nos comunicar com os visitantes, tentamos transmitir a idéia principal: uma análise estática não é uma panacéia para todos os males, mas seu uso é muito útil para a saúde (seus programas). Use o PVS-Studio e não fique doente!

Concluindo, darei novamente uma série de links úteis:



Se você deseja compartilhar este artigo com um público que fala inglês, use o link para a tradução: Sergey Khrenov. Tudo o que você queria saber sobre o PVS-Studio e se atreveu a perguntar

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


All Articles