03. 测试基础
03. 测试基础
软件及测试相关知识
目标
1. 认识软件及测试
1. 什么是软件
软件:控制计算机硬件工作的工具
- 系统软件 + 应用软件
2. 软件基本组成
3. 软件产生过程
4. 什么是软件测试
软件测试:使用技术手段验证软件是否满足使用需求
所谓的软件测试指的就是通过手工或者工具对被测对象进行测试操作,从而验证实际结果与预期之间是否存在差异
5. 软件测试的重要性
- 阿里巴巴月饼门事件
- 阿里每年都为员工准备一盒月饼,但是今年的月饼尤其抢手,于是阿里临时开发了一个内部预定网络页面,供大家以成本价抢购剩余的月饼。然而,阿里巴巴安全部门的4名员工以及阿里云安全团队的1名员工抱着抢月饼、秀技术的心态,采用黑客技术手段作弊,一共多刷了124盒月饼。阿里巴巴首席风险官刘振飞及阿里云总裁胡晓明在与上述员工沟通之后,对他们做出了劝退的决定。结果被开除了...被开除了...开除了…
- 许霆案回顾:ATM机出错,取1000卡里仅扣1元,豪取17万险被判无期
事件:如果你遇到ATM出故障,你会如何面对飞来横财?
- 是狂喜之下取款享用?
- 拒绝诱惑,转身就走?
- 通知银行处理?
- 把银行搬回家,让它慢慢吐?
原因:银行取款机系统出错,没有及时的找出bug,导致提取17.5万人民币,从而改变了许霆的一生!
- 卫星发射失败
bug的经济损失
- 软件bug对我们的生活,工作都会带来毁灭性的的破坏。据悉,每年的软件bug会让整个市场经济带来近600亿美元的损失!
软件测试的重要性总结
- 测试已经深入到了生活的方方面面
- 测试不好,经济损失600亿美元
bug的由来:
bug是一个英文单词,本意是臭虫、缺陷、损坏、犯贫、窃听器、小虫等意思。现在人们将在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题统称为bug(漏洞)。
“Bug”的创始人格蕾丝·赫柏(Grace Murray Hopper),是一位为美国海军工作的电脑专家,也是最早将人类语言融入到电脑程序的人之一。而代表电脑程序出错的“bug” 这名字,正是由赫柏所取的。1947年9月9日,赫柏对Harvard Mark II设置好17000个继电器进行编程后,技术人员正在进行整机运行时,它突然停止了工作。于是他们爬上去找原因,发现这台巨大的计算机内部一组继电器的触点之间有一只飞蛾,这显然是由于飞蛾受光和热的吸引,飞到了触点上,然后被高电压击死。所以在报告中,赫柏用胶条贴上飞蛾,并把“bug”来表示“一个在电脑程序里的错误”,“Bug”这个说法一直沿用到今天。
6. 为什么需要测试
对于现在的用户来说我们在使用软件的时候不再仅仅只是关注于当前软件的主体功能是否可用,而且会对软件的外观,易用性,执行效率等方面都有考虑,所以这就需要我们通过大量而全面的测试操作来促使软件变得更加完美
7. 为什么选择软件测试
有些人喜欢创造世界所以从事开发工作,我们想让这个世界变重更加完美所以选择了软件测试
当前国内的软件行业对于专业的测试人员需求量非常大
8. 为什么不让开发自己做测试
专业度:测试和开发属于软件行业不同的技术方向,每个方向都有自己的技术规范。让专人做专事更加的合理
思维定式: 一个软件的开发需要一定的时间周期,在这个周期内对于开发人员来说绝大多数的时间都是在思考具体的软件功能该如何实现,而不会去从用户的角度来出发,思考何去使用这个功能
测试力度:相对于开发人员来讲,软件就相当于他们自己的孩子,所以"下手”的时候肯定不会那么重
注: 不让开发自已做测试不意味着开发人员不能做测试,当前行业里有很多测试人员之前就是做开发的
9. 软件测试在作用和目的
1. 测试工作可以发现并修复软件中存在的缺陷,从而提高用户对软件的使用信心
2. 测试操作可以记录软件使用过程中产生的一些数据,从而为决策者提供依据
3. 测试操作可以降低同类型软件开发的风险
总结: 测试工作的目的就是通过尽可能少的人力、财才、物力来查找并解决软件中存在的缺陷从而降低商业风险等
减少软件缺陷(bug)
保障软件质量
10. 测试原则
测试证明软件存在缺陷: 测试工作只能证明当前软件是有缺陷而不能证明它没有缺陷
不存在缺陷的谬论: 任何的软件不可能是完美的
测试应当尽早介入: 一般不要在开发完成之后才执行测试,这样不利于缺陷的尽早发现
不能执行穷尽测试: 具体的测试操作不可能将所有的情况都一 一逻列出来,所以测试工作肯定有终止的时候
缺陷存在集群现象: 对于一款软件来说核心的功能只占20%,所以在测试的时候我们会花更多的时间去专门测试这些功能,因此它里面缺陷暴露的可能就会更大一些,我们就称之为缺陷集群现象
某些测试操作依赖于特定的测试环境: (系统或浏览器)
杀虫剂现象: 不要过多使用同一条测试案例来对软件进行问题查找,因为软件会产生“抗性” (可以换人测试)
2. 测试主流技能
功能测试、性能测试、接口测试、自动化测试
1. 功能测试
功能测试主要验证程序的功能是否满足需求 (实际结果与预期结果是否一致)
2. 自动化测试
使用代码或工具代替手工,对项目进行测试
3. 接口测试
- 什么是接口
- 接口是为不同系统和功能之间实现分离或连接的口子
- 硬件接口: 常见的有USB、TypeC接口、耳机接口、HDMI接口等
- 软件接口: 常见的有API接口(Application Programming Interface),也称为应用编程接口
- 接口是为不同系统和功能之间实现分离或连接的口子
- 接口测试
使用代码或工具对服务端提供的接口进行测试
- 工具实现
- 代码实现
4. 性能测试
模拟多人使用软件,查找服务器缺陷
工具实现
代码实现(Python+Locust)
5. 选择就业方向
方向(一):功能测试 + 接口测试
方向(二):功能测试 + 性能测试
方向(三):功能测试 + 自动化测试
呵呵 有可能你都需要干!
3. 常见的测试分类
1. 按测试阶段划分
阶段:软件产出过程顺序
单元测试(UT = Unit Test 单元测试)
- 针对程序源代码进行测试(单元:最⼩独⽴功能代码段)
- 国内单元测试⼀般开发⾃测 (JUnit),代码覆盖率、条件覆盖率、分支覆盖率 (实际工作者研发根本没自测这么多)
- 单元测试可以快速定位缺陷
- 提⾼测试执⾏效率
集成测试(SIT/IT = System Integration Test 集成测试)
- 针对模块之间访问地址进行测试及程序接口进行测试,又称接口测试
系统测试(ST = System Test 系统测试)
- 对整个系统进行测试包括功能、兼容、文档(说明、安装⽂档)等测试(针对程序功能、非功能进行测试)
验收测试(UAT = User Acceptance Test 用户接受测试 (俗称:验收测试))
- 主要分为内测、公测,使用不同人群来发掘项目缺陷(一般是由咱们的金主老爷来进行的)
- 内测(α测试):公司内部⼈员使⽤,发觉缺陷并修复
- 公测(β测试):让⽤户帮忙测试
提示:验收测试,⼀般要根据项⽬类型决定是否使⽤
扩展: 环境
DEV: development 研发环境
SIT: system integrate test 系统集成环境
UAT: user acceptance test 用户验收环境
PET: performance evaluation test 性能评估测试,环境压测
SIM: simulation 高仿真环境
PRD/PROD: production 正式、生产环境
2. 按代码可见度划分
- 黑盒测试: 不关注源代码,针对程序UI功能进行测试。
1、源代码不可见
2、UI功能可见
主要针对功能:阶段划分 -> 系统测试
- 灰盒测试: 针对程序部分代码进行测试(接口测试)
1、部分源代码可见
2、UI功能不可见
针对接口测试:阶段划分 -> 集成测试
白盒测试: 针对程序源代码进行测试
1、全部代码可见
2、UI功能不可见
针对程序源代码:阶段划分 -> 单元测试
3. 小结
单元测试和⽩盒测试是对代码进⾏测试
集成测试和灰盒测试⼜称**接⼝**测试
系统测试和⿊盒测试重点核⼼是功能测试
⾃动化测试归属功能测试
性能测试、安全测试归属专项测试
4. 测试(质量)模型
质量模型: 衡量一个优秀软件的维度。质量模型能告诉我们,测试时应该考虑的⽅⾯
- 拓展阅读:质量模型
需求举例:
- 开发一款网络游戏(要求:10个主功能)
- 游戏支持Web(浏览器)端、App端
- 游戏上线后预计每日,20W用户玩家在线
1. 功能性
- 需求
- 10个功能点
- 功能详情
- 注册
- 登陆
- ……
- 功能详情
- 10个功能点
- 测试关注点
- 功能数量:10个
- 功能正确实现
- 功能的错误处理情况
2. 性能
- 需求
- 预估每日在线人数20w
- 测试关注点
- 服务器每秒处理请求数
- 服务器硬件配置是否满足
3. 兼容性
- 操作系统兼容性
- Win系列
- win11
- win10
- win8
- win7
- Mac
- Win系列
- 浏览器
- 谷歌
- 火狐
- Safari
- Edge
- IE
- 欧朋
- 手机兼容性
- 品牌
- 型号
- 系统版本
- 分辨率
- 网络
- 其他
4. 易用性
- 简洁
- 友好
- 流畅
- 美观
5. 安全性
6. 可靠性
- 死机
- 系统崩溃
- 卡顿
- 响应时间慢
- 无响应
- 出现无响应
7. 可移植性
8. 可维护性
9. 小结
质量模型 功能、性能、兼容、易用、安全、可靠性、可移植性、可维护性
重点五项 功能、性能、兼容、易用、安全
结论: ⽆论测试硬件或软件,都应该从以上⼏点来进⾏分类验证
5. 软件测试流程
- 如何开展软件的测试工作?
①需求评审 ②编写测试计划 ③用例设计 ④用例执行 ⑤缺陷管理 ⑥测试报告
1. 需求评审(分析)
需求评审的⽬的
- 了解软件有哪些功能
- 确保各部⻔需求理解⼀致
- 各⻆⾊对需求进⾏查漏补缺
前提:阅读1遍需求⽂档,记录不明确之处。
参与⼈员:前端、后端、测试、产品、UI/UE
所处阶段:需求分析阶段 -> 软件还未实现(刚⽴项)
2. 编写测试计划
测什么、谁来测、怎么测
- 说明
- 指导测试执⾏的⽂档(重要)
- 测什么(⽬标、范围)
- 谁来测(⼈员进度及安排)
- 怎么测(测试⼯具、测试策略)
3. 用例设计
用例文档:验证项目是否符合需求的操作文档
说明:
- 保证能准确验证软件测试点
步骤
分析需求
提取测试点
设计⽤例覆盖测试点(正规团队一般会进行
用例评审
看是否有漏测)
4. 用例执行
项目模块开发工作完成后,开始执行用例文档实施测试
- 说明:实施测试
5. 缺陷管理
对缺陷进行管理的过程
- 提交 -> 验证 -> 关闭
6. 测试报告
实施测试结果文档
- 内容
- bug分析及统计
- 测试中遇到的问题
- 测试总结(本次测试中的优点和不⾜)
6. 测试用例
1. 什么是用例
用例:用户使用的案例
- 是否能开机:打开手机按下电源键3秒钟,看是否能开机
- 验证内存:打开手机设置查看内存是否为64G
- 验证屏幕:打开手机在白屏背景下检查屏幕是否黑色点
- 检查运行速度:打开手机下载吃鸡游戏,是否运行流畅
2. 什么是测试用例
测试用例:是为测试项目而设计的执行文档
用例编号 | 用例标题 | 项目/模块 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
qq_login_001 | 登录失败(账号为空) | 登录 | P1 | 1、打开QQ登录页面 2、账号已注册 | 1、输入账号 2、输入密码 3、点击登录 | 1、账号:为空 2、密码:123334 | 登录失败; 提示:账号不能为空 |
qq_login_002 | 登录失败(账号未注册) | 登录 | P1 | 1、打开QQ登录页面 2、账号未注册 | 1、输入账号 2、输入密码 3、点击登录 | 1、账号:未注测的正确格式账号 2、密码:123334 | 登录失败; 提示:账号不存在 |
qq_login_003 | 登录失败(密码为空) | 登录 | P1 | 1、打开QQ登录页面 2、账号已注册 | 1、输入账号 2、输入密码 3、点击登录 | 1、账号:正确账号 2、密码:为空 | 登录失败; 提示:密码不能为空 |
qq_login_004 | 登录失败(密码错误) | 登录 | P1 | 1、打开QQ登录页面 2、账号已注册 | 1、输入账号 2、输入密码 3、点击登录 | 1、账号:正确账号 2、密码:错误密码 | 登录失败; 提示:密码不正确 |
3. 用例的作用
防止漏测
实施测试的标准
4. 用例编写格式
用例编号、用例标题、项目/模块、优先级、前置条件、测试步骤、测试数据、预期结果
用例编号
- 格式:项目_模块_编号
用例标题
- 格式:预期结果(测试点)
项目/模块
- 格式:所属项目或模块
优先级
表示用例的重要程度或者影响力P0~P4 (P0最高)
- 测试用例的优先级:是根据产品功能的重要性和影响范围进行划分的。在编写测试用例时,可根据其重要性,进行标注优先级
优先级划分 (根据企业的要求进行划分)
- P0:最重要的、最基础的功能
- 如果执行不通过,就会阻碍后面的测试工作(常作为冒烟测试的用例(冒烟用例))
- P1:产品的核心功能
- 如果执行不通过,会影响产品的正常使用,会给客户带来非常不好的体验。常作为回归测试用例,每次新版本更新时,都需要复测的功能
- P2:产品的一般功能
- 如果执行不通过,会影响某些小功能的使用,但不会阻碍客户的正常使用(通知、推送等)。
- P3:产品的UI界面,一些不常用的功能,书写错误等微小的功能
- 如果执行不通过,对产品使用没有什么影响,但会给客户造成一些不好印象(提示、文案等)
- P4:性能方面的,安全性方面的一些用例
- 如果平时使用没有任何影响,但在特殊情况下才会展现出来的缺陷。需要使用特定的工具,才能执行的一些用例。这些功能一般会单独的去作为一项测试,有专业的人员去测试。
- P0:最重要的、最基础的功能
前置条件
- 要执行此条用例,有哪些前置操作
测试步骤
- 描述操作步骤
测试数据
- 操作的数据,没有的话可以为空
预期结果
- 期望达到的结果
5. 用例练习
1. 根据以下测试点编写用例
需求:QQ登录 (练习如下4条的写法)
1. 账号为空
2. 账号未注册
3. 密码为空
4. 密码错误
用例编号 | 用例标题 | 项目/模块 | 优先级 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 |
---|---|---|---|---|---|---|---|
qq_login_001 | 登录失败(账号为空) | 登录 | P1 | 1、打开QQ登录页面 2、账号已注册 | 1、输入账号 2、输入密码 3、点击登录 | 1、账号:为空 2、密码:123334 | 登录失败; 提示:账号不能为空 |
qq_login_002 | 登录失败(账号未注册) | 登录 | P1 | 1、打开QQ登录页面 2、账号未注册 | 1、输入账号 2、输入密码 3、点击登录 | 1、账号:未注测的正确格式账号 2、密码:123334 | 登录失败; 提示:账号不存在 |
qq_login_003 | 登录失败(密码为空) | 登录 | P1 | 1、打开QQ登录页面 2、账号已注册 | 1、输入账号 2、输入密码 3、点击登录 | 1、账号:正确账号 2、密码:为空 | 登录失败; 提示:密码不能为空 |
qq_login_004 | 登录失败(密码错误) | 登录 | P1 | 1、打开QQ登录页面 2、账号已注册 | 1、输入账号 2、输入密码 3、点击登录 | 1、账号:正确账号 2、密码:错误密码 | 登录失败; 提示:密码不正确 |
2. 微信发朋友圈
1. 成功(1张图⽚)
2. 成功(1段⽂字)
3. 失败(内容为空)
3. 花瓶练习
目标:花瓶设计用例 要求:10条用例以上 提示:参考质量模型
功能性:插花、装水、养鱼……
性能:防摔、耐高温、低温
易用性:防滑、便携
属性:长、宽、高、样式、材质、重量
可移植:不同温度下是否正常使用
可维护性:修补