Page 297 - 《软件学报》2021年第6期
P. 297
王颖 等:面向 ROS 的差分模糊测试方法 1871
行测试.执行模块的设计与 ROS 中间层的通信机制相结合,节点间使用话题通信机制传递消息;该模块还负责差
异信息的比较以及差分模糊测试的执行,对于测试执行后产生的信息,对其进行评估筛选,保留下的种子再次按
策略生成测试文件,进而提高种子质量.我们还会在第 2.3 节介绍用于该方法的评估指标的设定.
保留种子
测试用例生成模块 差分模糊测试执行模块
ROS功能包1
节点
管理器
基础模块 策略处理模块 发布者 订阅者
话题
话题
输入处理
策略查找 用例生成 ... 报告
CLI接口 • ٛ文件加载 字典 (策略字典) 节点 差异计算 评估
• ٛ字典转化 管理器
话题 话题
种子生成 发布者 订阅者
• ٛ策略对应
ROS功能包N
节点
管理器
处理&生成 话题 话题 比较&执行
发布者 订阅者
序列标签
Fig.3 Overview of a differential fuzz testing in ROS
图 3 面向 ROS 的差分模糊测试方法设计图
2.1 测试用例生成
模糊测试中,测试用例可以从头开始生成,也可以从现有的测试用例中变异,因此有基于变异和基于策略生
成两种常见的测试用例生成方法:基于变异的生成方法是通过变异已知的测试用例来创建新的测试用例;基于
策略生成的方法会从头开始生成新的测试用例,需要知道输入文件的结构,否则它们只会生成随机的字节.在本
文提出的测试方法中,我们使用基于策略生成的方法.
测试用例生成模块主要分为基础模块及策略处理模块两个子模块,完成种子的处理及被测用例的生成.如
图 3 所示:该模块的输入是由 CLI 接口传递来的界面参数,输出是测试用例;CLI 接口简单来说就是一个命令行
输入接口,接收的参数是我们需要的测试用例的消息类型及话题名称;生成的测试用例经种子生成环节进行了
序列标识;每一组种子都获取了唯一的序列标号,以便于后续步骤的回溯和分析.首先,基础模块的种子处理部
分接收 CLI 接口的输入,对输入进行一系列初步处理后,形成字典文件传递给策略处理模块;策略处理模块使用
多个简单策略,如数组、时间戳、字符串等以及组合复杂策略来指导种子生成过程,并将相应策略返回给基础
模块进行种子生成,实现策略处理模块与基础模块的策略对应过程,最终为差分模糊测试的具体执行环节生成
测试用例文件.
2.2 差分模糊测试执行
差分模糊测试执行模块分为差分测试的执行以及测试结果差异对比及评估的比较两部分.对于 ROS 功能
包来说,节点是最小的可执行程序,因此,我们需要以节点为单位建立模型,节点间通过分布式通信机制传递消
息实现通信,最终实现相应功能.在本模块,我们首先建立被测模型,模型包括角色、内容、规则等;从上一模块接
收测试用例文件后,运行节点,实现消息的传递实现相应功能,结束后得到相应的差异信息;接着,差异信息根据
设定好的评估指标进行计算并比较输出结果;最后,符合评估结果的种子将被保留,该部分高质量的种子通过序