CodeReview需关注的问题点
常见代码问题
空值
防御式编程,判空处理,有胜于无
未捕获潜在的异常
API返回做判断;切忌默默吞掉异常;防御式编程
低性能
批量调用接口或访问DB;处理超时;降维多重循环;复用大对象
影响范围过大
谨慎修改公共函数、基础函数、基类等;充分测试;评估影响范围
单测间题
重要业务逻辑必有单测;单测全部通过;代码BUG或变更单测覆盖;增加异常单测
与原有业务逐辑不兼容
充分理解已有逻辑及设计;
缺乏必要日志
重要而关键的实例状态、代码路径及API调用,INFO日志;异常捕获并Error日志
错误码不符合规范
错误码集中在一个类管理,切忌分散在代码中;遵循团队规范
参数检测缺乏或不足
参数值类型;参数业务类型;契约式编程;
API参数传递错误
参数类型具体化;避免相同类型参数相邻
引用错误
有多个重名类时仔细核对类的全名;源加新类时先搜索重名类引用
细节错误
数组越界、JSON解析出错、函数参数传递出错、API版本不对;
使用网上拷贝的未经测试的代码、不成熟的算法、传值与传引用、相等性比较
多重条件
拆分为有业务语义的单个条件的组合
文不符实
查询接口中有更新/新增甚至删除操作,引发故障的定时炸弹
跨语言或跨系统交互
空值、JSON、数组的不同解析;接口与交互约定;联调确认
可维护性问题
硬编码
“魔数”(枚举替代);写死的配置(配置项);临时加的逆辊和文案(抽离管理)
重复代码
抽离通用的部分,定制差异;事实一致性;
通用逻辑与业务逻辑耦合
通用处理流程抽离,业务逻辑以回调函数传入;复用而非混杂
直接在原方法里加逻辑
新增一个函数,然后在原方法中调用并说明原因
多业务耦合
先划分业务边界,定义好接口设计和服务依赖关系,再着手开发
代码层次不合理
代码的放置位置不符合当前架构设计约定;Control调用Control;
不用多余的代码
后续维护时会造成困惑;确认不用及时删除
使用全局变量
破坏函数的复用性;排查和调试问题
缺乏必要的注释
重要和关键点的代码;特殊处理缺乏说明
轻微问题
命名不贴切
取贴切的名字
声明时未初始化
赋予默认初始值
风格与整体有不一致
调整为整体一致风格
类型转换错误
转换前判断类型;避免类型转换报错
否定式风格
使用肯定句式
容器遍历的结构变更
使用迭代器遍历和变更
单行调用括号过多
拆解为多行
修改方法签名
扫描和修改所有调用者
打印日志太多
仅保留必需日志
多级数据结构
确保父级结构的数据存在
作用域过大
仅在需要时定义和使用
复杂问题
并发
- 多线程访问缺乏同步保护;死锁
- 缺乏控制的手动线程或动态创建的线程池
缺乏事务控制
识别原子操作集并添加事务
大数据量的SQL低效
- 合适的素引、查询条件与顺序
- 避免Join,子查询
安全问题
- 输入;清除敏感私密信息;加密存储;
- 角色、权限、操作、数据访问分级和控制
设计问题
性能问题
扩展性问题
缺乏幂等处理
(完)