4.3.3 数据准备
在这一部分,数据集根据作用类型进行划分,包括训练集(training set)和预测集(forecasting set),其中训练集用以训练模型,而预测集用以检测模型的准确性。预测集的选取有两种方式:一种是从训练集中选取一定的数据,这种方式主要用于检测模型的拟合度;另一种是从训练集外选取一定的数据,从而验证模型的准确性。根据数据来源划分,数据集包括函数级、文件级和工程级的数据集。函数级的数据集用以直接预测被测文件下每个函数测试用例生成的时间,文件级数据集用以直接预测每个被测文件测试用例生成的时间,另外也可以对函数级测试用例的时间进行累加。同理,工程级的数据集采用相同的办法进行处理。
1.实例分析及函数级数据集
(1)实例1
数据集(Index,Time)的最小组成部分是函数级的数据单元,以图4-23中的test函数来说明,函数中包含等式和不等式等多种约束,并包含5条路径。对test函数中5条路径上包含的约束分别进行求解,统计约束求解所需要的时间,组成时间集Time,且只统计约束求解成功的时间。同时统计路径上影响测试用例生成的相关指标,构成指标集Index,如表4-14所示。
表4-14 函数test的Index和Time数据集

(2)实例2
对包含更多约束表达式和更复杂约束类型的程序,如图4-25所示,被测程序test1中包含了5个约束条件,共6条路径,同时在约束中引入了数组类型,提高了约束复杂度,通过统计和测试可以得到Index集和Time集,如表4-15所示。

图4-25 被测程序test1
表4-15 函数test1的Index和Time部分数据集

2.数据清洗及文件级数据集(https://www.daowen.com)
这一部分通过对实际工程进行测试和指标的自动统计,构成数据集。以工程aa200c为例,通过单元测试的方式实现对函数中各属性指标的自动化统计。在进行测试用例生成的过程中,会出现一部分未正常生成测试用例的数据,需要将这部分数据剔除,或找到对应函数手动测试并在数据集合中进行添加,实现数据清洗。
图4-26所示是自动对aa200c进行指标统计和测试用例生成的数据集,图中路径ID为14697和14700的对应测试用例未成功生成的数据。图4-27所示是完成数据清洗的数据集,可以看到已将图中标记为×的数据进行剔除。

图4-26 aa200c未经过数据清洗的数据集
经统计,aa200c有几万条路径。对于这些路径,有许多条会构成重复性较大(指标统计值相似性大)的数据集。需要筛选出这部分数据,并对其对应的测试用例时间做处理。本书采取的方式是对n组重复数据的时间累加后取平均值的策略,即通过式(4-10)进行计算。

图4-27 aa200c经过数据清洗的数据集

如图4-28所示,路径ID7708、7710和7711对应的数据指标数据相同,需要去重并得到如图4-29所示的数据集。另外,通过测试多个大工程,采取上述相同的方式,可以构成工程级的数据集。

图4-28 aa200c待去重复的数据集

图4-29 aa200c经过数据清洗的数据集