1. 软件测试的定义:
使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。
1.1我们为什么要做软件测试,它的目的是什么?
- 为了发现软件存在的代码或业务逻辑错误
- 为了检验产品是否符合用户需求
- 为了提高用户的体验
软件测试阶段
一、 测试阶段: 是“从小到大”、“由内至外”、“循序渐进” 的测试过程,体现了“分而治之”的思想。
1 . 单元测试:单元测试的粒度最小,一般由开发小组采用白盒方式来测试,主要测试单元是否符合“设计”。
2 . 集成测试:集成测试界于单元测试和系统测试之间,起到“桥梁作用”,一般由测试小组采用白盒加黑盒的方式来测试,既要验证“设计”又要验证“需求”。(主要看接口是否正确,数据能否正常传递)
3 . 系统测试:系统测试的粒度最大,一般由独立测试小组采用黑盒方式来测试,主要测试系统是否符合“需求规格说明书”。(最重要,最常见)
4 . 验收测试:验收测试与系统测试非常相似,主要区别是测试人员不同,验收测试由用户执行。
二、 按照不同的角度划分
按测试技术划分
- 白盒测试:测试源代码,主要在系统内部结构中测试。
- 黑盒测试:主要在应用端和服务器端,不用接触系统内部结构。
- 灰盒测试:以上两种的结合
按测试对象是否运行划分
- 静态测试:不用执行程序,通过人工或程序分析来证明软件的正确性
- 动态测试:通过执行程序做分析,测试程序的动态行为,以证明软件是否存在问题
按测试包含的内容划分
- 功能测试: 测试业务逻辑(核心重要)
- 界面测试:UI (外观美观,设计合理)
- 安全测试:防止攻击,用工具(扫描工具appscan)或者代码(脚本–sql注入)去发现漏洞
- 兼容性测试:软件+硬件(windows,Linux,MACOS),软件+软件(浏览器兼容),APP升级(老功能,数据)
- 易用性测试:比较主观
- 性能测试:并发(访问的人多),要保证软件能够正常处理,性能测试包括压力测试,稳定性,负载测试
三、黑盒测试策略及测试范围
- UI测试:用户界面测试,如图片像素,页面布局,CSS样式等;
- 配置测试:测试系统服务器以及测试机的配置是否满足产品及测试的要求;
- 表单值域测试:测试表单输入框的等价类,边界值,正交法等;
- 数据完整性测试:测试该系统的数据库数据是否异常,push, pull是否正确,是否存在遗漏的数据表。
- 逻辑测试:测试软件业务逻辑是否正确;
- 业务流程测试:测试软件前后台的业务流程,每个分支和功能点是否均可跑通;
- 逆向思维测试:测试软件在非正常操作下的处理事务的能力;
- 接口测试:测试软件内部接口以及外部接口返回值是否正确,提示语是否正确并且友好;【接口测试范围(需要操作数据库的功能的)通常用Postman工具和jmeter工具做接口测试】
- 本地化测试:测试系统在外界环境下是否能够满足用户需求,例如翻译是否准确;
- 回归测试:在项目上线并进行更新修改后,需要进行回归测试,确认之前没有问题的模块依然正常;
- 冒烟测试:用于集成测试之后的测试方法,确认软件是否满足系统测试要求;(正式测试之前都要进行冒烟测试,测一下主流程通不通,测试软件核心业务功能,不行就打回开发,这样做可以提高测试效率)
- cookie测试:测试软件缓存是否正确,清理缓存后的表现等;
- 功能测试:就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求;
- 自动化测试:属于功能测试范围,一般用于回归测试,减少很大工作量;
- 性能测试:测试软件在各种状况下的性能,如吞吐量,响应时间,CPU占用率,内存占用率等;【一般是测压力,负载,稳定性】
- 易用性测试:测试软件是否易用,主观性比较强。一般要根据很多用户的测试反馈信息,才能评价易用性;
- 故障转移和恢复测试:模拟服务器在崩溃后备用服务器的承载能力,避免服务器崩溃后备用服务器不工作的情况;
- 错误推测测试:当发现一个Bug后,通过经验和直觉推测出可能因为此bug引发的其他问题的可能性;
- 安全性测试:测试该系统防止非法入侵的能力;
- 兼容性测试:测试该系统与其他软件硬件兼容的能力;
- 比较测试:通过与同类产品比较,考察该系统的优点,缺点;
- Alpha测试:一种先期的验收测试,此时系统刚刚开发完成;
- Beta测试:一种后期的验收测试,此时系统已经通过内部测试,大部分错误已经改正,即将正式发行;
- 随机测试:在系统内进行随机的页面或流程测试(通常不采用);
- 探索性测试:靠经验,直觉
四、测试用例
编写测试用例的原则:百分之百的覆盖需求!
(1)什么是测试用例?
就是解决什么,怎么测和如何衡量问题
(2)测试用例编写规范:
主要分为三大部分:基本信息、主题信息、执行结果。
用例的基本信息:功能模块,编写人,编写时间
用例的主体信息:编号,测试对象,测试点,预置条件,测试步骤,测试数据,预期结果,用例优先级(高,中,低)
用例的执行结果:执行通过/ 不通过/ 未执行/ 无法执行,执行时间,缺陷编号。
(3)设计测试用例的方法
1 . 大纲法:拆分系统模块
2 . 等价类:用来找到所有的正例和反例
3 . 边界值:是对功能,值域方面的测试(口诀:最小值、最大值、最小值-1、最大值+1、中间值)
4 . 因果图:是针对有组合的功能进行设计用例
5 . 场景法:基于系统流程的测试
6 . 正交法:组合过多,用因果图不易看清的情况下
7 . 错误推断法:使用特殊的测试方法进行测试
8 . 正则表达式:用事先定义好的规则,来控制输入框的参数内容
五、软件测试流程
1 . 测试计划阶段(需要评审)
内容包含(测试目的,项目背景,参考文档,提交文档,术语定义,测试需求,测试策略,系统资源,测试工具,测试进度,里程碑,任务安排,风险评估,测试通过标准,附录。)
2 . 测试设计和开发阶段
(1)分析测试需求、设计测试用例(需要评审)
(2)准备数据、开发测试工具、脚本
3 . 测试实施阶段(包含性能测试)
按照设计好的用例,准备好的数据和制定的测试策略,实施具体的测试过程。
4 . 测试评估阶段
测试总结、缺陷分析、过程评估
对以上四大模块细分后如下:
- 拿到需求文档
- 需求评审
- 编写测试计划
- 计划评审
- 编写测试用例
- 测试用例评审
- 进行接口测试
- 进行接口压测(看情况)
- 冒烟测试
- 冒烟通过后进行系统测试,开展测试轮次
- 每轮测试需提交阶段性测试报告 ,直到达到上线标准
- 提交总结性功能测试报告
- 上线前开展性能测试
- 提交性能测试报告
- 进行alpha验收测试,发布上线
- 上线后的beta验收测试
- 迭代维护
六、软件测试生命周期模型
在软件开发行业发展的实践过程中,人们总结了很多的开发模型,比如瀑布模型,原型模型,螺旋模型,增量模型,渐进模型和RUP模型等。与软件开发工作紧密相连的软件测试行业也随之产生了一些具有指导意义的测试模型:
-
瀑布模型(开发时间紧,加班)缺点:测试介入项目特别晚,回溯成本非常高,项目周期很长,效率低
-
W模型(两个V字模型组成,连文档都会测,对测试人员的要求较高,追求质量不追求速度,一般是银行,政府机关的项目)
优点:尽早发现软件缺陷,但是测试和开发活动也保持着一种线性的前后关系,上一阶段完全结束,才可正式开始下一个阶段工作,这样无法支持迭代的开发模型。
-
V模型 :它通过开发和测试同时进行的方式来缩短开发周期,提高开发效率(一般是第一个吃螃蟹的人,开发的软件没有对应的参考,开发的过程中会不停的修改需求文档)
缺点:把测试过程放在编码后的一个阶段,忽略了测试对需求分析,系统设计的验证,需求的满足情况一直到后期的验收测试才被验证。
-
H模型
相对于V模型和W模型,H模型将测试活动完全独立出来了,形成了一个独立的流程,将测试准备活动和测试执行活动清晰地体现出来了。 H模型揭示了一个原理,软件测试是一个独立的流程,以独立完整“微循环”流程,参与产品生命周期的各个阶段,与其他流程并发地进行。H模型指出软件测试要尽早准备,尽早执行,只要某个测试达到准备就绪点,测试执行活动就可以开展,并且不同的测试活动可按照某个次序先后进行,但也可以是反复进行的。
-
螺旋模型
-
X模型
软件生命周期:是指软件开发和测试全部过程、活动和任务的结构框架,是从可行性研究到需求分析、软件设计、编码、测试、发布后的维护的过程。