[IT认证]第6章 集成测试与系统测试.ppt
第6章 集成测试与系统测试,6.1 系统集成的模式与方法6.2 功能测试6.3 回归测试6.4 系统测试,6.1 系统集成的模式与方法,什么是集成测试集成测试的目的与任务系统集成的模式与方法,一、集成测试(组装测试)将经过单元测试的模块按设计要求组合起来再进行的测试。,二、目的 检查各模块间接口是否存在问题,为什么总是集成不起来?,三、集成测试的任务(1)将各模块连接起来,检查模块相互调用时,数据经过接口是否丢失。(2)将各个子功能组合起来,检查能否达到预期要求的各项父功能。(3)一个模块的功能是否会对另一个模块的功能产生不利的影响。(4)全局数据结构是否有问题,会不会被异常修改。(5)单个模块的误差积累起来,是否被放大,从而达到不可接受的程度。,四、集成测试前的准备(1)人员安排 有经验的测试人员和开发人员(2)测试计划 测试的描述和范围、测试的预期目标、测试环境、集成次序、测试用例设计生成、进度表(3)测试内容 单元接口、代码、界面(4)集成模式 集成方式的选择(5)测试方法 黑盒为主,辅以白盒,五、集成测试的模式 集成测试包括两种不同方法:非增量式集成和增量式集成。1、非增量式集成(一次性集成):先分别测试每一个模块,再把所有模块按设计要求一次性全部组装起来,然后进行测试,最终得到要求的软件系统。,非增量式集成,2、增量式集成 首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的系统。在组装的过程中边连接边测试,以发现连接过程中产生的问题。通过增殖逐步组装成为要求的软件系统。,3、增量式集成的两种方式(1)自顶向下的增量方式 自顶向下增量式测试表示逐步集成和逐步测试是按结构图自上而下进行的。即模块集成的顺序是首先集成主控模块(主程序),然后按照软件控制层次结构向下进行集成。,自顶向下集成方法,自顶向下集成方式的步骤:以主模块为所测试模块兼驱动模块,所有直属于主模块的下属模块全部用桩模块代替,对主模块进行测试。依照所选用的模块集成策略(深度优先和广度优先),用实际模块替换相应桩模块,再用桩模块代替它们的直接下属模块,与已测试的模块或子系统组装成新的子系统。进行回归测试,排除组装过程中引入新的错误的可能。判断是否所有的模块都组装到系统中?是则结束测试,否则转到去执行。,自顶向下增量式测试(广度优先策略),自顶向下增量式测试(深度优先策略),3、增量式集成的两种方式(续)(2)自底向上的增量方式 自底向上增量式测试是从最底层的模块开始,按结构图自下而上逐步进行集成和测试。,自底向上增量式测试,自底向上集成方式的步骤:由驱动模块控制最底层模块的并行测试;也可以把最底层模块组合成实现某一特定软件功能的簇,由驱动模块控制它进行测试。用实际模块代替驱动模块,与它已测试的直属子模块组装成子系统。为子系统配备驱动模块,进行新的测试。判断是否已组装到达主模块。是则结束测试,否则转到去执行。,自顶向下集成方法优点:不需要测试驱动程序,能够在测试阶段的早期实现并验证系统的主要功能,发现上层模块的接口错误。缺点:需要桩模块自底向上集成方法优点:不需要桩模块。缺点:程序一直未能作为一个实体存在,直到最后一个模块加上去后才形成一个实体。,4、两种增量集成方式的比较,非增量式集成优点:工作量较小、并行测试缺点:发现模块接口错误晚且较难诊断;增量式集成优点:发现模块接口错误早且容易诊断;测试更彻底;缺点:工作量较大;,5、非增量集成和增量集成方式的比较,6、混合策略,混合法:对软件结构中较上层,使用的是“自顶向下”法;对软件结构中较下层,使用的是“自底向上”法,两者相结合,7、大棒集成方法(Big-bang Integration),采用大棒集成方法,先是对每一个子模块进行测试(单元测试阶段),然后将所有模块一次性的全部集成起来进行集成测试。,因为所有的模块一次集成的,所以很难确定出错的真正位置、所在的模块、错误的原因。这种方法适合在规模较小的应用系统中使用。,8、三明治集成方法,采用三明治方法的优点是:它将自顶向下和自底向上的集成方法有机地结合起来,不需要写桩程序因为在测试初自底向上集成已经验证了底层模块的正确性。采用这种方法的主要缺点是:在真正集成之前每一个独立的模块没有完全测试过。,9、改善的三明治集成方法,改进的三明治集成方法,不仅自两头向中间集成,而且保证每个模块得到单独的测试,使测试进行得比较彻底。,几种集成方法性能的比较,6.2功能测试,功能测试属于黑盒测试技术范畴,是系统测试中要进行的最基本的测试,它不用考虑软件内部的具体实现过程。主要是根据产品的需求规格说明书和测试需求列表,验证产品是否符合产品的需求规格。需求规格说明是功能测试的基本输入。因此先对需求规格进行分析,明确功能测试的重点。,可按照如下步骤进行:为所有的功能需求(其中包括隐含的功能需求)加以标识;为所有可能出现的功能异常进行分类分析并加以标识;对前面表示的功能需求确定优先级。对每个功能进行测试分析,分析其是否可测、采用何种测试方法、测试的入口条件、可能的输入、预期输出等等。是否需要开发脚本或借助工具录制脚本。确定要对哪些测试使用自动化测试,对哪些测试使用手工测试。,功能测试的主要内容:程序安装、启动正常,有相应的提示框、错误提示等 每项功能符合实际要求 系统的界面清晰、美观 菜单、按钮操作正常、灵活,能处理一些异常操作 能接受正确的数据输入,对异常数据的输入有提示、容错处理等 数据的输出结果准确,格式清晰,可以保存和读取 功能逻辑清楚,符合使用者习惯 系统的各种状态按照业务流程而变化,并保持稳定 支持各种应用的环境 能配合多种硬件周边设备 软件升级后,能继续支持旧版本的数据 与外部应用系统的接口有效,功能测试的方法:等价类划分法边界值分析法错误推测法因果图法组合分析法,6.3 回归测试,(1)回归测试 回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其它代码产生错误。(2)回归测试的目的 所做的修改达到了预定的目的,如错误得到了改正,新功能得到了实现,能够适应新的运行环境等;不影响软件原有功能的正确性。,(3)回归测试的方法 再测试全部用例 基于风险选择测试 基于操作剖面选择测试 再测试修改的部分,(4)回归测试的组织和实施通过代码相依分析,识别软件中被修改的部分;从原有测试用例库中,排除不适用的测试用例,建立新的测试用例基线库T0;基于风险和操作剖面选择相结合,从新的测试用例基线库中选择测试用例构造有效的套件,测试被修改的软件若回归测试套件达不到所需的覆盖要求,必须补充新的测试用例,则生成新的测试用例集T1;用T1测试修改后的软件。,6.4 系统测试,系统测试的根本任务就是要证明被测系统的功能和结构的稳定性;还要有一些非功能测试:性能测试、压力测试、可靠性测试等等。最终目的是为了确保软件产品能够被用户或操作者接受。测试的主要目标不再是找出缺陷,而是证明其性能。系统测试属于黑盒测试范畴,不再对软件的源代码进行分析和测试。,一、什么是系统测试 系统测试就是将已经集成好的软件系统,作为整个计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行(使用)环境下,对计算机系统进行一系列的组装测试和确认测试。系统测试的目的在于通过与系统的需求定义比较,检查软件是否存在与系统定义不符合或与之矛盾的地方,以验证软件系统的功能和性能等满足其规约所指定的要求。,二、系统测试的组织和分工 测试组组长:组织测试;测试分析员:负责设计和实现测试脚本和测试用例;测试者:负责执行测试脚本中记录的测试用例。同时可以邀请客户代表参与系统测试,可以与客户建立一个良好的平台,并且得到反馈信息。过程:搭建好系统测试的软、硬件平台制定软件测试计划(与开发人员多多沟通)系统测试提交系统测试的大量输出的拷贝文档(包括测试结果记录表格、系统测试日志和全面的系统测试总结报告)。,三、如何进行系统测试 系统测试过程要经历以下几个阶段:1、计划阶段:制定测试计划 2、设计阶段:对系统进行详细的测试分析,然后设计一些典型的,满足测试需求的测试用例;同时给出系统测试的大致过程。3、实施阶段:使用当前的软件版本进行测试脚本的录制工作,确定软件的基线。4、执行阶段:根据系统测试计划和事先设计好的系统测试用例,以及一定测试规程进行测试脚本的回放。5、评估阶段:进行评估,以确定系统测试是否通过。,四、系统测试类型、方法,安全性测试容错性测试配置测试兼容性测试可靠性测试,功能测试用户界面测试回归测试性能测试负载测试,1、用户界面测试,优秀UI应具备的7要素:(1)符合标准和规范(2)一致性(3)正确性(4)直观性(5)灵活性(6)舒适性(7)宽容性,(1)符合标准和规范 通常标准是已经确立的,多数用户已经熟悉并接受了这些标准和规范、或已经认同了这些信息所代表的意义。,如果软件在某一个平台上运行,就需要把该平台的标准和规范作为产品规格说明书的补充内容,在建立测试案例时和产品规格说明书一样作为依据。,(2)一致性与用户的现实世界的一致性与用户常用或习惯的软件产品的一致性不同用户界面之间的一致性,(3)直观性,首先了解所需的功能或期待的响应应该明显,并在预期的地方出现。其次要考虑用户界面的组织和布局是否合理。,(4)灵活性 不同用户所使用的功能和数据存在差异,这种差异应反映到界面,即要为不同用户提供合适的个性化界面或选择的灵活性。,(5)舒适性尽可能降低用户操作的复杂性,尽量减少结构层次及用户操作量用户界面的外观、风格与用户的工作性质和环境协调错误处理,(6)正确性 测试是否做了该做的事。(7)宽容性 对用户错误操作的宽容。,用户界面测试标准,(1)保证用户界面运作的一致性(2)界面上的布局(3)颜色使用要恰当(4)字体使用要适当(英文New Times Roman,中文一般采用宋体)(5)适当的信息和标签措词,Windows检查单,2、性能测试,(1)性能测试 通过测试,确认系统在预定的负载等级上的系统性能是否满足性能需求或达到性能指标。(2)性能测试的类型验证测试基准测试规划测试,2、性能测试,性能测试(Performance test)通过测试以确定系统运行时的性能表现,如得到运行速度、响应时间、占有系统资源等方面的系统数据。,2、性能测试,(1)性能测试的目的和需求目的:为了验证系统是否达到用户提出的性能指标,同时发现系统中存在的性能瓶颈,起到优化系统的目的。性能测试需求:用户对各项指标提出的明确需求;如果用户没有提出性能指标则根据用户需求、测试设计人员的经验来设计各项测试指标。(需求+经验)主要的性能指标:服务器的各项指标(CPU、内存占用率等)、后台数据库的各项指标、网络流量、响应时间,2、性能测试,(2)性能测试方法负载模拟:并发用户+思考时间+每次请求的数据量+负载模式。性能测试步骤:确定性能测试需求根据测试需求,选择测试工具和开发相应的测试脚本建立性能测试负载模型,就是确定并发虚拟用户的数量、每次请求的数据量、思考时间、加载方式和持续加载的时间等执行性能测试结果分析,并提交性能测试报告,2、性能测试,(3)性能测试的要点测试环境应尽量与产品运行环境保持一致,应单独运行尽量避免与其他软件同时使用。性能测试一般使用测试工具和测试人员编制测试脚本来完成。性能测试的重点在于前期数据的设计与后期数据的分析。性能测试的用例主要涉及到整个系统架构的问题,所以测试用例一旦生成,改动一般不大,所以做性能测试的重复使用率一般比较高。,2、性能测试,(4)性能测试的方法和技巧两种负载类型“flat”测试ramp-up测试对于企业级的系统,性能测试的方法主要有:基准测试性能规划测试渗入测试峰谷测试,2、性能测试,两种负载类型“Flat”测试:对于一次给定的测试,应该取响应时间和吞吐量的平均值。精确地获得这些值的唯一方法是一次加载所有的用户,然后在预定的时间段内持续运行。,2、性能测试,两种负载类型 Ramp-up测试:用户是交错上升的(每几秒增加一些新用户)。ramp-up测试不能产生精确和可重现的平均值,这是因为由于用户的增加是每次一部分,系统的负载在不断地变化。其优点是,可以看出随着系统负载的改变,测量值是如何改变的据此选择要运行的flat测试的范围。,2、性能测试,基准测试(1),同时与服务器通信的连接(或虚拟用户)的数目,每个虚拟用户请求之间间隔时间的长短。,随着服务器上负载的增加,吞吐量会不断攀升,直到到达一个点,并在这个点上稳定下来,基准测试的关键是要获得一致的、可再现的结果。假定测试的两个指标是服务器的响应时间和吞吐量,会受到负载的影响。而负载又受两个因素影响:,与服务器通信的用户越多,负载就越大。同样,请求之间间隔时间越短,负载也越大。这两个因素的不同组合会产生不同的服务器负载等级.,2、性能测试,基准测试(2),在某一点上,执行队列开始增长,因为服务器上所有的线程都已投入使用,传入的请求不再被立即处理,而是放入队列中,当线程空闲时再处理。,当系统达到饱和点,服务器吞吐量保持稳定后,就达到了给定条件下的系统上限。但是,随着服务器负载的继续增长,响应时间也随之延长,虽然吞吐量保持稳定。,2、性能测试,基准测试(3),将系统置于相同的高负载下,将请求之间间隔时间设为零。这样服务器会立即超载,并开始构建执行队列。如果请求(虚拟用户)数保持一致,基准测试的结果会非常精确 flat运行是获得基准测试数据的理想模式,两个事务的响应时间曲线,2、性能测试,性能规划测试,性能规划测试的目标是找出在特定的环境下,给定应用程序的性能可以达到何种程度。例如,如果要以5秒或更少的响应时间支持8,000个当前用户,需要多少个服务器?要确定系统的容量,需要考虑几个因素:用户中有多少是并发与服务器通信的。每个用户的请求间时间间隔是多少。,2、性能测试,性能规划测试(2),如何加载用户以模拟负载状态?最好的方法是模拟高峰时间用户与服务器通信的状况。如果用户负载状态是在一段时间内逐步达到的,选择ramp-up测试,每隔几秒增加x个用户;如果所有用户是在一个非常短的时间内同时与系统通信,就应该使用flat测试,将所有的用户同时加载到服务器.什么是确定容量的最好方法?结合两种负载类型的优点,并运行一系列的测试;如:首先使用ramp-up测试确定系统支持的用户范围该范围内不同的并发用户负载进行一系列的flat测试,更精确地确定系统的容量。,2、性能测试,渗入测试,渗入测试是一种比较简单的性能测试。渗入测试所需时间较长,它使用固定数目的并发用户测试系统的总体健壮性。这些测试将会通过内存泄漏、增加的垃圾收集(GC)或系统的其他问题,显示因长时间运行而出现的任何性能降低。建议运行两次测试一次使用较低的用户负载(要在系统容量之下,以便不会出现执行队列),一次使用较高的负载(以便出现积极的执行队列)。,2、性能测试,峰谷测试,兼有容量规划ramp-up测试和渗入测试的特征,目标是确定从高负载(例如系统高峰时间的负载)恢复、转为几乎空闲、然后再攀升到高负载、再降低的能力。,3、负载测试,(1)负载测试 也称压力测试、强度测试。负载测试通过模拟实际应用的软硬件环境及用户使用过程的系统负荷,逐渐加载或一次性加载,长时间或超大负荷地运行软件,以测试系统的稳定性,并试图找出系统性能的瓶颈和异常的地方。,(2)负载测试总是迫使系统在异常的资源配置下运行。例如:当中断的正常频率为每秒12次时,运行每秒产生10个中断的测试用例;定量地增长数据输入量,检查对数据处理的反应能力;运行需要最大存储空间(或其他资源)的测试用例;运行可能导致虚拟机崩溃或对磁盘进行大数据量存取操作的测试用例。,(3)负载测试中加压的方法 1)增加并发用户数2)增加每秒请求处理的事务数3)增加中断次数,4、安全测试,安全测试检查系统对非法侵入的防范能力。安全测试期间,测试人员假扮非法入侵者,采用各种办法试图突破防线。任务 想方设法截取或破译口令;专门开发软件来破坏系统的保护机制;故意导致系统失败,企图趁恢复之机非法进入;试图通过浏览非保密数据,推导所需信息等等。,5、恢复性测试,目的:恢复测试主要检查系统的容错能力 恢复测试中需要检查以下各项:(1)错误探测功能(2)能否切换或启动备用的硬件;(3)在故障发生时能否保护正在运行的作业和系统状态;(4)在系统恢复后能否从最后记录下来的无错误状态开始继续执行作业,等等。(5)掉电测试:,6、配置测试,目标:在不同的硬件配置下,检查系统是否发生功能或者性能上的问题方法:一般需要建立测试实验室,7、兼容性测试,目标:检验被测试应用对其他应用或者系统的兼容性。,常见的兼容性问题:(1)软件产品在不同的软件环境下都能够按要求正常运行吗?(2)是否能够成功地实现数据的交换和共享?(3)一个软件产品的新版本是否能够识别和处理它的老版本产生的数据或文档?(4)一个系统软件的新版本出来后,老版本上的应用都能够在新版本上正常运行吗?(5)一个软件产品是否符合指定的标准和规范?,例如:假设用户使用不同的Windows版本,包括98/98 SE/XP/2000/Me;并使用Office的不同版本,包括97/2000/2003/XP。经过分析用户不在Windows 98/98 SE/Me上使用OfficeXP/2003,只在WindowsXP上使用OfficeXP。请构造测试矩阵。,8、安装/卸载测试,应考虑在下列不同测试条件下执行(1)软件产品标明的最低配置(2)“干净”的操作系统(3)“脏”的操作系统(4)在不同的操作系统(5)升级安装(6)减少可用磁盘空间(7)中途取消(8)改变默认的安装路径,9、可靠性测试,通常使用以下几个指标来度量系统的可靠性:平均失效等待时间(MTTF,Mean Time To Failure)平均失效间隔时间(MTBF,Mean Time Between Failure)因故障而停机的时间在一年中应不超过多少时间。,软件可靠性是产品在规定的条件下和规定的时间内完成规定功能的能力,它的概率度量称为可靠度.,软件可靠性模型,1、平均失效等待时间(MTTF)的估算假设(1)单位长度中的错误总数 近似为常数;(2)错误检出率正比于程序中残留错误数,而MTTF与程序中残留错误数成反比;(3)错误不可能完全检出,但一经检出立即得到改正。,软件可靠性模型,1、平均失效等待时间(MTTF)的估算设 t:程序的测试时间 ET:测试前的错误总数 Ec(t):在时间(0,t)期间纠正的错误数 Er(t):在时间t时的遗留错误数 IT:程序的长度或指令的总数 则 Er(t)=ET-Ec(t)用 IT除以上述等式两边,得到错误的规格化值,假设 N=程序中原来残留的错误数;S=新植入程序的错误数;n=测试中发现的原有错误数;s=测试中发现的植入错误数 假设测试中对这两类错误具有同样的发现能力,则有,2、错误植入模型,随机地把程序中一部分原有的错误加上标记,然后根据测试过程中发现的有标记错误和无标记错误的比例,估算程序中错误的总数。,3、Hyman分别测试法,怎样随机地给一部分错误加标记:具体做法:在测试过程的早期阶段,由测试员甲和测试员乙分别测试同一个程序的两个副本,由另一名分析员分析他们的测试结果。用表示测试时间,假设=0 时错误总数为B0;=1时测试员甲发现的错误数为B1;=1时测试员乙发现的错误数为B2;=1时两个测试员发现的相同错误数为bc。,如果认为测试员甲发现的错误是有标记的,即程序中有标记的错误总数为B1,则测试员乙发现的B2个错误中有bc个是有标记的。假定测试员乙发现有标记错误和发现无标记错误的概率相同,则可以估计出测试前程序中的错误总数为:,10、疲劳测试,目标:在一段时间内(经验上一般是连续72小时)保持系统功能的频繁使用,检查系统是否发生功能或者性能上的问题方法:人为设置不同功能的连续重复操作工具:一般需要使用工具,习 题1、系统集成测试常见的模式有哪几种?各自优缺点是什么?2、集成测试与单元测试的区别与联系是什么?3、系统测试的主要类型有哪些?4、系统测试使用的主要技术是黑盒测试技术还是白盒测试技术?5、使用手工测试能够进行系统的性能测试分析吗?6、在做系统测试之前还需要和用户进行沟通吗?7、你认为系统测试和集成测试有哪些区别?,8、对一个包含有10000条机器指令的程序进行一个月测试后,总共改正了15个错误,此时MTTF=10h;经过两个月的测试后,总共改正了25个错误,此时MTTF=15h,要求:估计程序中固有的错误总数。,