在2020.2版本中,我们引入了Parasoft C/C++test的增强功能集合,使其更适合现代工作流程。在这篇文章中,我将重点介绍一些最有趣的新颖性。
对现代静态分析工具的期望
我们在客户中经常看到的流行图片是基于Git的开发环境,它具有动态的分支和合并方法。团队希望静态分析能够无缝集成到此类工作流程中。
凭借庞大而复杂的代码库,团队希望现代静态分析工具能够:
- 与CI/CD实践紧密结合。
- 帮助他们专注于日常工作,并提供快速的反馈,而无需长时间拖延。
- 启用对先前存在问题的过滤,并在功能分支中仅显示新的和相关的违规。
- 启用有效的抑制/放弃共享和管理。
在2020.2版本中,我们引入了Parasoft C/C++test的增强功能集合,使其更适合现代工作流程。在这篇文章中,我将重点介绍一些最有趣的新颖性:
- 自动调整静态分析范围,以获得更快的反馈。
- 专注于相关问题可以提高生产率。
- 方便地访问CI/CD静态分析结果可加快修复速度。
- 管理抑制以方便共享。
自动调整静态分析范围以获得更快的反馈
静态分析会话,尤其是在大型代码库上的会话,可能会很长。对于为功能或错误修复而进行少量增加的开发人员而言,这是个问题。他们希望获得有关他们修改的最新文件的快速反馈,并在内存中所有内容仍然新鲜时更正代码。在此阶段,他们更喜欢分析的速度而不是准确性。
在Parasoft C/C++test 2020.2中,我们增强了Git集成。现在,它可以自动调整分析范围,使其仅关注最近的代码修改。
开发人员可以指定一个父/引用分支与他们当前的开发分支进行比较。Parasoft C/C++test将自动比较和计算增量以进行分析。

图1:父分支和当前开发分支的比较
无需在整个项目上运行分析(这可能需要花费大量时间,甚至是数小时),我们可以在工具自动选择的最小文件集上运行分析。它可以大大减少分析会话的持续时间。
自然,某些需要项目系统级视图的检查器将不是100%准确的。我们建议将快速,受限的运行与广泛而完整的CI/CD扫描相结合。
对最小文件集运行静态分析
要启用此功能,用户需要指定两个选项。有关在C/C++test标准版中使用的“localsettings”文件的示例,请参见下面的屏幕截图,对于cpptestcli使用-localsettings命令行标志。

图2:localsettings文件
scope.scontrol.files.filtr.mode决定是否应基于分支比较或本地修改的文件来计算分析范围。要比较两个分支并将分析仅集中于修改后的文件,用户需要使用scope.scontrol.ref.branch选项提供参考分支。
对于C/C++test专业版,您可以使用相同的localsettings文件来配置此功能。需要使用Parasoft Menu > Preferences > Parasoft > C/C++test advanced settings > Settings file路径将localsettings文件添加到C/C++test专业配置中。
这项新功能通过缩短分析会话的持续时间并将分析仅集中在修改后的文件上,从而提高了开发人员的工作效率。但是开发人员可能希望使其静态分析更加集中。请继续阅读以了解更多信息!
关注相关问题可提高生产率
团队经常必须在不遵循合规性的情况下使用开发的代码库。它可能是不合规的旧代码,也可能是不合规而开发的原型。在这种情况下尝试实施编码标准可能是一场真正的噩梦。
团队知道在某些时候必须使用干净的代码。但这不是他们的主要目标。首先,他们希望确保不会带来任何新问题,并且不会增加合规债务。
问题在于,要区分新的和先前存在的违规非常耗时。即使使用Git集成并缩小了分析范围,开发人员只要修改文件以添加新代码,所有先前存在的违规行为都会显示在 告中。审查这些问题可能需要几个小时。
团队可以通过对静态分析结果进行基线分析来纠正这种有问题的情况。2020.2版本的C/C++test提供了一个选项,可以在运行分析会话时指定参考 告以及项目的接受状态。
参考 告将比较分析会话的完整结果。它过滤掉先前存在的发现并仅 告新问题。

图3:参考结果+当前结果=我的新结果
对于开发人员而言,这意味着他们不必关注数百种违规行为,而可以专注于修改代码后出现的这三种违规行为。
启用结果基准
为了使结果成为基线,用户需要首先生成参考 告。
标准版
对于C/C++test Standard,请按照以下步骤生成参考 告。
-
对代码库的参考状态运行静态分析(常规静态分析运行)。在您选择的 告文件夹中找到results.xml文件。
您可以将参考 告存储在SCM中,也可以从本地驱动器中使用它。
要仅查看基于新添加的代码的新结果,请在当前分支上运行分析,然后在localsettings文件(cpptestcli的-localsettings标志)中指定两个其他选项:

图4:运行分析
专业版
对于C/C++test专业人员,请使用专用选项来生成参考 告。
1. 通过对代码库的参考状态运行静态分析来生成参考 告。要生成 告,请在C/C++test高级设置文件中指定其他选项:Parasoft Menu > Preferences > Parasoft > C/C++test advanced settings > Settings file。

图5:生成参考 告
2. 如果需要,可以将参考 告存储在SCM中,或从本地驱动器中使用它。
3. 要仅查看新结果,请在当前分支上使用高级设置文件中的两个附加选项运行分析:Parasoft Menu > Preferences > Parasoft > C/C++test advanced settings > Settings file。

图6:使用以前的版本 告作为基准
指定了report.xml的本地设置文件的所有示例,还可以包括相对或绝对路径。
方便地访问CI/CD静态分析结果,可加快修复速度
在讨论Git集成和缩小分析范围以获取更快的反馈时,我曾提到过,这些缩小的扫描应与CI/CD中的完整而广泛的扫描相辅相成。
访问CI/CD结果
通过这种方法,出现了一个重要的问题:用户如何为开发人员启用CI/CD结果,以便他们可以采取行动并进行补救几种方法可以使结果可用:
-
通过CI/CD平台的Web界面。
与Parasoft DTP 告服务器共享。
直接交付给开发人员的IDE。
大多数团队更喜欢最后一种选择,因为他们可以通过最常用的界面(即IDE)访问结果!
访问静态分析结果
通过允许从DTP下载静态分析结果,我们的最新版本还增强了Visual Studio Code扩展。我们的Eclipse和Visual Studio插件中已经提供了此功能。
结果下载操作非常简单。用户从命令面板调用专用命令:“C/C++test: Load Results from DTP …”。

图7:结果下载操作
该扩展程序将询问DTP服务器的位置,然后询问凭据,然后询问DTP项目和过滤器。
瞧!结果是在本地生成的,因此在“问题”视图中可用。
开发人员还可以单击违规消息。它将它们直接带到需要修复的源代码行。它的生产力令人难以置信。
管理抑制以便轻松共享
认真整合静态分析的团队了解,有效管理抑制或放弃对于其成功至关重要。Parasoft用户可以以代码注释的形式直接在源代码中存储抑制信息,也可以使用外部数据库(例如Parasoft DTP或TCM)。
以代码注释的形式存储抑制信息可能是管理这些异常的最有效方法。但是许多团队不允许这样做,尤其是在将代码交付给可能使用不同工具的外部承包商时。或者,也许有内部政策禁止这样做。
以纯文本格式存储抑制
用户可以使用专用的UI操作或手动添加这些抑制条目来添加到parasoft.suppress。Eclipse插件,Visual Studio插件和Visual Studio扩展的UI进行了扩展,以支持新的抑制类型。
禁止条目只是纯文本,并且包含标识要禁止的违规的属性的集合。请参见屏幕截图,作为抑制条目的示例以及抑制条目支持的所有属性的列表。

图8:抑制条目
开发人员可以对message属性使用基本的正则表达式(‘*’, ‘/span>’),从而可以通过一个禁止条目禁止多个违规行为。例如,当消息包含参数名称时。
如果需要,单个抑制条目可以抑制多个违例。但是,在生成的 告中也将提供有关每个个体被禁止违规的信息。并且,如果为其配置,则传播到DTP服务器。

图9:合并
抑制文件(parasoft.suppress)设计为存储在SCM中。创建分支后,抑制信息便是其中的一部分。将新条目添加到禁止文件将使其在代码审查过程中可见,并且该文件将通过批准链。合并代码后,抑制文件就像源代码一样成为此操作的一部分,干净利落。
来总结一下
现代开发工作流程基于Git SCM进行标准化,并专注于CI/CD。大型代码库和频繁的分支工作需要部署静态分析工具,这些工具可以自动聚焦并产生与开发人员当前工作相关的结果。
由于项目经常需要使用开源、遗留和原型源代码,因此团队必须确定自己的进度并制定自己的计划,以实现编码标准合规性。结果基线有助于为新代码建立严格的策略,并制定计划以快速有效地解决先前存在的问题。

标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!