模型检测–例子内容摘要:

Translator VERDS Model Checker Negative Conclusion Specification Error Trace 反例分析 以下输入产生不正确结果 1 3 5 7 9 11 13 15 17 19 0 2 4 6 8 10 12 14 16 18 4 不正确运行 修正后的例子 : ISR2 include /**************************************************/ int in()。 int isr(int x,int k)。 int isk(int n,int k)。 /**************************************************/ int main() { int n=0。 int m=0。 int k=1。 printf(INFO: system is now active\n)。 while (1) { n=in()。 k=isk(n,k)。 m=isr(n,k)。 printf(RESULT: %i\n\n,m)。 } } /**************************************************/ int isr(int x,int k) { int y1=0。 int y2=0。 int y3=0。 y1=0。 y2=1。 y3=1。 if (x==2||(x2amp。 amp。 k==20)) x=x1。 while (y3=x) { y1=y1+1。 y2=y2+2。 y3=y3+y2。 } return y1。 } /**************************************************/ int isk(int n,int k) { if (k!=20) { if (k!=n) k=21。 else if (k==19) k=0。 else k=k+2。 } else { k=21。 } return k。 } /**************************************************/ int in() { char c=0。 int k=0。 while (1) { k=0。 putc(39。 N39。 ,stdout)。 putc(39。 :39。 ,stdout)。 putc(9,stdout)。 c=getc(stdin)。 if (c==39。 \n39。 ) { printf(INFO: the input must be 1 or 2 digits\n\n)。 continue。 } if (c39。 039。 ||c39。 939。 ) { while (1) { c=getc(stdin)。 if (c==39。 \n39。 ) break。 } printf(INFO: the input must be 1 or 2 digits\n\n)。 continue。 } k=c39。 039。 c=getc(stdin)。 if (c==39。 \n39。 ) { return k。 } if (c39。 039。 ||c39。 939。 ) { while (1) { c=getc(stdin)。 if (c==39。 \n39。 ) break。 } printf(INFO: the input must be 1 or 2 digits\n\n)。 continue。 } if (k2) k=k*10+(c39。 039。 )。 else if (k==2amp。 amp。 c==39。 039。 ) k=20。 else { while (1) { c=getc(stdin)。 if (c==39。 \n39。 ) break。 } printf(INFO: the input number must be in {0,...,20}\n\n )。 continue。 } c=getc(stdin)。 if (c!=39。 \n39。 ) { while (1) { c=getc(stdin)。 if (c==39。 \n39。 ) break。 } printf(INFO: the input must be 1 or 2 digits\n\n)。 continue。 } return k。 } } ./isr2 INFO: system is now active N: 2 RESULT: 1 N: 10 RESULT: 3 N: 20 RESULT: 4 N: 30 INFO: the input number must be in {0,...,20} N: 5 RESULT: 2 N: 模型检测 ./verds –c –sp 验证结果 验证过程 C Program Model Automatic Translator VERDS Model Checker Specification Positive Conclusion 模型检测的缺点与优点 • 缺点 –可直接验证的程序规模小 –可直接验证的程序结构简单 • 优点 : –自动验证 –对不正确的程序可生成诊断信息 形式验证 • 推理验证 • 模型检测 • 推理验证与模型检测相结合 推理验证 +模型检测 include /**************************************************/ int in()。 int isr(int x,int k)。 int isk(int n,int k)。 /**************************************************/ int main() { int n=0。 int m=0。 int k=1。 printf(INFO: system is now active\n)。 while (1) { n=in()。 k=isk(n,k)。 m=isr(n,k)。 printf(RESULT: %i\n\n,m)。 } } /**************************************************/ int isr(int x,int k) { int y1=0。 int y2=0。 int y3=0。 y1=0。 y2=1。 y3=1。 if (x==2||(x2amp。 amp。 k==20)) x=x1。 while (y3=x) { y1=y1+1。 y2=y2+2。 y3=y3+y2。 } return y1。 } /**************************************************/ int isk(int n,int k) { if (k!=20) { if (k!=n) k=21。 else if (k==19) k=0。 else k=k+2。 } else { k=21。 } return k。 } /**************************************************/ int in() { char c=0。 int k=0。 while (1) { k=0。 putc(39。 N39。 ,stdout)。 putc(39。 :39。 ,stdout)。 putc(9,stdout)。 c=getc(stdin)。 if (c==39。 \n。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。