# 模型和分类
## 模型(流程)
1. 需求
2. 设计
3. 开发
4. 测试
![缺陷比例](http://cdn.lcx-blog.top/img/QQ截图20211031121320.png "缺陷比例")
![修复成本](http://cdn.lcx-blog.top/img/QQ截图20211031121426.png "修复成本")
v模型和瀑布(迭代)模型
![v模型](http://cdn.lcx-blog.top/img/QQ截图20211031123942.png)
![瀑布(迭代)模型](http://cdn.lcx-blog.top/img/QQ截图20211031124157.png)
## 分类
### 测试方法
- 黑盒测试
- 白盒测试
### 测试阶段
- 单元测试
- 集成测试
- 系统测试
- 验收测试
### 测试目标
- 功能测试
- 强壮性测试
- 性能测试
- 响应时间
- 内存消耗量
- 能量消耗量
- 可靠性测试
- 故障率
- 重启次数
- 无故障运行时间长度
- 安全性测试
![测试分类](http://cdn.lcx-blog.top/img/QQ截图20211031130205.png)
# 测试用例与测试原则
## 测试用例
>定义:测试用例是指对一项特定的软件产品进行测试的任务描述
>作用:指导测试的实施
>形式:测试目标、测试环境、输入数据(数据矩阵)、测试步骤(步骤列表)、预期结果、测试脚本,检查单
## 软件测试信息流
![信息流](http://cdn.lcx-blog.top/img/QQ截图20211031133219.png)
## 软件测试的原则
- 尽早地和不断地进行软件测试
- 程序员应避免检查自己的程序
- 完全测试程序是不可能的
- 软件测试是有风险的行为
- 在设计测试用例时,应当包括合理的输入条件和不合理的输入条件
- 充分注意测试中的群集现象
- 严格执行测试计划,排除测试的随意性
- 应当对每一个测试结果做全面检查
妥善保存测试文档等
- 并非所有软件缺陷都能修复
- bug的80%原则(80% 的软件缺陷,聚集在软件 20% 的模块)
## 常见误区
- $\color{red}{误区1 调试和测试是一样的}$
- $\color{red}{误区2 软件测试对象就是程序}$
- 误区3 软件测试是测试人员的事情,与开发人员无关
- 误区4 好的软件质量是通过测试得到的
- 误区5 把不合格的开发人员安排做测试
- 误区6 关注于测试的执行而忽略测试的设计
- 误区7 测试自动化是万能的
- 误区8 测试是为了证明软件的正确性
# 静态测试
>指不运行被测程序本身,仅通过分析或检查源程序(或其他软件制
>品)
>的语法、结构、过程、接口等来检查程序/设计的正确性。
>通常不需要测试用例,但需要静态检查表
## 静态测试的目标及内容
- 检查需求文档,是否切合实际,是否自相矛盾,是否清晰明确。
- 检查详细设计文档,是否符合概要设计的要求。
- 检查代码风格,是否符合规范。
- 检查程序设计和结构,是否合理。
- 检查业务逻辑 ,是否有逻辑缺陷
## 静态测试方法
### 同行评审
>由软件工作产品创建者的同行们检查该工作产品,识别产
>品的缺陷,改进产品的不足
- 走读(Walkthrough)
- 代码风格和规则(独立于业务逻辑,软件功能)
- 程序设计和结构
- 业务逻辑
- 小组评审(Team Review)
- 审查(Inspection)
| 分类 | 走读 | 小组评审 | 审查 |
| ----------------- | -------------------------- | --------------------------------------------------------- | ------------------------------------------------ |
| 目标 | 检测缺陷;找出可替换的方法 | 评估产品的价值和市场可行性;评估需求规格和设计规格的正确性 | 检测和识别缺陷 |
| 组织者/会议主持人 | 作者 | 公司技术领导 | 测试或质量主管 |
| 评审员 | 同项目组成员 | 公司内技术权威或公司外行业专家 | 项目负责人、公司设计人员、质量管理人员、测试人员 |
| 人员规模 | 2-7 | 3人或更多 | 3-6人 |
| 数据收集 | 可选 | 可选 | 正式要求 |
| 记录员 | 可选(作者自己) | 必须专门设置 | 必须专门设置 |
| 输出报告 | 可选 | 可选(建议性意见) | 缺陷列表;缺陷总结 |
| 活动计划 | 有 | 有 | 有 |
| 活动前准备 | 评审员会议前不需要阅读作品 | 评审员会议前阅读作品 | 评审员会议前阅读作品 |
| 适用范围 | 代码、详细设计 | 概要设计、需求规格 | 代码、详细设计、概要设计 |
![1](http://cdn.lcx-blog.top/img/QQ截图20211031171116.png)
![2](http://cdn.lcx-blog.top/img/QQ截图20211031171443.png)
![3](http://cdn.lcx-blog.top/img/QQ截图20211031171148.png)
### 数据流测试
>检查程序的控制流程,根据事件的顺序,探索跟踪变量
>的值以及变量的使用情况等
# 黑盒测试技术
>它是把测试对象看做一个黑盒子,测试人员完全不考虑程
>序内部的逻辑结构和内部特性,只依据程序的需求规格说
>明书,检查程序的功能是否符合它的功能说明。
## 等价类划分
>➢如果软件的行为对于一组值来说是相同的,那么这
>组值就叫做等价类。
>➢等价类是指测试相同目标或者暴露相同软件缺陷的一组测试用例。
测试用例选择
- 设计一个测试用例,尽可能多地覆盖尚未覆盖的有效等价
类。重复这个步骤直到覆盖所有有效等价类为止;
- 设计一个测试用例,尽可能少地覆盖尚未被覆盖的无效等
价类(大于等于一)。重复这个步骤,直到所有无效等价
类都被覆盖为止
## 边界值分析
>针对各种边界情况设计测试用例
- 五点式
![五点](http://cdn.lcx-blog.top/img/QQ截图20211031180543.png)
- 七点式
![七点](http://cdn.lcx-blog.top/img/QQ截图20211031180555.png)
## 因果图测试
>①找因果②画关系③转判定表④选用例
因果图的基本元素
- 原因: Cj
- 结果: Ej
- 原因和结果之间的因果关系
- ![恒等](http://cdn.lcx-blog.top/img/QQ截图20211031181705.png)
- ![非](http://cdn.lcx-blog.top/img/QQ截图20211031181759.png)
- ![或](http://cdn.lcx-blog.top/img/QQ截图20211031181842.png)
- ![与](http://cdn.lcx-blog.top/img/QQ截图20211031181919.png)
- 原因和原因之间的关系
- E约束(异):不能同时出现
- I约束(或):不能同时都不出现
- E/I约束: 有且只有一个为1
- ![O约束(唯一):有且只有一个为1](http://cdn.lcx-blog.top/img/QQ截图20211031182527.png)
- ![R约束(要求): c1为1时,c1必须为1](http://cdn.lcx-blog.top/img/QQ截图20211031182607.png)
- 结果和结果之间的关系
- ![M约束(强制): E1为1则要求E2必须为0](http://cdn.lcx-blog.top/img/QQ截图20211031182731.png)
## 输入组合法
- 遍历所有的输入组合
- ![正交实验设计法](http://cdn.lcx-blog.top/img/QQ截图20211031185147.png)
## 基于状态测试
>以软件的状态机图为基
>础,以覆盖状态机元素
>(状态、转换、动作、事
>件)为目标的一种软件测
>试方法。
# 白盒测试
## 语句覆盖
>选取足够多的测试数据,使被测试程序中每个语句至少执行一次。
## 判定覆盖
>选取足够多的测试数据,使被测试程序中不仅每个语句至少执行一
>次,而且每个判定的每种可能的结果都至少执行一次
## 条件覆盖
>选取足够多的测试数据,使被测试程序中每个判定表达式中的每个
>条件都取到各种可能的结果。
## 判定/条件覆盖
>选取足够多的测试数据,使得判定表达式中的每个条件都取到各种
>可能的结果,而且每个判定表达式也都取到各种可能的结果。
>条件/判定覆盖==条件覆盖+判定覆盖
## 条件组合覆盖
>选取足够多的测试数据,使得判定表达式中条件的各种可能组合都
>至少出现一次。
## 路径覆盖
>选取足够多的测试数据,使得程序的每条可能路径都至少执行一次
>(若程序图中有环,则每个环至少经过一次)。
如何开展软件测试