Page 301 - 《软件学报》2021年第6期
P. 301
王颖 等:面向 ROS 的差分模糊测试方法 1875
分模糊测试方法,通过对差异信息的分析来验证两个功能包的准确性.在实验过程我们还将回答以下两个问题:
(1) 该方法是否能保证生成高质量的种子?(2) 我们能否通过该方法找到 ROS 功能包中的问题?
4.1 数据和环境设置
所有实验在操作系统为 Ubuntu 16.04 的计算机上执行.为了实验的公平性,实验环境我们都选择 ROS
Kinetic 版本.ROS 的发行版本指 ROS 软件包的版本,其与 Linux 的发行版本(如 Ubuntu)的概念类似.推出 ROS
发行版本的目的在于使开发人员可以使用相对稳定的代码库,直到其准备好将所有内容进行版本升级为止.因
此,每个发行版本推出后,ROS 开发者通常仅对这一版本的 bug 进行修复,同时提供少量针对核心软件包的改进.
而 Ubuntu 16.04 可以支持 ROS Kinetic 的运行.
4.2 评估指标制定
该指标主要由差分模糊测试执行模块制定,包括数据优化与差值合理两部分,只有同时满足两个指标的种
子才能被保留;接下来我们将详细说明两个指标在实验中的应用.
4.2.1 数据优化
数据优化指标的制定即为测试模块去除不符合实际应用的数据,如 nan,inf,-inf 等过大、过小或无法表示的
数据,保留对实际应用有意义的实验数据,以此达到数据优化的目的.代码过程如图 7 所示:i 是预先定义的全局
变量,用来为每组用例做序列标识;当一轮测试用例生成后,全局变量 i 将按顺序对每组用例进行“打标”;对于生
成的测试数据中过大过小或不可描述的数据,我们使用 python 中 math 模块的函数 math.isnan(⋅)及 math.isinf(⋅)
来进行判断;若为该种类型的数据,我们将执行 i−1 过程,即删除该组序列标识,此时的“标记”将直接赋予下一组
符合条件的种子.
Fig.7 Data optimization for if statement
图 7 数据优化条件语句
4.2.2 差值合理
不同程序对数据精度的处理可能存在差异,为了避免这种差异对实验结果的影响,我们设定差值合理指标;
对于经过差分模糊测试得出的数据差值进行对比,如差异过小则忽略不计,即根据浮点型数据特征,对于两者差
−5
值小于 10 的数据,我们认为不是异常数据,代码过程如图 8 所示.换句话说,差值在阈值范围内的种子并不能真
正触发出不一致结果,因此对于这部分数据我们不必进行手动原因分析,种子也无需保留.我们也对其进行了实
验验证,对于转换后产生的两组数据我们使用“全等”及“差值小于容忍值”两种方式进行对比,结果如图 9 所示;
两种方式对于两组数据是否一致的判断完全不同,其实数据间的差值过小可以忽略不计,甚至有一些是由于本
来应该相等的两个浮点数由于计算机内部表示的原因可能略有微小的误差,这时用“全等”就会认为它们不等,
造成“假不一致”的情况.
Fig.8 Difference reasonable for if statement
图 8 差值合理条件语句