第7章 软件验证技术(7.9-7.10)ppt课件_第1页
第7章 软件验证技术(7.9-7.10)ppt课件_第2页
第7章 软件验证技术(7.9-7.10)ppt课件_第3页
第7章 软件验证技术(7.9-7.10)ppt课件_第4页
第7章 软件验证技术(7.9-7.10)ppt课件_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.,第7章软件验证技术(第7.9-7.10节),.,主要内容,程序正确性证明调试,.,7.9程序正确性证明,测试可以帮助人们发现程序中的错误,但它却不能证明程序中没有错误。早在50年代,图林(Turing)等人就开始注意并开展了程序正确性证明这方面的早期研究工作;60年代后半期,Floyd和Hoare等人提出了不变式断言法和公理化方法,使得这一研究进入了一个蓬勃发展的新阶段;在此之后,出现了许多不同的程序正确性证明方法。,.,7.9.1程序正确性定义,所谓一段程序是正确的,是指这段程序能准确无误地完成预定的功能。或者说,对任何一组允许的输入,程序执行后能得到一组相应的正确的输出。在研究程序正确性证明时,将一段程序的输入和输出应满足的条件的逻辑关系式分别称为此段程序的输入断言(或初始断言、前置断言)和输出断言(或结果断言、后置断言),通常用谓词(x)和(x,z)表示,其中x和z分别表示输入和输出数据(可以是一个或一组变量)。,.,例子,unsignedpower(unsignedx,unsignedy)unsignedz;z=1;while(x!=0)z=z*y;x=x-1;returnz;则(x,y):x0,y0;(x,y,z):z=yx。,.,程序正确性三种类型,程序的部分正确性程序的终止性程序的完全正确性,.,程序的部分正确性,若每一个使得(x)为真且程序计算终止的输入数据x,(x,p(x)都为真,则称程序p关于和是部分正确的。这里p(x)表示与输入数据x相对应的程序p的输出数据。,.,程序的终止性,若每一个使得(x)为真的输入数据x,程序计算都终止,则称程序P对是终止的。,.,程序的完全正确性,若每一个使得(x)为真的输入数据x,程序计算都终止且(x,P(x)为真,则称程序P关于和是完全正确的。显然,一个程序是完全正确的等价于该程序是部分正确的同时又是终止的。,.,程序正确性证明方法,FLOYD的不变式断言法(证明部分正确性)FLOYD良序集方法(证明终止性)Hoare的公理化方法(证明部分正确性)及其推广(证明完全正确性)Dijstra的弱谓词置换法(证明完全正确性),.,7.9.2Floyd不变式断言法,建立断言一个程序除了需要建立输入/输出断言外,如程序中出现循环,还要建立相应于该循环的不变式断言,称之为循环不变式断言。所谓循环不变式断言,是在循环中选一个断点,在断点处建立一个适当的断言,使循环每次执行到断点时,断言都为真。建立检验条件所谓检验条件就是程序运行通过某通路时应满足的条件。证明检验条件证明上面给定的所有检验条件,如果每一条通路的检验条件都为真,则该程序是部分正确的。,.,例子,设x1,x2是正整数,求最大公约数Z=gcd(x1,x2),其流程图如下图所示。试证明它的部分正确性。,.,建立断言,输入断言(x):x10x20输出断言(x,z):z=gcd(x1,x2)在断点B建立不变式断言P(x,y):x10x20y10y20gcd(y1,y2)=gcd(x1,x2),这里,约定所有变量均为整型,且x表示(x1,x2),y表示(y1,y2)。,.,建立检验条件,选择B为断点,则程序的执行通路为:Path1:ABPath2:BDBPath3:BEBPath4:BGC对每条通路可建立相应的检验条件。,.,检验条件表示,设通路i的输入/输出断言分别为i(x,y)和i(x,y),而通过此通路的条件为Ri(x,y),通过此通路后y的值变为ri(x,y),则应有检验条件:i(x,y)Ri(x,y)i(x,ri(x,y)其中,y表示程序执行中的一组中间变量,x是输入量。符号表示蕴涵逻辑关系。,.,Path1检验条件,1(x,y)为(x);R1(x,y)恒真,即无条件通过;1(x,y)为P(x,y);通过此通路后y的值取值x。故有:(x)P(x,x),即x10x20x10x20x10x20gcd(x1,x2)=gcd(x1,x2),其它路径的检验条件(略),.,证明检验条件,对任意正整数y1和y2有如下关系:1若y1y2则gcd(y1,y2)=gcd(y1-y2,y2);2若y2y1则gcd(y1,y2)=gcd(y1,y2-y1);3若y1=y2则gcd(y1,y2)=y1=y2。,对于Path1,其检验条件显然是成立的;,其它(略),.,7.9.3Floyd良序集方法,如果一个非空集合W关于二元关系-a1-a2-其中a0,a1,a2,.W。,.,证明步骤,设程序P的输入断言为(x),良序集法证明P关于(x)是终止的证明步骤(1)选取一个点集合截断程序的各个循环部分,在每一个截断点i处建立一个中间断言qi(x,y)。(2)选取一个良序集(W,-Ej(x,r(x,y)显然,如果所有的终止条件成立,则程序P一定终止。,.,例子,对任一给定的自然数X,计算Z=(即Z等于x的平方根取整)的程序流程图如图所示。,.,截断程序的循环部分,该程序只有一个循环,在B点将循环断开,并建立断点断言:q(x,y):y30y2x,.,选取良序集,选取良序集为(N,0,故有x-y2X-(y2+y3)且均属于集合(N,)中。至此,也就证明了该程序的终止性。,.,7.9.4程序正确性证明的局限性,经验表明,程序证明实现的困难在于寻找程序的循环结构所蕴涵的循环不变式。只有当程序“做什么”的说明能以简单的函数给出时,才能使用程序正确性证明技术。而大型问题就难以给出这种说明。因此,在实际应用中还存在一些问题。所依赖的数学基础太强,用起来不够自然,数学素质不强的人很难接受。另外,证明本身也不能保证无错。,.,7.10调试,调试,又称纠错或排错,是程序测试后开始的工作,主要任务是依据测试发现的错误迹象确定错误位置和原因,并加以改正。调试活动由两部分组成:确定程序中可疑错误的确切性质和位置。对程序(设计,编码)进行修改,排除这个错误。调试是通过现象,找出原因的一个思维分析的过程。,.,7.10.1调试的步骤,从错误的外部表现形式入手,确定程序中出错位置;研究有关部分的程序,找出错误的内在原因;修改设计和代码,以排除这个错误;重复进行暴露了这个错误的原始测试或某些有关测试,以确认该错误是否被排除;是否引进了新的错误。如果所做的修正无效,则撤消这次改动,重复上述过程,直到找到一个有效的解决办法为止。,.,调试难点,错误的症状和引起错误的原因可能相隔很远,尤其是在高度耦合的程序结构中;错误症状可能在另一错误被纠正后消失或暂时性的消失;错误症状可能实际并不是由错误引起的(如舍入误差);错误症状可能是由不易跟踪的人工操作引起的;错误症状可能是和时间相关的,而不是处理问题;很难再现产生错误症状的输入条件;错误症状可能时有时无(如在软硬件结合的嵌入式系统中常常遇到);错误症状可能是由于把任务分布在若干不同处理器上运行而造成。,.,7.10.2调试的策略之一:猜测法,该方法通过分析错误症状,根据以往经验,辅助使用已有的计算机工具,猜测错误的原因并进行定位。可以通过“在程序中插入打印语句”、“使用注释或GOTO语句运行部分程序”或“调试工具”等来实现该方法。,.,跟踪法,先分析错误征兆,确定最先发现“症状”的位置。然后,人工沿程序的控制流程,向回追踪源程序代码,直到找到错误根源或确定错误产生的范围。跟踪法对于小程序很有效,往往能把错误范围缩小到程序中的一小段代码;仔细分析这段代码不难确定出错的准确位置。但对于大程序,由于回溯的路径数目较多,回溯会变得很困难。,.,演绎法,演绎法排错是测试人员首先根据已有的测试用例,设想及枚举出所有可能出错的原因做为假设;然后再用原始测试数据或新的测试,从中逐个排除不可能正确的假设;最后,再用测试数据验证余下的假设确是出错的原因。,.,归纳法,归纳法排错的基本思想是:从一些线索(错误征兆)着手,通过分析它们之间的关系来找出错误。,.,7.10.3调试的原则,综合起来,在进行调试

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论