这类工具在实际应用中如何工作?它们真的能找到实际存在的漏洞吗?它们是否有助于初级程序员学习?
值得花费精力去使用它们吗?
静态代码分析几乎总是值得做的。对于现有的代码库而言,问题在于它可能会报告太多的错误,使其开箱即用不太实用。
我曾经参与过一个项目,在编译器中有100,000多个警告...在那种代码库上运行Lint工具毫无意义。
正确使用Lint工具意味着购买更好的流程(这是一件好事)。我最好的工作之一是在一个研究实验室工作,我们不允许提交带有警告的代码。
所以,是的,工具是值得的...从长远来看。短期内,将编译器警告调到最高级别,看看它会报告什么。如果代码是“干净”的,那么现在就是查看Lint工具的时候了。如果代码有很多警告...优先处理并修复它们。一旦代码没有(或至少非常少)警告,那么再考虑使用Lint工具。
因此,Lint工具不能帮助解决糟糕的代码库问题,但一旦你拥有了良好的代码库,它可以帮助你保持代码库的良好状态。
编辑:
在这个存在100,000多个警告的项目中,它被分解成大约60个Visual Studio项目。每当一个项目删除了所有警告后,就会将其更改为警告是错误,并防止在已清理的项目中添加新警告(或者让我的同事在开发人员提交代码之前就有权利大声吼叫 :-))。
这确实有帮助。我建议您试用一下,并将其运行到您认为被忽视的代码库的一部分中。这些工具会产生很多误报。一旦您处理完这些,您可能会发现一个或两个缓冲区溢出错误,这可以在不久的将来避免很多麻烦。此外,请至少尝试两三种不同的工具(也包括一些开源工具)。
这些工具确实有帮助。对于C开发人员来说,lint一直是一个很好的工具。
但我有一个反对意见,它们都是批处理进程,需要在你写完大量代码后运行,可能会生成很多消息。
我认为更好的方法是将其构建到你的IDE中,并在你编写代码时指出问题,以便你可以立即进行更正。不要让这些问题首先进入代码库。
这就是Java的FindBugs静态分析工具和IntelliJ的Inspector之间的区别。我非常喜欢后者。
我猜这取决于你的编程风格。如果你主要编写C代码(偶尔使用C++功能),那么这些工具可能会有所帮助(例如内存管理,缓冲区溢出等)。但是,如果你正在使用更复杂的C++功能,则当尝试解析源代码时,这些工具可能会感到困惑(或者仅仅因为C++设施通常更安全而无法找到许多问题)。