Camille-学习笔记-测试流程和测试设计
## 测试用例学习路线
```
@startmindmap
* 测试用例
** 黑盒测试方法论
*** 等价类
*** 边界值
*** 因果图
*** 判定表
*** 场景法
*** 基于模型的测试
** 白盒测试方法论
** 测试用例基础概念
** 测试用例设计
** 面试测试用例设计
** 常用测试策略与测试手段
@endmindmap
```
**测试用例设计:**
* 设计方法的选择
* 测试用例编写步骤
* 需求分析
* 测试用例编写
* 测试用例的粒度
* 测试用例评审
## 等价类划分法
* 等价类划分是一种重要的、常用的黑盒测试方法
* 不需要考虑程序的内部结构,只需要考虑程序的输入规格即可
* 它将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完整性和代表性
* 用户所有可能输入的数据,划分成了若干个子集,然后从每一个子集当中选取少数具有代表性的数据作为测试用例
* 在有限的测试资源的情况下,用少量有代表性的数据得到比较好的测试效果
## 等价类分类
* 有效等价类:指符合《需求文档》,输入合理的数据集合
* 无效等价类:指不符合《需求文档》,输入不合理的数据集合
有效等价类+无效等价类=等价类
## 等价类划分原则
1. 规定输入的取值范围或个数时,划分一个有效和两个无效
2. 规定了输入的集合或规则必须要遵循的条件,则划分一个有效和一个无效
3. 输入条件是一个布尔值,则划分为一个有效和一个无效
4. 输入条件时一组数据,并且每一个输入的值做不同的处理,则划分若干个有效和一个无效
5. 输入条件规定了必须要遵循的某些规则下,则划分为一个有效和若干个无效
6. 不是所有的等价类都有无效等价类
## 等价类设计步骤
1. 先划分等价类:找出所有可能的分类
2. 确定有效等价类:需求中的条件
3. 确定无效等价类:与条件相反的情况,再找到特殊情况
4. 从各个分类中挑选测试用例数据
## 等价类总结
* 长度
* 类型
* 组成规则
* 是否为空
* 是否重复
* 是否去除空格
## 边界值分析法
* 大量的软件测试实践表明,故障往往出现在定义域或值域的边界上,而不是在其内部
* 为检测边界附近的处理专门设计测试用例,通常都会取得很好的测试效果
* 边界值分析法是一种很实用的黑盒测试用例方法,它具有很强的发现故障的能力
* 边界值分析法是作为对等价类划分法的补充,测试用例来自等价类的边界
## 边界值确定
* 上点:边界上的点
* 离点:离上点最近的点
* 内点:在输入域内任意一个点
* 选取正好等于、刚好大于或刚好小于边界值作为测试数据
## 边界点划分规则
* 如果规定了输入域的取值范围
* 选取刚好在范围边界的点
* 刚好超过边界的点
* 如果规定了输入值的个数
* 最大个数
* 最小个数
* 比最小个数少 1
* 比最大个数多 1
* 如果规定了输入是一个有序的集合
* 选取集合的第一个元素
* 选取集合的最后一个元素
## 边界值总结
* 确定边界情况
* 选取正好等于、刚刚好大于或刚刚好小于边界值作为测试数据
* 确定各个值的等价类
## 因果图定义
* 因果图法是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法
* 它适合于检查程序输入条件的各种组合情况
* “因” —— 输入条件
* “果” —— 输出结果
## 因果图适用场景
* 描述多种条件的组合
* 产生多个动作
## 因果图中的基本符号
* 恒等:若原因出现,则结果出现;若原因不出现,则结果也不出现
* 非:若原因出现,则结果不出现;若原因不出现,则结果出现
* 或:有多个原因。若几个原因中有一个出现,则结果出现;若几个原因都不出现,则结果不出现
* 与:有多个原因。若几个原因都出现,则结果才出现;若其中一个原因不出现,则结果不出现
## 因果图中的约束条件
* 互斥 E:a、b、c 只能有一个成立,但是可以都不成立
* 包含 I:a、b、c 中至少有一个成立
* 唯一 O:a、b、c 有且仅有一个成立
* 要求 R:如果 a 成立,则要求 b 必须也成立,其他的不约束
* 屏蔽 M:如果 a 成立的时候,强制 b 不成立,其他的不约束
## 因果图法基本步骤
* 找出所有的输入条件(因)
* 找出所有的输出条件(果)
* 明确所有输入条件之间的制约关系以及组合关系
* 明确所有输出条件之间的制约关系以及组合关系
* 找出什么样的输入条件组合会产生哪种输出结果
* 把因果图转换成判定表
* 为判定表中的每一列表示的情况设计测试用例
## 判定表法
* 因果图只是一种辅助工具,通过分析最终得到判定表,再通过判定表编写测试用例
* 画因果图非常麻烦,影响测试效率,可以直接写判定表,进而编写测试用例
## 场景法概述
* 场景法就是模拟用户操作软件时的场景,主要用于测试系统的业务流程
* 基本流:按照正确的业务流程来实现的一条操作路径
* 备选流:导致程序出现错误的操作流程
## 场景法用例设计步骤
* 根据需求规格说明,画出功能模块流程图;
* 根据流程图,描述出程序的基本流及备选流;
* 根据基本流和备选流生成不同的场景,构造场景列表;
* 对每一个场景生成相应的测试用例;
* 对生成的所有测试用例重新复审,去掉多余的测试用例;
* 测试用例确定后,为每一个测试用例确定测试数据值
## 确定基本流(购物网站)
1. 进入淘宝首页
2. 浏览商品
3. 进入单品页
4. 选择商品规格和数量
5. 加入购物车
6. 前往购物车
7. 选择商品
8. 结算,进入确认订单页
9. 提交订单
10. 付款成功
11. 等待收货
12. 确认收货
## 确定备选流
* 备选流 1:加入购物车时,不选择商品规格和型号,返回基本流第 4 步
* 备选流 2:加入购物车时,商品库存不足,返回基本流第 4 步
* 备选流 3:加入购物车时,未登录,登录后返回基本流第 3 步
* 备选流 4:加入购物车后,继续选购,返回基本流第 4 步
* 备选流 5:加入购物车,未选择商品,结算,返回基本流第 7 步
* 备选流 6:支付失败,返回基本流第 8 步
* 备选流 7:未选择商品加入购物车,退出购物,结束
## 构造场景
* 场景 1: 登录后成功购物(基本流)
* 场景 2: 未选择商品规格和型号就添加购物车(基本流 + 备选流 1)
* 场景 3: 选择的商品库存不足(基本流 + 备选流 2)
* 场景 4: 未登录添加购物车(基本流 + 备选流 3)
* 场景 5: 商品添加购物车后继续购物(基本流 + 备选流 4)
* 场景 6: 进入购物车,未选择商品直接结算(基本流 + 备选流 5)
* 场景 7: 支付过程出错(基本流 + 备选流 6)
* 场景 8: 没有添加商品到购物车(基本流 + 备选流 7)
## 设计方法的选择
* 任何情况下,都需要采用等价类划分法,将无限测试变成有限测试
* 在规定了数据范围的情况下,必须采用边界值分析法
* 如果需要关注它的主要功能和业务流程、业务逻辑是否正确实现,考虑使用场景法
* 如果含有输入条件的组合情况,考虑选用因果图和判定表法
* 采用错误推断法再追加测试用例
## 测试用例编写步骤
1. 划分功能模块
2. 正向功能验证
3. 单个功能项验证
4. 功能之间交互验证
5. 隐形需求
## 需求分析
* 帐号是手机号
* 手机号仅限制为国内常用的号段
* 密码必须为 数字+英文 的形式,字段为 8-12 个字符
* 账号密码都为空时,登录按钮置灰不可点击
* 点击登录按钮,发起登录请求
* 请求成功,跳转到首页
* 点击忘记密码跳转到找回密码页
## 测试用例编写
```
@startmindmap
* 登录功能
** 正向功能验证
** 界面验证
** 单个功能验证
*** 手机号输入框
**** 长度:等价类结合边界值分析测试数据
**** 类型:等价类分析测试数据
**** 是否必填:等价类分析测试数据
**** 数据约束:是否符合真实手机号的规则
*** 密码输入框
**** 长度:等价类结合边界值分析测试数据
**** 类型:等价类分析测试数据
**** 是否必填:等价类分析测试数据
**** 匹配性:等价类分析测试数据
*** 登录按钮
**** 不同的网络
**** 异常操作
*** 忘记密码按钮
**** 点击忘记密码跳转忘记密码页
left side
** 功能之间交互验证(场景分析)
*** 使用判定表分析手机号与密码填写组合场景是否覆盖完全
**** 手机号与密码都为空
*** 从登录业务逻辑角度,使用场景法补充场景
**** 手机号未注册
** 隐性需求
*** 密码密文展示
*** 账号互踢
*** 登录有效时间
*** 退出登录
*** 不同设备登录数据是否同步
@endmindmap
```
## 测试用例的粒度
* 测试用例可以写的很简单,也可以写的很复杂
* 最简单的测试用例是测试的纲要,仅仅指出要测试的内容
* 测试用例写的过于简单,则可能失去了测试用例的意义
* 测试用例写得过于复杂或详细,会带来两个问题:
* 效率问题
* 维护成本问题
## 测试用例评审
* 测试用例的本身的描述是否清晰,是否存在二义性
* 测试用例内容是否正确,是否与需求目标相一致
* 测试用例的期望结果是否确定、唯一
* 测试用例是否覆盖了所有的需求
* 测试用例是否具有可执行性
* 是否从用户层面来设计用户使用场景和业务流程的测试用例
* 场景测试用例是否覆盖最复杂的业务流程
* 用例设计是否包含了正面、反面的用例
## 思路
* 需求分析
* 界面
* 功能
* 易用性
* 兼容性
* 性能
* 安全性
startmindmap
* 面试测试用例设计思路
** 需求分析
*** 明确需求
*** 和面试官交流需求细节
** 界面测试
*** 页面布局设计和产品原型图一致
*** 页面文案正确
** 功能测试
*** 正向功能验证
*** 单个功能项验证
*** 功能之间交互验证
*** 接口验证
** 易用性测试
*** 功能操作是否简便
*** 页面布局是否美观合理
*** 提示语相关信息是否易于理解
** 兼容性测试
*** APP
**** 平台
**** 厂商
**** 系统版本
**** 屏幕大小与分辨率
*** WEB
**** 浏览器
**** 操作系统
**** 分辨率
left side
** 性能测试
*** 服务器性能测试
*** APP 客户端性能测试
** 安全性测试
*** 注入攻击
*** 加密
*** 权限
** APP 测试要点
*** 网络
*** 中断
*** 系统权限
** WEB 测试要点
*** 链接测试
*** 多个浏览器同时访问
@endmindmap
## 软件测试流程
* 完成软件测试工作的必要步骤
需求分析-测试计划-测试设计-测试执行-测试总结
## 测试计划模板
* 测试计划模版:https://docs.qq.com/doc/DV2hTamxJWnNDaUFF
## 测试计划编写要点
* 5W + H 原则
* why:为什么要进行这些测试
* what:测试哪些方面,不同阶段的工作内容
* when:测试不同阶段的起止时间
* where:相应文档,缺陷的存放位置,测试环境等
* who:项目有关人员组成,安排哪些测试人员进行测试
* how:如何去做,使用哪些测试工具以及测试方法进行测试
## 业务架构分析工具
* 思维导图
* plantuml
```
@startmindmap
* 登录
** 账号密码登录
*** 账号输入框
*** 密码输入框
*** 登录按钮
** 第三方登录
@endmindmap
```
```
@startuml
actor 用户
用户 -> 客户端: 点击账号密码登录
客户端 --> 用户: 登录界面
用户 -> 客户端: 输入帐号、密码,点击登录按钮
客户端 -> 客户端: 前端校验帐号和密码规则
alt 校验通过
客户端 -> 服务端: 传递帐号和密码
else
客户端 --> 用户: 返回校验后的提示信息
end
database 数据库
服务端 -> 数据库: 查询用户登录信息
数据库 --> 服务端: 返回查询结果
服务端 --> 客户端: 返回登录结果
alt 登录成功
客户端 --> 用户: 登录成功,返回我的页面,展示登录后的信息
else
客户端 --> 用户: 提示登录失败信息
end
@enduml
```
## Bug 判定标准
程序错误、程序漏洞、程序不完善
* 软件未达到客户需求文档的功能和性能
* 软件出现客户需求不能容忍的错误
* 软件的使用未能符合客户的习惯和工作环境
* 软件超出需求文档的范围
## 严重程度和优先级的关系
* 一般地,严重性程度高的软件缺陷具有较高的优先级
* 有时候严重性高的软件缺陷,优先级不一定高,甚至不需要处理
* 有时候一些严重性低的缺陷却需要及时处理,具有较高的优先级
# Bug 处理流程
## 不同角色的对 Bug 的职责

## Bug 处理流程:

## Bug 处理意见:

## Bug 报告
* 记录 Bug
* 跟踪 Bug
* 更好的和开发人员交流
## Bug 报告模版:

## Bug 报告要素
```
1. Bug 编号
2. 所属产品
2. 发现的版本
3. 所属的模块
4. 提交人
5. 错误类型
6. 复现概率
7. 严重级别
8. 优先级
```
```
9. 标题:言简意赅说明是什么 bug
10. 内容(描述)
- 测试环境
- 前提条件
- 复现步骤
- 预期结果
- 实际结果
11. 附件:截图、出错的 log 日志、测试用的数据
```
# 测试总结
## 测试报告作用
* 把测试的过程和结果写成文档
* 对发现的问题和缺陷进行分析
* 为纠正软件的存在的质量问题提供依据
* 为软件验收和交付打下基础
## 测试报告模板
* 测试报告模版:https://docs.qq.com/doc/DV3NTVGhtdUN0cVRw
## 总结要点
* 人力投入
* 用例覆盖情况
* Bug 的分类及数量统计
* 遗留 Bug 情况
* 测试风险
* 测试结论
# 业务架构分析工具 plantuml
## plantuml 介绍
* UML:统一建模语言
* plantuml:第三方插件工具
* plantuml 官网:https://plantuml.com/zh/
* plantuml 中文文档:https://ceshiren.com/t/topic/4530
* plantuml 在线绘图地址:https://plantuml.ceshiren.com/
相关文章:

Camille-学习笔记-测试流程和测试设计
## 测试用例学习路线 startmindmap * 测试用例 ** 黑盒测试方法论 *** 等价类 *** 边界值 *** 因果图 *** 判定表 *** 场景法 *** 基于模型的测试 ** 白盒测试方法论 ** 测试用例基础概念 ** 测试用例设计 ** 面试测试用例设计 ** 常用测试策略与测试手段 endmindmap **测试用…...

【Python笔记-设计模式】建造者模式
一、说明 又称生成器,是一种创建型设计模式,使其能够分步骤创建复杂对象。允许使用相同的创建代码生成不同类型和形式的对象。 (一) 解决问题 对象的创建问题:当一个对象的构建过程复杂,且部分构建过程相互独立时,可…...

【LVGL源码移植】
LVGL源码移植 ■ LVGL源码移植一:下载LVGL源码二:修改LVGL文件夹1: 将这5个文件,复制到一个新的文件夹2: 简化文件,减少内存消耗(去除不必要的文件)3: 为了规范化,我们将下列文件进行重命名 三&…...

双非本科准备秋招(14.2)—— 进程与线程
进程 进程是运行着的程序,是程序在操作系统的一次执行过程,进程是操作系统分配资源的基本单位。 启动一个java程序,操作系统就会创建一个java进程 进程也可以看作一个程序的实例,大部分程序可以运行多个实例进程,比如记…...

数据结构和算法笔记5:堆和优先队列
今天来讲一下堆,在网上看到一个很好的文章,不过它实现堆是用Golang写的,我这里打算用C实现一下: Golang: Heap data structure 1. 基本概念 满二叉树(二叉树每层节点都是满的): 完全二叉树&a…...

第8章 SpringBoot任务管理
学习目标 熟悉SpringBoot整合异步任务的实现 熟悉SpringBoot整合定时任务的实现 熟悉SpringBoot整合邮件任务的实现 开发web应用时,多数应用都具备任务调度功能。常见的任务包括异步任务,定时任务和发邮件任务。我们以数据库报表为例看看任务调度如何帮助改善系统设计。报表可…...

Qt5 基于OpenGL实现六轴机械臂三维仿真
需求 在Qt中通过OPenGL方式加载三维模型STL文件,然后将多个结构的STL文件类型的模型进行组装,形成6轴机械臂三维模型的显示,并且可以对每个关节进行关节角度的控制。 新建一个C类STLFileLoader,用于加载STL文件,并进…...

路由进阶
文章目录 1.路由的封装抽离2.声明式导航 - 导航链接3.声明式导航-两个类名自定义匹配的类名 4.声明式导航 - 跳转传参查询参数传参动态路传参两种传参方式的区别动态路由参数可选符 5.Vue路由 - 重定向6.Vue路由 - 4047.Vue路由 - 模式设置8.编程式导航 - 两种路由跳转9.编程式…...

分类预测 | Matlab实现SCN-Adaboost随机配置网络模型SCN的Adaboost数据分类预测/故障识别
分类预测 | Matlab实现SCN-Adaboost随机配置网络模型SCN的Adaboost数据分类预测/故障识别 目录 分类预测 | Matlab实现SCN-Adaboost随机配置网络模型SCN的Adaboost数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现SCN-Adaboost随机配置网…...

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextPicker组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextPicker组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、TextPicker组件 TextClock组件通过文本将当前系统时间显示在设备上。支持不…...

linux中vim的操作
(码字不易,关注一下吧w~~w) 命令模式: 当我们按下esc键时,我们会进入命令模式;当使用vi打开一个文件时也是进入命令模式。 光标移动: 1 保存退出:ZZ 2 代码格式化:ggG 3 光标移动ÿ…...

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第5章 决策树
文章目录 第5章 决策树5.1 决策树模型与学习5.1.1 决策树模型5.1.2 决策树与if-then规则5.1.3 决策树与条件概率分布5.1.4 决策树学习5.2 特征选择5.2.1 特征选择问题5.2.2 信息增益5.2.3 信息增益比5.3.1 ID3算法5.3.2 C4.5的生成算法5.4 决策树的剪枝5.5 CART算法5.5.1 CART生…...

【C++11(一)】列表初始化and右值引用
一、 统一的列表初始化 1.1 {}初始化 在C98中,标准允许 使用花括号{}对数组或者结构体元素 进行统一的列表初始值设定 C11扩大了用大括号 括起的列表(初始化列表)的使用范围 使其可用于所有的内置类型和 用户自定义的类型 使用初始化列表时…...

为什么SSL会握手失败?SSL握手失败原因及解决方案
随着网络安全技术的发展,SSL证书作为网站数据安全的第一道防线,被越来越多的企业选择。SSL证书使用的是SSL协议,而SSL握手是SSL协议当中最重要的一部分。当部署SSL证书时,如果服务器和客户端之间无法建立安全连接,就会…...

STM32——智能小车
STM32——智能小车 硬件接线 B-1A – PB0 B-1B – PB1 A-1A – PB2 A-1B – PB10 其余接线参考51单片机小车项目。 1.让小车动起来 motor.c #include "motor.h" void goForward(void) {// 左轮HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);HAL_GPIO…...

开源:基于Vue3.3 + TS + Vant4 + Vite5 + Pinia + ViewPort适配..搭建的H5移动端开发模板
vue3.3-Mobile-template 基于Vue3.3 TS Vant4 Vite5 Pinia ViewPort适配 Sass Axios封装 vconsole调试工具,搭建的H5移动端开发模板,开箱即用的。 环境要求: Node:16.20.1 pnpm:8.14.0 必须装上安装pnpm,没装的看这篇…...

缩略图保持加密(thumbnail-preserving encryption, TPE)的理论基础
这涉及到一些视觉心理学等方面知识: 1、参考文献: 云存储图像缩略图保持的加密研究进展(中国图像图形学报) 一些视觉心理学的研究为TPE的成功实现提供了理论基础。Potter(1975, 1976)的研究表明人类的视觉系统能够在100 ms内从一个新场景中提取出相应的语义信息;250 ms内…...

nodejs+vue+mysql校园失物招领网站38tp1
本高校失物招领平台是为了提高用户查阅信息的效率和管理人员管理信息的工作效率,可以快速存储大量数据,还有信息检索功能,这大大的满足了用户和管理员这两者的需求。操作简单易懂,合理分析各个模块的功能,尽可能优化界…...

GEDepth:Ground Embedding for Monocular Depth Estimation
参考代码:gedepth 出发点与动机 相机的外参告诉了相机在世界坐标系下的位置信息,那么可以用这个外参构建一个地面基础深度作为先验,后续只需要在这个地面基础深度先验基础上添加offset就可以得到结果深度,这样可以极大简化深度估…...

校园圈子论坛系统--APP小程序H5,前后端源码交付,支持二开!uniAPP+PHP书写!
随着移动互联网的快速发展,校园社交成为了大学生们日常生活中重要的一部分。为了方便校园内学生的交流和互动,校园社交小程序逐渐走入人们的视野。本文将探讨校园社交小程序的开发以及其带来的益处。 校园社交小程序的开发涉及许多技术和设计方面。首先&…...

VMware vCenter告警:vSphere UI运行状况警报
vSphere UI运行状况警报 不会详细显示告警的具体内容,需要我们自己进一步确认告警原因。 vSphere UI运行状况警报是一种监控工具,用于检测vSphere环境中的潜在问题。当警报触发时,通常表示系统遇到了影响性能或可用性的问题。解决vSphere UI…...

C# 引用同一个dll不同版本的程序集
因为项目需要所以必须在项目中引用不同版本的同一程序集 我要引用的文件是newtonsoft.json.dll 两个版本为12.0.0.0 和4.0.0.0 1.如果已经先引入了newtonsoft.json 12.0.0.0版本的程序集,如果直接引入另一个版本的程序集的话会提示不成功,所以先将另一个…...

单机搭建hadoop环境(包括hdfs、yarn、hive)
单机可以搭建伪分布式hadoop环境,用来测试和开发使用,hadoop包括: hdfs服务器 yarn服务器,yarn的前提是hdfs服务器, 在前面两个的基础上,课可以搭建hive服务器,不过hive不属于hadoop的必须部…...

LEETCODE 170. 交易逆序对的总数
class Solution { public:int reversePairs(vector<int>& record) {if(record.size()<1)return 0;//归并 递归int left,right;left0;rightrecord.size()-1;int nummergeSort(left,right,record);return num;}int mergeSort(int left,int right, vector<int>…...

「HarmonyOS」EventHub事件通知详细使用方法
需求背景: 在开发过程中,肯定会出现触发特定事件,需要全局进行通知,与之相关的部分进行执行相应的修改方法。举个例子:修改了用户个人昵称,需要进行全局通知,在涉及昵称的部分收到通知后&#…...

为什么golang不支持可重入锁呢?
为什么golang不需要可重入锁? 在工程中使用锁的原因在于为了保护不变量,也可以用于保护内、外部的不变量。 基于此,Go 在互斥锁设计上会遵守这几个原则。如下: 在调用 mutex.Lock 方法时,要保证这些变量的不变性保持…...

聊一聊Tomcat的架构和运行流程,尽量通俗易懂一点
1、Tomcat的架构 这里可以看出 A、一个Tomcat就是一个Server,一个Server下会有多个Service, B、Service只负责封装多个Connector和一个Container(Service本身不是容器,可以看做只是用来包装Connector和Container的壳,…...

ModelArts加速识别,助力新零售电商业务功能的实现
前言 如果说为客户提供最好的商品是产品眼中零售的本质,那么用户的思维是什么呢? 在用户眼中,极致的服务体验与优质的商品同等重要。 企业想要满足上面两项服务,关键在于提升效率,也就是需要有更高效率的零售&#…...

Qt/C++音视频开发65-切换声卡/选择音频输出设备/播放到不同的声音设备/声卡下拉框
一、前言 近期收到一个用户需求,要求音视频组件能够切换声卡,首先要在vlc上实现,于是马不停蹄的研究起来,马上查阅对应vlc有没有自带的api接口,查看接口前,先打开vlc播放器,看下能不能切换&…...

MySQL原理(一)架构组成之逻辑模块(1)组成
总的来说,MySQL可以看成是二层架构,第一层我们通常叫做SQL Layer,在MySQL数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断,sql解析,执行计划优化,query cache的处理等等&…...