首页 专利交易 科技果 科技人才 科技服务 国际服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

一种以关键路径为导向的智能合约Flaky Test Root Cause定位方法 

买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!

申请/专利权人:南京工业大学

摘要:本发明提出一种以关键路径为导向的智能合约FlakyTestRootCause定位方法。该方法首先对智能合约进行数据流分析,得到可能受到区块链状态影响的节点和执行路径,称为关键节点和关键路径;然后,以关键路径作为覆盖目标,采用演化模糊测试技术,生成一系列交易序列作为测试输入,并对生成的交易序列进行积极重跑。在此基础上,针对重跑产生的FlakyTest,应用RootCause检测器动态检测FlakyTest的RootCause。设计了三种类型RootCause检测器,分别用于检测交易顺序依赖、区块链属性依赖以及并发依赖导致的RootCause。最终,输出待测合约的FlakyTest及RootCause位置和类型。本发明的目的在于减轻FlakyTest对测试结果的影响,给予测试人员及时的提醒,降低智能合约测试以及后续的维护成本。

主权项:1.一种以关键路径为导向的智能合约FlakyTestRootCause定位方法,其特征在于,针对待测合约,首先通过数据流分析找到智能合约中所有可能受到区块链状态影响的节点和执行路径,称为关键节点和关键路径;接着,分别以关键节点和关键路径作为潜在的RootCause和覆盖目标,采用演化模糊测试技术,生成一系列交易序列作为测试输入;最后,应用所设计的三种RootCauses检测器,以生成的交易序列作为重跑对象来检测FlakyTest产生的RootCause;该方法包括下列步骤:1关键路径识别;给定待测合约scut,分析得到待测合约的关键路径集合critical_paths;首先构建待测合约scut的控制流图cfgscut和待测合约状态变量的数据依赖图dfgscut;其中,cfgscut表示了合约内各条语句之间的控制流转移关系,dfgscut表示了合约中语句对状态变量的定义和使用情况;为了打破环路,我们使用Floyd算法在控制流图cfgscut中检测环路,并将环路中的节点标记为loopnodes;对于ddgscut中的每一个节点node,如果该节点是criticalnodes且不是loopnodes,那么就在在控制流图中找到对应的节点,并把该节点标记为关键节点;接下来,遍历控制流图cfgscut中的所有路径,如果路径包含至少一个关键节点,并且带有分支,就将其加入关键路径集合;最后输出关键路径集合critical_paths;2测试用例生成;给定critical_paths和测试用例集最大规模maxNumber;首先根据critical_paths模糊生成测试用例集testCase;接着利用演化算法来优化模糊测试用例集testCase;在演化过程中,我们需要对每一个测试用例tc做适应度评价,构建的适应度函数如下: 其中p是个体对应的路径,Lp是p的长度,Dp是p的依赖程度,C是所有关键路径的集合,Sp,q是p和q之间的相似度,即使用SimRank算法来度量两条路径之间的相似性;然后,我们需要计算待测合约scut中对每个状态变量的读写次数dicDependency和路径对状态变量的依赖程度pathDegree,我们根据待测合约scut和一个测试用例tc,初始化字典dicDependency和pathDegree;执行scut,当检测到执行SLOAD或SSTORE指令时暂停执行;这两条指令分别用于从存储中加载和存储变量var;判断变量var是否已在dicDepndency的key列中;若不在,则添加<var;{″″numRead":0,"humWrite":0}>至dicDepndency;numRead和numWrite分别用于记录此次执行中对var的读次数和写次数;随后,如果指令是SLOAD,则增加状态变量var读操作和pathDegree的数量;如果指令是SSTORE,则增加状态变量写操作和pathDegree的数量;重复直至scut执行结束,此时得到dicDependency和pathDegree,计算适应度值fp;其次,优先选择适应度值fp高的测试用例tc进行交叉、变异,来生成新的测试用例进入下一代,直至测试用例数量达到maxNumber;然后,输出最终生成的测试用例集testCase;最后,对生成的交易序列进行积极重跑得到FakyTests;3RootCause定位;给定待测合约scut,TXsend是检测到的scut的交易发起序列,TX1、TX2是检测到scutFlakyTest的两笔交易序列,首先,判断是否满足交易顺序依赖的情况:tx1和tx2在TX1、TX2中的执行顺序不一致;存在一个状态变量var,tx1定义了var,tx2使用了var;除tx1外,tx定义了var,若满足,得到FlakyTest是由交易顺序依赖导致的;其次,判断是否满足区块链属性依赖的情况:tx1和tx2在TX1、TX2中的执行存在时间或区块的不同;存在一个指令或状态变量var,比如BLOCK.TIMESTAMP或NOW表示当前区块的时间戳,CREATE、CALL、DELEGATECALL或SELFDESTRUCT表示合约创建或调用,tx1和tx2调用了该指令或var,若满足,则得到FlakyTest是由区块链属性依赖导致的;然后,判断是否满足并发性依赖的情况:tx1和tx2在TX1、TX2中的执行顺序是并发的,即它们的执行时间有重叠;存在一个状态变量var,tx1和tx2都读取或者修改了var;存在CALL指令,其gas值大于2300个单位,或转移的资金量为符号值或大于零的具体值,表示调用了另一个合约并可能存在回调风险;此外,我们还检查了在CALL指令之前发生的SLOAD指令和在CALL指令之后发生的SSTORE指令,并且与SLOAD指令共享相同的存储位置;若满足,则得到FlakyTest是由并发性依赖导致的;最后,输出RootCause的类型及位置。

全文数据:

权利要求:

百度查询: 南京工业大学 一种以关键路径为导向的智能合约Flaky Test Root Cause定位方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。

Flaky相关技术