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

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


         程发现,每组数据都通过平移旋转函数设置了相同的参数值,但经上述实验,我们得知平移设置不会影响结果,
         因此,造成差异的原因在于旋转的设置上.我们提到过关于旋转 TF 及 TF2 分别使用 tf.transformations.
         quaternion_from_euler(roll,pitch,yaw)及 tf_conversions.transformations.quaternion_from_euler(roll,pitch,yaw) 这
         两个函数来实现,两个函数能否真正定义相同的坐标变换也就成为了关键问题.






                                    Fig.13    An example of experimental results
                                            图 13   实验结果举例
             函数的功能是简化变换的计算过程,但在实现过程中,输入的参数值都会由欧拉角值转化为四元数,最后转
         化为旋转矩阵进行计算.我们将函数内部欧拉角转化为四元数最后转化为旋转矩阵的结果输出,发现相同的欧
         拉角值通过两个函数可以转化为相同的旋转矩阵,但前提是保持旋转矩阵内的数据精度设置.根据数据类型,我
         们得出现在的旋转矩阵内的数据精度与浮点型保持一致,均为小数点后 8 位.也就是说,我们看到的结果也许只
         是精度受限.为了验证猜想,接下来我们提高转换矩阵的输出精度,最终发现:当我们提到精度到 10                                −16 ,两个旋转
         矩阵就会出现明显差异.而两个转换函数在实现坐标转换功能的过程中会涉及到旋转矩阵的加法及乘法,这就
         造成了误差的累积,最终导致坐标不能实现准确转换.
             虽然我们找到了不一致产生的原因,但这种不一致是否会对我们的实际应用产生影响?回答当然是肯定的.
         因为界面简洁使用方便等原因,现在很多开发者推荐使用 TF2 而“弃用”TF,但通过测试,对于两个功能包在功能
         实现上的准确性还是有问题的.为了验证两组不一致的实验结果哪一个更加准确,我们使用精度提高后的旋转
         矩阵数据手动计算多组实验数据,如图 13 内的结果是将相同的原始种子数据通过设置旋转参数为(0,0,1),使用
         两个功能包实现转换后得出的.我们使用高精度矩阵计算转换,得出的值与图中数据对比发现:我们计算的出的
                                            −5
                                                                            −2
         结果与使用 TF 最终得出的结果差异约为 10 ,但与 TF2 最终得出的结果差异约为 10 .也就是说,使用 TF 的结
         果更加准确.
             TF 所实现的坐标转换功能对 ROS 的开发和应用都有着重要意义,而作为一个集成开发平台,ROS 中还包
         含很多其他重要功能的功能包.我们的方法可以面向整个 ROS 系统,在具体应用过程中,只需要功能包提供 CLI
         接口参数即数据消息类型,我们就可以使用该方法对其生成相应的测试用例文件并执行差分模糊测试.至此,我
         们也回答了本节开始提出的第 2 个问题,我们确实能通过该方法找到 ROS 功能包中的问题.
         5    总结展望

             本文提出一种面向 ROS 的差分模糊测试方法,通过搭建差分模糊测试的框架,对 ROS 节点间通信进行模糊
         测试,从而验证软件包内各项功能在实际应用中的准确性.在该方法中,我们主要设计了测试用例生成及差分模
         糊测试执行模块两个部分,通过用例的生成和差分模糊测试的执行得出差异信息并进行异常记录;除此之外,为
         了提高种子质量,我们还设计了两个评估指标,同时符合两个评估指标的种子将被保留至测试用例生成模块.对
         于输出的不一致结果,我们通过手动分析异常原因,得出最终报告.我们将该方法应用在机器人坐标转换的实验
         中,对实现不同参考系下坐标转换的功能包 TF 和 TF2 进行测试.最终,通过实验及结果对比分析得出:与 TF2 相
         比,TF 在功能实现即坐标的转换上更加准确.
             虽然我们使用差分模糊测试的方法发现了 ROS 功能包中问题所在,但在方法的设计上还存在可以优化的
         地方,例如测试用例的生成可以加入变异策略、使用策略变异与策略生成结合的方法提高种子质量、增加代码
         覆盖率,这也是我们下一步想要完善的地方.
   300   301   302   303   304   305   306   307   308   309   310