1、2019/3/18,1,第十四章 软件测试,软件测试的目标 软件测试技术 软件测试策略,2019/3/18,2,Vista 测试结束 用户只能Ultimate或XP二选一,微软已经开始提醒全球上百万Windows Vista beta/RC用户,免费试用期即将结束就在2007年6月1日。 微软反盗版部门负责人Cori Hartji首先向提醒测试用户,“Windows Vista beta安装版将在2007年5月底到期,对于Vista beta/RC用户来说,现在是时候考虑购买正版Windows Vista,还是重归Windows XP。 ”,2019/3/18,3,测试人才的需求现状 21IC
2、中国电子网 人才 人才市场 2007-10-22,现在的IT企业招人基本上都处于这种抓人状态。其中,头号“通缉犯”就是软件测试人才。据相关数据显示,目前我国软件测试人才缺口达到20万。国内软件测试人员与开发人员之比在1:8左右,与国外同类人员1:1的比例相差甚远,人才供求严重失衡。“除了有一个老婆马上要生孩子不想找工作的,我们班同学都找到了测试方面的工作了。”北大青鸟BTEST软件测试培训班已毕业学员金星如是说。他是今年7月毕业的,但在6月就和公司签约了,现在年薪在五六万左右这在北大青鸟测试班的学员中很普遍。人才的严重稀缺,让软件测试人员的工资也水涨船高,目前国内初级软件测试工程师的年薪就在4
3、万左右,高级软件测试工程师的年薪则普遍达到10-15万,薪资甚至超过同样服务年限的软件开发人才,成为近年来IT行业里最为热门的职业。 “掉下来一个广告牌砸死的十个人九个是软件开发部门的,剩下的还是面试开发的。 ”.,2019/3/18,4,14.1软件测试的目标,软件测试是为了发现程序中的错误。大量统计表明,软件测试工作量往往占软件开发总工作量的40%以上,在极端情况下,甚至可能高达软件工程其他步骤成本总和的三到五倍。,14.1基本概念,2019/3/18,5,14.2软件测试技术,任何工程化的产品都有两种测试方法: 黑盒测试:已知产品应该具有的功能,通过测试检验每个功能是否都能正常使用; 白
4、盒测试:已知产品内部工作过程,通过测试检验产品内部动作是否按照产品规格说明的规定正常进行。,14.1基本概念,2019/3/18,6,14.2.1白盒测试,白盒测试应该根据程序的控制结构设计测试用例,原则是: 保证模块中每一独立的路径至少执行一次; 保证所有判断的每一分枝至少执行一次; 保证每一循环都在边界条件和一般条件下至少各执行一次; 验证所有内部数据结构的有效性。,14.2软件测试技术,2019/3/18,7,假设每运行一个测试用例平均花费1毫秒,则总共需多长时间才能穷尽所有测试? 最多有1014个逻辑路径,总共需3170年才能穷尽所有测试。,2019/3/18,8,白盒测试,白盒测试法
5、密切关注处理细节,针对程序的每一条逻辑路径都要分别设计测试用例,检查分枝和循环的情况。 穷举测试不可取,一般选用少量“最有效”,即最有可能暴露错误的路径进行测试。 测试的目的是为了找出错误,所以无论采用黑盒法还是白盒法,设计测试用例时总是期望用尽可能少的时间和代价发现尽可能多的错误。,14.1基本概念,2019/3/18,9,白盒测试技术:,1、基本路径测试:根据软件过程描述(详细设计或编码)中控制流程确定复杂性度量,然后用此度量定义基本路径集合,由此导出一组测试用例,保证每个语句至少执行一次。2、控制结构测试:条件测试法:主要考虑程序中的程序判断,以期 发现条件判断内部的错误和程序中的其他错
6、误。数据流测试法:根据程序中变量定义和引用的位置选择测试路径。循环测试法:检查循环机构的有效性。,2019/3/18,10,14.2.2黑盒测试,黑盒测试旨在测试软件是否满足功能要求,它主要诊断下列几类错误: (1)不正确或遗漏的功能; (2)界面错误; (3)数据结构或外部数据库访问错误; (4)性能错误; (5)初始化和终止条件错误。,14.2软件测试技术,2019/3/18,11,黑盒测试,黑盒测试完全不考虑程序的内部结构和处理过程。测试仅在程序界面上进行。 设计测试用例旨在说明: 软件的功能是否可操作; 程序能否适当地接收输入数据并产生正确的输出结果或在可能的场景中事件驱动的效果是否尽
7、如人意; 能否保持外部信息(如数据文件)的完整性。,14.1基本概念,2019/3/18,12,黑盒测试技术:,1、等价分类法; 2、边界值分析法; 3、对比测试法。,2019/3/18,13,14.3 软件测试策略,软件测试策略主要考虑,如何把设计测试用例的技术组织成一个系统的、有计划的测试步骤。 从模块测试开始,一级一级向外扩展,直至整个系统测试完毕。 在测试的各个阶段应选择适宜的白盒测试和黑盒测试方法,由软件开发人员和一个独立的测试小组(对大项目而言)共同完成测试任务。 测试策略应包含测试规划、测试用例设计、测试实施和测试结果收集评估等。其中测试规划包括:测试的步骤、工作量、进度和资源等
8、,第十四章 软件测试,2019/3/18,14,软件定义开发与测试的关系,2019/3/18,15,14.3.1 单元测试,单元测试的对象是软件设计的最小单位模块。 单元测试的依据是详细设计描述,单元测试应对模块内所有重要的控制路径设计测试用例,以便发现模块内部的错误。 单元测试多采用白盒测试技术,系统内多个模块可以并行地进行测试。,14.3软件测试策略,2019/3/18,16,14.3.2 综合测试,综合测试是组装软件的系统测试技术,按设计要求把通过单元测试的各个模块组装在一起之后,进行综合测试以便发现与接口有关的各种错误。 某些软件设计人员习惯于把所有模块按设计要求一次全部组装起来,然后
9、进行整体测试,这称为非增量式集成。这种方法容易出现混乱。 与之相反的是增量式集成方法,程序一段一段地扩展,测试的范围一步一步地增大,错误易于定位和纠正,界面的测试亦可做到完全彻底。,14.3软件测试策略,2019/3/18,17,1. 自顶向下集成,自顶向下集成是构造程序结构的一种增量式方式,它从主控模块开始,按照软件的控制层次结构,以深度优先或广度优先的策略,逐步把各个模块集成在一起。 深度优先策略首先把主控制路径上的模块集成在一起,至于选择哪一条路径作为主控制路径多少带点随意性,一般根据问题的特性确定。,14.3软件测试策略,2019/3/18,18,例:,2019/3/18,19,优缺点
10、,自顶向下集成的优点在于能尽早地对程序的主要控制和决策机制进行检验,因此较早地发现错误。 缺点是在测试较高层模块时,低层处理采用桩模块替代,不能反映真实情况,重要数据不能及时回送到上层模块,因此测试并不充分。,14.3软件测试策略,2019/3/18,20,2. 自底向上集成,自底向上测试是从“原子”模块(即软件结构最低层的模块)开始组装和测试,因测试到较高层模块时,所需的下层模块功能均已具备,所以不再需要桩模块。 自底向上综合测试的步骤分为: 1)把低层模块组织成实现某个子功能的模块群(cluster); 2)开发一个测试用驱动模块,控制测试数据的输入和测试结果的输出; 3)对每个模块群进行
11、测试; 4)删除测试使用的驱动模块,用较高层模块把模块群组织成为完成更大功能的新模块群; 从第一步开始循环执行上述各步骤,直至整个程序构造完毕。,14.3软件测试策略,2019/3/18,21,例:,2019/3/18,22,优缺点,自底向上集成方法不用桩模块,测试用例的设计亦相对简单,但缺点是程序最后一个模块加入时才具有整体形象。 它与自顶向下综合测试方法的优缺点正好相反。 因此,在测试软件系统时,应根据软件的特点及工程的进度,选用适当的测试策略,有时混合使用两种策略更为有效,上层模块用自顶向下的方法,下层模块用自底向上的方法。,14.3软件测试策略,2019/3/18,23,14.3.3
12、确认测试,通过综合测试之后,软件已完全组装起来,接口方面的错误也已排除,软件测试的最后一步确认测试即可开始。 确认测试应检查软件能否按合同要求进行工作,即是否满足软件需求说明书中的确认标准。,14.3软件测试策略,2019/3/18,24,、测试,测试是指软件开发公司组织内部人员模拟各类用户行为对即将面市的软件产品(称为版本)进行测试,试图发现错误并修正。经过测试调整的软件产品称为版本。 测试是指软件开发公司组织各方面的典型用户在日常工作中实际使用版本,并要求用户报告异常情况、提出批评意见。 然后软件开发公司再对版本进行改错和完善。,14.3软件测试策略,2019/3/18,25,软件版本后缀
13、代表的含义:,(Alpha)版:内测版,内部交流或者专业测试人员测试用。Bug较多,普通用户最好不要安装。 (Beta)版:公测版,专业爱好者大规模测试用,存在一些缺陷,该版本也不适合一般用户安装。 (Gamma)版:相当成熟的测试版,与即将发行的正式版相差无几。 RC版:Release Candidate候选版本,处于Gamma阶段。,2019/3/18,26,14.3.4 系统测试,计算机软件是基于计算机系统的一个重要组成部分,软件开发完毕后应与系统中其他成份集成在一起,此时需要进行一系列系统集成和确认测试。 在系统测试之前,软件工程师应完成下列工作: 1)为测试软件系统的输入信息,设计错
14、误处理通路; 2)设计测试用例,模拟错误数据和软件界面可能发生的错误,记录测试结果,为系统测试提供经验和帮助; 3)参与系统测试的规划和设计,保证软件测试的合理性。,14.3软件测试策略,2019/3/18,27,1. 恢复测试,恢复测试主要检查系统的容错能力。当系统出错时,能否在指定的时间间隔内修正错误并重新启动系统。 恢复测试首先要采用各种办法强迫系统失败,然后验证系统是否能尽快恢复。 对于自动恢复系统,需验证重新初始化、检查点、数据恢复和重新启动等机制的正确性;对于人工干予的恢复系统,还需估测平均修复时间,确定其是否在可接受的范围内。,14.3软件测试策略,2019/3/18,28,2.
15、 安全测试,安全测试检查系统对非法侵入的防范能力。安全测试期间,测试人员假扮非法入侵者,采用各种办法试图突破防线。 例如,(1)想方设法截取或破译口令;(2)专门定做软件破坏系统的保护机制;(3)故意导致系统失败,企图趁恢复之机非法进入;(4)试图通过浏览非保密数据,推导所需信息等等。 理论上讲,只要有足够的时间和资源,没有不可进入的系统。因此系统安全设计的准则是,使非法侵入的代价超过被保护信息的价值。此时非法侵入者已无利可图。,14.3软件测试策略,2019/3/18,29,3. 强度测试,强度测试检查程序对异常情况的抵抗能力。 强度测试总是迫使系统在异常的资源配置下运行。 例如: (1)当
16、中断的正常频率为每秒一至两个时,运行每秒产生十个中断的测试用例; (2)定量地增长数据输入率,检查输入子功能的反映能力; (3)运行需要最大存储空间(或其他资源)的测试用例; (4)运行可能导致虚存操作系统崩溃或磁盘数据剧烈抖动的测试用例;等等。,14.3软件测试策略,2019/3/18,30,4. 性能测试,对于那些实时和嵌入式系统,软件部分既使满足功能要求,也未必能够满足性能要求。 虽然从单元测试起,每一测试步骤都包含性能测试,但只有当系统真正集成之后,在真实环境中才能全面、可靠地测试运行性能,系统性能测试是为了完成这一任务。 性能测试有时与强度测试相结合,经常需要其他软、硬件的配套支持。
17、,14.3软件测试策略,2019/3/18,31,14.3.5 排错,排错与成功的测试形影相随。 测试成功的标志是发现了错误。 根据错误迹象确定错误的原因和准确位置,并加以改正的任务主要依靠排错技术。,14.3软件测试策略,2019/3/18,32,小结,软件测试既是软件开发阶段的最后一个活动,又是软件质量保证的最后一项措施。它所用的主要技术是白盒测试和黑盒测试。 软件测试过程可概括为用单元测试保证模块正确工作,用综合测试保证模块集成到一起后正常工作,用确认测试保证软件需求的满足,用系统测试保证软件与其他系统元素合成后达到系统各项性能要求。 测试一旦发现错误,必须定位并纠正此错,即通常所说的排错(或调试)过程。因此排错与测试是密不可分的两个活动。 本章介绍了若干软件测试技术和策略,简单讨论了排错的过程、方法和支持工具。,第十四章 软件测试,