您想要了解的有关PVS-Studio的所有信息,可以随时询问

图片1

最近,我们加强了在俄罗斯国内外的各种专业IT会议上的影响力。 在大多数活动中,我们尝试站立站立;在某些情况下,我们进行演示。 会议不仅可以提高我们产品(PVS-Studio静态代码分析器)的知名度,而且最重要的是,可以更紧密地了解潜在用户和现有用户。 与展位的访客交流时,我们的员工经常回答相同的问题,有时候这很好奇。 在本文中,我将尝试回答访客有关静态分析的最常见问题,尤其是关于PVS-Studio的问题。

首先,对“期望与现实”主题有些幽默。 我们写了很多文章,并且天真地相信,如果人们已经阅读过它们,那么他们至少总的来说会了解我们的产品及其功能。 不幸的是,并非总是如此。 这是在最近的会议上与访问者进行真实交流的示例。 访客:“我们阅读了您在哈布雷的文章。 有趣 很遗憾您的分析仪根本不适合我们。 我们已将所有源代码保密,我们无法将其发送出去。 但是那里的一切都可以在云上为您工作 。”

图片4

我们的市场部门可能需要做一些工作。

接下来,我将向一般参观者到展会的展位提出其他常见问题,并以即兴对话的形式回答这些问题。

问:我听说过有关你的事。 您来自哪里,在做什么,如何找到有关您的更多信息?

答:我们是来自图拉的小型独立团队。 我们正在开发PVS-Studio-用于C,C ++,C#,Java语言的静态代码分析器。 您可以在PVS-Studio网站上了解有关我们的更多信息。 我们还撰写文章,并将其发布在我们的博客上, 哈布雷(Habré)和其他资源上。

问:什么样的静态分析? 我们的团队有足够的编译器警告和联合代码审查。

答:编译器只能指出明显的错误。 例如,无法访问的代码或未初始化变量的使用。 对编译器进行错误检测是一项附带任务。 是的,最近编译器变得非常智能。 但是,用于查找代码错误的任何专用工具都明显优于编译器,从而使您可以对代码进行详细分析并识别错别字,逻辑错误,可能使用空指针/链接等。

联合代码审查是一项经过时间考验的好技术。 但这也有一些缺点,即需要吸引更多的员工来编写其他人的代码。 这增加了开发成本,而跳过错误或添加新错误的可能性仍然存在,因为犯错误是人的天性。

静态分析是对程序源代码的验证,而无需执行它。 我们建议使用静态代码分析工具作为错误的附加障碍。

问: PVS-Studio是分析可执行文件还是直接分析源代码?

答:如果我们谈论搜索漏洞,那么对可执行代码的分析与反病毒软件的工作原理更加相似,即从某些数据库中查找二进制代码中的签名。

PVS-Studio分析源代码 。 这使您能够识别范围更广的错误和潜在漏洞,提高工作速度并提供更可靠的结果。

是的,当然,您可以尝试反汇编代码并找到算法中的错误。 但是您需要了解,二进制代码会丢失很多信息。 例如,在编译代码时,总是会简单地删除true条件,并且无法找出此条件有问题。

问:集成选项有哪些? 您是否有适用于任何IDE的插件?

答:目前,PVS-Studio已作为插件集成到Visual Studio 2010-2017中。 有一个用于IntelliJ IDEA的Java插件。 另外,由于有专门的模块,您可以在Qt Creator和CLion中管理CMake项目。

分析仪在不断发展,因此您可以通过访问我们的网站找到有关产品功能的最新信息。

问:我们使用SonarQube。

答:不错的选择。 用于SonarQube的PVS-Studio插件可让您将分析结果导入SonarQube并以常规方式使用它们。

问:好吧,我需要以某种方式将分析集成到我们的构建系统中。

答: PVS-Studio可以从命令行使用。 分析仪包含用于解决各种任务的大量设置。 另外,无论使用情况如何,我们都会在分析仪的实施阶段为客户提供帮助,并在整个许可期内提供技术支持。

问:如何尝试使用分析仪?

答:使用下载页面 ,下载必要的分发工具包,然后在试用模式下使用PVS-Studio。 如果您需要更多时间来评估我们的产品,或者对演示版本的限制不满意,请与我们联系

同样在展览中,我们的访客可以收到企业密钥,该密钥的有效期为一个月。 为此,只需带着独角兽来到我们的展位。 此外,您还可以成为彩票的一员,并从PVS-Studio获得奖金。

问:我是一名学生,可以免费使用PVS-Studio吗?

答:如果在源代码中添加特殊类型的注释,则可以这样做。 以这种方式标记的文件将不受任何限制地检查错误。 您可以从文章“ 如何免费使用PVS-Studio ”中了解有关此操作模式的更多信息。

问:您的客户是谁?

答:目前,全球有200多家公司成为我们的客户。 他们的活动范围非常广泛。 现有客户列表可以在我们的网站找到

问:那么您是否有本地操作模式?

答: PVS-Studio分析仪本地安装在专用计算机上,可以完全独立运行。 必须有Internet连接才能接收更新,以及从插件到文档的快速链接(诊断说明等)。 我们目前正在考虑通过“云”进行工作的选项,但这将是标准操作模式的补充。

问:例如,Coverity分析仪到底是什么更好的呢?

答:不可能简单,全面地回答这个问题。 我们与其他分析仪进行比较的所有尝试均以失败告终。 我们被指控存在偏见,使用特别准备的测试基础和其他致命的罪恶“结束”了结果。 此外,不能简单地将分析仪进行“正面比较”。 每种工具都是独特的,各有优缺点。 一些工具侧重于性能,另一些工具侧重于在代码中查找“气味”并改善样式。 我们寻找错误和潜在的漏洞。

如果您有需求和合适的方法,可以进行研究并将我们的分析仪与其他仪器进行比较,然后撰写有关此文章的文章。 为此,我们甚至会无限制地向您颁发临时许可证密钥。 但是要做好批评的准备。

问:我不明白,所以您只在未编译的代码中查找错误? 也就是说,程序甚至没有通过编译器检查?

答:不是。 PVS-Studio仅在编译的程序中搜索并查找错误。 在现实生活中的应用。 这些程序不仅编译正确,而且没有错误,其中一些程序已由其他分析器检查。 而且我们仍然在那里寻找错误。 关于这一点,我们经常在博客上写文章 ,检查开源项目。

问: PVS-Studio在我们的项目中将能够检测到哪些错误? 只是错别字?

答: Typos当然属于通过静态分析检测到的经典错误。 但是除此之外,PVS-Studio还可检测到数百种错误模式 。 示例:取消引用空指针,除以零,条件始终为false或true,对索引的操作不正确,超出数组范围,等等。 文档页面上提供了错误的完整列表。

问:与分析仪一起检查后,可以确定程序没有错误吗?

答:不可以。 PVS-Studio不是证明程序正确性的工具。 这是一类单独的工具。 分析仪的任务是快速可靠地指出代码中的潜在错误。 始终由开发人员使用错误的上下文及其对项目的了解来决定特定设计的易失性。 分析器可以帮助开发人员,尽可能减少误报的数量,并提供其他功能来处理收到的警告列表。

问: PVS-Studio的工作原理如何? 什么样的错误搜索机制? 您可能正在使用正则表达式。

答:使用正则表达式效率极低。 它允许您仅查找最原始的错误,例如,在条件下(比较两个相同的子表达式):

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

同时,对代码进行少量更改(不更改工作逻辑)很可能会使这种分析器陷入僵局:

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

PVS-Studio分析仪更加智能,并使用以下机制:

  • 基于抽象语法树的模式匹配。
  • 使用后续类型推断构建语义模型。
  • 符号执行,它使您可以计算可能导致错误的变量的值,以及检查值的范围(范围检查)。
  • 数据流分析(数据流分析)。
  • 方法注释

我的同事Andrei Karpov在最近的文章“ PVS-Studio代码分析器中用于查找错误和潜在漏洞的技术 ”中对此进行了更详细的描述。

问:好吧,我们有一个C / C ++项目,经过15年的开发和500万行代码。 我们现在可以真正开始使用PVS-Studio吗?

答:可以 。 在实施阶段,有必要对您的项目进行一次全面检查。 然后,可以将收到的所有警告(可能会有很多警告)都标记为不有趣(暂时抑制其结论),以便稍后返回此技术债务。 之后,您可以使用PVS-Studio定期仅检查新代码。 您可以在文档页面上了解有关此功能和其他分析仪功能的更多信息。

问:我需要多久进行一次测试? 还有,每次都检查整个代码库吗?

答:静态分析的最有效使用涉及尽可能频繁地检查新代码。 为此,增量分析模式在PVS-Studio中实现。 自项目上次构建以来已修改的文件将提交进行验证。 还有其他操作模式。 这使您可以在开发阶段就识别出错误,从而降低了错误进入发行版的风险。

问:我们使用PVS-Studio。 分析器发现错误,但是其中许多是在未使用的代码或测试中。 这样可以吗

答:这很正常。 与动态分析相比,静态分析的功能之一是验证整个代码库,而不只是验证代码运行时执行的内容。 假设您花费了大量时间和精力调试程序代码,并且一切工作都稳定进行。 但是有一个功能很少使用或根本没有使用。 在此类函数中发现错误的可能性很高。 当他们开始使用该功能时,可能会出问题。 静态分析的使用将使这种情况的风险降到最低。

此外,该代码可能包含明显不正确的构造(通常在测试中发生),因此通过PVS-Studio设置将它们从扫描中排除(通过指定项目或路径)通常是有意义的。 但是,有时测试本身包含错误。 这种情况很难识别,在这种情况下,开发人员必须做出决定。

问:如何搜索漏洞?

答: PVS-Studio分析仪是一种SAST(静态应用程序安全测试)工具,可让您识别根据CWE (通用弱点枚举)分类的潜在漏洞。 CWE警报与经典PVS-Studio警报在很大程度上重叠。 您可以从文档中了解有关SAST的更多信息。 重要的是要了解, 潜在的漏洞不一定会导致黑客可以利用的实际漏洞。 识别出的漏洞按CVE (常见漏洞和披露)进行分类。 但是,消除潜在漏洞显然有助于提高程序的安全性,并最大程度地减少将来识别实际漏洞的风险。

问:我领导开发团队。 PVS-Studio对我有什么帮助?

答:除了提高代码的质量和可靠性外,PVS-Studio的实施还可以解决纯粹的管理任务,例如,与职责划分有关。 分析器软件包包括BlameNotifier实用程序,该实用程序可让您自动识别向版本控制系统发送了错误代码的员工。 同时,邮件通知将发送给承包商及其经理。

您还可以将错误报告的转换配置为任何您方便的形式,包括详细的html报告,供头部使用。

最后,如果使用了SonarQube,则可以使用该工具的所有优点,通过使用专用插件使用PVS-Studio分析仪将项目验证结果上载到SonarQube,以确保连续的代码质量控制。

问:正在使用或计划使用机器学习吗?

答:这是一个很大而有趣的话题。 我们计划就此撰写一篇重要文章。 现在,我只会发表一些简短的想法。

无需使用机器学习来制作计算器。 有一定的规则(公式),必须将其应用于代码并得出某种结论。 目前尚不清楚为什么需要将神经网络配置为在已经存在新错误模式的情况下对其进行检测,而您只需要正确应用它们即可。 而且,最重要的是,尚不清楚从何处获得此类培训的基础。 您可以从中学到的成千上万个带有书面错误的项目的示例在哪里?

我们认为,使用机器学习算法可能唯一有意义的地方是过滤误报。

问:您是否通过PVS-Studio检查PVS-Studio代码?

答:当然可以! 此外,如果发生错误,则将肇事者名单公布,并随后将他们从冰箱中逐出冰淇淋。 但是,认真的说,我们相信使用您自己的工具非常有用。 这使您可以从用户的角度看产品,并注意到一些缺点。

问:如何获得带有耳盖的台式机和品牌帽的出色地位?

答:在最近的展览会上,独角兽来到我们的展位,在那里我们将为您提供一个展位。 我们将提出一些建议:)

图片2

我希望我能够回答参观我们展位的观众中最受欢迎的问题。 当然,还有更复杂的问题,可能需要撰写单独的文章来回答。

在与访客交流时,我们尝试传达主要思想:静态分析并非解决所有疾病的灵丹妙药,但它对健康(您的程序)非常有用。 使用PVS-Studio,不要生病!

最后,我将再次提供一些有用的链接:



如果您想与讲英语的读者分享这篇文章,请使用以下链接:Sergey Khrenov。 您想了解的有关PVS-Studio的一切,也敢问

Source: https://habr.com/ru/post/zh-CN431086/


All Articles