我对价值分析模块的选项和一些扩展选项有一些疑问。
我使用命令: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警告?
答案 0 :(得分:2)
在单个文件中,-metrics [introduction] 3转到函数[没有任何]
C构造&&
,||
和break;
可以“规范化”为goto构造。
我想在分析的函数中有157个stmts,分析了148个stmts(94.3%),这意味着我的projet上有死代码,是吗?
是。对于值分析可见的输入,157个语句中只有148个可以访问。请注意,例如,如果main()
具有参数argc
和argv
,则为这些参数构建的抽象值可能不包含应考虑的所有值。确定这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%的死代码。