下一步研究计划
使用机器学习方法预测蜕变测试中的蜕变关系。
是什么?
介绍的是当蜕变测试应用于单元测试中,函数为数值型计算程序,知道程序的源代码和单元块,针对代码的一项函数构建该函数的蜕变关系。
蜕变关系不再一一累述。
1. 蜕变关系
如果预先定义了一套蜕变关系,该关系如下:
蜕变关系名称 | 输入的变化 | 相应的输出改变 |
---|---|---|
Permutative | 随机改变元素的序列 | 维持不变 |
Additive | 加上一个正常数 | 增加或维持不变 |
Multiplicative | 乘一个正常数 | 增加或维持不变 |
Invertive | 取相反数 | 减少或维持不变 |
Inclusive | 增加一个新元素 | 增加或维持不变 |
Exclusive | 删除一个元素 | 减少或维持不变 |
注:预定的蜕变关系由来:Murphy在2008年发表的论文Properties of machine learning applications for use in metamorphic testing中提出的数学函数常见的蜕变关系。
2. 函数的来源
数据是由一个个的Java代码片段组成的,从三大开源代码库获取代码语料库。
第一个是The Colt Project: Java高性能科学和技术计算开源库;
第二个是Apache Mahout: Java机器学习库;
第三个是Apache Commons Mathematics Library: Java数学和统计组件库;
3. 方法概要
简单版的——2013年Using Machine Learning Techniques to Detect Metamorphic Relations for Programs without Test Oracles论文
1)从功能源代码创建控制流图
2)从控制流图提取特征集,一个机器学习算法用这些特征创建一个预测模型
3)用开发的预测模型预测先前未见的功能的蜕变关系
加强版的——2015年Predicting metamorphic relations for testing scientific software: a machine learning approach using graph kernels论文
训练阶段
1)创建带有控制流和数据依赖信息的功能图形表达的特征集,这个特征集是带有表明是否满足给定MR类别的所有功能集合
2)计算图核,图核提供了训练集每对功能的相似度分数
3)计算得到的图核用于支持向量机创建预测模型
测试阶段
4)用训练得到的模型预测先前未见的功能是否满足考虑的MR
最新版本——2018年Using Semi-Supervised Learning for Predicting Metamorphic Relations论文(半监督)
1)转换功能为控制流图
2)从控制流图中提出特征集,输入特征到所选的机器学习算法
3)算法用来预测新功能的标签
4. 功能的图形表达
使用Soot框架创建控制流图,Soot由Jimple语言产生控制流图,三地址中间表达,每一个控制流图结点代表一个原子操作。相应地,功能的图形表达可以下载。
5. 特征集的表示(简单版的)
-
结点特征(结点名称-入度-出度)
-
路径特征(所有的路径、子路径)
-
类别标签
是否满足蜕变关系(-1和1),根据给定的蜕变关系,制定其类别标签值。 -
训练特征集
训练与测试
使用上述得到的训练集,用SVM训练得到预测模型;
使用训练模型预测新的功能的蜕变关系。
为什么?
好在哪里?
实验
。。。未完待续。。。