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

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


         使用差分模糊测试       [17] .即连续提供无效、意外或随机数据作为具有相同功能的多个程序的输入,然后监视这些
         程序以捕获某些输入上的“不同行为”,这样我们可能会在某些程序中发现错误.
             对此,针对 ROS 所集成的各个功能包,本文提出了一种面向 ROS 的差分模糊测试方法:通过搭建差分模糊
         测试的框架,对 ROS 所集成的各个功能包进行模糊测试,从而验证软件包内各项功能在实际应用中的准确性.
         首先为 ROS 建立模糊测试框架,模糊器根据不同要求生成测试用例;接着,将差分测试的思想融入到框架中,使
         用统一的测试用例文件作为模糊数输入,节点间实现通信,执行测试;核心思想是不断为不同的通信模式生成测
         试用例,以便在执行结果之间找到尽可能多的不一致.最后,我们将该方法应用在机器人坐标转换的实验中,对
         实现不同参考系下坐标转换的功能包 TF 和 TF2 进行测试.通过引导性模糊测试,成功地在实验过程中触发了
         3120 组用例的不一致执行输出,并通过分析找出了触发这些不一致的原因.在本文中,我们主要做了以下贡献.
             (1)  我们设计了一种面向 ROS 的差分模糊测试方法,以有效揭示 ROS 中不同版本功能包的差异和漏洞;
                 在该方法中介绍了用于 ROS 的差异信息的评估指标,并设计了用于基础模块的相关算法;
             (2)  我们使用该方法来测试 ROS 中影响意义广泛的功能包 TF 和 TF2,检测到许多不一致和安全问题;通
                 过分析原因判断出 TF 较 TF2 更为准确.
             本文第 1 节介绍 ROS 和模糊测试相关的基础知识,为本文提到面向 ROS 的差分模糊测试方法的研究提供
         理论基础.第 2 节对方法进行整体概述,介绍测试用例的生成方法、测试模块的执行以及评价指标的制定.第 3
         节是提出方法进的具体实现.第 4 节对该方法进行实验评估,将该方法应用在机器人坐标转换的实验中进行评
         估并通过分析得出结果.第 5 节进行本文总结及对未来工作的展望.

         1    背景知识

         1.1   ROS

             ROS 是一个用于编写机器人软件的灵活框架,它集成了大量的工具、库、协议,提供了类似操作系统所提
         供的功能,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间的消息传递、程序发行包管理,
         可以极大简化繁杂多样的机器人平台下的复杂任务创建与稳定行为控制.
             如图 1 所示,ROS 的系统架构设计分为 3 层:操作系统层、中间层、应用层.ROS 的操作系统层依托于 Linux
         系统运行,它并不是一个传统意义上的操作系统,无法像 Windows,Linux 一样直接运行在计算机硬件之上.但
         Linux 是一个通用系统,并没有针对机器人开发提供特殊的中间件,所以 ROS 在中间层做了大量的工作.中间层
         主要负责包括 ROS 的通信系统及客户端库,其中最为重要的就是基于 TCPROS/UDPROS 的通信系统,这是基于
         TCP/UDP 网络所做的再次封装.通信系统使用发布/订阅、客户端/服务器等模型,实现多种通信机制的数据传
         输.应用层主要运行一个节点管理器以及集成多个功能包实现相关功能,管理器负责管理整个系统的正常运行,
         功能包内的模块以节点为单位运行,以 ROS 标准的输入/输出作为接口实现复用,极大地提高了开发效率.
                                              ROS1
                                                         应用
                                               节点
                                        应用层   管理器     节点    节点


                                                     客户端库
                                        中间层
                                                 TCPROS/   Nodelet
                                                 UDPROS     进程


                                      操作系统层            Linux
                                           Fig.1   ROS Architecture
                                             图 1   ROS 系统架构
   290   291   292   293   294   295   296   297   298   299   300