PVS-Studio用户支持的一天

图片2

我们欢迎任何关于代码质量的聊天。 我们来自互联网各个角落的客户,学生和其他用户都写信给我们。 无论国家,时区或语言如何。 好吧,说语言,而不是编程。 到目前为止,在编程语言中,我们对有限的一组集感兴趣。 现在,它是C,C ++,C#和Java。 交流有很多好处。 我们会立即实施一些用户的建议,因为它们确实很有用。 通常,我们只是通过解释分析器警告来帮助某人的项目,这最终是错误。 此注释是关于这种情况的。

关于分析仪


PVS-Studio是一种工具,旨在检测用C,C ++,C#和Java编写的程序源代码中的错误和潜在漏洞。 它适用于Windows,Linux和macOS环境。

您可以通过三种反馈形式与我们联系:

  1. 意见反馈
  2. 试用要求
  3. 价格要求

星期四晚上


一位在其代码上尝试使用分析器的活跃用户开始主动发送错误警告。 在我回答之前,已经有3封电子邮件。 工作一天结束了,我很累(谈论手动代码审查的可靠性问题)。 我们的团队正在积极准备几天后才能发布的高规格版本。

我决定在周五甚至在下周回答:

你好君士坦丁

我们将审核您的警告。 下周我将在可疑的地方发表评论:-)

本说明是关于静态代码分析的有效性的。 在许多情况下,尤其是在一天结束时,手动检查代码将不如自动检查。

经用户许可,我将引用您的邮件:

电邮1

虚假的V712警告:

uint32_t StartUpCounter = 0, HSEStatus = 0; RCC->CR |= ((uint32_t)RCC_CR_HSEON); /* Wait till HSE is ready and if Time out is reached exit */ { HSEStatus = RCC->CR & RCC_CR_HSERDY; StartUpCounter++; } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); // V712... 

电邮2

V715对于同一片段为假阳性:

 { // V715 ... lpmode.cpp 356 HSEStatus = RCC->CR & RCC_CR_HSERDY; StartUpCounter++; } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); 

电邮3

天哪,这是个鬼屋! 分析器抱怨相同的片段(请参阅先前电子邮件中的代码):

V560条件表达式的一部分始终为true:(StartUpCounter!=((Uint16_t)0x5000))。 lpmode.cpp 356

V776潜在无限循环。 循环退出条件“ HSEStatus == 0”中的变量在两次迭代之间不会更改其值。 lpmode.cpp 356

也许我什么都没得到? 但是实际上,一切正常,如果石英无法启动,那么我们会在超时时退出此片段;-)

电子邮件4(回复)

你好君士坦丁

我们将审核您的警告。 下周我将在可疑的地方发表评论:-)

电邮5

该死! 仅在收到您的电子邮件之后,我才注意到语句“ do”被遗漏了……最后,所有人陷入困境! 好像我完全失去了敏锐度%)

{...}期间(...);

结论


您可能已经注意到,对于同一片段有4个分析器警告,但是仍然需要一些时间才能使用户确信存在错误。 在这种情况下,手动检查甚至没有机会。

一个类似的故事,结尾很圆满:“ PVS-Studio如何证明比三个半程序员更吸引人

在您的项目中使用静态分析器。 他们不会用同事代替代码审查,而是增加了对代码质量控制的支持。

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


All Articles