PM讲义-第3章 程序规范及其正确性证明简介.pptVIP

PM讲义-第3章 程序规范及其正确性证明简介.ppt

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PM讲义-第3章 程序规范及其正确性证明简介

第三章 程序规范及其 正确性证明简介 程序规范与程序 程序规范 在进行程序设计之前,第一步必须明确“做什么”。所谓做什么是指对欲求解的问题的描述。关于“做什么”的描述通常称为程序规范(PS-Program Specification)。 这里的PS仅指功能的描述,不包括诸如处理速度、执行时间、响应周期等与时间有关性能指标。PS是软件工程的需求分析的结果。 PS的含义是映射,是输入到输出的映射,它反映了程序对数据的作用。 程序 程序也是映射,是输入到计算的映射,即每一输入都对应一串计算步骤。 程序规范与程序的关系 给出规范后,程序开发就是建立一个程序,使之计算刚好能实现规范的映射; 程序验证是证明程序正确地实现了规范,即证明规范和已有程序之间的一致性 规范 程序 输入 输出 映射 输入 计算 映射 程序规范的描述 规范必须用语言描述,该语言称为规范语言。 描述一个复杂问题的输入和输出之间的关系是困难的,目前对规范语言的模式尚无定论。 自然语言 直观,易于理解 不够准确,存在二义性 符号语言 可以精确地描述问题的输入和输出的关系 但是规范文本比较繁琐 一个合适的程序规范语言 应满足的基本条件 应当为描述者和使用者所直接理解 应当有严格的数学语义 应当与形式方法的构造理论和程序设计语言协调 应当有较强的表达能力和通用性 断言与规范 断言就是关于事物性质的陈述。 这个陈述可真可假。如“三是个质数” 断言可以作为程序规范描述语言 用断言作为程序的注解或作为正确性命题的一部分时,常用大括号括起来。 断言与规范 例1:写一个计算商和余数的程序 程序规范:“设被除数x1是个非负整数,除数x2是个正整数,计算x1除以X2的商y1和余数y2” 又描述为: “初始条件:{x1=0 and x20} 计算满足{x1=x2*y1+y2 and 0=y2x2}的整数y1和y2” 断言与规范 例:求商余程序 {x1=0 and x20} y2:=x1; y1:=0; {0=y2 and 0x2 and x1=x2*y1+y2} while y2=x2 do begin {0=y2 and 0x2=y2 and x1=x2*y1+y2} y2 :=y2-x2; y1:=y1+1; {0=y2 and 0x2 and x1=x2*y1+y2} end; {x1=x2*y1+y2 and 0=y2x2} 断言与规范 一般地,一个程序规范可表示为由两个谓词构成的二元组(P,Q)。其中, P 描述了所欲求解的问题必须满足的初始条件,它限定了输入参数的性质,称为初始断言或前置断言; Q 描述了问题的最终解必须满足的性质,称为结果断言或后置断言。 断言与规范 程序断言是对程序的性质的陈述 最重要的一个程序断言为:{P} S {Q} 其中,(P,Q)是程序S的程序规范 S是一个程序(或语句) 断言{P} S {Q}称为S关于(P,Q)的正确性断言 若,S开始执行时P为真 则,S的执行必终止,且终止时Q为真 断言与规范 问题: 如何构造断言使他们能准确地反映不同位置上程序的性质? 有了断言,如何证明他们的正确性? 能否有准则,可以从规范(P,Q)构造出程序S,使{P} S {Q}为真。 程序断言的进一步说明 说明 在给出规范描述(P,Q)时,必须指明哪些量是可变的,哪些是不可变的。如果是可变的,不要时对前者还需指明其变化方式。 输入参数 在程序执行前从外部获得值,但在程序执行中,其值始终保持不变的变量。一般用以x开头的标识符表示。 输出变量 其值随程序的执行而不断变化的变量。一般以y开头的变量,或不以x和u开头的变量标识。 辅助变量 为了描述程序变量取值变化方式而因入的变量。这些变量不得在程序中出现,用以u开头的变量表示。 断言与规范(举例) 例1. 编写一个程序Swap(y1,y2) 功能是把y1,y2两变量的值互换。 程序规范: ({y1=u1∧ y2=u2},{y1=u2∧y2=u1}) 断言与规范(举例) 例2: 对数组b[m:n]进行排序的程序。功能是把数组b[m:n]各元素的值从小到大排列起来,使得最后的数组满足b[i] ≤b[i+1],i=m,…,n-1。 规范: P:{m ≤n ∧b[m:n]=u[m:n]} Q:{m ≤n ∧perm(b[m:n],u[m:n]) ∧ (i: m ≤ in : b[i] ≤b[i+1])} 其中, u[m:n]代表b的任意可能初值; perm(b[m:n],u[m:n]) 表示b是u的一个置换。 程序的非形式化正确性证明简介 程序正确性断言 {P}

文档评论(0)

asd522513656 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档