# 单元测试推进方案

## 背景
公司内部推动单元测试,尝试与以往不同的方式。反思过去单测过度追求方法/代码行覆盖率的做法,提出新思路:**以接口为测试维度**,结合TDD(测试驱动开发)模式推进。

## 目标
1. 🛠️ **打造趁手工具**:试用itp工具,收集开发反馈优化
2.**保障接口质量**:通过用例覆盖确保交付满足下游环节标准
3. 📈 **提升交付质量**:建立可量化的质量基线

![](/uploads/photo/2025/c2e41934-10c7-4d82-b705-1daf566f5642.png!large)


---

## 单元测试挑战
### 开发侧
- ❓ 缺乏单测实践经验,甚至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️⃣ 避免初期过度追求条件覆盖(投入产出比低)  
> ✅ **核心原则**:质量提升优于覆盖率数字


↙↙↙阅读原文可查看相关链接,并与作者交流