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

1874                                     Journal of Software  软件学报 Vol.32, No.6,  June 2021

             该模块的输入是来自基础模块提供的字典,字典中包含需要变异的消息类型的名称、类型等字段.策略模
         块将已定义好的策略函数与消息类型进行一一对应,最终将具体策略返回给基础模块由种子生成过程(表
         1).ROS 中常用的消息类型有很多种,既有像字符串、数组这样的简单类型,也有像 PointStamped 这样包含坐标
         系位置及时间戳信息的复杂类型.因此,对于 ROS 中复杂消息类型,在该模块中将其策略定义为组合策略,即:当
         遇到复杂的消息类型时,我们将其对应消息加载函数 ros_type_to_dict(⋅)(图 4),将其加载为字典;再根据字典内的
         类型属性分别进行简单的策略对应,最终组合在一起并返回一个与复杂消息类型相对应的组合策略.
                                          Table 1  Strategies mapping
                                               表 1   策略对应

                           消息类型     策略字典对应函数                  返回策略
                             string    string(⋅)               st.text
                             time       time(⋅)                _Time
                            duration   Duration(⋅)            _Duration
                             array      array(⋅)               st.lists
                            complex  ros_type_to_dict(⋅)   组合策略,按返回字典内容依次生成并组合

         3.3   差分模糊测试执行模块
             该模块主要是基于模糊循环以及差分框架的具体执行,分为差分模糊测试与结果比较分析两个部分;ROS
         的运行依赖于节点的运行与节点间的通信,节点间实现通信是功能包正常功能实现的前提,也是该模块设计中
         的重要环节.本模块首先建立被测模型,模型包括角色、内容、规则等,建立模型实现广播节点与监听节点间的
         消息传递;模型中,节点使用话题通信机制传递话题消息,实现节点间基本通信.然后,以上一模块生成的测试用
         例作为被测部分的输入执行差分测试并得出差异信息,例如,图 6 为一个 JSON 格式的测试用例文件,该测试用
         例主要是坐标点在坐标系下的坐标值,可以提供给 TF 能包现坐标转换;接着对所得信息按设定好的评估指标进
         行评估,符合评估指标的种子将被保留进行种子循环生成;最后分析异常原因得出结论报告.


















                                       Fig.6    An example of test cases file
                                             图 6   测试用例举例
         4    实验评估

             本节将详细介绍实验细节,我们将该方法应用在可以帮助我们简化坐标系间的转换工作的功能包 TF 上.
             在机器人环境的搭建中,坐标系是一个非常重要的概念,TF 则是 ROS 为用户提供的与其息息相关的功能
         包.它使用一种树型数据结构,根据时间缓冲并维护多个参考系之间的坐标变换关系,可以帮助用户在任意时
         间,将点、向量等数据的坐标,在两个参考系中完成坐标变换.TF 和 TF2 是被开发者广泛应用的两个不同版本,
         二者可以实现相同功能;对于开发者来说,功能实现的准确性及可靠性将直接影响开发过程.TF和 TF2 可以帮助
         我们处理各种数值计算的细节,而数值计算的准确性将直接影响坐标的转换结果.因此我们对 TF 和 TF2 应用差
   295   296   297   298   299   300   301   302   303   304   305