如何提升团队代码质量
目标
- 提升代码质量
- 统一编码规范和风格
- 知识分享
- 防止代码腐烂
- 降低bug数量,提前检查出线上隐患
一、接入SonarQube,
- SonarQube关于js部分的规则
- sonar的主要作用
- CR大部分情况只会关注提交部分代码,所以需要一个工具可以从全局检查潜在的代码缺陷,这其中SonarQube是一个不错的选择
- sonar可以展示源码中重复严重的地方,人肉CR很难做到,除非对这个项目代码深入了解
- sonar可以当做辅助CR工具,仅用于记录问题,不阻塞发布流程
- 由于CR只针对于新增代码,所以不会照顾到老代码的质量。sonar可以辅助修复老项目代码的潜在缺陷,提高老项目的代码质量
- 如何使用
- SonarQube看板
- 定时记录sonar的问题统计信息
二、增加CR环节
CR 本身的收益
- 统一编码风格
- 增加代码规范的主动性(⼼理暗示别⼈会review,所以会注意规范)
- 代码复查,提升质量(尽早发现bug和设计中存在的问题)
- 代码分享,知识共享(例如一些好用的库或者解决方案能通过CR在组内快速广播开)
- 新人培养(CR流程可以作为新人培训的一部分,让新人能够迅速接入项目)
CR 规范
- 所有需要发布⽣产的代码提交都要得到CR,至少需要指定一个人appove
- 所有的comment都需要解决之后才可以合并到master
- 应用可以设置 Review 建议需全部解决,对于非必需修改的建议可以进行打标或说明
- MR的备注信息要详细说明本次MR的功能点,让reviewer能容易理解作者意图
- reviewer不能指定自己
- 优先指定熟悉项目的相关人员
CR 过程
- 冒烟测试通过之后,提交MR到develop分支,并把MR链接发到群里并艾特reviewer,简要说明此次提交/修改的内容(也可通过机器人
- 鼓励大胆comment,有不理解的地方,或者觉得不合适的地方都直接表达出来
- 作者对每个comment也要做出反馈,无论是展开讨论还是简单的给个 OK 都是有效的反馈
- 复杂的、大量的代码提交可以采用线下开会集体cr以提高效率
- 作者处理完所有comment,代码也进行修改之后,要在群里艾特通知一下reviewer
- reviewer确认没问题,点
approve
, 然后由作者来点merge
CR Gitlab配置
- webhook配置
- approvals设置
CR 准则
- 如果变更达到可以提升系统整体代码质量的程度,就可以让它们通过,即使它们可能还不完美
- 没有完美的代码,只有更好的代码。不要求代码实现每个细节都完美,应该做好修改时间和重要性之间的权衡
- 遵循基础的代码规范指南,任何与规范不一致的地方都属于个人偏好,比如变量命名规范是驼峰,代码实现是下划线命名。但如果某项代码样式在指南中未提及,那就接受作者的样式
关于Comment
- 一般预期挑的越多越好,但代码是人写的,很多情况下会让作者感到不适,所以在comment的时候也尽量注意一下措辞,有一些在规范之外的偏个人主观的东西,一般以建议的方式给出
- 对于原则性的问题,还是要坚守质量标准的
- 发现了一些好的代码好的设计,也请给予对方以肯定和赞美,这样有助于Review有效的进行
reviewer需要注意的点
逻辑上
- 代码设计
- 功能实现
- 边界条件
- 性能隐患
代码质量
- 编码规范
- 可读性:逻辑清晰、易理解,避免使用奇淫巧技、过度拆分
- 复杂度:是否有重复可简化的复杂逻辑,代码复杂度是否过高,功能实现尽量要简洁
参考
CR常见问题
准则:
代码是写给人看的
,除非这份代码仅使用一次,不再需要维护。基于此准则review,只要作者提交的代码让你感觉到接手后维护困难,那都应该comment提出自己的想法
CR 心态
- Author
- 自己对代码的质量负责,因此应当怀着感恩的心去看待坚持认真帮你 Review 代码的同事,因为并不是所有人都有时间和精力来帮着提高代码质量
- 不要依赖于reviewer,不要说什么"review的时候你怎么没看出来"这种话,就好像出了线上bug不要怪测试没有测出来,reviewer只是提供了一些建议,不是做质量把关的
- 对comment不要有抵触情绪,有自己觉得不合理的地方,可以恰当的回复拒绝,或者说明一下自己这么做的原因
- 代码好坏这件事情上本身就带有很大的个人偏好色彩在里面,每个commont都看做是一次思想交流就好了
- Reviewer
- 保持学习者的心态,review既是帮助他人提高代码质量的过程,也是学习他人,提高自己代码能力和沟通能力的过程,既要发现潜在质量问题,也要努力发现一些值得学习的亮点,这样对自己也是一个很大的帮助
- 代码review的时候不用有什么心里负担,有什么疑惑的、不清楚的地方或者有什么自己的想法,可以直接提出来。有不少人 在写Comment的时候会犹豫,担心自己提出的问题或建议比较“蠢”
CR 疑问
- 组员参与度和积极性不够高,无法有效对比小A和小B和小C在CR上的贡献
- 激励措施,鼓励全员积极CR
- 定期统计comment数量,挑选好的comment,和一些坏的代码展示并讨论
- 对于一些重要且复杂的功能代码是否需要定期开会宣讲,多人review
- 发布前发现问题多,改动太大,影响项目计划
三、CR常见问题(包含规范/风格指南)
- CR常见问题 文档
- CR常见问题仅供reviewer做参考, 分严重/中等/建议三个等级
- 严重: 可能会造成bug
- 中等: 造成后续维护困难
- 建议: 代码有优化空间或者代码风格、格式问题,但是不影响使用和迭代
- 根据项目紧急程度和对质量的要求,不同等级的问题可酌情处理
- 规范要轻量,先抛出严重问题,不过分追求细枝末节,根据后续CR的情况持续增加
作者:今天的我吃饱了吗
链接:https://juejin.cn/post/7256306281538699325
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
链接:https://juejin.cn/post/7256306281538699325
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。