测试人如何做单元测试

简介: 经验

昨天在技术交流群里,有同学说自己还想多学点技术,打算去做单元测试,写单测代码来提升技术,然后群里的同学就测试要不要做单元测试展开了很多讨论。

单元测试这方面我没有太多的实践经验,但工作过的几家公司在单元测试的上都有不同程度的落地实践。

这篇文章,我会基于自己的一些实践经验和经历,谈谈我对单元测试的理解和观点。


测试要做单元测试吗

首先聊聊第一个问题:测试要做单元测试吗?

我的回答:测试需要做单元测试,但要综合评估团队成员技能、个人意愿、项目迭代周期以及协作默契程度等很多因素,用合适的方法和手段在合适的时机切入,而不是一味强推

很多同学有一个误区:只要是名字带个测试,就觉得我也要做这件事,而忽略了事物的本质。

比如验收测试,一般指的是QA同学经过多轮测试后,交付给产品同学来进行验收交付的产出物是否满足预期设计。

比如全链路压测,很多测试同学都希望自己能主导落地,但忽略了为什么做全链路压测,怎么做,落地有哪些难点,自己能否解决,需要哪些角色和团队配合。

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证,最初都是由开发来完成,即保障自己所在的环节交付的产出物满足进入下一阶段的标准

所以关于测试是否要做单元测试这个问题,我的观点是测试需要介入这个环节,尽可能早的去测试验证发现问题,但并不表示测试需要在这个环节什么都自己来做


单元测试落地的挑战

接下来聊第二个问题:单元测试落地要面临哪些挑战,或者说需要考虑哪些问题?

常见的落地挑战因素有下面几点:

1、开发不知道如何写单元测试

国内大部分公司缺乏单元测试环节,甚至code review都很缺乏,没有实践经验很难推动;

2、单元测试如何有效的进行检查

又回到了最初的问题:做了单元测试,如何有效检查单元测试的执行结果和效果表现呢?

3、如何评估和度量单元测试的质量

没有数据没办法衡量做单元测试的效果,度量的话从哪些维度和指标去评估单元测试的质量?

4、做单元测试对整个项目的交付周期是否有影响

现在的互联网行业大多迭代周期较快,做单元测试意味着需要投入一定时间,对deadline有一定影响;

5、开发个人的意愿(时间投入、个人技能、物质回报)

很简单的一个逻辑,谁愿意吃力不讨好做一件短期内没什么明显收益还没啥好处的事情?


单元测试如何有效落地

下面是我总结的关于单元测试落地的一些方法,会从不同维度去实施,仅供参考。

管理

  • 提高研发对于质量保障的认可度,加强宣讲;
  • 优先选择有意愿和有精力的团队进行推广试点;
  • 自上而下推动,和OKR挂钩,并且是持续的挂钩;
  • 参与的同学在需求和工时评估方面需要做一定调整;
  • 新入职员工或新参与员工的单元测试工作由师兄负责引导实现;

协作

  • QA和DEV针对单元测试case级别达成共识;
  • QA和DEV在单元测试环节进行合作共建和职责边界划分;
  • QA提供用例,DEV进行实现;
  • QA提供的用例需要经过评审并通过;
  • QA进行Check和校验(度量维度和评估指标与开发达成一致);

实施

  • 设定优先级,从P0核心模块开始实现;
  • 覆盖范围以service核心模块,新增功能优先;
  • 在code review阶段,对单元测试实现情况进行检查;
  • 需要通过实施前后不同维度的比较度量来评估能否带来收益;
  • 数据度量:覆盖率、通过率;
  • 发现bug数:线上问题、线下发现的block bug;
  • 度量粒度:小到最底层函数级别,大到代码类方法;
  • 测试用例:单元测试的实现和度量,一定是case by case的;


目录
相关文章
|
17天前
|
Java 测试技术
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
21 0
|
Java 测试技术
Java 中的单元测试和集成测试策略
【4月更文挑战第19天】本文探讨了Java开发中的单元测试和集成测试。单元测试专注于单一类或方法的功能验证,使用测试框架如JUnit,强调独立性、高覆盖率和及时更新测试用例。集成测试则验证模块间交互,通过逐步集成或模拟对象来检测系统整体功能。两者相辅相成,确保软件质量和降低修复成本。
|
13天前
|
缓存 自动驾驶 测试技术
如何进行有效的Apollo测试:单元测试和集成测试指南
如何进行有效的Apollo测试:单元测试和集成测试指南
42 13
|
1月前
|
Java 测试技术
单元测试编写可测试代码
单元测试编写可测试代码
19 2
|
2月前
|
测试技术 Python
Python中的单元测试与测试驱动开发(TDD)实践
Python中的单元测试与测试驱动开发(TDD)实践
|
2月前
|
缓存 测试技术 持续交付
工程化测试:Apollo的单元测试与集成测试指南
工程化测试:Apollo的单元测试与集成测试指南
|
3月前
|
测试技术 持续交付
探索单元测试和 E2E 测试:提升软件质量的关键步骤(下)
探索单元测试和 E2E 测试:提升软件质量的关键步骤(下)
探索单元测试和 E2E 测试:提升软件质量的关键步骤(下)
|
3月前
|
测试技术
探索单元测试和 E2E 测试:提升软件质量的关键步骤(上)
探索单元测试和 E2E 测试:提升软件质量的关键步骤(上)
探索单元测试和 E2E 测试:提升软件质量的关键步骤(上)
|
3月前
|
测试技术 开发者 Python
Python自动化测试与单元测试框架:提升代码质量与效率
在软件开发过程中,测试是不可或缺的环节。Python作为一门广泛应用的编程语言,拥有丰富的自动化测试和单元测试框架,例如unittest和pytest。本文将介绍Python自动化测试的重要性,并深入探讨这两个主流的单元测试框架的特点、使用方法以及优势。通过学习和应用这些框架,开发者可以提高代码质量、提升开发效率,并确保软件在不断迭代中保持稳定。
|
3月前
|
测试技术 Python
Python自动化测试与单元测试框架
自动化测试在软件开发中扮演着重要的角色,可以减少人工测试的时间和成本,提高软件质量。而Python作为一种流行的编程语言,其丰富的库和框架可以让测试变得更加容易和高效。本文将介绍Python自动化测试和单元测试框架,包括unittest和pytest的使用方法、优点和缺点,以及如何根据项目需求选择合适的框架。