PVS-Studio 7.07版功能概述

图片30

本文的目的是对PVS-Studio静态分析仪的功能进行概述。最简单,最直观的方法是通过示例显示工具的操作。将使用Visual Studio插件显示项目的验证,并在Linux操作系统中启动分析器,然后将分析结果导入SonarQube。

一般信息


PVS-Studio是用C,C ++,C#和Java编写的静态代码分析器。PVS-Studio执行各种各样的代码检查,但是最能发现错别字和复制粘贴失败的后果(例如:)。静态分析是检测缺陷的最古老,最可靠的方法之一的良好补充-代码检查。在联合检查代码期间很难发现一些错误(例如,相同的错别字)。例如:

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;
    }
  }
}

对于那些没有注意到的人,请在第一次使用后注意分号要么:

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;
  }
  ....
}

总是比较相同的元素。为了不浪费您的时间来查找此类错误,仅需引入静态分析器。您可以在链接下载并尝试使用PVS-Studio

Visual Studio插件


PVS-Studio具有适用于Visual Studio 2010-2019的插件。在我们直接进行验证之前,我将演示该插件的功能。让我们以“这是什么意思”的精神审视可能引起疑问的几点。

图片13


我将提请注意“抑制消息”项,该项将打开一个窗口,用于处理隐含的分析器警告,现在我将解释该项是什么。事实上,PVS-Studio可以抑制警告,即使在大型项目中也可以轻松开始使用分析仪。这使您可以快速轻松地将静态分析器并入开发过程。

如果您的项目很小,那么实施分析器将非常简单。但是,如果该项目是“有历史的”,那么您可能会怀疑:谁将参与处理和过滤结果,需要多少时间专门用于此工作等等。我会尽力消除它们。

在这种情况下,分析仪的理想用途如下。您在项目上运行它,并看到大量分析器消息。然后,使用警告抑制机制,指示PVS-Studio不要显示这些消息。因为由于您的项目已经开发了很长时间,因此在分析器报告中几乎可以肯定很少有与某些严重缺陷有关的警告。此外,在开发过程中,您和您的同事只能看到与更改或新代码有关的那些错误。那些已被取消的警告现在是您的技术职责,您可以逐步恢复。警告抑制机制将在此处更详细地描述

图片14


接下来,转到“在输出窗口中显示CWE代码”项。PVS-Studio是用于静态应用程序安全测试(静态应用程序安全测试,SAST)的工具。PVS-Studio警报可以根据常见弱点枚举(CWE)进行分类。要了解根据CWE进行PVS-Studio警报的分类,为何需要CWE,它是什么等等,我建议您阅读以下链接:


让我们继续到“选项”选项卡。

图片6

在“可检测的错误(C,C ++)”部分中,我们可以控制分析器消息类型的显示。可以隐藏或禁用由于某些原因与该项目无关的那些诊断消息。例如,除了嵌入式开发人员以外,MISRA诊断不太可能引起其他任何人的兴趣。因此,默认情况下禁用它们。最初决定使用分析仪的用户可能会吓跑MISRA警告并进入昏迷状态。故意启动分析仪以检查其项目是否符合MISRA标准的用户可以简单地在设置中打开它们。

图片10

您可以在此处输入路径/掩码,以从分析中排除某些文件或文件夹。您可以按路径选择一个掩码(路径掩码),也可以按文件名选择一个掩码(文件名掩码)。如果要从分析中排除第三方库,自动生成的文件等,则需要它们。设置排除掩码后,来自与它们相对应的文件中的消息将从PVS-Studio输出窗口中消失,并且它们将不包含在下一次扫描中。因此,通过掩码排除文件和目录可以显着减少整个项目的总体分析时间。

更多细节在这里

图片8

您还可以根据其中包含的文本过滤分析仪的输出。例如,在分析器报告中,文本中存在提及my_super_function函数的警告,但是您可以确保所有这些警告都是错误的。然后,您可以在此字段中添加单词my_super_function。包含此单词的所有警告将被过滤掉。好吧,以防万一,我将在此处保留指向文档相应部分的链接

注意。在PVS-Studio中,还有其他方法可以在代码或宏中标记错误警告。在“ 抑制错误警报”部分的文档中对此进行了描述

在完成设置概述之后,让我们继续检查项目。您可能已经注意到,本文具有与C ++项目相关的几种设置,但是没有有关C#和Java的细节。 C ++的设置要比C#的设置多,因此我们决定在这些简短的评论中进行介绍。但是,要换个说法,让我们借助Visual Studio插件(不是C ++,而是C#项目)进行检查,并查看分析器报告的外观。

自然,在对项目进行第一次检查之后,您将必须返回到设置,以减少误报的百分比。误报是不可避免的,但是可以通过将其设置为可接受的值来减少其百分比。请参阅文章:“ 使用EFL核心库示例的PVS-Studio分析仪的特征,误报的10-15%。”

图片1

选择项目“使用PVS-Studio分析解决方案”。

图片2

将出现一个带有进度条的窗口。

图片3

然后我们可以看到分析器报告。

图片11

顺便说一句,在这里您还可以过滤掉一些警告。例如,您可以通过选择报告中的第一个警告并单击“将所选消息标记为虚假警报”项来隐藏它。有关更多详细信息,请再次参考抑制虚假警报部分

的Linux


之前我们测试了C#项目。现在,让我们尝试检查用C ++编写的代码。为了增加文章的多样性,我们将在Linux上对其进行测试。顺便说一句,在Windows,Linux和macOS下,您可以使用任何语言(C,C ++,C#,Java)检查项目。

图片20

我们克隆一个存储库。

图片18

我们启动用于组装的配置脚本。

图片16

我们以跟踪模式启动PVS-Studio并组装项目。需要已安装的strace实用程序在您的情况下,可以使用任何命令代替make命令来使用所有必需的参数开始构建项目。

图片12

我们使用上一步的结果来分析项目中的文件。-a开关允许您指定报告中应包括哪些警告。

图片4

我们将日志转换为html并享受结果。

我仅描述了一种在Linux下非常正式地检查项目的选项,而没有详细介绍。还有其他检查项目的方法,例如,通过在makefile中编写Analyzer调用。有关更详细的评论,建议您参考以下链接:

声纳古伯


SonarQube是一个开源平台,用于持续分析和衡量代码质量,支持多种编程语言,并允许您接收有关代码重复,符合编码标准,测试覆盖率,代码复杂性,潜在错误等指标的报告。

PVS-Studio有一个用于将分析结果导入SonarQube的插件,让我们尝试使用它。

图片9

首先,我们获得分析器报告和sonar-project.properties配置文件。

图片27

接下来,我们需要一个扫描仪启动命令。

图片28

结果:)

图片23

另外,可以创建(或编辑)配置文件。例如,在上面的屏幕截图中,我们启用了将MISRA标识符添加到分析器警告中的功能。是的,也就是说,默认情况下,MISRA在这里是禁用的。如果您需要检查代码是否符合MISRA要求,则将“活动”添加到配置文件中以包括在内。

图片25

在“度量”选项卡中,可以使用各种代码度量和图形。

图片26

您也可以使用PVS-Studio部分构建图形。您可以在手册的这一部分中了解有关将PVS-Studio分析结果集成到SonarQube中的更多信息

PVS-Studio Java


现在,我们查看了C ++项目的设置,在C#中测试了该项目,但是Java不知何故不在本文之列。有必要解决此问题,并告诉我们PVS-Studio Java分析仪的全部用途。分析器有几种不同的方法可以集成到项目中。根据构建系统的不同,可以将插件用于Maven或Gradle。您也可以直接使用分析仪核心。直接使用Gradle,Maven或内核插件可以使您轻松地使用Sonar Qube或CI(Jenkins)。如果启用了这些插件,则将在构建过程中直接通过静态分析来检查Java项目,结果,您不仅会收到组装的项目,还会收到PVS-Studio分析仪的日志。

PVS-Studio Java分析器也可以用作IntelliJ IDEA的插件。在这种情况下,将使用此IDE进行项目结构的分析,并且该插件提供了一个方便的图形界面来与分析仪一起使用。

图片40

我建议在有关如何启动PVS-Studio Java的部分中详细阅读

另外,通过检查Java项目,您可以抑制分析器消息,以便快速轻松地集成到大型项目中。

在IntelliJ IDEA中,它看起来像这样。

图片42

在此窗口中,我们将看到分析器报告。

图片43

通过右键单击所选消息,我们将看到这样的上下文菜单。在其中,我们可以选择突出显示的项目,该消息将从分析仪的输出中消失。

图片44

我们还可以隐藏所有分析器消息。

要在Gradle中禁止分析器警告,请执行以下命令:

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

要在Maven中禁止分析器警告,请运行以下命令:
mvn pvsstudio:pvsSuppress "-Dpvsstudio.report=/path/to/report.json"
  "-Dpvsstudio.output=/path/to/suppress_base.json"

在此处 阅读有关抑制机制的更多信息

总结一下


本文的目的是展示PVS-Studio静态分析器的功能,以及如何使用适用于Visual Studio和Linux的插件轻松使用它。由于具有与SonarQube平台集成的功能,您可以提供代码的连续分析和质量管理,这只是文档中描述的众多功能之一。

通过将静态分析器集成到CI系统中,您可以在构建项目后立即检测错误。这减少了发现和纠正错误的成本。以下是与最流行的云服务集成的文章链接:

  1. PVS-Studio走向云:Travis CI
  2. PVS-Studio走向云端:Azure DevOps
  3. PVS-Studio走向云端:CircleCI
  4. PVS-Studio走向云端:GitLab CI / CD
  5. 在TeamCity中启动PVS-Studio


如果您想与说英语的读者分享这篇文章,请使用以下链接:Ekaterina Nikiforova。PVS-Studio 7.07:功能概述

All Articles