1第1页第6章软件测试第6章软件测试(下)软件测试策略调试软件测试报告2第2页第6章软件测试软件测试策略软件测试阶段完成的主要任务有两类:一类是局部模块的测试,它是整个测试阶段的基石。另一类是软件系统全局结构的测试,它构成整个测试系统的大厦。从局部到全局,是经过一系列测试过程转换而成,它们包括单元测试、集成测试、确认测试和系统测试,每个测试过程都有各自不同的测试策略。3第3页第6章软件测试测试步骤及策略所有测试过程都应采用综合测试策略;即先作静态分析,再作动态测试,并事先制订测试计划。单元测试单元测试单元测试被测模块被测模块集成测试设计信息已测试的模块确认测试已集成的模块软件需求系统测试已确认的软件可交付的软件系统其他元素软件测试策略4第4页第6章软件测试软件测试策略单元是软件测试过程中最小的测试单位,它有两个基本属性:单元是可以独立编译的最小组件;单元是由个人开发的软件组件。单元测试及其测试策略被测单元测试用例桩模块1桩模块2桩模块N……测试用例驱动模块5第5页第6章软件测试单元测试内容模块模块接口测试局部数据结构测试重要路径测试错误处理测试边界条件测试I/O参数值的个数、类型、次序、格式是否正确,I/O文件属性、操作是否正确等。数据说明是否正确、一致,变量及其初值定义是否正确等。检查“错误处理程序”本身的错误。边界条件常包括循环边界,最大最小值、控制流中等于、大于、小于的比较值等。重要路径通常是指完成模块功能的主要路径,一般是控制结构。软件测试策略6第6页第6章软件测试软件测试策略集成测试是指在完成单元测试后,将各单元模块依据设计的软件系统结构,按照一定的集成测试策略进行组装的过程。集成测试在组装各模块时,应该注意下列因素:各模块间的数据传递是否会丢失;各模块间的数据传递是否按照期望进行传递;各模块组装后,是否能实现所期望的更复杂的功能;各模块组装后,是否出现对全局数据结构、公共数据操作的混乱,资源的竞争;各模块组装后,集成的误差是否会被快速放大,直到难以接受为止。集成测试7第7页第6章软件测试软件测试策略集成测试策略集成测试的重点,是将各模块按照软件系统结构的定义,将软件模块组装在一起。如何实施组装过程,使得系统既能快速集成,又能准确发现在组装过程中出现的错误和问题呢?这需要正确的集成测试方法。⑴非渐增式集成非渐增式集成是一次集成过程,即先按照各模块在系统结构中的位置,设计驱动模块或桩模块进行辅助测试。然后将测试合格的各模块按照系统结构一次性完成系统集成的过程。⑵渐增式集成渐增式集成不同于非渐增式集成,它不是将模块一次性组装,而是按照系统结构逐渐将模块依次集成到系统中。从集成的过程来看,渐增式集成过程分为自底向上的集成和自顶向下的集成。8第8页第6章软件测试渐增式组装策略是先进行模块测试,然后将这些模块逐步组装成较大的系统,每连接一个模块进行一次测试。两种方案:设计驱动模块或桩模块,对每一个新组装的子系统进行测试,对发现问题较多的子系统或模块应该用白盒法作回归测试。自顶而下增值自底而上增值软件测试策略9第9页第6章软件测试M1M4M3M2M6M5自顶向下增值S5M1S1S1S1S2S2S2S3S3S3第一步,测试主控模块M1,设计桩模块S1、S2、S3,模拟被M1调用的M2、M3、M4。M2M3M4第二步,依次用M2、M3、M4替代桩模块S1、S2、S3,每替代一次进行一次测试。S4S4S4S5S5第三步,对由主控模块M1和模块M2、M3、M4构成的子系统进行测试,设计桩模块S4、S5。M5M6第四步,依次用模块M5和M6替代桩模块S4、S5,并同时进行新的测试。组装测试完毕。软件测试策略10第10页第6章软件测试M3M6M5D1D2D3D1D1D2D2D3D3M2M4M1第四步,把已测试的子系统按程序结构连接起来完成程序整体的组装测试。D4D4D4D5D5D5M1M4M3M2M6M5第一步,对最底层的模块M3、M5、M6进行测试,设计驱动模块D1、D2、D3来模拟调用。第三步,设计驱动模块D4、D5和D6模拟调用,分别对新子系统进行测试。第二步,用实际模块M2、M1和M4替换驱动模块D1、D2、D3。D6软件测试策略自底向上增值11第11页第6章软件测试无论是自顶而下增值还是自底而上增值,还可选择深度优先或者宽度优先增值。举例:按自顶而下增值法,写出下图中分别按照深度优先或者宽度优先增值的模块组装次序。ABCDHGJEFIKLMN软件测试策略12第12页第6章软件测试自顶而下增值优点:能够尽早发现系统主控方面的问题。缺点:无法验证桩模块是否完全模拟了下属模块的功能。自底而上增值优点:驱动模块较易编写,且能够尽早查出底层涉及较复杂的算法和实际的I/O模块中的错误。缺点:最后才能发现系统主控方面的问题。集成过程的原则①尽早测试关键模块。②尽早测试包含I/O的模块。软件测试策略13第13页第6章软件测试软件测试策略确认测试确认测试也称为验收测试,它是指在模拟用户实际操作的环境下(或开发环境下),运用黑盒测试法验证软件的有效性是否符合需求。确认测试完成后,可能产生两种情形:⑴软件系统功能、性能、领域等要素满足用户需求规格说明,软件是有效的。⑵软件系统功能、性能、领域等要素存在不满足用户需求规格说明的某些方面,确认测试文档中给出了存在的错误或问题。14第14页第6章软件测试软件测试策略系统测试系统测试是指软件系统作为整个计算机系统的一部分,与计算机系统的硬件系统、数据、外部其它软件、文档等要素相结合,在用户实际运行环境中进行的确认测试。功能测试性能测试压力测试容量测试安全测试文档测试恢复性测试备份测试系统测试的内容:15第15页第6章软件测试软件测试策略系统测试——压力测试压力测试也成为强度测试,是指系统在各种资源超负荷得情况下对运行状况进行测试。压力测试的基本思路:计算机系统资源匮乏的条件下运行的测试,是测试系统在使用峰值时的性能。压力测试的主要对象包括:内存、外部存储、网络负载、中断处理、缓冲区、事务队列、在线用户量等。16第16页第6章软件测试软件测试策略系统测试——压力测试次数条件实际机器数浏览器LoadRunner模拟的独立IP数浏览器1延迟5分钟6台4台IE模拟50个独立IP模拟40个独立IPIE2延迟5分钟6台4台IE模拟50个独立IP模拟40个独立IPFireFox3延迟5分钟6台4台FireFox模拟50个独立IP模拟40个独立IPIE4延迟5分钟6台4台FireFox模拟50个独立IP模拟40个独立IPFireFox对一个最大并发量在100台的票务系统进行压力测试。17第17页第6章软件测试软件测试策略系统测试——容量测试容量测试是面向数据的测试,是指在系统运行时超额处理大数据量时的能力。•在线系统:测试在某时临时缓冲区是否快溢出或填满,执行时间是否停机。要混合使用创建、更新、读和删除不同的操作。•数据库系统:每个作业是在大量的业务数据下运行的,比如数据库中所有对象都需要处理的业务,复杂的表检索。•文件交换:尤其长文件,长度长于通讯协议里典型最大值(1,2,4,8,...兆-或千兆字节)。比如邮件协议不支持的长度。大长度通常是为了在通信中超时设定。•磁盘空间:试着去填充磁盘中任何有磁盘空间的地方。检查如果是已经不再有空余空间,甚至还有更多数据要填入这个系统的情况下,会发生什么情况。有没有像溢出缓冲区这样的存储区?是否会有任何警告信号,是否有数据丢失?•文件系统:文件系统的文件的最大数目或者最大长度。18第18页第6章软件测试软件测试策略系统测试——安全测试安全测试用于验证系统安全保护机制是否能在实际运行中,保护系统不受非法侵入。安全测试主要内容有:外部的非法侵入、内部操作的超越权限、出错时系统的反应速度、安全性性能的花费时间等。19第19页第6章软件测试简单的例子:假设有txtName和txtPassword接受页面输入用户名和密码,然后构造如下sql语句:select*from[User]whereuserName='+txtName+’anduserPassword='+txtPassword+';这时,如果输入的用户名为your,但不知道密码,于是在用户名处输入:your'--select*from[User]whereuserName='your'--'anduserPassword=....注意:--,会把后边的sql作为注释,这就是sql注入。软件测试策略系统测试——安全测试20第20页第6章软件测试软件测试策略系统测试——恢复性测试恢复性测试是对系统出现异常时,系统能从错误中正确恢复的能力测试。借助于系统运行日志,恢复性测试可以通过系统自动恢复或人工恢复两种形式。恢复内容也主要包括两种形式:一种是恢复系统在出现异常之前的所有活动,即系统功能从开始运行到出现异常之前的所有操作重新执行一次。另一种是恢复系统正在处理的数据,这类恢复需要和系统的备份相关。21第21页第6章软件测试硬件及有关设备故障。测试对于硬件及设备故障是否有有效的保护及恢复能力,系统是否具有诊断、故障报告及指示处理方法的能力。例如,设备掉电后(如客户端和服务器端断电)的可恢复程度。软件系统故障。测试系统的程序及数据是否有足够可靠的备份措施,在系统遭破坏后是否具有重新恢复正常工作的能力,对系统故障是否自动检测和诊断的功能。在异常情况时是否记录故障前后的状态,搜集有用信息供测试分析。数据故障。测试数据处理周期未完成时的恢复程度,例如数据交换或同步进程被中断,异常终止或提前终止的数据库进程,最后还有操作异常等情况。通信故障和错误。测试有没有纠正通信传输错误的措施,有没有恢复到与其他系统通信发生故障前原状的措施,还有对通信故障所采取的措施是否满足运行要求等。软件测试策略系统测试——恢复性测试22第22页第6章软件测试软件测试策略α测试和β测试α测试是在开发环境下,由用户和软件开发人员、测试人员共同对系统进行的测试。测试的目的是尽可能模拟用户使用环境,同时反映系统功能、性能的运行能力。β测试是在系统实际用户使用环境下进行的测试,并且整个测试过程都是用户独立进行,不受开发人员和测试人员的影响。β测试是涉及面最广、测试用户最多、最能真实反映用户使用的测试,但其测试时间长、花费较大、测试过程难以控制。23第23页第6章软件测试调试软件测试的目的是发现错误,测试完成之后的软件调试目的是为了定位和修改错误,以保证软件运行的正确性和可靠性。软件调试活动主要分为以下三部分内容:⑴确定软件系统出现错误的准确位置,这需要一个过程,特别需要的是调试人员的经验和技巧。⑵对发现错误的修改。修改错误也需要经验,如分析修改的程序是否涉及全局数据、是否涉及面向对象机制(如虚函数)、是否影响修改函数的主调函数结果的正确性等。⑶对修改后的内容重新进行测试,特别是涉及到全局数据结构、文件结构、系统结构等内容的修改,还必须进行确认测试和系统测试。24第24页第6章软件测试调试调试过程执行测试测试结果与预期结果分析调试修改回归测试附加测试软件配置测试用例修改测试文档调试结果无外乎两种:一是正确定位错误位置,并正确修改;二是难以确定错误位置,或错误难以纠正。软件调试与编程同为脑力劳动,而且调试过程是一个漫长而艰苦的过程,调试遇到的障碍有时甚至超过编程本身。25第25页第6章软件测试调试软件调试方法试探法归纳法演绎法回溯法26第26页第6章软件测试软件测试报告测试报告文档在软件测试各阶段完成之前,必须编写软件测试报告,并按照评审标准对软件测试报告进行评审。编写测试报告的目的是发现并消除其中存在的遗漏、错误和不足,使得测试用例、测试预期结果等内容符合标注及规范的要求。通过了评审的软件测试报告成为基线配置项,纳入项目管理的过程。软件测试报告包括软件测试说明和软件测试报告两个部分。27第27页第6章软件测试第6章软件测试(下)小结软件测试策略调试软件测试报告