- 1、本文档共62页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
程序正确性证明1
主要内容 程序正确性简介 程序测试 程序正确性证明 内容线索 程序正确性简介 程序测试 程序正确性证明 程序的正确性 所谓一段程序是正确的,是指这段程序能准确无误地完成编写者所期望赋予它的功能。 或者说,对任何一组允许的输入信息,程序执行后能得到一组和这组输入信息相对应的正确的输出信息。 通俗地说,“做了它该做的事,没有做它不该做的事” 程序正确性的严格定义分为三种类型 部分正确性 终止性 完全正确性 如何保证程序的正确性 要求 1、从编程时就应该尽量地避免和减少错误的发生 2、当程序编好后要尽量找出错误,纠正错误 避免错误的方法 1、程序的结构要简单 2、采用标准的软件设计工具、标准的算法手册以及有效的程序设计方法 发现错误的方法 1、利用测试工具 2、利用程序的验证系统 内容线索 程序正确性简介 程序测试 程序正确性证明 程序测试 测试是程序的执行过程,目的在于发现错误。 一个好的测试用例在于能发现至今未发现的错误; 一个成功的测试是发现了至今未发现的错误的测试。 测试的原则 1. 应当 “尽早地和不断地进行软件测试” 。 2. 测试用例应由测试输入数据和对应的预期输出结果组成。 3. 程序员应避免检查自己的程序。 4. 在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。 5. 充分注意测试中的群集现象。即测试后程序中残存的错误数目与该程序中已发现的错误数目成正比。 6. 严格执行测试计划,排除测试的随意性。 7. 应当对每一个测试结果做全面检查。 8. 妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。 程序测试的过程… …程序测试的过程 程序测试的方法 两种常用的测试方法 黑盒测试 这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。 黑盒测试又叫做功能测试或数据驱动测试。 白盒测试 此方法把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。 通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。 黑盒测试… 黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误: 是否有不正确或遗漏了的功能? 在接口上,输入能否正确地接受? 能否输出正确的结果? 是否有数据结构错误或外部信息(例如数据文件)访问错误? 性能上是否能够满足要求? 是否有初始化或终止性错误? 用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。 但这是不可能的。 白盒测试… 软件人员使用白盒测试方法,主要想对程序模块进行如下的检查: 对程序模块的所有独立的执行路径至少测试一次; 对所有的逻辑判定,取“真”与取“假”的两种情况都至少测试一次; 在循环的边界和运行界限内执行循环体; 测试内部数据结构的有效性等。 …白盒测试… 对一个具有多重选择和循环嵌套的程序,不同的路径数目可能是天文数字。给出一个小程序的流程图,它包括了一个执行20次的循环。 包含的不同执行路径数达520条,对每一条路径进行测试需要1毫秒,假定一年工作365 × 24小时,要想把所有路径测试完,需3170年。 …白盒测试 语句覆盖 判定覆盖 条件覆盖 判定-条件覆盖 条件组合覆盖 路径覆盖 内容线索 程序正确性简介 程序测试 程序正确性证明 简介 Floyd不变式断言法 子目标断言法 Hoare规则公理方法 正确性证明 测试只能发现程序错误,但不能证明程序无错。 原因:测试并没有也不可能包含所有数据,只是选择了一些具有代表性的数据,所以它具有局限性。 正确性证明是通过数学技术来确定软件是否正确,也就是说,是否符合其规格说明。 正确性证明的发展 正确性证明的方法 为了证明一个程序的完全正确性,通常采用的方法是分别证明该程序的部分正确性和终止性。 主要方法有: 关于部分正确性证明的方法 Floyd的不变式断言法(*) Manna的子目标断言法 Hoare的公理化方法(*) 关于终止性证明的方法 Floyd的良序集方法(*) Manna等人的不动点方法 Knuth的计数器方法 关于完全正确性证明的方法 Hoare的公理化方法的推广( Manna ,Pnueli) Burstall的间发断言方法 Dijkstra最弱前置谓词变换方法以及强验证方法(*) 预备知识… 程序的状态:程序执行到某一时刻,程序中所有变量的一组取值 初始状态:所有变量的取值使程序的前置断言为真的状态 终止状态:所有变量的取值使程序的后置断言为真的状态 程序的执行可以看作
文档评论(0)