Code Review

Code Review 参考

具体规则:

评分大项 序号 小项 具体要求 扣分范围
一、总体功能设计 1 流程清晰

1、熟练讲解对应业务需求;

2、代码的运行流程清晰合理;

1~15
2 实现方式

1、目录、文件分配合理;

2、正确并规范使用组件及工具方法;

3、设计模式正确;

1~35
二、类、对象、数据结构 1 声明 使用正确的类型声明 1
2 权责 符合权责单一原则,负责的事情应清晰明了 1~10
3 内聚

相同功能的类、函数、对象、组件等应尽量抽为共用

代码耦合度合理

1~10

三、命名

适用于所有项目名,文件名,变量名,函数名,class, ID

1 名副其实 符合命名规则、符合读写习惯 一处扣1分
2 避免误导 不要有误导性命名 一处扣1分
3 做有意义的区分

做有意义的区分

比如applicationName 非写个applicationNameString 难道name会是个浮点型不成

又如enable 非写个isEnable 难道enable会是个字符串不成

一处扣1分
4 使用读得出来的名称 不要有读不通的名字 一处扣1分
5 使用可搜索的名称 使用可搜索的名称 一处扣1分
6 避免使用编码 变量不要使用前缀、后缀、纯大写等。如果使用给出合理解释 一处扣1分
7 避免思维映射 尽量不使用单字母临时变量,循环里可酌情使用 一处扣1分
8 变量名、类名、组件名 要是名词或名词短语 一处扣1分
9 方法名 使用动词或动词短语,使用描述性名称 一处扣1分
10 每个概念对应一个词

相同行为的方法命名规则需要固定

比如:同一个人写3个component组件,都有一个组件创建时,加载数据的函数。一个叫initData, 一个叫loadData, 一个叫getData 这就不合适

又如:一个组件使用了三个弹窗,三个弹窗的事件响应函数命名各不相同,有的叫handleClick, 有的叫onClick, 有的叫afterClicked 这就不合适

一处扣1分
11 添加有意义的语境

有语境支撑的变量,可不带语境

没有语境支撑的变量,要自带语境

比如有Application.js的一个类,里面是一个Application类,在此类里面需定义一个状态枚举供此文件自己使用。可以定义为StatusEnum。因为此文件和Application类 已经提供了语境

如果枚举值需要给外部使用,或定义在enum.js里面。应命名为ApplicationStatusEnum

一处扣1分
四、函数 1 短小精悍,结构语法合理清晰

看一眼觉得精简

空间复杂度合理

时间复杂度合理

如:

1、不要有不必要的临时变量;

eg: _this = this

2、能用局部变量的,就不要使用全局变量;

3、使用合适的API方法,比如正确区分并使用map, filter, forEach,find,some等方法。

4、正确定义let/const变量

一处扣2分
2 更短小

细看也觉得很精简

1、在最后的else逻辑中,有return方法,可去掉else,直接return(sonar要求)

一处扣1分
3 只做一件事,每个函数一个抽象层级

名字和内容一致,不要做多件事。

判断标准

1.看能否再拆出一个函数,该函数不仅仅是单纯的重新诠释其实现

2.看是不是做的同一抽象层上的事

一处扣2分
4 Switch语句 当 if 判断逻辑比较多的时候,使用switch 一处扣1分
5 函数参数

最好没有参数,第二选择是一个参数,最多三个, 当有多个参数时,建议使用对象解构赋值。

function({id: ‘', date: ‘’, type: '’})

参数命名也要严格按照规范来。

一处扣1分

6 无副作用

如:

setName(value) {

this.name = value

this.shortName = value.substring(0,40)

}

shortName的值本不该在这个函数修改,会让人忽略其变化过程。

一处扣2分
7 分隔指令与询问

要么做什么事,要么回答什么事,二者不可兼得。

比如 setAndCheckExist() =>

dataExist()

setData()

一处扣1分
8 别重复自己 相同的代码不要在多个函数中反复出现 一处扣1分
五、注释 1 坏注释 能通过函数和变量读懂代码就不需要注释,不要添加无用的、日志式的、废话型的、误导性的、循规式的注释 1
2 没有注释 该有注释的地方没有注释 1
六、代码格式 1 SonarLint, ESLint 扫描不过 2
七、代码风格 1 参考vue风格指南,或者使用统一的插件格式化 如生命周期钩子函数一般按照被调用的顺序进行书写,方便阅读 1
2 按调用顺序,从上至下编写

文件内代码编排混乱

相关联的函数尽量放到一起。

2
3 不要做一些不需要的事情

比如:

1、在使用async await 之前,想清楚当前场景是否真的需要同步处理。

2、对于promise的一些错误处理,promise本身已经做了很好的正确与错误的区分,就不需要在外面通过try catch 去捕获了。

八、错误处理 1 处理参数错误 参数错误 1
2 处理接口返回错误

数据没有判空

没有结束流程,比如依然在loading

2
3 处理用户操作错误

重复点击引发错误

未校验用户输入

2
4 抽离try/catch 代码块 如非必要,不要写try/catch
九、ADA 1 ADA检测

WAVE / Bookmarklets 工具检测

A/AA 的问题要清零

1~5
2 屏幕朗读工具 JAWS 能正确访问,并且朗读的文案清晰易理解 1~5
十、自适应与兼容性 1 兼容不同屏幕大小 通过谷歌浏览器调试工具移动端模式查看,是否适配。 1~5
2 兼容不同浏览器 IE待定 1~5
十一、国际化 1 key命名正确 字母、数字、下划线 1
2 尽量在模板和render函数中使用国际化方法 在可行的范围内尽量使用 1
十二、CSS 1 正确合理使用组件样式库

1、对于组件样式库就可以完全解决的问题,就不要自定义样式了。

2、合理定义自定义样式。

1
十三、其它 1 代码安全 v-html内容,没有做xss过滤。 5
2 代码来源 拷贝的非法代码 5~10

评分表

扣分大项 扣分小项 扣分 扣分代码
总得分: 代码质量评级:

代码质量评级:

【96~100】 优

【91~95】 好

【86~ 90】良好

【81~85】良