价值分析模块和扩展选项

时间:2014-06-20 14:05:34

标签: frama-c

我对价值分析模块的选项和一些扩展选项有一些疑问。

我使用命令:frama-c-gui -val -slevel 100 -plevel 300 -absolute-valid-range 0x00000000-0xffffffff -metrics -metrics-value-cover -scope-def-interproc -main MYMAIN CODE/*.c

  • 在单个文件中,-metrics在函数上为goto提供3 goto-metrics-value-cover是如何计算的?

  • 什么是“覆盖率估计= 100.0%”,157 stmts in analyzed functions, 148 stmts analyzed (94.3%)我得到的值介于80%和100%之间,一开始我认为当我有死代码时得到< 100%,但我有当我得到100%的死代码时,如果分析源文件中的所有函数,我认为得到100%?

  • 我想-scope-def-interproc这意味着我的项目中有死代码,就是这样吗?

  • 使用选项{{1}}我收到32警告(62没有),但在网站上,我们可以阅读(在范围文档中)

      

    因此,用户应仔细检查由值分析发出的警报。

所以我需要验证所有62警告或仅通过此选项获得32警告?

2 个答案:

答案 0 :(得分:2)

  

在单个文件中,-metrics [introduction] 3转到函数[没有任何]

C构造&&||break;可以“规范化”为goto构造。

  

我想在分析的函数中有157个stmts,分析了148个stmts(94.3%),这意味着我的projet上有死代码,是吗?

是。对于值分析可见的输入,157个语句中只有148个可以访问。请注意,例如,如果main()具有参数argcargv,则为这些参数构建的抽象值可能不包含应考虑的所有值。确定这9个语句是否真的无法访问的最佳方法是查看它们(它们在Frama-C的GUI中以红色显示)。

  

使用选项-scope-def-interproc我得到32警告(62没有),但在网站上,我们可以阅读(在范围文档中)

目前还不是很清楚你在问什么。如果您提供了一个包含完整信息(源代码,命令行)的示例,那将有助于您重现步骤并为您阐明发出的消息的含义。如果不可能得到完整的例子,那就制作一个小的,简化的例子:到目前为止,(几乎)不可能用你提供的信息回答你。

答案 1 :(得分:2)

  

什么是"覆盖率估计= 100.0%"我得到了-metrics-value-cover   一个80到100%之间的值,在开始时我认为得到< 100%   我有死代码,但是当我得到100%时,我有死代码,所以我想得到   如果分析源文件中的所有函数,则为100%?

让我们举个例子。

[metrics] Value coverage statistics
      =========================
      Syntactically reachable functions = 3 (out of 3)
      Semantically reached functions = 1
      Coverage estimation = 33.3% 

      Unseen functions (2) =
        <tests/metrics/reach.c>: baz; foo;

第一行Syntactically reachable functions是从main开始可能最终被调用的程序函数数量的过度近似。例如,一个从不采用地址而且从不直接调用的函数不会在这个集合中。

Semantically reached functions是您通过价值分析确实分析的程序函数的数量。

Coverage estimation是这两个数字之间的比率。对于可以访问所有功能的小程序,通常是100%。

Unseen functions是预期会达到的函数列表(语法上),但从未通过Value进行分析。

请注意,这些数字中没有一个是关于指令的,所以你仍然可以获得100%的死代码。