浅谈项目经理的静态代码分析


如果你认为自己是一个优秀的程序员,或者至少你认为自己的水平高于平均水平,我不建议阅读这篇文章。本文针对的是软件项目的管理者。我想在这里讨论一些相当重要,但(对程序员来说)非常枯燥,与静态代码分析的方法论有关的问题。

我希望,这篇介绍已经让一些程序员止步于阅读。有人可能还会继续阅读,但这是自由意志。我们将讨论一些对程序员来说不是很愉快的事情。

我公司开发静态代码分析器PVS-Studio,用于查找用C,C++和C#编写的程序代码中的错误。想法很简单:我们运行分析器并检查那些对它来说似乎可疑的代码片段。一般来说,这是一种自动的code-review

对于任何经理和程序员本身来说,高质量的代码比低质量的代码要好是很清楚的。每个人都很清楚,程序中的小故障越少越好。

但最有趣的部分来了。尽管每个人都理解高质量代码的重要性,但当程序员被提供对代码使用静态分析时,他们往往会感到愤怒。他们似乎被冒犯了,他们的专业精神受到了质疑,他们急于用他们所有的负面批评来回应。这些年来我们看到了这样大量的砖头:

  • “这是一个针对学生的工具;在我们的团队中,我们只有专家。这就是为什么如果我们有错误,它们只与线程的同步有关。”
  • “我们不使用静态代码分析,因为我们只雇佣高于平均水平的专业人员。”

我认为,如果一个项目经理在这样的讨论中在场,那么相当多的程序员将会得到一种傲慢的老式表情。每个经理都能回忆起这样一种情况:当他们在寻找一个错误时,结果发现它是一个愚蠢的错误。或者,有些情况下,当经理开始非常怀疑:如果一切都很好,为什么应用程序仍然时不时地崩溃?管理人员不像开发人员那样积极看待项目开发的过程和出现的问题。

图1。程序员通常过于乐观,认为一切都很好。

所以我想揭开一个谜团,当然,这根本不是一个谜团。程序员在估计他们的熟练程度时遇到了麻烦。一篇文章“The Problem With 'Above Average Programmers“给出了一个很好的解释。我摘录了一段话:

你如何评价你的编程技能?(低于平均水平,平均水平,还是高于平均水平)?

基于psychological studies across many different groups,所有程序员中大约90%的人会回答“高于平均水平”。

当然,这不可能是真的。在一个100人的小组中,50人高于平均水平,50人低于平均水平。这种效应称为illusory superiority。它在很多领域都有描述,但即使你没有听说过,you will most likely answer "above average

这是一个阻碍程序员学习新技术和方法论的问题。在我们的案例中,它阻碍了对静态代码分析的积极态度。对于一个程序员来说,意识到某些程序会教如何编码是非常不愉快的。当分析器检测到理想代码中的愚蠢错误并将其公开时,就更加令人不快了。注意和接受代码中的错误和缺陷需要一些意志和智慧。写一些关于工具和技术的负面反馈,继续生活在舒适和封闭的世界里,要容易得多。

分析器PVS-Studiofinds bugs在Qt,MSBuild,LLVM,GCC,GDB和Chromium等项目的代码中。这些项目的开发商不能被评为中等以下。然而,这并不妨碍程序员回答他们的代码是非常定性的,分析与他们根本不相关。

在这种情况下,我喜欢问:这些是谁制造的11000 errors,如果各地只有“中等以上”的专业人才?当然,这个问题是修辞性的,我不是在等待答案。

我想经理们已经意识到我的意思了。静态代码分析器在中大型项目的开发过程中是必不可少的。它有助于对抗大量的错误,并在总体上控制开发过程。定期检查有助于检测bug数量的异常增长,这是因为有一些即将辞职的程序员写得很草率,因为他并不太在意,而是不得不假装自己在工作。当然,这种情况是可以弥补的,但是确实需要一个能够评估项目质量的工具,而分析器警告是最好的度量之一。

顺便说一下,这里有一个关于这个话题的有趣的故事。最近,我的同事checkedCryEngineV项目,发现了很多bug。高级别警告太多了,我的同事都没有足够的耐心去看一遍。然后,突然间,我们得知Crytek遇到了一些问题,几个程序员已经三个多月没有拿到工资了。公司中的不健康状况影响了代码的质量。看到如此清晰的关系是很有趣的。

通常,您应该毫不犹豫地强迫程序员使用静态代码分析。让它不是PVS-Studio,而是一些Cppcheck(只做简单的检查,但免费)。这已经很棒了。程序员可能会开始反对,所以经理必须保持坚定。程序员经常提到这样一个事实,即使用分析器的工作需要时间,这迫使他们查看误报。

我在这里忍不住讽刺一下。哦,好吧。。。花一天的时间来设置分析器和抑制假阳性是太多了。同时坐下来找一个星期的虫子是完全可以的。

Proof:一个花费了大约50个小时搜索不成功的bug在不到一个小时内被发现并检测到。

顺便说一下,如果不需要查找旧代码中的错误,将分析器集成到开发过程中是非常简单的。PVS-Studio可以显示仅与新代码或编辑的代码相关的错误(请参阅Mass Suppression of Analyzer Messages)。

对于程序员为什么不需要静态分析器的反对意见,管理者应该持非常怀疑的态度。他们可能真的不需要。是项目需要的。这是一种方法,就像单元测试,例如,允许增加代码的可靠性和减少维护费用。越快发现错误越好。静态分析器有助于在最早阶段检测错误,即一旦错误出现在代码中。

图2。请注意,一些程序员错误地使用了静态分析。

另一个重要的一点:一些程序员可能声称在测试过程中发现的错误很少,因此分析器的实现并不理性。别让他们迷惑你。当然工作代码中不会有很多bug;否则程序就不会工作了。然而,查找和修复bug可能非常昂贵。通常,只要运行一次代码分析器,就可以避免大量的用户抱怨和程序员在调试器中的数小时冥想。静态分析的全部要点和使用在于它的常规使用,而不是偶尔的运行。

我已经听过几次了,有些程序员在发布之前运行静态分析器。如果有人这样做,并声明这是正常的,他们就不适合这个职业。这是使用静态分析器的最不正确的方法。这与在发布之前打开编译器警告相同,但在其余时间禁用它们。

谢谢你的关注。我建议所有对静态分析方法感兴趣的人,特别是对PVS-Studio analyzer感兴趣的人,contact us我们可以帮助检查您的项目,设置分析器并显示如何处理发出的警告。