今天说一下软件测试模型,说到软件测试模型就要先说一下软件开发模型,之后是软件测试分类以及测试用例。
1.软件开发过程模型
这里要介绍的是瀑布模型,快速原型模型,螺旋模型这三种开发模型
为什么要先说一下开发模型?
软件测试与软件的开发模式有着紧密的联系,作为一名测试人员,应该充分理解软件的开发模式,以便找准自己在其中的位置,从而发挥自身的价值
1.1开发模型-瀑布模型 Waterfall Model
瀑布模型介绍
该模型给出了固定的顺序,将生存期活动从上一个阶段向下一个阶段过渡,如同流水下泻,最终得到所开发的软件产品。
瀑布模型定义
瀑布模型是将软件生存周期的各项活动规定为按固定顺序连接的若干阶段工作,形如瀑布流水,最终得到软件产品。
1.是线性模型的一种,在所有模型中占有重要地位,是所有其他模型的一个基础。
2.每一个阶段执行一次,按线性顺序进行软件开发
3.测试的切入点:测试阶段处于软件是先后,必须在代码完成后留出足够时间给测试活动,否侧将导致测试不充分,很多问题到项目后期才暴露。
瀑布模型的优缺点
优点
1.开发的各个阶段比较清晰
2.强调早期计划及需求调查
3.适合需求稳定的产品开发
缺点
1.依赖与早期的需求检查,不适应需求变化
2.单一流程不可逆
3.风险往往延至后期才显露,失去及早纠正的机会
4.前面未发现的错误会传递并扩散到后面阶段,可能导致项目失败
1.2开发模型-快速原型模型【了解】
在开发真实系统(软件,软件系统)之前,构造一个原型,在该原型的基础上,逐渐完成 整个系统的开发工作。
1.第一步是构建一个快速原型,实现用户与系统的交互,用户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足用户的要求,开发人员可以确定用户的真正需求是什么。
2.第二步是在第一步的基础上开发出用户满意的软件产品。
快速原型模型的优缺点
优点
克服瀑布模型的缺点,更好的满足用户需求并减少由于软件需求不明确带来的项目开发风险。适合预先不能确切定义需求的软件系统开发。
缺点
不适合大型系统的开发(适合开发小型的、灵活性高的系统)。前提要有一个展示性的产品原型,因此在一定程度上可能会限制开发人员的创新。
1.3开发模型-螺旋模型【了解】
螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期大致和瀑布模型相符合,螺旋模型沿着螺旋线旋转,即在坐标的4个象限上分别表示了4个方面的活动。
a)制定计划
b)风险分析
c)是会开发
d)客户评估
螺旋模型的优缺点
优点
螺旋模型很大程度是一种风险驱动的方法体系,因为在每个阶段之前以及经常发生的循环之前,都必须首先进行风险评估
缺点
采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能及时表示风险,势必会造成重大损失。过多的迭代次数会增加开发成本,延迟提交时间。
2.测试模型
测试模型主要介绍V模型,W模型,H模型
2.1 V模型
* V模型是最具有代表意义的测试模型,旨在改进软件开发的效率和效果。
* V模型推出之前,人们通常把测试过程作为在需求分析、概要设计、详细设计、编码全部 完成之后的一个阶段,尽管当时已经出现了测试工作会占用这个项目周期一半的时间, 但是大多数人认为测试只是一个收尾工作;V模型在这个时候推出,就是为了改变之前行 业的普遍认识。
* V模型本身是软件开发中瀑布模型的变种,它反映了测试活动与分析和设计的关系。
* V模型标明了测试过程中本身存在的不同阶段,从左到右,描述了开发过程和测试过程间 的阶段对应关系。
V模型大体可以划分为以下几个不同的阶段步骤:需求分析、概要设计、详细设计、软件编码、单元测试、集成测试、系统测试、验收测试。(后四个是测试)
需求分析
首先要明确客户需要的是什么,需要软件做成什么样子,需要有哪几项功能,这一点上比较关键的是分析师和客户沟通时的理解能力与交互性。要求分析师能准确的把客户所要表达到的功能,实现方式,等表述出来,给出分析结果,写出需求规格说明书。
概要设计
主要是架构的实现,指搭建架构、表述各模块功能、模块接口连接和数据传递的实现等项事务
详细设计
对概要设计中表达的各模块进行深入分析,对各模块组合进行分析等,这一阶段要求达到伪代码级别,已经把程序的具体实现的功能,现象等描述出来。其中需要包含数据库设计说明。
软件编码
按照详细设计好的模块功能表,编程人员编出实际的代码。
单元测试
按照设定好的最小测试单元进行按单元测试,主要是测试程序代码,为的是确保各单元模块被正确的编译,单元的具体划分按不同的单位与不同的软件有不同,比如有具体到模块的测试,也有具体到类,函数的测试等。
集成测试
经过了单元测试后,将各单元组合成完整的体系,主要测试各模块间组合后的功能实现情况,以及模块接口连接的成功与否,数据传递的正确性等,其主要目的是检查软件单位之间的接口是否正确。根据集成测试计划,一边将模块或其他软件单位组合成系统,一边运行该系统,以分析所组成的系统是否正确,各组成部分是否合拍。
系统测试
经过了单元测试和集成测试以后,我们要把软件系统搭建起来,按照软件规格说明书中所要求,测试软件其性能功能是否和用户需求相符合,在系统中运行是否存在漏洞,等。
验收测试
主要就是用户在拿到软件的时候,在使用现场,会根据前边所提到的需求,以及规格说明书来做相应测试,以确定软件达到预期的效果。
V模型的优缺点
优点
测试V模型即包含了底层测试(单元测试)又包含了高层测试(系统测试);
V模型清楚地标识出了软件开发的阶段。
它采用自顶向下逐步求精的方式把整个开发过程分成不同的阶段,每个阶段的工作都很明确,因此便于控制开发过程。当所有阶段完成之后,该软件的开发过程也随之结束。
缺点
V模型一大缺点正是它自身的顺序性所导致的。到了测试阶段,程序已经完成,错误已经产生,很多前期的错误一直到测试阶段才发现,甚至无法发现,往往无从修改了。
同时实际的开发过程中,在需求阶段很难把用户的需求完全明确下来,因此,当需求变更时将会导致阶段反复,而且都要重复需求、设计、编码、测试等过程,返工量非常大,模型灵活性比较低。
2.2 W模型
W模型由Evolutif公司提出:开发一个V,测试一个V,组合的W模型;
测试伴随着整个软件开发周期,并且测试的对象不仅仅是程序,需求和设计同样需要测试。
W 模型优缺点
优点
强调测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序,需求和概要设计同样要测试;
更早的接入测试,可以发现开发初期的缺陷,那么可以用更加低的成本进行缺陷修复;
同样是分阶段的工作,便于控制项目过程。
缺点
依赖于软件开发和软件测试依然保持一前一后的线性关系,依然无法支持迭代、自发性和需求等变更调整;
对于当前很多项目,在执行的过程中根本不产生文档,那么W模型基本无法适用;
使用起来技术复杂度很高,对于需求和设计的测试要求很高,实践起来困难。
2.3 H模型【了解】
人们发现虽然软件开发中需求、设计、编码等活动被分阶段执行、但是实践中,他们并不是完全串行的,他们之间更多时候是交叉进行的,更多的是迭代执行。
为了解决上面的问题,有专家专门提出了H模型,它将测试活动完全独立出来,形成一个完全独立的流程,同时将测试准备测试和测试执行也清晰表现出来。
测试流程
*测试准备:所有测试执行活动的准备;判断是否到测试就绪点;
*测试就绪点:测试准入准则,即是否可以开始执行测试的条件;
*测试执行:具体的执行测试的程序。
其他流程
*具体开发中的流程,如:设计流程
H模型优缺点
优点
开发的H模型揭示了软件除测试执行外,还有很多工作;
软件测试完全独立,贯穿整个生命周期,且于其他流程并发进行;
软件测试活动可以尽早准备、尽早执行,具有很强的灵活性;
软件测试可以根据被测物的不同而分层次、分阶段、分次序的执行,同时也是可以被迭代的。
缺点
管理型要求较高:由于模型很灵活,必须要定义清晰的规则和管理制度,否则测试过程将非常难以管理和控制;
技术要求高:H模型要求能够很好的定义每个迭代的规模,不能太大也不能太小;
测试就绪点分析困难:测试很多时候,你并不知道测试准备到什么时候是最合适的,就绪点在哪里,就绪点的标准是什么,这就对后续的测试执行的启动带来很大困难;
对于整个项目组的人员要求非常高:在很好的规范制度下,大家都能高效的工作,否则容易混乱。例如:你分了一个小的迭代,但是因为人员技能不足,使得无法有效完成,那么整个项目就会受到很大的干扰。
3.软件测试分类
3.1按照测试阶段划分
单元测试
又称模块测试,针对软件设计中的最小单位-------程序模块,进行正确性检查的测试工作。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行的独立进行单元测试。
单元定义:C中指一个函数,Java中指一个类或函数,在图形化的软件中,一般指1个窗口,一个菜单。
集成测试
又叫组装测试,通常在单元测试的基础上,将所有程序模块进行有序的、递增的测试。重点测试不同模块的接口部分。
系统测试
指的是将整个软件系统看为一个整体进行测试,包括对功能、性能、以及软件所运行的软硬件环境进行测试。
系统测试在系统集成完毕后进行测试,前期主要测试系统的功能是否满足需求,后期主要测试系统运行的性能是否满足需求,以及系统在不同的软硬件环境中的兼容性等。
3.2按照是否查看源码
黑盒测试(black-box testing)
又称数据驱动测试,完全不考虑程序内部结构和内部特性,注重于测试软件的功能需求,只关心软件的输入数据和输出数据
白盒测试(white-box testing)
指的是把盒子打开,去研究里面的源代码和程序结构。
在软件公司,往往采用黑盒测试&白盒测试相结合的方式。
软件的整体功能和性能进行黑盒测试。
软件的源代码采用白盒测试。
黑盒测试的优缺点
优点
测试人员不需要了解实现的细节,包括特定的编程语言(没有编程经验的人也可以设计测试用例);
测试人员和编程人员是相互独立的(黑盒测试用例设计与程序如何实现无关);
从用户的角度进行测试,很容易被接受和理解;
有助于暴露任何与规格不一致或者歧义的地方;
缺点
不能测试程序内部特定部位;
如果程序未执行的代码无法发现;
不可能做到穷举测试;
黑盒测试能发现以下几类错误:
功能不对或功能遗漏。
界面错误。
数据库访问或者处理错误。
性能问题。
黑盒测试分类
功能测试
检查实际软件的功能是否符合用户的需求。
*逻辑功能测试
*界面测试
*易用性测试
*安装测试
*兼容性测试
性能测试【后面详解,现在了解】
时间性能
空间性能
一般性能测试
稳定性测试
负载测试
压力测试
灰盒测试【了解】
介于黑白之间,既保证了黑盒的关注点又掌控白盒的内部结构,但不会去对内部程序功能和运作做详细了解,灰盒测试结合了白盒测试和黑盒测试的要素。
3.3按照是否运行分类
静态测试
指不实际运行被测软件,而只是静态地检查程序代码、界面或文档中可能存在的错误过程。
动态测试
是指实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程。
3.4验收测试
α测试
内测 bug较多,一般是内部人员使用。
β测试
公测 大型bug没了,小bug一大堆,一般是内部人员和高玩使用。
γ测试
正式发布版本的候选版,基本没啥问题了。
3.5随机测试(探索测试)
意思就是对一些重要功能进行复测,尤其以前有缺陷的地方。
4.测试用例
定义:测试用例(Test Case)是为特定的目的而设计的一组测试输入、执行条件 和预期的结果,一遍测试是否满足某个特定需求。通过大量的测试用例来检验软件的运行效果,他是指导测试工作进行的依据。
4.1等价划分法
我们发现我们用户所有可能输入的数据,划成了若干份(或者也可以称为子集),然后从每一个子集当中选取少数具有代表性的数据作为测试用例,这种测试用例我们称为“等价类划分法”
等价类划分(分类)
有效等价类
指符合《需求规格说明书》,输入合理的数据集合。
无效等价类
指不符合《需求规格说明书》,输入不合理的数据集合。
等价类思考步骤
1、先确定有效和无效等价类
2、有效等价类就是题目条件(两端的极值(边界值)要判断、中间随意一个值也要判断)
3、无效等价类先划分与条件相反的情况,再找特殊情况(中文、英文、符号、空格、空)