Debugging 健全和完整

Debugging 健全和完整,debugging,math,logic,analysis,Debugging,Math,Logic,Analysis,我正在上一堂软件分析课,有人问我以下问题。它与编程逻辑有关,因此我将其发布在这里。(我还将此发布到数学堆栈溢出站点。): 假设阴影部分表示不包含被零除错误的所有程序,黑色矩形内的未阴影部分表示包含此类错误的所有程序 设A1、A2和A3为检查除零误差的不同程序分析。每个分析要么接受(即声明它没有被零除的错误),要么拒绝(即声明给定程序中至少存在一个被零除的错误) 对于每个分析,该分析接受的程序包含在相应的椭圆内,而该分析拒绝的程序包含在相应的椭圆外 关于问题4,假设我们设计了一个分析A4,其在输

我正在上一堂软件分析课,有人问我以下问题。它与编程逻辑有关,因此我将其发布在这里。(我还将此发布到数学堆栈溢出站点。):

假设阴影部分表示不包含被零除错误的所有程序,黑色矩形内的未阴影部分表示包含此类错误的所有程序

设A1、A2和A3为检查除零误差的不同程序分析。每个分析要么接受(即声明它没有被零除的错误),要么拒绝(即声明给定程序中至少存在一个被零除的错误)

对于每个分析,该分析接受的程序包含在相应的椭圆内,而该分析拒绝的程序包含在相应的椭圆外

关于问题4,假设我们设计了一个分析A4,其在输入程序p上的行为如下:

if (A1 rejects P) reject P;
else if (A3 accepts P) accept P; 
else run forever; 
A4声音好吗?A4完整吗


我选择A4是因为A1接受有效的程序,拒绝无效的程序。这是正确的。我说它是不完整的,因为A4不接受那些确实有效的程序,并且被标记为错误的程序。想知道有没有人能帮我解释一下?提前谢谢

我认为这将是完整的。假设您有一个程序出现DBZ错误,我们想测试一下。把那个程序发给A1。A1包含有DBZ和没有DBZ的两个程序的空间。所以它可以被A1接受,也可以被A1拒绝。如果它被A1拒绝,那么我们可以因为有DBZ错误而拒绝该程序。如果A1没有拒绝,则转到A3,它只接受没有DBZ错误的程序。请记住,这适用于A1未拒绝的程序。如果程序被A3接受,那么我们知道它没有DBZ错误。如果它在这里也被拒绝,我们知道它包含DBZ错误

本质上,仅使用A1无法完全确定是否接受该程序。但是由于A3只包含可以接受的程序空间,如果它在A1和A3中被接受,我们可以推断它是一个有效的程序

从这个解释看来,如果一个程序是有效的,那么它将被A3接受,即使A1没有发现该程序是无效的,因为A3只接受有效的程序,这与您所说的A4不能完成的原因相反


让我知道我是否应该澄清这个答案中的一些要点

嗨,Edeki,谢谢你的回复。我相信有一个集合是有效的,但不包括在集合(A1拒绝)和集合(A3接受)中——这就是集合(没有DBZ错误的程序减去A3)。我相信这一套的存在使A4不完整???根据图表,不认为这是可能的。由于A3仅接受基于图表的有效程序(完全着色),如果A1拒绝但A3接受,则它必须有效,因为A3没有空白。根据图表,您所引用的集合为空。程序不必终止。它能不能永远在一个无限循环中运行,无论哪种方式都不会返回答案?A1和A3不包含整个程序空间,这是我的意思。A3只是实际有效程序空间的子集。例如,如果一个程序在A3之外,但在阴影区域内,并且从不更改。然后程序就再也不会回来了。接下来,我的教授解释说,分析的“可靠性”和“完整性”是基于分析的类型,而不是分析的最终结果,我认为分析是基于这种类型。谢谢@Edeki,你知道了吗?我投票结束这个问题,因为它属于scicomp.stackexchange.com