软件测试定义
在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。换句话说,软件测试是一种实际输出与预期输出之间的审核或者比较过程。
测试流程
软件测试按照研发阶段一般分为5个部分:单元测试、集成测试、确认测试、系统测试、验收测试、回归测试;
单元测试:白盒为主,黑盒为辅
单元测试又称模块测试,是就是对程序代码中最小的涉及模块单元进行测试。目的是检测软件模块单元的正确性。单元测试需要从程序内部结构出发设计测试用例,多个模块可以平行地独立进行单元测试。
接口测试:通过所测试模块的数据进行测试。调用所测模i模块输入的参数的个数、顺序和属性是否匹配;
局部数据测试:局部数据结构是为了保证临时存储在模块内的数据在程序执行过程中完整、正确,模块的局部数据结构往往是错误的根源;
路径测试:对模块中重要的执行路径进行测试;
错误处理测试:比较完善的模块设计要求能遇见出错的条件,并设置适当的出错处理,以便在一旦程序出错时,能对出错程序重做安排,保证其逻辑上的正确性;
边界测试:软件经常在边界上失效,边界条件测试是一项基础测试,也是后面系统测试中的功能测试的重点;
增量测试与非增量测试
集成测试:黑盒为主,白盒为辅
集成测试又称组装测试,是将软件产品各个模块组装起来,目的是检验软件接口中是否正确性,以及组装后的整体功能、性能表现。
模块组装成系统的方式:一次性组装方式(非增式集成)和增殖式组装方式。
非增式集成:
先对模块分别进行测试,再把所有模块组装进行测试,但是发现错误不容易定位。
增殖式集成:自顶向下;自底向上;分层集成;三明治集成;基层集成;高频集成;
先对一个个模块进行模块测试,然后将这些模块逐步组装成系统。
1,自顶向下的增殖方式(不需要驱动模块)
将模块铵系统程序结构,严控制层次自顶向下进行组装。
首先以主模块作为被测模块兼驱动模块,所有直属主模块的下属模块全部用桩模块代替,对主模块进行测试。再采用深度优先或广度优先的策略,用实际模块代替桩模块,再用桩模块代替它们的直接下属模块,与已经测试的模块构成新的子系统。然后进行回归测试。
优点:能够较早的发现主要控制方面的问题
缺点:需要建立桩模块,增加了一些附加的测试,涉及算法和输入输出的模块一般在底层,这些底层模块要到组装和测试的后期才能发现。一旦发现问题就会出现过多的回归测试。
2,自底向上的增殖方式(不需要驱动模块)
由驱动模块控制最底层模块的并行测试。
优点:不需要建立桩模块,建立驱动模块要比建立桩模块要简单得多,同时涉及到算法已近输入输出的模块要先测试,把最容易出现问题的部分在早期解决。
缺点:程序一直未能作为一个实体存在,直到最后一个模块加上才能形成一个实体,控制方面最后才能接触。
3,混合增殖式
集成测试层次:子系统内集成测试;子系统间集成测试;模块间集成测试。
在集成测试中,我们主要关注以下内容:
1. 把各个模块连接起来时,穿越模块接口的数据据是否会丢失。
2.各个了模块组合起来,能否达到预期要求的功能。
3.一个模块的功能是否会对另一个模块的功能产生不利影响。
4.全局数据据结构是否有问题。
5.单个模块的误差积累起来是否会被放大,从而达到不可接受的程序。
集成测试完成的标志:
1、成功执行了测试计划中规定的所有集成测试
2、修改了所发现的错误
3、测试结果通过专门小组的评审
4、集成测试需要提交的测试报告:
5、集成测试计划、集成测试规格说明书以及集成测试分析报告
确认测试:黑盒.
确认测试的目标是验证软件的功能和性能以及其他特性是否与用户的要求一致。确认测试一般包括有效性测试和软件配置复查。一般有第三方测试机构进行。
系统测试:黑盒
系统测试是对已经集成的好的系统进行彻底的测试,以验证软件系统的正确性和性能是否满足其所指定的要求。此阶段软件作为计算机系统的一部分,与硬件、网络、外设、支撑软件、数据以及人员结合在一起,在实际或模拟环境下,对计算机系统进行测试,目的在于与系统需求比较,发现问题。
解决问题:各个组成但源代码是否符合开发规范?接口是否存在问题?整体功能有无错误?界面是否符合设计规范?性能是否满足用户需求?
一般系统的主要测试工作都集中系统测试阶段。根据不同的系统,所进行的测试种类也很多。一般包括:
功能测试:功能测试是对产品的各功能进行验证,以检查是否满足需求的要求。
性能测试:以系统设计初期规划的性能指标为预期目标,对系统不断施加压力,验证系统在资源可接受范围内,是否能达到性能预期。
强度测试(Stress Testing = Too many users, too much data, too little time and too little room)
是一种性能测试,他在系统资源特别低的情况下软件系统运行情况,目的是找到系统在哪里失效以及如何失效的地方。包括:
Spiketesting:短时间的极端负载测试
Extreme testing:在过量用户下的负载测试
Hammer testing:连续执行所有能做的操作
压力测试:超过安全负载的情况下,对系统继续施加压力,直到系统崩溃或不能再处理任何请求,以此获得系统最大压力承受能力。关注崩溃时间点。
容量测试:(Volume Testing = Large amounts of data)
确定系统可处理同时在线的最大用户数。,使系统承受超额的数据容量来发现它是否能够正确处理。
负载测试:(Load Testing = Large amount of users)
对系统不断地增加并发请求以增加系统压力,直到系统的某项或多项性能指标达到安全临界值,如某种资源已经呈饱和状态,这时继续对系统施加压力,系统的处理能力不但不能提高,反而会下降。关注how much。
安全测试:
容错测试:
性能测试的曲线如上图,测试目标是评估系统性能是否符合需要及设计目标;
随着压力的持续增加,系统处理能力增加变缓,直到达到一个最大值(c点),这是系统的最大负载点,这一段被称作负载测试。测试目标是评估当系统因为突发事件超出日常访问压力的情况下,保证系统正常运行情况下能够承受的最大访问负载压力;
超过这个点后,再增加压力,系统的处理能力反而下降,而资源消耗缺更多,知道资源消耗达到极限(d点),这个点可以看做是系统的崩溃点,超过这个点极限加大并发请求数目,系统不能再处理任何请求,这一段被称作压力测试,测试目标是评估可能导致系统崩溃的最大访问负载压力。
性能测试反应的是系统在实际生产环境中使用时,随着用户并发访问数量的增加,系统的处理能力与性能曲线相对应的是用户访问的等待实际(系统响应时间),如下图:
验收测试
以用户为主的测试,软件开发人员和质量保证人员参加,由用户设计测试用例。不是对系统进行全覆盖测试,而是对核心业务流程进行测试。
根据合同、《需求规格说明书》或《验收测试计划》对产品进行验收测试。对于通过验收测试的软件产品/参照《配置管理规范》中所规定的标识方法更改测试状态,同时项目经理负责编制《验收报告》。
非正式验收测试之前,还可能有α测试和β测试。
α测试:一般在开发环境下进行,也可以是开发机构内部用户在模拟实际操作环境下进行。
β测试:用户在实际使用环境下进行的测试,开发者通常不在现场。
回归测试
回归测试是对软件进行修改之后进行的测试。其目的是检验对软件进行的修改是否正确,可以发生在任何一个阶段。
——知识点——
黑盒测试:把软件测试看作一个黑盒子,我们不关心盒子的是什么的样子,只关心软件输入的数据和输出的结果。
它只检查程序功能是否按照需求规格说明书的规定正常使用,程序能否接收输入数据而产生正确的输出信息。
黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。
白盒测试:把盒子盖子打开,去研究里面的源代码和程序结果。
它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。
关注源代码的正确性和逻辑性。