假阴性当使用Polyspace代码验证

18视图(30天)
你好。
我是一个初学者Polyspace工具感兴趣。
在63页的Polyspace®代码验证™入门指南,代码验证说没有假阴性。
然而,由于静态分析NIST朱丽叶测试套件的一部分使用Polyspace C / c++代码验证,假阴性存在于以下CWE ID。
  1. CWE 126(缓冲罩上)
  2. CWE 561(死代码)
  3. CWE 674(不受控制的递归)
  4. CWE 835(循环与遥不可及的退出条件(无限循环))
我分析了代码,但是我问,因为我不明白为什么假阴性。
CWE的例子,561真阳性(代码验证检测它。)
空白CWE561_Dead_Code__return_before_code_01_bad ()
{
返回;
/ *缺陷:代码后返回* /
printLine (“Hello”);
}
CWE的例子561假阴性(代码验证不能检测到)
静态孔隙helperBad ()
{
printLine (“helperBad () ");
}
没有叫helperBad函数。
1评论
马特·罗兹
马特·罗兹 2020年5月11日
嗨Hongjun,
死代码是一个非常模糊的术语。你可以有逻辑unreacheable代码(这是主要的检查代码验证)和未收功能(功能代码库中不被任何东西)。代码验证将会发现,没有假阴性, 范围内的假设提供了证据
在这个第二个例子的例子中,你所拥有的 可能 是一个未调用的函数,如果它被称为在代码库的其他地方。这个实例可以指向一个不正确的行为,但是所有的代码实际上是逻辑上可及。
对于这种问题,如果它对你很重要,你是更好的启发式搜索来找到所有的情况下,字符串的函数调用。困难的方面是,不知道您的需求,是不可能知道是否故意只有一个字符串文字参照一个函数,或者有一个返回值包含在字符串。上下文可能会提供一些线索。在这个做作的例子中,我将问题的有效性证明工具,声称它发现这是死代码。

登录置评。

接受的答案

Anirban
Anirban 2020年5月7日
嗨Hongjun,
对你所提供的两个具体的例子,你必须打开检查 函数不叫 函数不可以 。通常用户不感兴趣这两个检查,例如,因为它们是运行代码验证单位和一些功能可能未收在一个单位但最终会从另一个单位。这两个检查默认是禁用的。让他们使用 这个选项
相关的所有选项来优化代码验证检查,看到的部分 检查行为 验证假设
4评论
HONGJUN崔
HONGJUN崔 2020年5月18日
嗨Anirban,
对不起我没看到它是由不指定主函数入口点。
谢谢你的解释!

登录置评。

更多的答案(0)

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的