- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第三课 程序设计方法学基本理论 ——程序正确性证明 什么样的程序才是正确的? 如何来保证程序是正确的? 程序正确性概述 关于程序正确性的认识 根据问题的特性和软件所要实现的 功能,选择一些具有代表性的数据,设计测试用例。通过用例程序执行,去发现被测试程序的错误。 什么样的程序才是正确的? “测试”或“调试”方法 采用“测试”方法可以发现程序中的错误,但却不能证明程序中没有错误! 因此,为保证程序的正确性,必须从理论上研究有关“程序正确性证明”的方法。 程序正确性证明发展历程 20世纪50年代 Turing开始研究 1967年,Floyd和Naur提出不变式断言法 1969年,Hoare提出公理化方法 1975年,Dijkstra提出最弱前置谓词和程序推导方法,解决了断言构造难的问题,可从程序规约推导出正确程序,使正确性证明变得实用。 程序正确性理论是十分活跃的课题,不仅可 以证明顺序程序的正确性,而且还可以证明非确 定性程序,以及并行程序的正确性。 程序正确性理论 程序设计的一般过程 程序正确性理论 程序功能的精确描述 1、程序规约:对程序所实现功能的精确描述, 由程序的前置断言和后置断言两部分组成。 2、前置断言:程序执行前的输入应满足的条件, 又称为输入断言。 3、后置断言:程序执行后的输出应满足的条件, 又称为输出断言。 程序设计过程:问题 程序规约 程序 程序规约的基本分类 非形式化程序规约 非形式化程序规约采用自然语言描述程序功能,简单、方便,但存在二义性,因此,不利于程序的正确性证明。 形式化程序规约 采用数学化的语言描述程序功能,描述精确,无二义性,便于程序的正确性证明。 程序规约的实例(1/2) 在书写程序规约时,使用Q表示前置断言,R表示后置断言,S表示问题求解的实现程序。在前置断言Q之前,还必须给出Q和R中所出现的标识符的必要说明。 例1:求数组b[0 : n-1]中所有元素的最大值。 [in n:integer; in b[0:n-1]:array of integer; out y:integer] Q: {n ≥ 1} S R:{y = MAX(i: 0 ≤ i < n; b[i])} 例2:求两个非负整数的最大公约数。 [in a,b :integer; out y:integer] Q: {a ≥ 0 ∧ b ≥ 0} S R:{y = MAX(i: 1 ≤ i ≤min(a,b) ∧ (a mod i = 0) ∧ (b mod i = 0): i)} 程序规约的实例(2/2) 程序正确性定义(1/3) 衡量一个程序的正确性,主要看程序是否实现了问题所要求的功能。若程序实现了问题所要求的功能,则称它为正确的,否则是不正确的。 程序设计过程:问题 程序规约 程序 对程序的正确性理解,可以分为两个层次: 从广义来说,一个程序的正确性取决于该程序满足问题实际需求的程度。 从狭义而言,如果一个程序满足了它的程序规约就是正确的。 程序规约Q{S}R 是一个逻辑表达式,其取值为真或假,其中取值为真的含义是指:给定一段程序S,若程序开始执行之前Q为真,S的执行将终止,且终止时R为真,则称为 “程序S,关于前置断言Q和后置断言R是完全正确的”。 程序正确性定义(2/3) 部分正确:若对于每个使得Q(i)为真,并且程序S计算终止的输入信息i,R(i,S(i))都为真,则称程序S关于Q和R是部分正确的。 程序终止:若对于每个使得Q(i)为真的输入i,程序S的计算都终止,则称程序S关于Q是终止的。 完全正确:若对于每个使得Q(i)为真,并且程序S的计算都将终止的输入信息i,R(i,S(i))都为真,则称程序S关于Q和R是完全正确的。 一个程序的完全正确,等价于该程序是部分正确,同时又是终止的。 程序正确性定义(3/3) (1)证明部分正确性的方法 A. Floyd的不变式断言法 B. Manna的子目标断言法 C. Hoare的公理化方法 (2)终止性证明的方法 A. Floyd的良序集方法 B.
原创力文档


文档评论(0)