软件测试理论(一)
软件测试目的
软件测试的目的是发现问题,发现至今未发现的问题,检查系统是否满足需求。
软件测试的具体目的
测试程序执行的过程,目的在于发现错误
发现错误
- 程序的具体的逻辑
- 页面的交互的验证
- 浏览器的兼容性的验证
- 易用性的验证
一个好的测试用例在于能发现至今未发现的问题
一个成功的测试是发现了至今未发现的错误的测试
软件测试的工作内容
- 要求参与公司产品体系的所有流程和工作
- 参与到开发技术方案的评审和开发代码的评审(关于对逻辑是否合理)
- 测试工作:编写测试用例,评审测试用例,测试具体的程序
- 上线后的产品质量监控
软件测试十大原则
1、测试应基于客户需求
被测试的产品是服务于用户的,是给用户赋能的。产品会收集用户的需求,需求评审后,大家就会达成一致的目标。
2、做好软件测试计划是做好软件测试工作的关键
测试计划会明确规范每个时间点的工作内容,和工作进度,以及工作安排,和工作完成度。
3、应尽早的开始软件测试并不断的进行软件测试
- 从产品经理发出需求开始,测试工作都已经进行了开展:梳理需求点,梳理逻辑
- 产品上线后,需要持续跟踪产品的运行情况,如果有设计不合理的,需要记录,到下个版本加入到需求里面
4、测试前必须明确定义好产品的质量标准
- 会有质量标准,达到标准就可以上线,达不到就是不能
- 在设计测试用例的时候,要考虑到产品各个维度
5、避免测试自己的软件
场景:
线上出现问题,程序员修改完成后,程序员自己进行了测试,同时反馈测试结果是OK的,那么测试还需要测试吗?
需要是的,因为程序员测试的不代表考虑到了所有的测试场景,必须测试这边需要验证
6、应充分注意测试中的集群现象
- 尽可能的覆盖以及考虑到更多的场景,但是无法做到100%的覆盖
- 测试需要持续不断的进行
7、必须检查每一个实际输出结果
8、穷举测试是不可能的
解决办法:
优先考虑优先级高的业务场景来进行测试,优先级低的,可以在上线后,再进行测试
9、测试设计决定了测试的有效性和效率
编写测试方案,指的是“测试的思路”
10、注意保留测试设计和说明文档,并注意测试设计的可重用性
软件测试的分类
按阶段划分
1、单元测试
是针对程序最小离度的测试,单元测试主要是应用于白盒测试。程序是由代码写的,代码里面最小单位是方法,所以单元测试是针对方法的测试
注:
1、测试方法
白盒测试——根据不同编程语言有对应的测试框架。如Java里面的Junit和TestNG框架,Python里面的 UnitTest和Pytest测试框架。
2、编程语言
主流语言:C,Python,Java,Go,Net
2、集成测试
是把单个模块的程序集成到一起后的测试,集成测试主要来验证各个模块集成后模块与模块之间的功能性,以及各个模块集成后的功能流程性和逻辑兼容性的测试。
注:
现代版的集成测试
- 现代企业都是前后端分离的模式,前后端各自完成工作后,需要联调来验证产品的完整性
- 后端与后端之间的联调
- 公司程序员与第三方程序员之间的联调
3、系统测试
将软件系统看成是一个系统的测试。包括对功能、性能以及软件所运行的软硬件环境进行测试。时间大部分在系统测试执行阶段来验证被测程序的整体性的功能。
注:
- 系统测试现在又称为端到端的测试
- 可以理解为产品的业务链,从开始至结束所有流程的验证测试
- 测试内容:功能、界面、可靠性(服务持续运行是否出现瘫痪)、易用性、性能、兼容性、安全性等
4、验收测试
验收测试是部署软件之前的最后一个测试操作。它是技术测试的最后一个阶段,也称为交付测试
注:
验收流程
- 自研公司:由测试发起,产品经理来进行验收测试,产品经理验收测试通过后,再开始上线
- 外包:外包验收是甲方(客户)来进行验收
按查看代码分类
1、黑盒测试
就是把被测试的程序看成一个黑色的盒子,看不到里面内部的结构,对应的是系统测试
2、白盒测试
被测程序看成一个白色的盒子,能够看见程序内部的结构,对应的是单元测试
3、灰盒测试
介于白盒测试和黑盒测试之间,它对测试的要求是:能够参与开发代码的评审,以及开发代码的检查
针对程序判断逻辑,判断分支,判断循环,程序流程走向的测试。白盒测试是一种高技能的测试。对测试的技术水平要求是比较高的
按测试编写代码分类
1、手工测试
手工测试就是由人去一个一个的输入测试用例,然后观察结果,和机器测试相对应,属于比较原始但是必须的一个步骤。
手工测试又叫功能测试,或者说是业务测试。
特点主要为:
- 优点:自动化测试是无法替代人的测试的行为模式的,也无法替代探索性的测试
- 缺点:执行效率慢,影响测试交付的效率
2、自动化测试
自动化测试就是通过编写代码(使用工具)的方式来替代模拟人的一种行为方式来对系统进行的一种测试。自动化测 试又分为UI自动化测试,API自动化测试,性能自动化测试。一般性说的自动化测试大多数时候指的是UI自动化测 试和API自动化测试。
软件质量
描述当前软件是否好用,在当前的软件行业里我们所采用的一套标准是基于 ISO 组织 制定的。
软件质量的六大特性
1、功能性
软件需要满足用户显式或者稳式的功能。
2、易用性
软件易于学习 和上手使用。
3、可靠性
指的就是软件必须实现需求当中指明的具体功能。
4、效率性
类似于软件的性能。
5、可维护性
要求软件具有将某个功能修复之后继续使用的能力。
6、可移植性
当前软件可以从一个平台移植到另一个平台上去使用的能力。
三大主流平台:windows unix linux
软件测试的人工检查
注:
- 编程测试发展方向:服务端测试开发、算法 测试开发、大数据测试开发、移动专项测试开发
- 队列 :先进先出 堆栈 :先进后出
- 数据类型 :
int(正整数)
字符串
float (带小数的正整数)
bool:true flase(逻辑:对,错)
表达式:<、=、 >、 &&(并且)、||(或者)、++(现有基础上加1)、 -- (现有的基础上减去1)
软件的分类
注:
中间件 :mysql(数据库) 、redis(缓存中间件) 、kafka (MQ)
win常用命令
ipconfig:查询IP的地址
cmd:win+R,输入cmd,就可以打开控制台
dir:展示当前目录下的文件和文件夹
d:/ :进入到了D盘
pwd:查询当前的在那个盘下
测试术语
1、冒烟测试
冒烟测试目的是确认软件基本功能正常
使用场景:开发转测后,测试要进行冒烟测试 ,验证被转测的软件基本流程是否正常
2、探索性测试
探索性测试可以说是一种测试思维技术,探索性强调测试人员的主观能动性 使用场景:测试报告已经完成,要准备上线前,对产品进行探索性的测试
3、安全性测试
目前安全测试更多的聚焦于渗透测试这部分
4、回归测试
回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。 自动回归测试将大幅降低系统测试、维护升级等阶段的成本。
回归测试的场景:
- 转测后,对系统已有功能进行回归测试
- 上线前,开发对代码进行了合并,需要整体的进行回归测试
- 上线后,对产品进行整体的回归测试
如何做软件测试需求分析
为什么要需求分析
- 软件测试需求是设计测试用例的依据。
- 有助于保证测试的质量和进度
- 软件测试需求是衡量测试覆盖率的重要指标
软件测试需求分析步骤
- 列出需求文档中的具有可测性的原始需求
- 对每一条需求进行细化分解,形成可测试的分层描述的测试点
- 对形成的每一个测试点,从软件产品的质量需求来分析,确定测试执行时需要实施的测试类型。
- 建立测试需求跟踪矩阵,对测试需求进行管理
测试需要分析的主要目的
获取测试点,根据测试点来编写测试用例
举例:
1、搜索“测试开发工程师”的职位关键字,按下回车键后,显示测试开发工程师职位搜索的结果信息 点击搜索按钮 按下回车键
2、结果信息可以进行翻页 每页 显示15条数据 大于15条数据进行翻页 假设返回的数据是35条,那么第三条展示的数据是5条
3、结果信息可以根据工作经验,。。。。联合搜索
4、验证搜索的结果信息是否准确
测试用例概述
测试用例是为特定的目的而设计的一组测试输入、执行条件和预期的结果。测试用例是执行的最小实体。
测试用例的流程
拿到测试需求 分析需求 编写用例 划分用例优先级
编写用例
- 写的非常详细,测试步骤很详细
- 思维导图的模式
- checklist
选择原则
和现在的团队保持一致,至少对自我的要求上,要比现在的团队做的好
测试用例编写特征
测试用例组成元素
用例ID; 用例名称; 测试目的; 测试级别; 参考信息; 测试环境; 前提条件; 测试步骤; 预期结果