软件测试方法和技术-Ch.6集成测试和系统测试Zhu.Kerry@gmail.comKerryZhuZhu.Kerry@gmail.com第五章回顾Zhu.Kerry@gmail.com①单元测试的定义与进行单元测试的重要性②单元测试的目标与任务③静态测试技术的运用④动态测试技术的运用定义:单元测试是对软件基本组成单元进行的测试。目标:单元模块被正确编码任务1:模块接口测试任务2:模块局部数据结构测试任务3:模块边界条件测试任务4:模块独立执行通路测试任务5:模块的各条错误处理通路测试第六章集成测试和系统测试Zhu.Kerry@gmail.com6.1系统集成的模式与方法6.2功能测试6.3系统测试6.4压力测试、容量测试和性能测试6.5安全性、可靠性和容错性测试6.1系统集成的模式与方法软件集成测试前的准备◇人员安排:有经验的测试人员和软件开发者共同完成集成测试的计划和执行◇测试计划:包括测试的描述和范围、预期目标、测试环境、集成次序、测试用例的设计、时间安排◇测试内容:单元的接口是否吻合、代码是否符合规定的标准、界面是否统一◇集成模式:渐增式测试模式、非渐增式测试模式◇测试方法:该阶段以黑盒测试为主。Zhu.Kerry@gmail.com集成测试的模式渐增式测试模式与非渐增式测试模式非渐增式测试模式:先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,如大棒模式。渐增式测试模式:把下一个要测试的模块同已经测试好的模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。Zhu.Kerry@gmail.com各自的优缺点:渐增式测试模式需要编写的软件较多,工作量较大,非渐增式测试工作量较小渐增式测试模式发现模块间接口错误早,非渐增式测试模式发晚渐增式测试模式发现错误诊断易,非渐增式发现错误较难诊断非渐增式测试模式可并行测试渐增式测试模式测试更彻底,需要较多的机器时间自顶向下和自底向上集成方法Zhu.Kerry@gmail.com驱动程序/驱动模块(driver),用以模拟被测模块的上级模块。驱动模块在集成测试中接受测试数据,把相关的数据传送给被测模块,启动被测模块,并打印出相应的结果。桩程序/桩模块(stub),也有人称为存根程序,用以模拟被测模块工作过程中所调用的模块。桩模块由被测模块调用,它们一般只进行很少的数据处理,例如打印入口和返回,以便于检验被测模块与其下级模块的接口自顶向下法(Top-downIntegration)从主控程序开始,沿着软件的控制层次向下移动,逐渐把各个模块结合起来。策略:深度优先/宽度优先Zhu.Kerry@gmail.com自顶向下法的主要优缺点:1、不需要测试驱动程序,能够在测试阶段的早期限实现并验证系统的主要功能2、能在早期发现上层模块的接口错误3、需要桩模块,可能遇到与此相联系的测试困难,低层关键模块中的错误发现较晚4、在早期不能充分展开人力自底向上法(Bottom-upIntegration)Zhu.Kerry@gmail.com自底向上法的主要优缺点混合策略(ModifiedTop-downIntegration)Zhu.Kerry@gmail.com混合法:对软件结构中较上层,使用的是“自顶向下”法;对软件结构中较下层,使用的是“自底向上”法,两者相结合大棒集成方法(Big-bangIntegration)Zhu.Kerry@gmail.com采用大棒集成方法,先是对每一个子模块进行测试(单元测试阶段),然后将所有模块一次性的全部集成起来进行集成测试。因为所有的模块一次集成的,所以很难确定出错的真正位置、所在的模块、错误的原因。这种方法并不推荐在任何系统中使用,适合在规模较小的应用系统中使用。三明治集成方法(SandwichIntegration)Zhu.Kerry@gmail.com采用三明治方法的优点是:它将自顶向下和自底向上的集成方法有机地结合起来,不需要写桩程序因为在测试初自底向上集成已经验证了底层模块的正确性。采用这种方法的主要缺点是:在真正集成之前每一个独立的模块没有完全测试过。改善的三明治集成方法Zhu.Kerry@gmail.com改进的三明治集成方法,不仅自两头向中间集成,而且保证每个模块得到单独的测试,使测试进行得比较彻底。几种集成方法性能的比较Zhu.Kerry@gmail.com自底向上自顶向下混合策略大棒三明治改进三明治集成早早早晚早早基本程序能工作时间晚早早晚早早需要驱动程序是否是是是是需要桩程序否是是是是是工作并行性中低中高中高特殊路径测试容易难容易容易中等容易计划与控制容易难难容易难难6.2功能测试Zhu.Kerry@gmail.com功能测试:依据产品规格说明书来检验被测试系统是否满足各方面功能的使用要求在系统集成过程中和系统集成之后所进行的系统功能测试。不仅要考虑模块之间的相互作用,而且要考虑系统的应用环境,其衡量标准是实现产品规格说明书上所要求的功能目的和内容程序安装、启动正常,有相应的提示框、错误提示等每项功能符合实际要求系统的界面清晰、美观菜单、按钮操作正常、灵活,能处理一些异常操作能接受正确的数据输入,对异常数据的输入可以进行提示、容错处理等数据的输出结果准确,格式清晰,可以保存和读取功能逻辑清楚,符合使用者习惯系统的各种状态按照业务流程而变化,并保持稳定支持各种应用的环境能配合多种硬件周边设备软件升级后,能继续支持旧版本的数据与外部应用系统的接口有效界面测试数据测试操作测试逻辑测试接口测试功能测试的方法1.等价类划分法2.边界值分析法3.错误推测法4.因果图法5.组合分析法Zhu.Kerry@gmail.com我要测试所有的功能6.3系统测试定义:将经过集成测试后的程序,作为计算机系统的一部分,与计算机硬件、某些支持软件、数据和人员等系统元素结合起来,在实际运行环境下对计算机系统进行一系列的严格有效的测试来发展软件的潜在问题,保证系统的运行。系统测试内容压力测试(Stresstest)容量测试(Capacitytest)性能测试(Performancetest)安全测试(Securitytest)容错测试(Recoverytest)Zhu.Kerry@gmail.com回归测试的目的所做的修改达到了预定的目的,如错误得到了改正,新功能得到了实现,能够适应新的运行环境等;不影响软件原有功能的正确性。回归测试的方法再测试全部用例基于风险选择测试基于操作剖面选择测试再测试修改的部分回归测试Zhu.Kerry@gmail.com再测试全部用例选择测试用例库中的全部测试用例构成回归测试包,是一种比较安全的方法,遗漏回归错误的风险最低,但测试成本最高。再测试全部测试用例可以应用到任何情况下,基本上不需要进行用例分析和设计,但是随着开发工作的进展,测试用例不断增多而带来相当大的工作量,全受预算和进度的限制。基于风险选择测试基于一定的风险标准来从测试用例库中选择回归测试包。运行最重要的,关键的,可疑的测试,而跳过那些次要的,例外的测试用例或那些功能非常稳定的模块,运行那些次要用例即便发现风险,这些缺陷的严重性也较低基于操作剖面选择测试如果测试用例是基于软件操作剖面开发的,测试用例的分布情况反映了系统的实际使用情况,回归测试所使用的测试用例个数可以由测试预算确定,回归测试可以优先选择那些针对最重要或最频繁使用功能的测试用例,释放和缓解最高级别的风险,有助于尽早发现那些对可靠性有最大影响的故障再测试修改的部分当测试者对修改的局部有足够的信心时,可以通过相依性分析识别软件的修改情况,并分析修改的影响,将回归测试局限于被改的模块和它的接口上。通常一个回归错误一定涉及被修改的或新加的代码。在允许的条件下,回归测试尽可能覆盖受到影响的部分。这种方法可以在一个给定的预算下最有效地提高系统可靠性,但需要丰富的经验和深入地代码分析。回归测试Zhu.Kerry@gmail.com6.4压力测试、容量测试和性能测试Zhu.Kerry@gmail.com压力测试、容量测试和性能测试的测试目的虽然有所不同,但其手段和方法在一定程度上比较相似,通常会使用特定的测试工具,来模拟超常的数据量、负载等,监测系统的各项性能指标,如CPU和内存的使用情况、响应时间、数据传输量等。一定要设法破坏它!性能测试概念和目的用来测试软件在系统集成中的运行性能特别针对实时和嵌入式系统性能测试可以在测试过程的任意阶段进行。性能测试概念和目的性能测试的目的:为了验证系统是否达到用户提出的性能指标,同时发现系统中存在的性能瓶颈,起到优化系统的目的。性能测试指标的来源:用户对各项指标提出的明确需求;如果用户没有提出性能指标则根据用户需求、测试设计人员的经验来设计各项测试指标。(需求+经验)主要的性能指标:服务器的各项指标(CPU、内存占用率等)、后台数据库的各项指标、网络流量、响应时间HTTP连接性能表HTTP1×51×1001×50010×550×5cpu(%)1.24.520424物理内存(MB)553832178232加入时间(S)12.0412.3813.6312.019.17断开时间(S)8.587.948.268.798.22性能测试Zhu.Kerry@gmail.com0510152025301X51X1001X5001X7001X90010X5HTTPTCPHTTP&TCP看看在各种情况下CPU使用的效率性能测试要点测试环境应尽量与用户环境保持一致,应单独运行尽量避免与其他软件同时使用。性能测试一般使用测试工具和测试人员编制测试脚本来完成。性能测试的重点在于前期数据的设计与后期数据的分析。性能测试的用例主要涉及到整个系统架构的问题,所以测试用例一旦生成,改动一般不大,所以做性能测试的重复使用率一般比较高。6.4压力测试Zhu.Kerry@gmail.com压力测试是在一种需要反常数量、频率或资源的方式下,执行可重复的负载测试,以检查程序对异常情况的抵抗能力,找出性能瓶颈。异常情况主要指的是峰值(瞬间使用高峰)、大量数据的处理能力、长时间运行等情况。压力测试总是迫使系统在异常的资源配置下运行。压力测试压力测试Zhu.Kerry@gmail.com试试这个游戏站点的承受力压力测试的几种情况当中断的正常频率为每秒1-2个时,运行每秒产10个中断的测试用例定量地增长数据输入率,检查对数据处理的反应能力运行需要最大存储空间的测试用例测试压力估算产品说明书己说明最大设计容量,则最大设计容量为最大压力值根据规格说明书的设计要求或以往版本的实际运行经验对测试压力进行估算测试环境准备硬件环境、网络环境、测试程序(模拟客户端的操作)、数据的准备压力稳定性测试:在选定的压力值下,持续运行24小时以上进么稳定性测试。客户端通常由测试工具模拟真实用户,不停的进行各种操作,监视服务器和客户端的必要性能指标。破环性加压测试:在压力稳定性测试中可能会出现一些问题,如系统性能明显降低,但仅从以上的测试中很难暴露出真实的原因,通过不断加压的破坏性手段,往往能快速造成系统的崩溃或让问题明显的暴露出来问题分析通常采用黑盒测试查看服务器的进程及相应的日志文件,可能立即找到问题的关键。优秀的程序员会给程序加上保护、跟踪机制及错误处理机制,备份日志文件以供参考查看监视系统性能的日志文件,找出问题出现的关键时间检查测试运行参数,进行适当调整,重新测试,看看是否能够再现问题对问题目进行分解,屏蔽某些因素或功能,试着重现问题容量测试Zhu.Kerry@gmail.com容量测试目的是通过测试预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),系统在其极限值状态下还能保持主要功能正常运行。容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。6.5安全性测试,可靠性和容错性测试Zhu.Kerry@gmail.com安全性测