前言
1. 保证代码质量
自己的代码要给别人看,在开发过程中就会刻意的注意一些规范,写法及逻辑严谨性。
2. 扼杀潜在的风险
程序员会去自测,即使有某种情况分支遗漏, 在讲解的过程中其他同学也能发现。
3. 互相学习提高
高手是如何写出逻辑严谨,简洁易懂的代码的。方便对照自己的不足,逐步的纠正。
一、代码评审机制流程说明
- 确定code review的范围,0级和1级系统必须进行review,
架构评审小组来确定要不要评审和引入外援评审人员。
- 确定code review的频率,时间,参与人,为了避免评审盲区,不复杂的可以内部评审,可以让不同研发小组的高T交叉评审,比较复杂的需要引进外援高T进行评审。
- 频率和时间:以迭代为周期,一个迭代评审一次,功能开发完成就可以进行评审。
- 参与人:发起人,各个研发小组的高T人员参与评审(大家不一定都有空,谁有空谁参加),评审过程当中要做好评审记录。
- 评审遇到致命的问题需要尽快修改,修改之后才能进行代码合并和上线,评审问题较多影响上线而且短时间内又不能及时修复的话,就取消当前的上线,不能带病上线。
- 对于二次修改的需要单独找评审人重新review。
Code Review
- 阻塞式
提交代码时候,以PR方式 + 邀请指定相关人进行code review,只有当大家都通过后再有相关人员进行merge。此外在正式发版前还需要进行线下评审。
如果上线后产生了由于开发人员修改程序导致的比较明显或者比较低级错误的问题,责任由开发人员和Review人员共同承担。
二、最佳实践
1)制定规范:编码规范+技术规范+业务规范,形成标准文档化。
2)根据需求开发,定期安排相关开发人员、评审人员参与Code Review,有需要的话可以邀请测试人员参与。
3)开始评审前,要求相关代码通过阿里编码规范/FIndBugs/SonarLint等插件进行前期扫描,避免出现比较多的基本问题。
4)新同学首次参入进来,需要着重关注新人,给予更好的建议,帮助提升代码质量。
5)针对评审质量很高的代码给予肯定,并且表扬相关人员。
6)定期总结Code Review存在的问题,记录相关问题于wiki(文档)上,按月度或季度定期输出总结。
7)制定与实际业务相关的开发规范,防止重复掉坑,重复出现同一类问题事故等。
三、自查(测)清单
一、常规项
1 代码能够工作么?它有没有实现预期的功能(需求),逻辑是否正确等。
2 所有的代码是否简单易懂? 是否尽可能的模块化了?组件化了?是否存在多余的或是重复的代码?
是否有可以被库函数替代的代码(尽量用集团自有的)? 不重复造轮子。
3 代码符合你所遵循的编程规范么(详见 我另外html,js,css编码规范的文章)?这通常包括大括号的位置,变量命名和函数名,行的长度,缩进,格式和注释。
4 去掉大段被注释掉的代码(若有用可以先提交到git上,以后可回滚)
5 循环是否设置了长度和正确的终止条件? 按钮是否有控制单次点击,不重复提交?
6 是否有考虑调用api接口缓存问题?是否有可以删除的日志或调试代码?
二、安全
1 所有的输入是否都进行了检查(检测正确的类型,长度,格式和范围),考虑了xss攻击和js脚本注入。
2 引用导入的第二、三方依赖包,是否存在不可用 和 版本升级导致功能不可用的风险。
是否是GPL协议的源码( 不能用,否则会要求使用者的代码也开源)
3 本机保存的数据,是否有泄漏的隐患。(铭感数据不做本地存储,即使保存也需要加密)。
4 所有的请求链接是否都是用https,包括图片地址。
5 发布之前清理log日志 和 敏感注释。尤其是前端同学。
三、文档
1 是否有注释,并且描述了代码的意图?数据结构和计量单位是否进行了解释?
2 对非常规行为和边界情况处理是否有描述?
3 第三方库的使用和函数是否有文档?
4 是否有未完成的代码?如果是的话,是不是应该移除,或者用合适的标记进行标记比如‘TODO’?
四、性能速度
1 页面加载显示是否超过3s(用户超过3s 就会不耐烦,除非你有很友好的提示。。。)
2 js代码 是否有明显影响性能的逻辑 和 计算。
3 同个组件 或者 页面布局层级嵌套尽量不要太深,保持简洁性。
四、评分标准及规则 (5大维度,总分100)
1. 需求功能覆盖率 --------权重3(30%)
9-10分:代码严谨、逻辑分支覆盖全面 无遗漏
6-8分:无关键逻辑分支遗漏,普通遗漏不超过2次
0-5分:关键逻辑分支遗漏1次及以上 或其他分支遗漏2次以上
2. 代码结构耦合度--------权重3(30%)
9-10分:结构清晰,模块独立(数据融合),模块间关联简单,模块内完成特定子功能
6-8分:模块间中度藕合(控制藕合)
0-5分:模块间强藕合,模块内功能复杂
3. 健壮性---------2(20%)
9-10分:性能稳定,异常考虑周全,没有安全注入风险----1 页面打开速度不超过3s 2 破坏性测试情况下依然稳定加载
6-8分:异常处理不到位(undefined等),存在性能问题,但不影响关键流程,不宕机
0-5分:关键流程存在问题,有宕机风险
4. 简洁度------1(10%)
9-10分:没有冗余代码,没有重复造轮子,单个函数功能单一,建议不超过20行,无多余导入的包或类
6-8分:存在冗余,重复代码
0-5分:普遍存在冗余,重复代码
5. 可读性------1(10%)
9-10分:严格执行集团编码规约,易于理解,命名规范,注释清晰
6-8分:存在阅读障碍与阅读困难的情况
0-5分:关键逻辑与复杂代码缺乏注释,理解极度困难
ps: 分数最终计算方式可以这么着
1 总分按100分算,单项最终得分=评分权重 (例如‘覆盖率项得总分27=93) ,然后把5项的总分加起来。
2 3.75的标准就是各项加起来90分+ ;3.5的标准就是加起来80分+
最后
本文纯属记录学习,如有涉及侵权,麻烦告知