常见Code Review过程中发现的问题-续
上一篇列举了一些比较常见的Code Review问题列表,文末有链接,可追溯查看。本篇为上篇的姊妹篇,继续列举一些上篇遗漏的或不易发现的问题清单,希望能整体性把一些常见的问题表述出来。
测试数据不具有代表性,导致功能分支测试覆盖率不够,真正提交测试时很容易暴露出问题,对已对人都不好。
事务使用不合理,是否在事务方法中调用外部服务。有些在只读事务操作数据,在启用事务配置时要特别注意,应避免此类操作。
对于关键数据未进行为空判定,一个空NullPointer异常足以打乱所有正常的业务逻辑走向。
涉及分布式系统间交互数据时,无补偿机制来保证数据的最终一致性。也就是说非正常情况下的保障措施缺失。
系统间关键交易交互时,无交易记录留存,后期数据分析、系统间数据核对基本无从下手,造成一些不弥补的损失。
与第三方系统接口交互,仅考虑同步数据返回,异步数据返回未编写对应方法,导致一部分业务场景下数据不一致。
异常信息处理欠妥当,直接将错误信息返给前端用户,体验较差。此类信息需要包装,尽量对用户友好。
从文件布局考虑,包结构、文件目录结构等安排不合理,文件存放错乱,统一职能文件未能统一规范摆放存储,这给后续系统维护增加难度。
从单个功能处理看,很正常,但推演到全局功能来讲,有些功能类型或流程相同,可以采用模板模式等前人抽象出来的设计模式来重构,提升代码的精简性。
对于后期可能发生变更的功能,缺少潜在可见的扩展性,这个可事先规划好,完全可以兼容可以预见的变更。
代码兼容性比较弱的或者有些淘汰不建议的方法依旧在使用,建议换成兼容性较好的方法或替代方法,一旦时间长远,这些不再兼容,极易引起bug。
多线程中使用了一些线程不安全的对象,比如常见的日期数据格式化类SimpleDateFormate,建议采用concurrent工具包里面的或Guava里面的方法或实体。
采用数据库进行共享锁操作时,存在漏洞。先select再update时有时间空档,容易被其它线程更改数据。应直接采用update的方式直接拿数据,如update table set colum=1 where colum=0
最后一条,也是比较关键的一条。代码逻辑正常,但与业务逻辑不符,好比此处需要一个螺母固定,却放了把瑞士军刀,虽然很强大,但无用。此类问题隐藏较深,所以需要Review人员经验丰富且对业务熟知,否则仅是经验丰富也很容易遗漏掉,造成题不对文的局面。
这两篇内容是笔者实际工作中总结出的几点经验,肯定还有其它Code Review过程产生的其它问题文章里没有提及到的,有兴趣的朋友可以留言在文章底部,把问题抛出来,群策群力不失为一个进步的好办法。
上一篇传送门:常见Code
Review过程中发现的问题
基于SpringCloud的Microservices架构实战案例
Spring
Boot + Elasticsearch 实现索引的日常维护
常见Code Review过程中发现的问题-续的更多相关文章
- 常见Code Review过程中发现的问题
软件环境:Spring MVC + MyBatis 主要体现在两个方面,一个是编码习惯问题,另一个是编码质量的问题.编码习惯主要有日志编写.代码注释以及编码风格的问题,而编码质量则与很多方面相关,比如 ...
- 为Secure Store Service生成新密钥,解决“生成密钥过程中发现错误”的问题
我们集成TFS和SharePoint Server以后,一个最常见的需求是通过SharePoint Server的Excel Service读取TFS报表中的信息,利用Excel Service的强大 ...
- 调试过程中发现按f5无法走进jdk源码
debug 模式 ,在fis=new FileInputStream(file); 行打断点 调试过程中发现按f5无法走进jdk源码 package com.lzl.spring.test; impo ...
- Hive通过查询语句向表中插入数据过程中发现的坑
前言 近期在学习使用Hive(版本号0.13.1)的过程中,发现了一些坑,它们也许是Hive提倡的比关系数据库更加自由的体现(同一时候引来一些问题).也许是一些bug.总而言之,这些都须要使用Hive ...
- 在网站制作过程中发现的block和inline-block不同。
inline-block,简单来说就是在CSS中通过display:inline-block对一个对象指定inline-block属性,可以将对象呈递为内联对象,但是对象的内容作为块对象呈递.有时既希 ...
- VS 2017开发ASP.NET Core Web应用过程中发现的一个重大Bug
今天试着用VS 2017去开发一个.net core项目,想着看看.net core的开发和MVC5开发有什么区别,然后从中发现了一个VS2017的Bug. 首先,我们新建项目,ASP.NET Cor ...
- sqlserver2017安装及连接过程中发现的问题
1.SSMS安装报错,如下图 根据搜索资料发现是防火墙的问题,关闭防火墙就行了. 2.连接用户时报错 这个是因为远程连接相关问题. 首先打开服务器远程连接: 其次点击: SqlServer配置管理器- ...
- vue生命周期updated的触发时机之debug过程中发现的firefox问题
现象描述: 断点位置1 谷歌debug的过程: 火狐debug的过程: 只要在改变数据之后有断点停顿,就会先去执行updated函数 断点位置2 此时火狐和谷歌是一样的效果,但是执行顺序是不一致的 谷 ...
- 使用Android studio过程中发现的几个解决R变红的办法
刚开始使用Android studio的时候,好几次碰见新建了一个xml文件,或者new了一个activity之后,Android studio莫名其妙的报错了,而显示红色的地方就是常用的(R.id. ...
随机推荐
- C/C++ static用法
这篇文章没有太多的实际内容,简单记录下static的用法.顺便试一下用markdown来写文章. 1. 在函数中使用 我们都知道在一个函数中的变量是存储在栈区中,函数的每一次调用都伴随着变量的重新定义 ...
- Keil c中自定义带可变参数的printf函数
在嵌入式c中,往往采用串口打印函数来实现程序的调试,而在正式程序中一般是不需要这些打印代码的,通常做法是在这些调试用打印代码的前后设置一个宏定义块来实现是否启用这段代码,比如: // other us ...
- php延时执行
sleep(秒) usleep(毫秒) 让它睡上一会.
- C#最基本的数据库增删改查
namespace access { public partial class Form1 : Form { //定义数据库的连接路径 string txtConn ="Provider=M ...
- CROSS JOIN
原文:CROSS JOIN 最近在讲到T-SQL查询的Join部分时,一下子没有想起来CROSS JOIN的用法,因为其实平常也确实基本不用到.特意找了一个例子,以供参考 CROSS JOIN又称为笛 ...
- JSON对象与字符串之间的相互转换 - CSDN博客
原文:JSON对象与字符串之间的相互转换 - CSDN博客 <html> <head> <meta name="viewport" content=& ...
- LCID
Language Location (or type) Language ID Language tag Supported version Afar 0x1000 aa Release 9 Af ...
- 修改用户名后TSF出现"需要本地工作区。工作区 xxx 并未驻留在本计算机上"
解决方法就是:1,打开vs下的"开发人员命令提示"2,按下面格式输入命令:tf workspaces /collection:http://192.168.0.110:8080/t ...
- T4生成整理
将一些公用的东西弄到一个类库DM.T4里面,哪个项目需要用到t4生成的话,将DM.T4的生成事件中将dll和ModelAuto.ttinclude复制到需要使用T4的项目的生成目录下,如果这样 cop ...
- 设置tablewidget自适应列宽和设置自动等宽
在网上很容易知道自适应列宽,100%不留空显示,这里还是提下: /*设置表格是否充满,即行末不留空*/ ui->tableWidget->horizontalHeader()-> ...