Testing 为什么动态分析不能覆盖程序的所有执行路径?

Testing 为什么动态分析不能覆盖程序的所有执行路径?,testing,code-analysis,static-analysis,dynamic-analysis,Testing,Code Analysis,Static Analysis,Dynamic Analysis,我是程序分析领域的新手,在阅读了该领域的一些资料后,我有一些问题找不到相应的答案 看,如果我实现一个工具:符号执行+具体执行 就像 然后我认为它应该覆盖所有的执行路径,同时保留动态分析功能 我被告知动态分析不能覆盖所有的执行路径,但基本上是为什么?我认为像飞镖这样的技术现在已经相当成熟了 其他的,比如模型检查,理论上保证100%的代码覆盖率…我说的对吗 谁能给我一些帮助吗?谢谢大家! 通过一段代码的路径数与“if”语句的数量成指数关系。例如,如果您有这样一段代码: if (a) { // d

我是程序分析领域的新手,在阅读了该领域的一些资料后,我有一些问题找不到相应的答案

看,如果我实现一个工具:符号执行+具体执行 就像

然后我认为它应该覆盖所有的执行路径,同时保留动态分析功能

我被告知动态分析不能覆盖所有的执行路径,但基本上是为什么?我认为像飞镖这样的技术现在已经相当成熟了

其他的,比如模型检查,理论上保证100%的代码覆盖率…我说的对吗


谁能给我一些帮助吗?谢谢大家!

通过一段代码的路径数与“if”语句的数量成指数关系。例如,如果您有这样一段代码:

if (a) {
  // do something
}
if (b) {
  // do something
}
...
if (z) {
  // do something
}

然后根据26个布尔变量的值,有67108864条可能的代码路径。

6700万条路径还不够充分。这就是原因。然而,指数结果来自于路径独立的假设。实际上并非如此。有些情况阻止了另一些情况的发生;因此,真正的问题是可行路径的数量,而不是独立路径的数量。我在90年代所看到的研究表明,大型项目可能有数百万条可行的路径,这些路径是可以处理的。我们不擅长的是列举可行的路径。是的,这仍然会失控。