1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,软件测试理论和方法,由安博测试空间技术中心 first Bug,海军中尉,格蕾丝霍波计算机软件第一夫人,1947年夏,哈佛大学,Mark II 计算机,继电器触点,飞蛾,第一只有记载的“电脑虫”,4,软件缺陷-Defect,软件缺陷是对软件产品与其属性的偏离现象:,对产品规格说明的偏离,对用户期望的偏离,软件产品的三类缺陷:,错误:未将规格说明书正确实现,遗漏:规定的或预期的需求未体现在产品中,额外的实现:规格说明书并未规定的需求被纳入产品,并得到实现,软件缺陷不可能完全避免,5,软件缺陷,行业对比,机械制
2、造业,建筑业,软件业,缺陷是软件内部的“裂缝”,在为影响用户和系统运行的情况下是隐蔽的,但是,当缺陷引发运行错误或产生负面影响时,将会构成事故,造成损失或伤害。,6,软件测试理论和方法,软件缺陷,排除软件缺陷的两种重要手段,软件测试的基本概念,测试过程,测试方法,测试类型,测试策略,测试工具,7,软件测试排除软件缺陷的第一个重要手段,测试在软件开发中占有重要地位,测试成本占有近一半的开发成本,软件开发成本分布:,软件类型,开发成本按阶段分部(%),需求与设计,实现,测试,控制软件,46,20,34,航天航空软件,34,20,46,操作系统,33,17,50,科技计算软件,44,26,30,商业
3、应用软件,44,28,28,8,软件项目评审排除软件缺陷的第二个重要手段,9,软件测试理论和方法,软件缺陷,排除软件缺陷的两种重要手段,软件测试的基本概念,测试过程,测试方法,测试类型,测试策略,测试工具,10,软件测试的基本概念,测试的目的,测试的对象,软件测试的原则,软件测试信息流,为什么不可能做到穷举测试,软件测试的现状和局限性,11,测试的目的,提高产品的质量。,提高产品的商誉,获得更多的销售机会和市场份额。,降低客户的售后支持成本以及产品维护成本。,测试是程序执行的过程,目的在于发现错误(缺陷),好的测试用例能有效地发现别的测试用例未发现的错误(缺陷),成功的测试是发现了未曾发想的错
4、误(缺陷),12,测试的对象1,1、程序测试:发现程序中的缺陷,13,测试的对象2,2、软件测试:发现程序及前期设计开发的缺陷,14,软件测试的原则,在测试工作开始前,不应设想程序中没有缺陷或找不出缺陷(软件心理学),测试以前应预知测试的结果数据,尽可能避免测试自己写的程序,坚持独立测试原则,必要的情况下建立独立测试机构,测试用例应兼顾有效输入和无效输入,不仅要检验程序是否做了应该做的事,还应检验是否做了不应该做的事,测试的充分性,测试的有效性,保留一切测试用例,任何已测程序的变更都应重新测试(回归测试),15,软件测试信息流,16,测试的成本曲线,17,为什么不可能做到穷举测试 1,该程序有
5、5条独立路径,含一个循环,最大循环次数为20次,分析:,循环次数:0 1 2 3 19 20,独立路径数:51+52+53+521,1014(100万亿),每个测试用例(考虑、执行、验证结果)5分钟,共需测试时间:10亿年,18,为什么不可能做到穷举测试 2,一个功能模块有两个输入A和B,一个输出C。,输入A、B:均为最大长度为32的正整数,测试:,A1、B1,C1,A2、B2,C2,An、Bn,Cn,n=232 x 232=264,1.84 x 1019,19,软件测试的现状和局限性,目前的软件测试仍然是发现一个缺陷,解决一个缺陷,随着测试工作的进展,隐藏的缺陷将逐渐减少,采用任何测试方法都
6、只能发现某些缺陷,不存在一个理想的测试方法能够发现所有的缺陷,不存在没有缺陷的软件,即使经过了周密的测试、运行的考验和维护的修补。,20,软件测试理论和方法,软件缺陷,排除软件缺陷的两种重要手段,软件测试的基本概念,测试阶段,测试过程,测试方法,测试类型,测试策略,测试工具,21,测试阶段-V 模型,需求分析,系统设计,详细设计,编码,单元测试,集成测试,系统测试,验收测试,时间,程序员的理解=用户的理解,详细程度,22,V 模型的优缺点,优点:,文档驱动,的开发模型,很注重反馈和测试,在需求非常明确的前提下可以使用,也适用于有长期专职开发人员的小型项目开发。,不足:,严格限定了开发的各阶段,
7、缺乏迭代性。,集成测试的时候是发现缺陷最多的时候,在V模型中滞后严重。,不支持探测性测试。,不适合新领域,缺乏对变化的支持。,不支持频繁集成。,23,XP 中的测试,简单,设计,迭代,计划,测试驱动,Pair开发,持续,集成,重构,1.N个,Iteration,发布,计划,1.N个,Release,小发布,发布,1.N个,Task,24,XP 的特点,每日集成:,所有的源代码保存在单一的开发服务器上。,可运行的程序框架。,自动化编译,创建。,所有人都可以得到最新、最好的可执行文件,测试优先:,先测试后编程,组队编程 Pair programming,用户在场 On-site,缺陷样本管理,定期
8、培训,支持重构:,代码集体所有,增量开发,25,举例:微软的XP元素,微软的一天从几点开始?,答:半夜,为什么?,答:因为Daily Build是所有工作的核心,而且是在半夜自动启动。,26,举例:微软的XP元素(续),程序员每天上班前最担心什么?,答:由于自己前一天的代码Check-in,造成Blocking Bug。,为什么?,因为每天的Build时所有人当天工作的基础,程序员需要Build验证与其他模块的接口,测试需要Build发现新的Bug,并验证新Build中已解决的Bug。,27,举例:微软的XP元素(续),有Blocking Bug怎么办?,答:解决问题,并对今天的Build打P
9、atch。,经历对Build的提心吊胆和争分夺秒后,开发人员的第一件事做什么?,答:打开缺陷跟踪工具,查看指定给自己的Bug,解决高优先度的Bug。因为质量重于新功能。,28,举例:微软的XP元素(续),接下来开发人员会,从版本控制工具中Check Out代码,修改代码(解决Bug或实现新功能),取得版本工具中最新变化,在本机Build,并进行单元测试,请开发组同事做Code Review,Check in代码,29,软件测试理论和方法,软件缺陷,排除软件缺陷的两种重要手段,软件测试的基本概念,测试过程,测试方法,测试类型,测试策略,测试工具,30,测试过程,测试计划,测试设计,测试开发,测试
10、执行,测试评估,31,测试过程,32,测试计划,测试目标,测试的范围,测试的项目,采用的测试手段,需要的工具、资源,交付物 Artifacts,33,测试设计,确认和详细描述测试用例,确认和设计测试脚本,评估测试覆盖,34,测试开发,建立测试环境,录制或编写测试脚本,开发测试驱动器和桩模块,建立外部数据集,35,测试执行,执行测试脚本,测试执行情况分析,测试结果验证,研究未预期的测试结果,写测试日志,Bug报告和Bug跟踪,36,测试评估,分析测试用例覆盖,分析代码覆盖,分析缺陷,分析是否达到测试停止、成功标准,写测试分析报告,37,软件测试理论和方法,软件缺陷,排除软件缺陷的两种重要手段,软
11、件测试的基本概念,测试过程,测试方法,测试类型,测试策略,测试工具,38,测试方法,静态测试方法,动态测试方法,黑盒测试,白盒测试,回归测试,模拟用户操作测试方法,Method,1,Method,2,Method,3,39,静态测试方法,主要特征是在用计算机测试源程序时,计算机并不真正运行被测试的程序,只对被测程序进行特性分析。,因此,静态方法常称为“分析”,静态分析试对被测程序进行特性分析的一些方法的总称,40,动态测试方法,主要特征是计算机必须真正运行被测试的程序,通过输入测试用例,对其运行情况(输入/输出的对应关系)进行分析。,41,黑盒测试,Black-box Testing,又称功能
12、测试、数据驱动测试或基于规格说明的测试,是一种从用户观点出发的测试,被测程序被当作一个黑盒,不考虑程序内容结构和内容特性,测试着只知道该程序输入和输出之间的关系或程序的功能,依靠能够反映这一关系的程序功能的需求规格说明书考虑确定测试用例盒推断测试结果的正确性。,软件的黑盒测试被用来证明软件功能的正确性盒可操作性,42,白盒测试,White-box Testing,又称结构测试、逻辑驱动测试或基于程序的测试,白盒测试依赖于对程序细节的严密检查,针对特定条件和循环集设计测试用例,对软件的逻辑路径进行测试,在程序的不同点检验“程序状态”,一盘定期实际情况是否和预期的状态相一致,软件的白盒测试用来分析
13、程序的内部结构,白盒测试要求对某些程序的结构特性做到一定程度的覆盖,或者说是“基于覆盖的测试”,43,回归测试,回归测试应用于:,增量开发,版本控制,软件维护,回归测试的目的:,验证修改的或增加的部分是正确的,验证这些部分没有引起其他部分产生错误,44,模拟用户操作测试,模拟用户操作测试,是基于对用户如何使用被测试软件的了解来开发测试的方法,经验告诉我们,复杂的软件产品有许多错误,但用户一般只能找出这些错误中的很少一部分,为了给用户带来最大的利益,要着重对那些用户可能发现的错误进行测试和修改工作,45,软件测试理论和方法,软件缺陷,排除软件缺陷的两种重要手段,软件测试的基本概念,测试过程,测试
14、方法,测试类型,测试策略,测试工具,46,可靠性测试(质量维度1),完整性测试,侧重于评估测试对象的强壮行(防止失败的能力),语言、语法的技术兼容性,以及资源利用率的测试。该测试针对不同的测试对象实施和执行,包括单元测试和已集成单元,结构测试,侧重于评估测试目的是否符合其设计和构造的测试。通常对基于Web的应用程序执行该测试,以确保所有链接都已连接、显示正确的内容,以及没有孤立的内容,47,功能测试(质量维度2),配置测试,侧重于确保测试对想在不同的硬件和(/或)软件配置上按预期运行的测试。该测试还可以作为系统性能测试来实施,功能测试,侧重于盒是测试对象按计划运行,提供需求的服务、方法或用例的
15、测试。该测试针对不同的测试对象实施和执行,包括单元、已集成单元、应用程序和系统,安装测试,侧重于确保测试对想在不同的条件下(磁盘空间不足或电源中断)按预期安装的测试。该测试针对不同的应用程序、系统实施和执行。,48,功能测试(质量维度2),安全测试,侧重于确保只由预期的主角才可以访问测试对象、数据(或系统)的测试。该测试针对多种测试对象实施和执行。,容量测试,侧重于个是测试对象对于大量数据(输入和输出或驻留在数据库内)的处理能力的测试。容量测试包括多种测试策略,如:,创建返回整个数据库内容的查询,对查询设置很多限制,以至不返回数据或返回每个字段中最大数据量的数据条目,49,性能测试(质量维度3
16、),基准测试,一种性能测试,该测试将比较(新的或未知的)测试对象与已知的参照和系统的性能。,竞争测试,侧重于盒是测试对象对于多个主角对相同资源(数据记录、内存等)的请求的处理是否可以接受的测试,负载测试,一种性能测试,用于在测试的系统保持不变的情况下,核实和评估系统在负载下操作吉祥的可接受性,评测包括负载和响应时间的特征。,50,性能测试(质量维度3),性能曲线,在该测试中,将监测测试对象的计时配置文件,包括执行流、数据访问、函数和系统调用,已确定并解决性能瓶颈和底效流程。,强度测试,也是一种性能测试,侧重于确保系统可在遇到异常条件时按预期运行。系统面对的工作强度可以包括过大的工作量、不充足的
17、内存、不可用的服务/硬件或过低的共享资源。,51,其他测试类型术语-1,单元测试,侧重于何时软件的最小可测试元素,通常应用于实现模型中的构件,主要做:功能正确的前提下的控制流和数据流的覆盖测试,主要针对单元的内部结构,更注重白盒测试,集成测试,集成的单元能够正确的执行用例,测试对象是实现模型中的一个包或一组包,要集成的包通常来自于不同的开发组,集成测试将揭示包结构规约中不够完全或错误的地方,52,其他测试类型术语-2,系统测试,所有集成测试完成,软件系统之间的联合测试,软、硬件等之间的联合测试,模拟真实运行环境的测试,验收测试,测试的最后一道工序,用户在场或者直接测试,用户可能自定义测试用例,
18、53,其他测试类型术语-3,恢复测试,例如:硬件故障或用户不良数据引起的一些情况,兼容性测试,对软、硬件、操作系统、网络的兼容性测试,比较测试,与同类产品进行比较,列出优缺点,54,其他测试类型术语-4,边界测试,测试产品特定的限制,如最大值、最小值,确定软件在这些特定的限制下是否能正常工作。,正向测试,确定正确使用软件时,软件某一特性产生的结果是否与需求一致,逆向测试,确定软件无效输入或非法操作的处理是否合理,55,软件测试理论和方法,软件缺陷,排除软件缺陷的两种重要手段,软件测试的基本概念,测试过程,测试方法,测试类型,测试策略,测试工具,56,测试策略,测试策略是各个测试阶段(单元测试、
19、集成测试和系统测试)、测试类型(功能测试、性能测试、负载测试、强度测试等)中使用的策略,策略描述的是在这些测试活动中采用的手段和主要目标。,测试策略的几个重要元素:,目标,技术,工具,成功标准,专门考虑,57,举例:安装测试,目标:把软件在指定硬件下正确的进行安装或升级,并能对安装过程记录和配置。,技术:开发手工或自动脚本获取目标计算机的软件安装情况;进行安装;用预先定义的功能测试脚本来运行安装。,工具:安装监控工具,成功标准:在多种配置下正确安装,专门考虑:怎样保证安装的完整性?,58,举例:安装测试(续),测试阶段,目的,执行者,测试方法,单元测试,查找独立模块中逻辑错误、数据错误和算法错
20、误,软件工程师,结构测试,集成测试,查找模块之间接口错误,软件工程师,测试人员,结构测试、自顶向下或自底向上、回归测试,确认测试,确认软件是否满足软件需求,测试人员,功能测试、回归测试、,模拟用户操作,系统测试,对系统中各个组成部分进行综合性检验,测试人员,功能测试、回归测试、,模拟用户操作,测试与,测试,用户,功能测试、,模拟用户操作,验收测试,确认软件是否满足用户需求,用户、项目组测试人员,功能测试、,模拟用户操作,59,软件测试理论和方法,软件缺陷,排除软件缺陷的两种重要手段,软件测试的基本概念,测试过程,测试方法,测试类型,测试策略,测试工具,60,测试工具,缺陷跟踪工具,测试用例设计工具,测试数据产生工具,录制/回放工具,测试覆盖监视工具,测试结果比较工具,内存泄漏检查工具,性能测试工具,61,Q&A,62,