# 单元测试推进方案
## 背景
公司内部推动单元测试,尝试与以往不同的方式。反思过去单测过度追求方法/代码行覆盖率的做法,提出新思路:**以接口为测试维度**,结合TDD(测试驱动开发)模式推进。
## 目标
1. 🛠️ **打造趁手工具**:试用itp工具,收集开发反馈优化
2. ✅ **保障接口质量**:通过用例覆盖确保交付满足下游环节标准
3. 📈 **提升交付质量**:建立可量化的质量基线

---
## 单元测试挑战
### 开发侧
- ❓ 缺乏单测实践经验,甚至Code Review流程缺失
- ⏳ 担心时间投入影响交付周期
### 测试侧
- 💻 缺乏单测编写经验,难以提供技术指导
- 📊 缺乏质量评估标准与度量体系
### 系统性挑战
- 📐 **如何评估质量**:缺少评估维度和指标
- ⚖️ **投入产出衡量**:缺乏实施前后的对比验证机制
---
## 推进措施
### 前期准备
- 🎤 组织宣讲会:说明单测引入背景与价值
- 🔍 选择试点:优先推动有意愿/有精力的团队
### 跨职能协作
- 🤝 **用例共识**:测试与开发共同定义用例粒度标准
- 🔄 协作流程:
- 测试提供**评审通过**的用例
- 开发实现单测代码
- 双方确认度量指标(覆盖率/通过率等)
- 测试进行质量校验
### 落地策略
- 🧩 **渐进覆盖**:从新增核心模块切入,逐步扩展
- ⚙️ **流程卡点**:
- 提测前检查单测实现(未来集成流水线)
- 定期拉取覆盖率报告(需运维支持)
- 📌 **效果验证**:
- 数据维度:路径覆盖率、用例通过率
- 质量维度:版本Bug率下降、线上故障减少
---
## 单测方法选型(分阶段实施)
### 1. 语句覆盖法(初期推荐)
> **原理**:确保每条语句至少执行一次
> **示例**:
> ```python
> def func(a):
> if a > 0: # 测试a=1即可覆盖
> print("Positive")
> ```
> **优势**:快速验证基础执行路径
### 2. 分支覆盖法(流程跑通后推进)
> **原理**:覆盖所有逻辑分支(如if-else)
> **示例**:
> ```python
> # 需测试a>0(a=1) 和 a<=0(a=-1)两种情况
> if a > 0:
> print("Positive")
> else:
> print("Non-positive")
> ```
### 3. 条件覆盖法(高阶场景)
> **原理**:覆盖判断条件的所有可能组合
> **示例**:
> ```python
> # 需覆盖4种组合:
> # 1. a>0 and b<5 (a=1,b=4)
> # 2. a<=0 and b<5 (a=-1,b=4)
> # 3. a>0 and b>=5 (a=1,b=5)
> # 4. a<=0 and b>=5(a=-1,b=5)
> if a > 0 and b < 5:
> print("Valid")
> ```
---
## 实施策略建议
> **分阶段推进**:
> 1️⃣ 初期采用 **语句覆盖法** 快速建立流程
> 2️⃣ 流程稳定后升级到 **分支覆盖法**
> 3️⃣ 避免初期过度追求条件覆盖(投入产出比低)
> ✅ **核心原则**:质量提升优于覆盖率数字