创业公司单元测试落地问题和解决方案
一. 为什么需要单元测试?
单元测试对软件开发好处多多,我总结为一下几点:
1. 提升软件质量
- 提前发现问题,减少代码提测和线上bug,和集成测试互补。
- 防止业务迭代过程的bug,比如经常出现,改A问题,出现B、C业务bug。
- 黑盒测试做不到零bug,对应代码中隐藏逻辑,可以通过单元测试发现。
2. 提升开发效率
- 联调、集成、回归测试过程中,问题少、易修复。虽然开发花了时间,对于测试阶段反复改bug节省时间
- 后期二次开发的过程中,单元测试可以节省研发自测时间。
3. 促进代码优化
- 不断完善单元测试的过程,是不断优化代码的过程
- 写好单元测试的的工程师都有高的代码追求,提示工程师水平就是提示代码质量最有效途径。
- 单元测试覆盖高的代码,后人才敢大胆重构
二. 创业公司软件开发维护现状
- 需求要求快速上线,快速抢占市场,没有时间开发维护单元测试(有时候测试时间都没有)。
- 创业初期,很多项目由外包参与开发,很多代码的规范性和质量差,留下历史欠账。
- 用户体量小的时候,对高可用和系统稳定性要求不高,重点放在功能实用性上,没有在代码质量上花时间。
- 小公司人手不足,一个人经常加班干几个人的活,没时间和精力设计单元测试
- 小公司工程师平均水平不如大厂(个人经验没有贬低的意思),对于代码质量、编程规范的追求和习惯缺乏。
三. 一套可行的技术方案
(后面的文章会对关键技术点进行分享)
我们公司主要使用java开发微服务体系,最终单元测试技术方案:
- Junit5(包括:mock/stub、PowerMock、mockmvc等组件)开发单元测试;
- 持续继承,使用jenkins提测和上线前强制执行
- jenkins 继承Allure 显示测试报告跟进问题
四. 落实实施需要跨越的坎
1. 推广单元测试的好处
需要团队上下一心达成一致。(我是公司内部组织了几次分享,重点讲了阿里巴巴**《java开发手册》中单元测试章节、阿里巴巴《码出高效》**单元测试章节的思想)
2. 技术储备
很多时候大家编写的单元测试不规范,没有设计合理的断言、执行速度慢。 团队内部需要有人能够熟练使用Junit5、mockito、mockmvc、stub、H2等测试框架,这些框架对初中级工程师还是很陌生的,统一培训可以提升推广速度
3. 规范流程
单元测试步骤经常被遗忘。在技术评审阶段,对单元测试用例进行评审,代码检查阶段和持续继承中强制执行单元测试。