为什么需要单元测试(4)

简介: 高质量单元测试虽短期耗时,却显著提升研发效率。它减少调试时间、增强代码变更信心、提升代码自解释性与评审效率,并支持频繁发布,长期看极大提高项目交付速度和质量,尤其适用于生命周期长的To B业务。

提升总体研发效率
磨⼑不误砍柴⼯,⾼质量、完善的单测可以提升研发质量和效率,加快项⽬总体交付速度。这句话乍⼀看是反常识的,写单测往往⽐写实现逻辑要更耗时,怎么还能提⾼效率?这也是⼤家不写单测最常⻅的理由:“项⽬赶进度,来不及写单测”。如果我们的项⽬⽣命周期是以⽉计算的,写个原型很快就下线了,那写单测的确ROI不⾼。但阿⾥有很多to B的业务,提供给⽤户的能⼒都是以年计算⽣命周期的,⾼质量代码的ROI随着时间推移会越来越⾼,具体体现在以下⽅⾯:

减少debug时间:上⾯提到种种提升debug效率的原因,这⾥不再重复。⼀⽅⾯更⾼的单测覆盖可以节省debug所花费的时间,另⼀⽅⾯有充⾜测试覆盖的项⽬本身bug数量就会更少。举个现实中的例⼦:某团队由于历史上⽋的种种债务,基本全靠端到端测试,毫⽆单元测试覆盖。造成的后果也⾮常严重,团队oncall的同学 > 50%的时间都是在修复各种奇怪的bug,没法投⼊宝贵的精⼒到架构升级等⻓期更重要的项⽬上。

增加代码变更的信⼼:前⾯提到没有测试覆盖的代码没⼈敢碰,有充⾜单测覆盖的代码可以显著提升改造代码的信⼼和意愿。再给⼤家举个例⼦:我加⼊阿⾥之前在Google总部⼯作过将近⼗年。如果你在Google⼯作过就会发现,你的代码经常会收到毫不相关团队成员发起的code change。⼤多数情况下这些都是同学们⾃发的去做⼤⾯积重构(mass refactor),⽐如看你的Java代码没有⽤Builder模式,就会帮你做个重构(Google⾥有⼤量⾃动化⼯具简化这些重构⼯作)。我们抛开主观意愿不谈,如果是没有测试覆盖的代码、还是毫不相关组的,你敢这么重构吗?我们都希望能有像⾕歌那样整洁的代码,但没⼈敢碰的代码怎么变得更好?

提升代码⾃解释性:⽂档能够提升代码的⾃解释性,让研发效率更⾼。好的单测其实也可以被看作代码的⽂档,通过读测试就能快速理解代码的作⽤(参⻅TDD)。单测作为⽂档同时还完美的解决了⽂档保鲜的难题,给开发者提供了⼀套⾼质量、随着代码不断更新的⽂档。

更⾼效的code review:不是所有的问题和设计上的缺陷都能通过静态检查发现,这也是为什么需要⼈⼯code review作为代码质量的最后⼀道防线。在Google,代码评审是代码合并最重要的⼀个环节,因此评审的效率直接影响总体的研发效率。好的单测覆盖能够减轻评审⼈的负担,让他们把精⼒投⼊到更重要的部分(⽐如代码设计)。

更频繁的发版:敏捷开发倡导的持续集成、持续部署的前提就是全⾯、⾼质量的⾃动化测试。敏捷开发对于研发的提效就不多展开了。但光是能够更快速的发版本身就已经⾮常有价值了。

相关文章
|
10天前
|
人工智能 NoSQL 前端开发
Chap03. SpringAI
SpringAI整合多款主流大模型,支持对话、函数调用与RAG等架构,提供统一API简化开发。通过ChatClient封装交互,结合Prompt工程、工具调用与知识检索,可快速构建智能客服、哄哄模拟器、ChatPDF等应用,并支持多模态与持久化扩展,助力AI应用高效落地。
|
9天前
|
Java 测试技术 Linux
生产环境发布管理
本文介绍大型团队如何通过自动化部署平台实现多环境(dev/test/pre/prod)高效发布与运维,涵盖各环境职责、基于Jenkins+K8S的CI/CD流程、分支管理、一键发布及Skywalking日志链路追踪,提升发布效率与故障排查能力。
|
9天前
|
NoSQL MongoDB
MongoDB常用命令4
本文介绍MongoDB文档的分页与排序查询。通过`count()`统计记录数,`limit()`限制返回数量,`skip()`跳过指定条数,实现分页;结合`sort()`按字段升降序排列。注意:三者执行顺序为先sort→skip→limit,与书写顺序无关。
|
9天前
|
负载均衡 调度
负载均衡2
本文介绍如何设计自适应负载均衡。通过在RPC框架中收集服务节点的CPU、内存、请求耗时等指标,结合权重打分机制,动态计算节点得分,并调整其权重。利用随机加权策略分配流量,实现根据节点实际能力智能调度,提升系统稳定性与资源利用率,适用于各类需智能负载的场景。(238字)
|
9天前
|
敏捷开发 Dubbo Java
需求开发人日评估
本文介绍敏捷开发中工时评估的关键——人日估算方法,涵盖开发、自测、联调、测试及发布各阶段周期参考,并提供常见需求如增删改查、导入导出、跨服务调用等的典型人日标准,助力团队科学规划迭代。
|
9天前
|
Shell Docker 微服务
Docker-compose容器编排1
Docker-Compose 是 Docker 官方开源工具,用于快速编排多容器应用。通过编写 `docker-compose.yml` 文件定义服务间关系,一键启动、停止整个应用集群。每个服务对应一个容器,实现微服务化部署。支持通过 `docker-compose up` 快速部署项目,简化多容器管理。安装只需下载二进制文件并赋权即可。
|
9天前
|
负载均衡 算法 应用服务中间件
负载均衡1
当流量高峰来临,低配节点因负载过高导致服务可用率下降。传统通过治理平台手动调权重的方式滞后,影响业务。本文探讨RPC框架如何实现智能负载均衡,自动根据节点负载动态分配流量,提升系统稳定性与响应效率,避免人工干预不及时的问题。
|
9天前
|
Docker 容器
Dockerfile
Dockerfile是构建Docker镜像的文本脚本,包含一系列指令,每条指令创建一个镜像层。文件指令需大写,按顺序执行,#为注释。FROM指定基础镜像,是首条指令。通过docker build构建镜像,再用docker run运行容器,实现应用的快速部署与分发。
|
9天前
|
敏捷开发 Java 测试技术
为什么要单元测试
单元测试看似“踩刹车”,实则让开发跑得更快。本文从测试演进史出发,解析为何谷歌、微软推崇“单元测试先行”。通过测试金字塔、反模式案例,揭示单测在提效、降错、促重构中的核心价值,助力软件从“爬行”进化到“奔跑”。
|
9天前
|
Ubuntu Java Linux
Docker
本文介绍Docker基础操作,涵盖镜像与容器管理、Dockerfile编写。通过实例演示如何打包Java项目为镜像,构建并运行容器,实现端口映射与服务验证,适合初学者快速掌握Docker核心技能。(239字)