3、代码质量之痛:代码规范缺失、静态分析工具(ESLint/Pylint)、代码审查流程
说实话,代码质量这个话题,我聊了十几年了。每次跟团队复盘,十有八九都能扯到「这代码谁写的?」「怎么又出低级错误了?」。说白了,代码质量不是玄学,它是有章可循的。今天我就把这三板斧——规范、工具、流程——掰开揉碎了讲给你听。
3.1 代码规范缺失:团队协作的隐形杀手
我见过太多项目,前期冲得飞快,到了维护阶段就寸步难行。为什么?因为每个人都在按自己的「风格」写代码。你想想看,一个团队里有人用 2 个空格缩进,有人用 4 个,有人甚至用 Tab。光格式化就能吵半天。
我个人习惯是,项目启动第一天就把规范定死。不是说我有多强势,而是吃过亏。我曾经在一个 50 万行的 Python 项目里,发现同一个模块里混了三种命名风格:驼峰、下划线、匈牙利命名法。你猜怎么着?后来接手的人直接崩溃了,重构成本高到离谱。
规范到底要定哪些?我列个清单给你参考:
- 命名规范: 变量、函数、类、常量怎么命名?用英文还是拼音?(我建议坚决不用拼音)
- 缩进与空格: 统一用 2 还是 4 个空格?行尾要不要加空格?
- 注释规范: 什么场景必须写注释?什么场景写了反而是噪音?
- 文件组织: 一个文件放多少行代码?模块怎么拆分?
- 错误处理: 异常怎么捕获?日志怎么打?
3.2 静态分析工具:让机器替你盯代码
光有规范还不够。人总会犯错,对吧?我写了十几年代码,照样会犯低级错误。这时候就需要工具来兜底了。
静态分析工具,说白了就是在代码运行之前,帮你扫一遍。它能发现语法错误、潜在 bug、风格问题,甚至安全漏洞。我常用的两套:前端用 ESLint,后端用 Pylint。
3.2.1 ESLint:前端代码的守门员
ESLint 这东西,我建议每个前端项目都必须配。它不仅能检查语法,还能帮你统一代码风格。举个例子:
// 不规范的写法
var x = 1;
if(x == 2) {
console.log('hello')
}
// ESLint 会告诉你:
// 1. 建议用 let/const 代替 var
// 2. 建议用 === 代替 ==
// 3. 缺少分号(如果你配置了分号规则)
我在项目中遇到过最离谱的事:一个同事写了个循环,条件判断写成了 if (i = 5)。你猜怎么着?这个 bug 在测试环境跑了三天都没发现。后来 ESLint 一跑,直接报「赋值语句出现在条件表达式中」。嗯,从那以后,我强制团队所有项目都接入了 ESLint。
ESLint 的配置其实不复杂,我一般这样搞:
// .eslintrc.js
module.exports = {
extends: [
'eslint:recommended',
'plugin:react/recommended'
],
rules: {
'no-unused-vars': 'error',
'eqeqeq': ['error', 'always'],
'indent': ['error', 2]
}
};
3.2.2 Pylint:Python 项目的质量卫士
Python 这边,Pylint 是主流选择。它比 ESLint 更严格,甚至能检查代码的复杂度。比如:
# 糟糕的写法
def process_data(a, b, c, d, e, f, g):
if a:
if b:
if c:
# 嵌套太深了
pass
# Pylint 会提示:
# 1. 函数参数太多(建议不超过 5 个)
# 2. 嵌套层级过深(建议不超过 3 层)
我曾经接手过一个 Python 项目,里面有个函数 800 行,参数 12 个,嵌套了 7 层 if。Pylint 跑完,评分直接 0 分。后来我花了三天重构,拆成 8 个小函数,评分到了 9.8 分。代码可读性提升了不止一个档次。
Pylint 的配置示例:
# .pylintrc
[MESSAGES CONTROL]
disable=C0111 # 关闭文档字符串检查(看团队需求)
[DESIGN]
max-args=5
max-returns=3
max-locals=15
3.3 代码审查流程:最后的防线
工具能解决 80% 的问题,但剩下的 20% 必须靠人。代码审查(Code Review)就是这最后一道防线。
我见过很多团队做 Code Review 就是走形式。代码往那一扔,没人看,或者随便点个「Approved」就完事了。这其实比不做还糟糕——给了你一种虚假的安全感。
真正有效的 Code Review 应该怎么做?我总结了几条经验:
- 小步提交: 每次提交的代码量控制在 200-400 行。超过 500 行,审查质量就会断崖式下降。
- 明确审查重点: 逻辑正确性 > 性能 > 可读性 > 风格(风格交给工具去管)
- 双向沟通: 审查不是「找茬」,是「帮对方变得更好」。我一般会用提问的方式:「这里用 map 会不会更清晰?」而不是「你写错了」。
- 设定时间限制: 提交后 24 小时内必须审查完。拖久了,上下文就丢了。
你可能会问:「小团队没那么多人力怎么办?」嗯,那就至少保证 1 个人审查。但这个人必须是项目核心成员,对业务和技术都熟悉。
3.4 三管齐下的最佳实践
规范、工具、流程,这三者缺一不可。我画个表格给你看它们的关系:
| 环节 | 解决的问题 | 投入成本 | 收益 |
|---|---|---|---|
| 代码规范 | 风格统一、可读性 | 低(一次制定,长期受益) | 降低沟通成本 |
| 静态分析 | 语法错误、潜在 bug | 低(配置一次,自动运行) | 拦截 80% 低级错误 |
| 代码审查 | 逻辑错误、设计问题 | 中(需要人力投入) | 提升整体代码质量 |
我个人建议的落地顺序是:先定规范 → 再上工具 → 最后推流程。别一上来就搞 Code Review,团队连规范都没统一,Review 起来全是风格争吵,浪费时间。
好了,这一章就聊到这。下一章我们聊聊「测试之痛」——为什么你的测试覆盖率上去了,bug 还是没少?