您好,欢迎访问三七文档
第8章软件测试邢承杰北京大学计算中心管理信息中心E-mail:xingcj@163.comSoftwareEngineering_Chapter8-2北京大学成人教育夜大课程软件测试在软件生命周期中,软件测试是开发的最后阶段,又是软件运行的前期,横跨两个阶段。统计表明,较大型的软件,大约40%开销花在测试上。一些特殊的系统(如航空/航天飞行控制、核反应堆监控)甚至达3~5倍。因此测试是十分重要的环节,它关系到软件能否生存下去的问题,无论如何强调都不过分。SoftwareEngineering_Chapter8-3北京大学成人教育夜大课程运行时期开发时期计划时期运行/维护测试编码详细设计问题定义可行性论证及软件计划需求分析概要设计SoftwareEngineering_Chapter8-4北京大学成人教育夜大课程本章主要内容•8.1软件测试概述•8.2软件测试的基本概念•8.3测试用例的构造•8.4测试方案的建立及实施•8.5软件排错(Debug)SoftwareEngineering_Chapter8-5北京大学成人教育夜大课程8.1软件测试概述•8.1.1软件测试定义•8.1.2软件测试目的和目标•8.1.3软件测试的原则•8.1.4软件测试的对象•8.1.5测试与软件开发各阶段的关系SoftwareEngineering_Chapter8-6北京大学成人教育夜大课程8.1.1软件测试定义•软件测试是在软件投入运行前,对软件需求分析,设计规格说明和编码的最终复审,是软件质量保证的关键步骤。•简单定义:是为了发现错误而执行程序的过程。•完整定义:在精心控制的系统环境下,采用相应的技术手段,利用一组事先构造好的测试实例执行程序以发现程序中存在的问题,并确认系统功能、性能符合需求的一个综合过程。SoftwareEngineering_Chapter8-7北京大学成人教育夜大课程8.1.2Myers软件测试目的1.测试是程序的执行过程,目的在于发现错误;2.一个好的测试用例在于能发现至今未发现的错误;3.一个成功的测试是发现了至今未发现的错误的测试。SoftwareEngineering_Chapter8-8北京大学成人教育夜大课程8.1.2软件测试目标•以最少的时间和人力找出软件中潜在的各种错误和缺陷。•软件测试能够确认软件的功能和性能与用户需求说明的一致性。•软件测试还能收集到的足够的测试结果为软件可靠性评价提供依据。SoftwareEngineering_Chapter8-9北京大学成人教育夜大课程8.1.3软件测试的原则(1)1.应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。2.在测试之前应当预先确定测试用例,测试用例应由测试输入数据和对应的预期输出结果这两部分组成。3.程序员应避免检查自己的程序。4.在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。不仅要测试输入数据正确的情况,还要测试输入数据不正确的情况。SoftwareEngineering_Chapter8-10北京大学成人教育夜大课程5.充分注意测试中的群集现象。经验表明,测试后程序中残存的错误数目与该程序中已发现的错误数目成正比。6.严格执行测试计划,排除测试的随意性。7.妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便8.测试工作是一项非常复杂、极富创造性和需要高度智慧的挑战性工作。8.1.3软件测试的原则(2)SoftwareEngineering_Chapter8-11北京大学成人教育夜大课程8.1.4软件测试的对象•软件测试与程序测试的区别–程序测试针对一段程序或模块进行–软件测试并不等于程序测试。软件测试应贯穿于软件定义与开发的整个期间。–需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都应成为软件测试的对象。SoftwareEngineering_Chapter8-12北京大学成人教育夜大课程8.1.4软件测试的对象(续)•软件配置:需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序等,统称为软件配置。•程序和各个软件配置项共同组成软件测试的对象。SoftwareEngineering_Chapter8-13北京大学成人教育夜大课程8.1.5测试与软件开发各阶段的关系•软件开发过程是一个自顶向下,逐步细化的过程•测试过程是依相反顺序安排的自底向上,逐步集成的过程。SoftwareEngineering_Chapter8-14北京大学成人教育夜大课程8.1.5测试与软件开发各阶段的关系SoftwareEngineering_Chapter8-15北京大学成人教育夜大课程本章主要内容•8.1软件测试概述•8.2软件测试的基本概念•8.3测试用例的构造•8.4测试方案的建立及实施•8.5软件排错(Debug)SoftwareEngineering_Chapter8-16北京大学成人教育夜大课程8.2软件测试的基本概念•8.2.1软件测试的过程•8.2.2软件测试的方法•8.2.3软件测试的步骤•8.2.4确认和验证SoftwareEngineering_Chapter8-17北京大学成人教育夜大课程8.2.1软件测试的过程•软件测试是一个心理、技术交织在一起的复杂过程。这个过程可用如下数据流图表达。测试阶段的信息流图SoftwareEngineering_Chapter8-18北京大学成人教育夜大课程测试过程说明•测试配置:是预先定义好的一套测试方案,包括测试计划、测试过程、测试用例集合和所预期的执行结果。测试配置是软件配置中的一个子集。•测试结果分析:比较实测结果与预期结果,评价错误是否发生。SoftwareEngineering_Chapter8-19北京大学成人教育夜大课程•排错(调试):对已经发现的错误进行错误定位和确定出错性质,并改正这些错误,同时修改相关的文档。•可靠性分析:随着测试结果的积累和统计分析,软件可靠性的评价就可以按照指定的模型计算。•回归测试:使用发现错误的数据重新对排错后的软件进行测试。测试过程说明(续)SoftwareEngineering_Chapter8-20北京大学成人教育夜大课程软件可靠性•软件可靠性指软件在运行期间平均无故障运行的时间周期,这个周期越长,系统可靠性就越高。•一方面,如果系统不断出现一些严重的、要求修改设计的错误,那么软件的质量和可靠性就存在问题,这也意味着要对软件做更深入的测试。•另一方面,如果软件的功能已正确实现,测试中发现的错误性质不严重,很容易纠正,那么可能会有以下两种结果:–软件的质量和可靠性达到可以接受的程度–所做的测试不足以发现严重的错误SoftwareEngineering_Chapter8-21北京大学成人教育夜大课程8.2.2软件测试的方法1.常用的软件测试方法分为两个大类–静态测试方法–动态测试方法请注意这是两种测试方法的分类而不是具体的测试方法。SoftwareEngineering_Chapter8-22北京大学成人教育夜大课程静态测试方法•静态测试方法是程序员普遍采用的一种方法,其内容是,通过人工模拟软件系统的执行方式,以代码会审、走查、办公室检查的形式分析或核查系统的功能实现、编码过程的正确性。–a)代码会审:•错误检验表包括:数据引用错、说明错、计算错、接口错,这些都是经验的积累。–b)走查:将人当作机器,沿程序路径在“人脑”走一遍。程序清单模块说明书错误检验表对照审查互为审查会审小组,面对SoftwareEngineering_Chapter8-23北京大学成人教育夜大课程动态测试方法•动态测试方法是通过输入一组预先按照一定的测试准则构造的实例数据来动态运行程序,而达到发现程序错误的过程,也称为机器测试。•动态测试分为结构测试与功能测试。分别对应的是白盒测试和黑盒测试。SoftwareEngineering_Chapter8-24北京大学成人教育夜大课程8.2.2软件测试的方法2.两种常用的软件测试方法–黑盒测试方法–白盒测试方法注意:这是两种真正的软件测试方法。SoftwareEngineering_Chapter8-25北京大学成人教育夜大课程黑盒测试•这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。•黑盒测试又叫做功能测试或数据驱动测试。SoftwareEngineering_Chapter8-26北京大学成人教育夜大课程黑盒测试•用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。•彻底的黑盒测试通常要求成百上千亿的测试用例,但这是不可能的SoftwareEngineering_Chapter8-27北京大学成人教育夜大课程白盒测试•此方法把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。•通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。SoftwareEngineering_Chapter8-28北京大学成人教育夜大课程黑盒测试与白盒测试对比(1)•黑盒测试黑盒测试关注软件的外部属性和行为,是从用户的角度出发观察软件的预期行为。•白盒测试在源代码级了解软件内部数据结构、实际的逻辑流程和体系结构的基础上测试软件,是从开发者的角度出发进行测试。SoftwareEngineering_Chapter8-29北京大学成人教育夜大课程黑盒测试与白盒测试对比(2)SoftwareEngineering_Chapter8-30北京大学成人教育夜大课程两种测试方法的局限性•白盒测试和黑盒测试都是一个完整测试的重要部分,他们都无法单独进行均衡的测试。•黑盒测试在发现某些类型的错误,例如源代码级的数据流错误或边界条件错误方面是低效的。•白盒测试不能显示操作环境、兼容性、与时间有关的错误和可用性等宏观的质量风险。SoftwareEngineering_Chapter8-31北京大学成人教育夜大课程8.2.2软件测试的方法3.穷举测试和选择测试–穷举测试:包含所有情况的测试称为穷举测试,即便是很简单的程序穷举也是不可能的。SoftwareEngineering_Chapter8-32北京大学成人教育夜大课程–假设一个程序P有输入量X和Y及输出量Z。在字长为32位的计算机上运行。若X、Y取整数,按黑盒方法进行穷举测试:–可能采用的测试数据组:232×232=264–如果测试一组数据需要1毫秒,一年工作365×24小时,完成所有测试需5亿年。例1:黑盒穷举测试SoftwareEngineering_Chapter8-33北京大学成人教育夜大课程例2:白盒穷举测试•对一个具有多重选择和循环嵌套的程序,不同的路径数目可能是天文数字。给出一个小程序的流程图(见下页),它包括了一个执行20次的循环。SoftwareEngineering_Chapter8-34北京大学成人教育夜大课程12345白盒测试SoftwareEngineering_Chapter8-35北京大学成人教育夜大课程穷举测试例2BA从A结点至B结点,有4个分支5条路径,20重循环,所有的路径都走一遍需要:(51+52+53+……+520)≈1014在1重循环下,有5条可能的路径。在2重循环下,1重有5条,2重又有5条,其组合为5×5=52…………1014≈100亿条可能的路径。上面2个例子说明无论用黑盒子(第1例)或白盒子(第2例),穷举测试都是不可能的。SoftwareEngineering_Chapter8-36北京大学成人教育夜大课程三、穷举测试和选择测试•选择测试:有限地选择测试用例,这是可行的。问题是如何选择,这有许多技
本文标题:软件测试概论.
链接地址:https://www.777doc.com/doc-1991638 .html