一种基于模板代码匹配检测组件规范化使用的方法

背景

随着应用程序代码越来越庞大,代码组件化也成了一个趋势,组件的生态也愈加丰富多彩,一个应用就可能同时接入众多组件。在组件的使用文档中都有相应的使用方法以及使用场景,其中的使用方法和场景是组件开发者希望的使用方式,然而对于使用组件的应用开发者来说,不一定完全按照组件提供的方式去接入,这样可能就会出现问题:降低程序的健壮性;严重时甚至出现bug。而对于不合理接入组件造成的问题,一般是通过下面2种方式去降低,但不能避免:

  1. 多次调试应用程序,自测尽量覆盖到每个分支,减少组件问题发生的概率;
  2. 进行代码Review,希望通过其他同事在代码审查时,尽早发现使用组件的问题。

于是,本文提出一种可以很好解决这个问题的方法,简单来说就是,一种基于模板代码匹配检测组件规范化使用的方法。

解决的问题:解决应用开发者未按照组件规范化使用方式(即:未使用组件开发者提供的组件接入方式),导致的程序bug和程序的不健壮性等问题。

模块定义

应用程序模块:是指接入多个组件,并使用组件代码的应用;

组件模板代码模块:是指组件开发者提供的组件使用模板代码,针对于不同组件有不同模板代码;

模板代码匹配模块:是指利用静态代码规范扫描工具如lint,检测是否使用了和组件模板代码一样的顺序和方式的代码;

规范化检测模块:通过输入应用程序模块代码,以及组件模块模板代码,然后利用模板代码匹配模块进行检测。

技术详解

模板代码匹配原理

描述:此处探讨下模板代码匹配的实现原理,避免因缺少技术特征,进一步导致无法知晓方案如何实施的发生。模板代码匹配主要是利用静态代码规范扫描工具如lint,检测是否使用了和组件模板代码一样的顺序和方式的代码,并将匹配结果输出。使用lint工具实现的具体步骤如图1所示:

步骤1:将模板代码放到自定义lint检查规则里面,生成jar或aar,进行步骤2;

步骤2:将自定义lint检查规则jar或aar引入到项目中,进行步骤3;

步骤3:对项目执行lint检查,得出结论。参考

图1 模板代码匹配原理

 场景1:应用接入单个组件的场景

描述:如图2所示,针对于接入单个组件的应用程序模块,首先需要获取组件模板代码和应用程序代码,并将其输入组件模板代码模块和应用程序模块,然后运行规范化检测模块,而规范化检测模块内部调用模板代码匹配模块,输出该组件规范化使用的检测结果。

步骤1:获取组件的模板代码,并将其输入组件模板代码模块,进行步骤2;

步骤2:获取应用程序的代码,并将其输入应用程序模块,进行步骤3;

步骤3:将组件模板代码模块和应用程序模块,输入规范化检测模块,进行步骤4;

步骤4:规范化检测模块调用模板代码匹配模块,进行步骤5;

步骤5:模板代码匹配模块运行,输出匹配结果,进行步骤6;

步骤6:规范化检测模块处理匹配结果,如果匹配成功,则检测成功,结束;否则,检测失败,进行步骤7。匹配结果展示可有如下2种:(1)标记应用程序模块使用到组件代码但未成功匹配代码的代码段,直观形象展示给应用程序开发者,并将组件模板代码在标记处附上,方便应用开发者修改;(2)匹配成功,文本显示组件匹配成功即可。由于匹配结果展示不属于本文的核心点,就不在此展开来讲。

步骤7:对于匹配结果为FALSE的应用程序,在应用开发者修改后,可从步骤1开始再次检测,否则直接结束。

图2 应用接入单个组件的场景

 场景2:应用接入多个组件的场景

描述:如图3所示,针对于接入多个组件的应用程序模块,首先也是需要获取多个组件的模板代码和应用程序代码,并将其输入组件模板代码模块和应用程序模块,然后运行规范化检测模块,在规范化检测模块内部调用模板代码匹配模块,输出该组件规范化使用的检测结果。接入多个组件和单个不同的是,在检测时会针对于多个组件做匹配,其他步骤是一样的。

步骤1:获取多个组件的模板代码,并将其挨个输入组件模板代码模块,进行步骤2;

步骤2:获取应用程序的代码,并将其输入应用程序模块,进行步骤3;

步骤3:将组件模板代码模块和应用程序模块,输入规范化检测模块,进行步骤4;

步骤4:规范化检测模块调用模板代码匹配模块,进行步骤5;

步骤5:模板代码匹配模块采用循环运行,从组件模板代码模块获取每个组件的模板代码,对其进行模板代码匹配,保存每个组件匹配结果,进行步骤6;

步骤6:模板代码匹配模块输出整体模板代码匹配结果,进行步骤7;

步骤7:规范化检测模块处理匹配结果,如果匹配成功,则检测成功,结束;否则,检测失败,进行步骤8。匹配结果展示如场景1所述,由于匹配结果展示不属于本文的核心点,就不展开来讲了。

步骤8:对于匹配结果为FALSE的应用程序,在应用开发者修改后,可从步骤1开始再次检测,否则直接结束。

图3 应用接入多个组件的场景 

参考资料

  1. 基于模板代码匹配:CN202011469614.6 - 一种基于模板代码匹配的轻量级热修复方法 - 佰腾网
  2. 代码评审方法:CN201910754715.9 - 代码评审方法、装置、计算机设备及存储介质 - 佰腾网
  3. 代码检测方法:CN202010326315.0 - 一种代码检测方法及装置 - 佰腾网
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值