根据David Brumley的控制流完整性和软件故障隔离(PPT幻灯片),
在下面的语句中,x总是8,因为即使对路径敏感的分析,x=7的路径也是不可能实现的。
为什么会这样呢?是因为在分析过程中分析不能预先确定n,a,b和c的值吗?或者是因为计算机无法计算出任何解决方案?
如果(a^n+ b^n = c^n && n>2 && a>0 & b>0 & c>0) x= 7;/unrealizable路径/c>0
X= 8;
发布于 2020-04-29 14:07:45
一般来说,确定程序中的哪一条路径,以及哪一条--不--的任务是无法确定的。很有可能,像在您的示例中一样,一个特定的表达式可以被证明具有特定的值。然而,“一般”和“不可判定”这两个词表明,您不能编写一种算法,可以每次计算值。
此时,分析算法可以是乐观的,也可以是悲观的。乐观的人可以选择8并且很好--它认为在运行时x可能会得到这个值。它还可以选择7 --“谁知道,也许,x会是7”。但是,如果分析必须是健全的,并且它不能确定条件的值,那么它应该假设第一个分支可以在一个执行过程中得到,而第二个分支可以在另一个执行期间进行,所以x可以是7或8。
换句话说,在稳健性和精确性之间有一种权衡。或者,实际上,在稳健性、精确性和可判定性之间。后一个属性告诉分析是否总是终止。现在,你必须选择所需要的:
x的确切值,并且是完全精确的。https://stackoverflow.com/questions/61485578
复制相似问题