我们已开始在代码库中使用静态分析器(Coverity)。我们收到了大量的警告(数十万),我们很快就被惊呆了,整个团队需要几个月的时间才能清除所有这些警告(一点也不可能)。
我们到目前为止讨论的选项是
1)雇用承包商来整理警告并修复它们 - 他的缺点是:我们可能需要非常经验的人来做所有这些修改,并且没有承包商需要理解代码。
2)过滤掉警告并仅处理危险警告 - 这里的问题是我们的静态分析输出总是被警告混乱,使我们难以隔离问题。过滤警告也是一项重大努力。
无论哪种方式,将我们的代码置于静态分析器对我们来说是一个有用工具的状态似乎是一项艰巨的任务。
那么如何在不将当前的开发工作强化到一个完整的支架的情况下使用静态分析器怎么样呢?
答案 0 :(得分:7)
每周一天:开启分析;挑选100个最烦人的警告;解决它们;关闭分析。简而言之:不要惊慌;你的代码按原样运行(不是吗?);以一口大小的方式处理警告。
如果您发现相同类型的警告再次出现(错误的编码习惯),请教育您的团队以后避免使用它们。
我用一个旧的代码库做了这个:我早上进入(在团队的其他成员之前),在编译器上调高警告/分析级别,修复一些警告,然后将其设置回默认值。
答案 1 :(得分:4)
答案 2 :(得分:3)
要做的第一件事就是调整分析设置; Coverity支持可能会给你一个相当通用的配置。
让我以几个免责声明结束:
我这样做是为了谋生,也许你想聘请我们(http://codeintegritysolutions.com/);我今天在斯坦福大学就这个问题发表演讲。聘请顾问进行调整很有意义;在公司外面有人做分类是比较棘手的。有一个局外人做修复工作仍然比较棘手;从错误中吸取教训比修复错误更重要。
答案 3 :(得分:2)
对于您的承包商选项,您可能会采用更温和的方式,让他们只修复明确的问题,本地问题并且不需要完全了解您的代码。我猜想大量的Coverity命中是可能的NULL指针解引用或可能的写入超过缓冲区的末尾,可以通过简单的检查来解决,这些检查完全是有问题的代码本地的,并且不需要理解大图。
我承认 - 在使用preFAST / preFIX或者微软调用的工具之前,我已经完成了这样的工作,其中很多都是机械式的变化。非常适合承包商或甚至实习生。但是会有一些东西需要更多的分析 - 只要确保承包商明白他们不应该试图深入研究。
对他们好一点 - 这是苦差事,所以做任何你可以愉快的事情。
答案 4 :(得分:2)
人们告诉我们,第一次使用它时,我们会“忽略”所有警告。然后在下一个差异构建中,它会逐渐增加新的警告:你应该修复它。然后,在您使用该工具几个月后,您会对它感到满意,然后返回并开始修复旧的警告。
答案 5 :(得分:1)
尝试其他静态分析仪。我曾经使用过Parasoft C ++ Test,它有一种方便的方法可以根据严重程度过滤警告。
答案 6 :(得分:1)
这是否意味着您在根据自己的需求定制时遇到问题? 正如
“”可自定义分析
Coverity Static Analysis提供了通过修改部署的检查器数量或特定于单个检查器的设置(例如空指针解除引用的阈值)来微调分析的功能。为特定代码块或应用程序配置Coverity的功能允许开发人员选择最适合其应用程序的性能级别,从而获得更准确可靠的结果。 Coverity软件开发工具包允许您通过创建自定义检查器来检测C和C ++代码中的唯一缺陷类型。除了创建用于查找并发性,异常处理和其他关键问题的自定义检查器之外,还可以使用此功能。“” http://www.coverity.com/products/static-analysis.html
答案 7 :(得分:0)
Coverity的典型开箱即用分析配置将倾向于每千行代码提供一到三个缺陷。如果您有数十万个缺陷,并且您的代码行数远远少于1亿行,我可以保证您的分析配置不正确或对您的组织而言不是最理想的。
除了调整分析配置本身,您还可以通过影响确定优先级 - 默认的“高”,“中”和“低”映射应该足以让您开始,直到您了解哪些子类别倾向于对你的应用程序最具破坏性。
第三,如果您的代码库很大(并且不是),则将其细分为组件,以便每个团队或开发人员组只能查看他们直接维护的代码 - 这样可以使更多可管理的工作块处理,它还允许您优先考虑组件(服务器代码中的缺陷比客户端代码中的缺陷,测试代码或第三方代码等更重要)。