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

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

             基于该类型的系统架构,ROS 建立了一个分布式通信机制,为用户提供多进程之间的通信服务,主要包括话
         题通信机制、服务通信机制以及参数管理机制.因此,ROS 程序的运行区别于其他的程序运行,节点运行、消息
         传递、功能实现都离不开节点间通信,而特殊的分布式通信机制对我们的测试方法也是一个大的挑战.本方法
         中使用话题通信机制实现节点间通信及话题消息的传递,话题通信机制模型如图 2 所示.话题通信机制主要包
         括话题发布者、话题订阅者及节点管理器这 3 个角色:节点管理器充当中介角色,管理了所有发布者和订阅者,
         它们通信前都要把自己的地址、发布或订阅的话题注册到节点管理器当中;发布者节点负责发布话题,订阅者
         负责订阅话题,二者通信前把自己的地址、发布或订阅的话题注册到节点管理器当中,当发布的话题和订阅的
         话题能够匹配到时,双方即可进行通信连接.当发布者发布的消息被订阅者准确接收时,节点间可以相互传递话
         题消息,如与机器人在坐标系下的位姿信息、坐标变换关系等等,通信就被建立起来了.


                                                节点管理器
                                    (“bar”,foo:1234)  XML/RPC  2) (foo:1234)
                                    0) 发布话题

                                                                  1) 订阅话题(“bar”)

                                                3) 连接(“scan”,TCP)
                             话题发布者                                    话题订阅者
                          XML/RPC:foo:1234     4) TCP 服务器:foo:2345  XML/RPC:foo:1234
                           TCP 数据:foo:2345      5) 连接(foo:2345)    TCP 数据:foo:2345
                                                                   TCP
                                       Fig.2  Topic communication model
                                           图 2   话题通信机制模型
         1.2   模糊测试

             模糊测试作为一种软件测试技术,其核心思想是:自动或半自动地生成随机数据输入到一个程序中,并监视
         程序异常,如崩溃、断言失败,以发现可能的程序错误,比如内存泄漏,常常用于检测软件或计算机系统的安全漏
         洞.传统的模糊测试主要包括识别目标系统、确定输入、生成模糊数据、使用模糊数据执行测试、监控系统的
         行为以及记录缺陷等 6 个核心步骤;通过使用模糊测试技术,可以提高应用程序的健壮性和安全性.但是仅靠模
         糊测试无法全面了解整个安全威胁或 bug,而且需要大量的时间,所以现在众多研究者将模糊测试与黑箱测试、
         Beta 测试 [18] 和其他调试方法一起使用,不仅可以提高测试的覆盖率,还可以节省大量的时间.差分测试有两种情
         况:一种情况是分析同一程序上执行不同输入的差异,另一种情况是分析多个程序或变体上执行相同输入的差
         异.针对 ROS 的通信机制的特殊性以及功能包的版本问题,本文我们提出差分测试与模糊测试结合方法,为
         ROS 建立模糊测试框架,根据不同要求生成测试用例;接着,将差分测试的思想融入到框架中,节点间使用话题
         通信机制传递消息、实现相应功能.该方法的核心思想是:不断为不同的通信模式生成测试用例,以便在执行结
         果之间找到尽可能多的不一致,最终发现漏洞.
         2    方法概述

             在本文中,基于 ROS 的三层系统架构,我们提出一种面向 ROS 的差分模糊测试方法,主要对应用层(图 1)中
         各节点进行测试.本节我们将介绍该方法具体的工作流程.被测模块主要是对于机器人开发环节有重要意义的
         各版本功能包.差分模糊测试的概念较为简单,主要是将差分测试的框架与模糊测试的流程结合在一起,即:连
         续提供无效、意外或随机数据作为具有多个相同功能的多个程序的输入,监视这些程序来捕捉执行结果间尽可
         能多的“不一致行为”,这样可能会在程序中发现漏洞.该方法的概述在图 3 中给出,它主要由两个部分组成,即测
         试用例的生成模块和差分模糊测试执行模块.参数由 CLI 接口输入到用例生成模块,该模块负责对输入数据的
         处理和种子生成,主要是基于种子策略生成的方法生成所需的测试用例文件;测试用例生成后进入执行模块进
   291   292   293   294   295   296   297   298   299   300   301