软件测试用例标签的自动化生成
2019-05-23周展鹏
周展鹏
摘要:测试用例的标签自动化生成涉及数据内容复杂、多标签分类等问题,本文研究了对测试用例的数据处理,利用机器学习算法实现了对测试用例的多个标签的自动生成,并对结果进行了评价。
關键词:自然语言处理;多标签分类;模型;机器学习
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2019)08-0212-03
1 背景介绍
软件的测试用例在设计或稳定执行后,通常会人为地进行分类或者打上标签,以表明该用例的适用领域、范围、场景。人工标签虽然准确,但是当用例较多时,人工标签效率低下且难以维持较高准确率。因此,标签自动化生成的核心思想是利用机器学习技术对已有标签进行学习,已达到自动生成用例标签的目的。
2 数据探索
2.1 数据来源
本次项目的数据来自某软件测试管理系统的历史测试用例数据, 包含了9个软件项目共近1200条测试用例数据。主要表单有:用例相关项目基本信息表,带标签的用例表,数据字典表等。项目基本信息表,包含了项目名称、项目编号、项目需求部门、项目规模等信息;带标签的用例表,包含了用例ID、用例名称、用例描述以及标签等;数据字典包含对表中名词的含义解释。
2.2 数据问题
真实的用例数据存在各式各样的问题,如大量的冗余字段,自然语言文本难以直接训练,数据格式不统一等 ,经过分析统计,所给数据存在以下这些问题:
a.数据冗余:例如同样的测试用例信息会在表格中多次出现。
b.数据格式混乱:例如在标签栏中,有些用例没有标签,会有“无”表示,而有些用例没有标签则显示为空白。此外许多用例同时含有若干标签和“无”标签。
c.数据缺失:例如在用例描述部分,不少测试用例显示的是XXXX。
d.数据含义模糊:例如在通过ID下面,既有文本描述“通过”,也有含义不明的数字描述。
e.自然语言描述较多:例如在用例名称,用例描述栏,包含关键信息,但是用自然语言的方式记录,难以直接进行机器学习。
2.3 数据预处理
本节主要针对上节提出的问题进行数据预处理。对以下测试用例进行了删除处理:
a.重复的测试用例信息
b.包含不明意义的数据信息的测试用例
c.关键字段信息缺失的测试用例
对于含有文本的关键信息(用例名称、用例描述),为了便于机器学习,先进行了分词处理,以提取出能够影响标签的信息。经分析,文本内容不长,上下语义关联性不强,每个词独立出现,与其他词语依赖性较低,故选择jieba切词工具中的词袋模型进行切词处理。选取了用例描述中的三例进行展示:
(1)打开已完成审批单查看流程图
切词后:打开,已完成,完成,审批,查看,流程图
(2)点击正在执行审批单的内核会议
切词后:点击,正在,执行,审批,内核,会议
(3)起草人反馈查看附件
切词后:起草人,反馈,查看,附件
可以看出,对于关键字,如“流程图”,“执行”等可能会影响最终标签结果的信息提取,jieba的效果还是较为理想的,但是也不难发现会切出如“已”,“正在”这样的无效关键字,因此需要对数据进行降维,具体的数据降维处理将会在3.1数据降维中说明。
2.4 数值化
为了更高效地进行数据处理,需要将测试用例的许多特征进行数值化处理,主要有两类:
(1)将文本内容直接转为数值:例如,用例级别的高中低,分别用3,2,1表示。测试用例的不同类型,兼容性、接口、界面等,用1,2,3等不同的数值进行替代。
(2)标签的数值转化:每个测试用例可能会含有多个标签,将多标签转化为单标签是一种较为实用的方法。为了将多标签分类问题转化为单标签分类问题,我们将多标签结果用二进制的方式表示成一个五位(共五个标签)二级制数的单标签。用“1”表示该标签存在,用“0”表示标签不存在。若是五位都为“0”,则表示该测试用例没有标签,或为“无”标签。将多标签问题转化为了含有32种(包含“无”标签)可能结果的单标签问题。具体转化如表1所示。
2.5 评价方法设计
从两种角度进行评价方式设计:
1) 基于32种复合标签评价:以转化成的32种单标签为对象,对模型预测的用例标签进行结果统计分析。
2) 基于5种标签评价:以人工标注的5种标签为对象,对模型预测的用例标签进行结果统计分析。
计算的指标有:
a.真假阴阳性统计: TP表示标签存在,预测存在;FN表示标签存在,预测不存在;FP表示标签不存在,预测存在;TN表示标签不存在,预测不存在。
b.召回率(敏感性):计算方式为, TP / (TP + FN )。
c.平均召回率:计算方式为, 该测试集中所有TP/该测试集中所有(TP + FN )。
d.特异性:计算方式为, TN / ( FP + TN ) 。
e.平均特异性:计算方式为,该测试集中所有TN / 该测试集中所有( FP + TN ) 。
f.准确度:计算方式为, ( TP + TN ) / ( TP + TN + FN + FP)。
g.平均准确度:计算方式为, 该测试集中所有( TP + TN ) / 该测试集中所有( TP + TN + FN + FP)。
h.精确度:计算方式为,TP / ( TP+FP )。
i.平均精确度:该测试集中所有TP / ( 该测试集中所有TP+该测试集中所有FP )。
j.标签在用例中所占比例:计算方式为,该标签在测试集中的用例数量/测试集中的用例综述。
为了让评价结果更有可信度,我们采用了5分法对数据进行交叉学习验证。
3 模型训练
3.1 数据降维
项目文本数据在转为词袋模型后,得到了五千多维的二值化矩阵,这便带来了维度灾难问题,许多算法如逻辑回归、决策树算法等众多算法在低维空间表现良好,但当输入高维度数据后算法往往失效。这是由于训练数据维度的增高使得算法模型为了准确分类所需的数据量呈指数增加。因此需要对数据进行降维。
这里选用LDA(线性判别式分析)模型进行数据降维,LDA是一种监督式的线性降维算法,它通过在k维空间选择一个投影超平面,使得不同类别在该超平面上的投影之间的距离尽可能近,同时不同类别的投影之间的距离尽可能远,最终起到降维的效果。本项目数据经过反复测试,发现当维度降低到18时模型分类效果最好。
经过LDA模型,文本数据由五千多维01矩阵转变为18维浮点数值矩阵,单行数据示例如下:
-1.7075 1.9503 -2.8726 -0.2466 0.2406 0.1693 2.5363 -0.3792 -1.8853 -2.2728 1.1057 0.3937 -2.0014 0.5809 -0.3731 0.7594 0.1070 -0.0264
可见输入数据变为18维的特征向量,代表了某一条示例文本在18维向量空间上的投影。
3.2 模型设计
结合输入数据特点和模型特点,经过对多组主流分类模型的多次重复试验,有三类模型表现最为优秀,分别是逻辑回归模型、KNN模型和SVM模型,其中以逻辑回归模型表现最为稳定。本项目使用sklearn框架,模型的实现均调用sklearn中的方法。
逻辑回归模型是线性回归后与逻辑函数的结合,是一種有监督的统计学习方法,主要用于对模型的分类。模型采用newton-cg算法作为逻辑回归模型的求解算法并使用L2范数作为规则化范数,可防止过拟合,提升模型的泛化能力。KNN模型和SVM模型同样具有较好的分类效果,最终分类结果准确程度与逻辑回归模型相差很小。
3.3 模型训练
这里选用了经过降维的数据进行模型的训练,由于训练数据未涉及项目数据,仅使用了用例本身的名称、描述、状态等信息,因此训练出的模型使用范围不受不同项目背景影响,面对不同项目的数据分类的准确程度不会有较大波动,因此模型具有广泛的适用性。
模型训练数据的数目为总体数据的80%,共8285条数据,均是从总体数据中随机抽取得来。其他20%的数据为验证数据。对训练集的选取使用了交叉验证的方法,将整体数据分为五组,选取其中一组作为验证集,另外四组作为训练集进行模型的训练,共进行五轮,使每组数据都作为过一次验证集。
3.4 标签生成
使用训练完成的逻辑回归模型,通过sklearn提供的predict方法进行分类标签的生成,输入验证集数据,返回标签,此时返回的标签是经过数值化处理的标签。经过解码后即可得到标签文本。
4 分析与结论
4.1 结果分析与对比
采用5分法,共产生了5次结果,结果都相近,选取其中一次并计算指标后展示如表2,表3:
4.2 结果分析
可以看出单个标签的精确度是在96%左右,复合类标签的平均精确度在92%左右。具体分析如下:
(1) 复合标签平均精确率比单个标签的平均精确度要低,主要原因是存在若干复合标签的所占比例很低,如表11中的“权限类流程类数据校验类”等,在整个测试集中仅占0.1%,所产生的精确度为0,很可能是训练集中根本没有分到该标签或者仅分到很少的数量,所以不具备评价整个模型的价值;
(2) 目前训练数据中,复合标签不区分优先级,而实践中,一个用例如果有多个标签,相应存在一定的优先级,也导致了复合标签精确度相对较低(认为每个标签的优先级都一样)。
(3) 人工标注为‘权限类数据校验类,模型误报为无任何标签,一方面因为该类用例数量比例较低,1.2%左右,学习样本不够,另一方面一些与业务场景结合的有特殊含义的词可能在降维过程中损失,后续可考虑补偿机制。
总体来说,通过这次实验,说明了标签自动化生成的可行性,想要进一步的提升,可以通过改进多标签算法,寻找用例相关的专业辞典进行切词等方式提升准确率。
参考文献:
[1] 李思男,李宁, 李战怀. 多标签数据挖掘技术:研究综述[J]. 计算机科学, 2013, 40(4):14-21.
[2] 刘件, 魏程.中文分词算法研究[J]. 网络新媒体技术, 2008, 29(8):11-16.
【通联编辑:梁书】