Page 303 - 《软件学报》2021年第6期
P. 303

王颖  等:面向 ROS 的差分模糊测试方法                                                           1877


             在该模型中,我们首先创建实现 TF,TF2 广播功能的广播节点 1(tf_broadcast)和广播节点 2(tf2_broadcast),
         在两个广播节点中定义相同的变换规则,如设置相同的平移距离和相等的欧拉角旋转角度并完成广播;同时,我
         们创建一个监听节点 tf_listener 实现 TF 与 TF2 的监听功能,节点同时接收来自两个广播节点广播的消息话题
         并完成相应的坐标转换.因此,确定被测模块的输入数据为空间坐标系下任意坐标值.具体实验流程如下.
             (1)  确定测试目标,生成测试用例
             基于上述分析及模型的建立,我们对 TF 和 TF2 使用面向 ROS 的差分模糊测试方法:第 1 步执行测试用例
         生成模块,确定生成 Pointstamped 类型消息数据作为测试用例;CLI 接口接收参数并传递给基础模块的输入处
         理,该模块对于输入进行文件加载及按复杂的消息类型的格式完成字典存储;接下来,策略处理模块根据类型字
         典在策略字典中为其匹配对应策略,并反馈回上一模块;最后,按对应策略完成种子生成,产生 JSON 文件格式的
         测试用例将被传递给下一模块.
             (2)  执行差分模糊测试
             下一步为执行模块:首先,在被测模块中使用话题通信机制,使各个节点可以实现通信;被测模块不断接收
         测试用例作为输入,两个广播器充当话题发布者的角色,利用广播功能发布坐标变换规则,当前位姿信息等话
         题,监听节点即为订阅者来订阅话题并进行坐标转化,不断得出两组转化后的坐标结果.将每组数据进行差异信
         息结算并进入评估环节,对于不符合评估结果的数据不予保留,对于符合评估指标的数据我们进行保留并根据
         种子序列标识回溯到种子文件并将其保存到上一模块的字典中,进而根据保留的高质量种子阈值更新字典内
         的阈值,继续种子生成环节以生成更多高质量种子.最后结合记录的差异信息,具体分析输出不一致的原因.

         4.4   实验结果分析
                                                                                      4
             在实验中,我们共生成了 3 654 组测试用例,统计如图 11 所示:大多数生成的数据范围都在 10 以上,这部分
         数据大约超过了生成总数的 80%.其中,大部分原因是经过评估过程后,我们缩小了生成用例的数值范围,提高了
         种子质量.也就是说,在测试用例文件中,这 80%的数据更容易触发不一致输出.



















                                        Fig.11    Graph of data generation
                                           图 11   生成数据统计图
             接下来,我们将对所触发的不一致结果进行统计及分析.
             如图 12、表 3 所示.分析数据我们得知:在生成的测试用例中,大约 85.37%的用例可以触发不一致输出.其
                       −6
                            −4
         中:差值范围在 10 ~10 之间的数据大约占整体的 48.92%,这部分数据结果差异较小;但大约有超过 30%的数
                          −2
         据差异范围超过了 10 ,在一定程度上说明坐标在转换过程中的不准确性对结果确实造成了一定影响.
             对于差异造成的原因,我们进行进一步的分析:首先,我们明确 TF 和 TF2 实现的功能是坐标转化.换句话说,
         就是把一个点在某个坐标系的描述,变换成在另外一个坐标系下的描述.而坐标变换的方式有平移和旋转两种.
         我们设置通信过程中两个广播节点广播坐标的变换规则,这里的规则即我们为其设置平移和旋转的参数.我们
   298   299   300   301   302   303   304   305   306   307   308