中原银行代码智能重构实践
代码是软件系统的“细胞”,无论是千万行代码共同构建的大型软件产品,还是百余行代码即可实现的袖珍软件工具,都是由代码一行一行“编织”而成。软件系统中的每行代码如同堆砌摩天大楼的一砖一瓦,虽然看上去毫不起眼,但其质量的高低却会直接影响大厦的安全与稳定。
软件研发界一直推崇代码的整洁性、追求编码的艺术,正是希望在研发过程中也能注入工匠精神,产出更加优雅、稳固、安全、易于扩展和维护的代码,从而交付更高质量的软件系统。
但“时间紧,任务重”的情况是客观存在的,开发者常需平衡时间与收益两者的关系,为了赶工期而无暇顾及代码质量的情况并非罕见。“千里之堤,溃于蚁穴”,技术债的堆积势必会给软件系统日后的稳定安全运行埋下隐患。
重构代码是提高代码质量、结清技术债务、提升软件品质的有效方法。不过,重构不但要保持业务逻辑的正确性,而且要提升存量代码的可维护性,无疑是一项门槛较高且耗时费力地工作。
为此,中原银行统一开发平台后端团队打造了一款中原银行内部使用的代码智能重构插件,该插件通过智能识别不规范的代码并支持对不规范的代码进行一键重构,实现了以自动化的重构方式减轻手工重构代码的负担,提升代码重构的效率,释放生产力,在降本增效的同时,推动软件系统快速稳固发展。
1. 代码重构是什么
1.1.重构的含义与目的
重构是对软件内部代码结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可阅读性和理解性,降低其维护成本。
1.2.重构的时机与层级
根据时机的先后,可将重构分为开发时重构和维护时重构。前者认为重构应该随时进行,不应该为了重构而重构。后者认为“添加新功能”和“重构”是两顶帽子,一次只做一件事。业界普遍的看法是:最好将重构工作尽可能多地做在开发阶段,从而尽量减少新增代码对已有设计与架构的破坏。
根据层级的高低,可将重构分为原子重构、编码规范重构、代码坏味道重构、设计模式坏味道重构四个层级:
原子重构,是指不可再分的重构操作,例如重命名、移动、删除等。对于原子重构,IDE 已经做了很好的支持。以重命名 Java 类为例,在 IDEA 的“Project”视图中重命名 Java 类后,该类对应的 Java 文件名、Java 文件中的类声明、其他类对该类的引用都同步更新为新类名。
编码规范重构,是指基于规范的重构操作,比如对违反了命名规则的标识符进行重命名。对于编码规范重构,IDE 也已经做了很好的支持。比如,IDEA 中就内置了许多支持自动重构的检查规则,当用户点击修复标签后 IDEA 就会将命中这些规则的代码块转换成标准写法。
代码坏味道重构,是指为了消除代码坏味道进行的重构。由于其重构方式的不确定性较高、构建彼此独立且正交的原子重构序列较为复杂,现有 IDE 暂不支持该层级的重构。
设计模式坏味道重构,是指为了消除设计中的坏味道进行的重构。检测出这种坏味道非常困难,因此现有 IDE 暂不支持该层级的重构。
2. 中原银行代码智能重构插件简要介绍
软件开发大师 Kent Beck 说:“手工重构并非易事。正是这个简单的事实使得很多程序员不愿意进行重构,虽然他们知道自己应该重构,但重构的成本太高了。如果能够把重构变得像调整代码格式那么简单,程序员自然也会乐意像整理代码格式那样整理系统的设计。而这样的整理对代码的可读性、可复用性和可理解性,都将带来深远的正面影响。”
基于此种观点,中原银行统一开发平台后端团队在阿里巴巴开源的 Java 开发规约插件的基础上进行深度二次开发,打造了一款可以精准识别违规代码、降低代码重构难度的工具——中原银行代码智能重构插件。该插件支持在 IDEA 和 Eclipse 这两款主流的 IDE 中使用,并通过添加大量自定义的扫描规则、支持对命中规则的代码块进行一键重构,大幅增强了 IDE 原生的编码规范级别重构能力。相比原生的阿里巴巴 Java 开发规约插件,中原银行代码智能重构插件引入了更多的扫描、重构规则,从而可以更有效地辅助开发者进行代码重构。
3. 中原银行代码智能重构插件的实现机制
中原银行代码智能重构插件通过识别违反编码规范的代码,并将代码按照一定规则修改成规范的写法,实现了对违规代码的智能重构。
3.1.智能重构第一步:识别违规代码
中原银行代码智能重构插件采用静态代码分析工具 pmd 进行代码扫描。该工具首先将源文件转化为抽象语法树,然后从树的根节点进行遍历:如果某节点命中某条规则,则该节点就是一个问题元素。
pmd 以规则集合为单位对单个源代码文件进行扫描,当规则集合内的所有规则都扫描完毕后,就可以定位该文件中的所有违规代码块。
3.2.智能重构第二步:智能修改代码
中原银行代码智能重构插件通过修改代码语法树的方式进行代码重构,从而更好地保持了代码的原始逻辑。
在 IDEA 中,中原银行代码智能重构插件通过 PSI(Project Structure Interface)来修改句法、语义代码模型;而在 Eclipse 中,中原银行代码智能重构插件通过 JDT(Java Development Tooling)操纵各种 Java 资源。
4.总结
代码质量是软件系统稳定安全运行的基石,而代码重构是提高代码质量的不二法门。如何通过提升开发工具的能力降低代码重构的门槛和成本,让研发效率与代码质量达到较好的平衡,是中原银行统一开发平台后端团队长期致力于解决的问题。
未来,中原银行统一开发平台后端团队将从增强编码规范重构、提供代码坏味道重构、探索设计模式坏味道重构等多个方面不断优化中原银行代码智能重构插件。同时,中原银行统一开发平台后端团队也会紧跟前沿技术,深化科技创新,探索引入人工智能算法,通过机器学习实现更加智能、深入的重构,让重构不再是一个难题!
本文转载自原银科技微信公众号
原文链接:中原银行代码智能重构实践
版权声明: 本文为 InfoQ 作者【中原银行】的原创文章。
原文链接:【http://xie.infoq.cn/article/a3c14fef1bdacd0cfd06c2213】。文章转载请联系作者。
评论