5

我们计划使用 Splint 作为 C 代码库的代码分析器。但我们之前从未尝试过 Splint 工具,因此我们希望您能就它的优缺点提供意见。

4

5 回答 5

10

Lint 工具对于查找代码审查容易遗漏的常见问题和错误很有用。我的观点是,在进行静态代码分析时,您没有什么可失去的。唯一的缺点是您可能会收到很多可能不重要的误报或警告(即编码风格推荐)。你只需要培养良好的过滤技能。静态分析器也可能无法捕获所有内容,但总比没有好。

这是您可能感兴趣的 SANS 研究所的白皮书:http: //www.sans.org/reading_room/whitepapers/securecode/secure-software-development-code-analysis-tools_389

于 2010-08-09T09:53:18.260 回答
3

Splint擅长使您的代码更惯用(因此更易于阅读,可供各种编译器解析、更便携且更易于重构)。Splint 可以发现细微的错误,例如整数和浮点数之间的隐式转换。Splint 跟踪内存泄漏和其他安全漏洞。

试试看:splint hello.c

于 2011-08-01T19:24:38.357 回答
3

阅读这篇博文和这些幻灯片,快速了解它可以为您做什么。

于 2010-08-09T11:08:32.793 回答
1

正如 waffleman 所建议的那样,静态分析仪确实会产生很多误报。我发现Prevent 提供比Sparrow 更好的警报。这些是我们用于静态分析的两个。

典型的错误警报和良好警报的示例是:

bar (char **output) 
{
  *output = malloc(100);
}
foo()
{
  char *output=NULL;
  bar(&output)   
}

在函数栏中,它会报告指针输出的内存泄漏。在函数 foo 中,它在调用函数 bar 时报告 NULL 取消引用。但尽管如此,它还是在数百个误报之间找到真正的警报之间做出选择。

因此,我们可以发现在代码审查期间可能遗漏的内存泄漏。预防许可证很昂贵,一旦警报被标记为假,它就不会出现在后续分析中。因此,您必须确定 Splint 是否也这样做。

于 2010-08-09T10:58:44.337 回答
0

该工具会寻找可能是错误的模式。优点是该工具可能会发现潜在的错误,缺点是它也可能会发现一大堆误报。

于 2010-08-09T09:53:31.940 回答