如何衡量工程质量?这是每个前端团队都要面临的问题。它反映了团队的研发效能和交付水平,是前端能力与价值的体现。 但这也是一个不太容易讲清楚的问题。如何选择衡量指标?如何量化?需要结合研发体系的具体情况去深入思考。 本文介绍了我们在这方面的方法论和实战经验,并给出了一个可以落地的系统化解决方案。
前端领域的语言标准、开发框架和工具链已逐渐成熟,研发提效成为了团队的重要目标之一,修炼内功的时代到来了。我们正是在这个时间节点上开始思考:一个前端工程从开发到部署,有哪些环节还存在优化空间?如何衡量这些关键环节做得好与不好?
经过分析,我们发现了一些存在的问题:
基于以上问题,我们决定建立一个前端工程质量评估模型,并将其平台化,以便能够清楚地了解每一个工程哪里做得好?好到什么程度?哪里做得不够好?应该如何改进?
这个模型我们称之为“ 前端健康度 ”。
如何将前端健康度平台化?我们的思路大致如下:
首先,建立客观的、可量化的研发指标评估体系,这也是最重要的一步。
其次,实现数据的采集。这一步主要通过脚本和定时任务实现,由于指标的侧重点不同,所以数据源也不同,需要进一步地过滤和加工。
最后,与开发平台整合,输出评估结果,推动优化。作为团队管理者,可以全局掌握团队的研发情况,发现短板;作为开发者,可以了解哪些项目、哪些环节的评分偏低,明确优化方向。
综上,平台化思路的核心链路如下:
下面,具体阐述其中涉及的一些关键问题。
在客观、可量化的基础上,我们需要尽可能地覆盖研发的关键环节,归纳总结起来可分为技术架构、开发规范、可维护性和生产环境性能四类指标。
在工程的创建阶段,我们主要关注框架的技术选型是否先进、是否主流,以及是否收敛。基于对现有工程的了解,我们设定了如下的检测目标:
掌握以上技术选型的分布情况是非常有必要的,这意味着我们对研发现状有了清晰准确的认知,推进技术升级就有了抓手。
我们不会严格地限制技术选型,但会保持一定的收敛度。比如,对于是否引入 TypeScript 我们持开放的态度,不纳入评估体系;但升级 React 版本、保持 CSS 使用方式的一致性却是强制的,不达标的工程在相关指标上将会获得较低的权值。
技术选型完毕,工程就进入到了开发阶段。相信每个团队都有自己的开发规范,而我们想看到的是这些规范的量化执行程度,因此我们设定了如下几个指标:
软件的可维护性是指工程师对软件进行理解和修改的难易程度,可以从可理解性、可测试性、可修改性、可靠性、可移植性等方面来衡量。模块是前端工程的基本组成单元,因此我们设定了两个与此相关的可维护性指标:
为了更加直观,下面展示一个代码重复的例子:
代码路径:src/routers/…/…/Price.jsx
起止行号:306 - 310
复制代码
<li>
<RadioGroup onChange={this.onRadioChange} value={selectedItem}>
<Radio value={3} />
<span className={styles['front']}>Price</span>
</li>
代码路径:src/routers/…/…/GroupPrice.jsx
起止行号:198 - 203
<li>
<RadioGroup onChange={this.onRadioChange} value={selectedItem}>
<Radio value={3} />
<span className={styles['front']}>Group Price</span>
</RadioGroup>
</li>
通过扫描重复的代码模式,我们可以有效地评估代码复用情况,同时发现优化点。
注意:我们定义的代码重复率 = 重复的模式数 / 扫描的文件数,结果可能会大于 100%。
工程进入到交付阶段,我们会设置一些生产环境的性能评估指标,其中部分数据来自于前端监控平台:
以上都是前端性能常见的优化点,在此就不多赘述了。
指标体系建立之后,就可以设计健康度的计算规则了,我们要达到两个目标:
首先,我们根据研发现状设置了各项指标的权重,如下表所示:
指标分类 | 指标 | 权重 |
---|---|---|
技术架构 (15%) | React 版本 | 5% |
CSS 使用方式 | 10% | |
开发规范 (30%) | mock 接口占比 | 10% |
npm 脚本规范 | 3% | |
前端监控接入 | 2% | |
ESLint 检查 | 15% | |
可维护性 (30%) | 复杂模块占比 | 15% |
代码重复率 | 15% | |
生产环境性能 (25%) | 构建耗时 | 5% |
最大文件体积 | 3% | |
首页加载时间 | 6% | |
首页请求数 | 6% | |
首页请求总体积 | 5% |
接下来,需要计算每项指标的具体得分。我们设置了 5 分制,以“mock 接口占比”这个指标为例,计算方法为:
f(x) = x / 5 - 15 (75 <= x <= 100)
f(x) = 0 (0 <= x < 75)
最终,经过加权求和,我们得到了一个工程的健康度雷达, 同时标记出了需要优化的指标项。
在整个健康度模型中,巡检任务是很关键的一环,大部分指标的获取和计算都在这里完成。一般情况下,我们会每周巡检一次,从 Git 仓库中拉取代码后,做文本扫描和分析。主要流程如下:
为了提升可复用性,巡检脚本被封装成了 npm 包,即可在服务端运行,也可在本地运行,便于工程师在优化代码后可以马上检验优化效果。
一个完整的质量评估系统,不仅需要给出评估结论,还需要形成优化闭环。因此,我们设计了一些增强回路。
每周由巡检任务发送各系统的健康度排名和异常波动,让工程师及时发现技术升级带来的影响。
在开发平台首页,让工程师关注所负责项目的健康度情况,促进主动优化:
让每次优化记录有迹可循,提升工程师的成就感:
工程质量的提升,衡量标准的制定,是一个不断追求卓越的过程。我们的模型也在不断地迭代,精减已经达成的目标,同时补充新的挑战。我们相信,这套方法论不仅适用于前端,同样也可以拓展到其他研发、测试或运维领域。希望我们的经验对你有所启发,欢迎留言、转发,表达你的观点。
作者介绍:
梁宵,搜狗营销事业部高级架构师,前端开发负责人。
领取专属 10元无门槛券
私享最新 技术干货