我们计划将Splint用作C代码库的代码分析器。但我们之前从未尝试过Splint工具,因此我们希望您对其进行改进,利弊。
答案 0 :(得分:9)
Lint工具可用于查找代码审查可能会遗漏的常见问题和错误。我的观点是,在进行静态代码分析时,您没有什么可失去的。唯一的缺点是你可能会得到许多可能不重要的误报或警告(即编码风格推荐)。你只需要培养良好的过滤技巧。静态分析仪也可能无法捕捉到所有内容,但嘿,它总比没有好。
以下是您可能感兴趣的SANS研究所的白皮书: http://www.sans.org/reading_room/whitepapers/securecode/secure-software-development-code-analysis-tools_389
答案 1 :(得分:2)
阅读this blog post和these slides,快速了解它可以为您做些什么。
答案 2 :(得分:2)
Splint擅长使您的代码更具惯用性(因此更容易阅读,因为各种编译器可以解析,更便于移植,更容易重构)。 Splint可以找到微妙的错误,例如int和浮点之间的隐式转换。 Splint追踪内存泄漏和其他安全漏洞。
试一试:splint hello.c
。
答案 3 :(得分:1)
华夫曼建议静态分析仪确实会产生大量误报。我发现Prevent比Sparrow提供更好的警报。这些是我们用于静态分析的两个。
典型的误报和良好警报的一个例子是:
bar (char **output)
{
*output = malloc(100);
}
foo()
{
char *output=NULL;
bar(&output)
}
在功能栏中,它会报告指针输出的内存泄漏。在函数foo中,它在调用函数栏时报告NULL取消引用。但它仍然可以在100次误报之间找到真正的警报。
因此,我们可以找到代码审查期间可能遗漏的内存泄漏。防止许可证是昂贵的,一旦警报被标记为假,它就不会出现在后续分析中。因此,您必须找到Splint是否也这样做。
答案 4 :(得分:0)
该工具会查找可能出错的模式。优点是该工具可能会发现潜在的错误,缺点是它可能会发现一大堆误报。