- 1、本文档共196页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
大型软件系统的开发经历了需求分析、设计和编程三个阶段,近二十年来,软件工作者提出了许多方法指导人们在分析、设计和编程中改进软件的质量并尽量避免错误的产生,本书前几章已介绍了这些方法。但是,由于分析、设计和编程是由人来完成的,人在工作中难免会犯各种各样的错误,如在相互交流中产生误会,或在表达中有不精确性等,所以尽管采用了先进的方法,软件中的错误仍然在所难免,对于规模大、复杂性高的大型软件系统更是如此。例如本书中的许多实例,虽经编者反复检查,但细心的读者仍会发现其中存在着错误,这是不足为怪的。 据统计,一个素质较好的程序员,在他交付的程序中,错误率为1%,即每100个语句中约含有一个错误;而水平差的程序员,其早期编写的程序中,每个语句就可能含有一个甚至两个错误。所以我们必须接受这样一个事实:软件中存在着错误,这是由人类本身能力的局限性造成的,对此我们不必大惊小怪,或对开发人员、过多地抱怨或责备。 这是问题的一个方面,另一方面是当代计算机逐步应用到国民经济的一些重要领域,如银行管理、经济决策部门的信息收集、空中交通管理或核反应堆控制等,软件系统的任何一个错误,都可能使财产,甚至生命遭到惨重损失,所以人们对软件系统的可靠性提出了很高的要求,这就同前面所述的基本事实构成了一对尖锐的矛盾。 面对这对矛盾,人们得出的结论是:伴随着软件的开发,必须在技术上、管理上采取措施对软件进行严格检验,正如有了铅笔就必需有橡皮一样,检验是软件开发过程中不可缺少的部分。检验的目的在于发现其中的错误并及时纠正。检验时应想方设法,力图多发现错误,发现的错误越多就说明检验的收效越大、越成功。 目前软件检验的手段有三类,即动态检查、静态检查和正确性证明。 动态检查就是指传统的“测试”,这种方法是使程序有控制地运行,并从多种角度观察程序运行时的行为,以发现其中的错误。 “测试”是否能够发现所有的错误呢?回答是“不可能”,下面用例子来说明这一点。 测试的关键问题是如何设计测试用例,设计测试用例的方法一般有两类: ·黑盒法。 ·白盒法。 如果使用黑盒法,测试人员将程序看成为一个“黑盒”,也就是说,他不关心程序内部是怎么做的,而只是想检查程序是否符合它的“功能说明”。所以使用黑盒法时,测试用例是完全根据程序的功能说明来设计的。 如果想用黑盒法发现程序中所有的错误,则必须用输入数据的所有可能值来检查程序是否都能产生正确的结果。图6.1是一个很简单的程序,图 6.1它有两个输入变量X、Y,一个输出变量Z。假定程序是在字长为32位的计算机上运行,又假定X、Y都是整数,则输入数据的可能值有 232×232=264种 如果这个程序执行一次约需一毫秒,那么用所有这些输入数据来测试这个程序将需要五亿年!所以要试遍输入数据是不可能的。 如用白盒法,则需了解程序内部的结构,此时测试用例是根据程序的内部逻辑来设计的。如果想用白盒法发现程序中所有的错误,则至少必须使程序中每种可能的路径都执行一次。 图6.2是一个小程序的控制流程图,这个程序由一个循环语句组成,循环次数可达20次,循环体中是一组嵌套的IF语句,其可能的路径有5条,所以从程序的入口A到出口B的路径数就达 520=1014 如果编写一个例子,并用它来测试这个程序共花 次5分钟,则试遍每一条路径要花十亿年!所以同试遍所有的输入数据一样,要试遍所有的路径也是不可能的。 使用白盒法时,还应认识到:即使试遍所有的路径,仍不能保证程序符合它的功能要求,因为程序中有些错误是同数据有关的,例如程序错误地将语句X:=Y+Z编写成X:=Y—Z,但测试中执行该语句时,变量z的值恰好是零,这个错误就不能被发现。另外,程序中还可能遗漏了某些路径。 上述 讨论的结论是:虽然试遍输入数据的可能值比试遍所有路径更合理些,但是二者都是不可能的,所以无论测试时选用了多少个例子,它们都仅仅是所有可能的例子中极小的一部分,如果执行这些例子的结果是错的,则说明程序中确实存在错误;然而如果执行这些例子的结果是正确的,我们并不能认为程序中就没有错误了,这就是Dijksrta说的: “测试只能证明错误的存在,但不能证明错误不存在”。 静态检查一般是指人工评审软件文档或程序,借以发现其中的错误。由于被评审的文档或程序不必运行,所以称为是“静态”的。人工评阅的手续虽然比较简单,但事实证明这是一个相当有效的检验手段,相当比例的错误往往是通过评审发现的,评审已成为软件开发过程中
文档评论(0)