前言:
现在兄弟们对“模糊聚类分析用什么软件比较好”大概比较注重,大家都想要分析一些“模糊聚类分析用什么软件比较好”的相关知识。那么小编在网络上搜集了一些对于“模糊聚类分析用什么软件比较好””的相关知识,希望小伙伴们能喜欢,各位老铁们一起来学习一下吧!HE JIANG and XIN CHEN,大连理工大学
TIEKE HE and ZHENYU CHEN,南京大学
XIAOCHEN LI,大连理工大学
摘要
测试是 DevOps 成功实现的关键部分,然而,我们很难用传统的测试方法覆盖不同的手机、网络环境、操作系统等。因此,许多大型公司将应用程序测试任务众包给来自开放平台的员工。然而测试报告可能会有一些问题,比如测试报告可能是高度冗余的,其质量可能会有很大差异,或多 bug 测试报告中的 bug 的根本原因很难诊断。因此,对于开发人员来说,手动检查这些测试报告是一项耗时而乏味的任务。为了帮助开发人员解决上述问题,我们提出了模糊聚类测试报告(FULTER)这一新问题。在本研究中,我们提出了一个新的测试报告模糊聚类框架(TERFUR)。
1. 引言
移动应用程序最重要的特征之一是持续演化,这需要在开发、质量保证和操作之间进行高效的通信、协作和集成。作为促进完全自动的 DevOps 成功实现的关键部分,测试可以帮助检测和修复 bug,从而显著提高团队生产力。然而,传统的测试很难覆盖到不同的手机、网络环境、操作系统等。因此,许多大型公司将应用程序测试任务众包给来自开放平台的员工。
与传统的测试人员(如实验室测试人员)不同,工作人员有自己的特点。一方面,它们可以提供各种各样的测试环境。另一方面,工人通常缺乏经验,不熟悉测试活动。工作人员在短时间内提交的那些测试报告可能是高度冗余和非结构化的。此外,工作人员倾向于在一个测试报告中提交多个 bug。这种典型的多 bug 测试报告通常比单个 bug 包含更多的自然语言信息,但是每个 bug 包含的信息相对较少。基于以上讨论,我们希望将测试报告自动划分为集群,而其中一个集群中的测试报告详细描述了相同的 bug。通过这种方式,开发人员只需要检查来自每个集群的一个有代表性的测试报告,而不是所有的测试报告。
在本研究中,我们提出了模糊聚类测试报告(FULTER)的新问题,并尝试解决 FULTER 问题。而解决 FULTER 问题,我们需要克服以下一系列障碍:
•Invalid barrier:众包数据集包括许多假阳性测试报告和不包含 bug 信息的空测试报告。
•Uneven barrier:由于测试报告是由工人用不同的描述性术语编写的,因此测试报告之间的内容长度存在极大差距。
•Multi-bug barrier:根据我们对一些工业应用程序的观察,一些工作人员可能会在一份测试报告中报告多个 bug(一般为两到三个 bug)。应该同时将其划分为多个簇。
2. 背景和动机
软件测试是软件工程中一项费时费力的活动。与传统的软件测试相比,众包测试不仅招募了专业的测试人员,还招募了终端用户进行测试。
在众包市场中,很难找到大量有经验的员工,并且很难保证他们的表现,这些可能会影响提交的测试报告的质量。此外,测试人员的可能提交高度冗余的测试报告甚至是无效的测试报告,或者提交了一些多 bug 测试报告,这些测试报告携带更多的自然语言信息,但每个 bug 包干的信息相对较少。由于测试报告的上述特点,开发人员手工逐个检查这些众包测试报告是一项耗时而繁琐的工作。
我们收集了来自五个工业应用的 1728 份众包测试报告。通过对测试报告的调查以及与行业合作伙伴的非正式沟通,我们有了以下发现:
(1) 众包测试报告通常数量庞大,冗余度高;同时,可能会频繁提交没有 bug 信息的无效测试报告。
(2) 为了快速完成测试任务或追求利益,工作人员可能会报告一些简单的错误或提交简短的测试报告。这些测试报告要么对提高应用程序的质量无关紧要,要么难以诊断其根本原因。
(3) 不少多 bug 测试报告是由工作人员提交的。它们的内容通常比单个 bug 测试报告的内容长,但是对于每个 bug 包含的描述可能不足以让我们理解。
基于上述发现,我们提出了 FULTER 的新问题。本研究中,测试报告可以视为一个文档,bug 视为一个主题,多 bug 视为多个主题。因此,FULTER 可以被视为模糊文档聚类的特殊形式,FULTER 的任务是根据主题将这些测试报告划分为一组集群。我们试图探索一种自动化的方法来解决 FULTER 问题,并推荐具有代表性和信息丰富的测试报告。
3. 测试报告数据集
(1) 数据集
我们从工人那里收集了五个测试报告数据集
•Justforfun:一款有趣的照片分享应用。用户可以使用 Justforfun 在线与其他人共享和交换照片。
•SE-1800:智能科技有限公司开发的电气监控应用程序,可为各种规模的变电站提供完整成熟的监控解决方案。
•iShop:阿里巴巴开发的在线购物指南应用。用户可以在线购买他们想要的东西。
•云音乐:网易开发的音乐播放和分享应用。用户可以建立自己的主页,并与他人共享他们的音乐。
•UBook:由 New Orientation 开发的在线教育应用程序。它包含大量的课程资源,允许用户下载。
然而有些工人没有完全按照指南编写测试报告,所以产生了一些特殊的测试报告:
•空测试报告:测试报告的描述不包含任何信息,只在输入中列出一些复制步骤。
•假阳性的检测报告:这些测试报告是为了证明工作人员已经完成了测试任务,应用程序运行良好。
•极短的测试报告:有些测试报告只包含一个或几个术语,不能提供足够的信息,导致检查可读性差。
•多 bug 测试报告:工作人员可以在一个测试报告中报告多个 bug。这些测试报告通常包含许多自然语言信息,但是每个包含的 bug 的信息可能不够。
而这些测试报告会对模糊聚类产生负面影响。从而产生 Invalid barrier 等问题。
(2) 数据注释
我们邀请了三名研究生对冗余的、有效的和多 bug 的测试报告进行注释。最终我们共收集了 1700 多份测试报告。结果如表 1、2:
4. 模糊聚类框架
如图 1,TERFUR 三个组件组成,分别是过滤器、预处理器和采用两阶段合并算法对测试报告进行模糊聚类。
(1) 数据过滤
在预处理之前,应删除无效的测试报告,包括空的和假阳性的测试报告,以突破 Invalid barrier。
一方面,空测试报告可以直接丢弃。另一方面,对假阳性测试报告我们定义如下规则来删除。
•正则规则:([B][p])|([N][d]?[Q] ?[O] )。如果字符串包含与此规则匹配的子字符串,则我们过滤掉此测试报告,其中 B、P、N、D、Q 和 O 是具有特定字数的集合。
(2) 预处理
预处理部分包括五个步骤:分词、停止词删除、描述增强、向量空间模型和相似度计算。
•分词:我们采用 IKAnalyzer 工具来进行分词。
•停止词删除:删除对相似度计算没有帮助的停止词。
•描述增强:我们通过预处理中的输入有选择地增强描述,并利用增强的描述来计算相似性。这一部分,我们使用字数作为衡量标准。
•向量空间模型:我们将每个测试报告表示为基于已建立字典的向量。向量中的每个维度对应于字典中的一个元素。描述中一个元素出现的次数可以用来表示相应维度的权重。
•相似度计算:将测试报告转化为向量后,通过对每对测试报告的余弦相似度来度量相似度。余弦相似性通过以下公式计算
(3) 模糊聚类
我们提出了一种新的模糊版本的两相合并算法。我们建立了一个向量空间模型来计算初始簇生成的相似度,并规定测试报告在第一阶段被划分成不同的簇。在第二阶段,我们使用新的相似性度量来实现集群合并,将多个 bug 测试报告分配到不同的集群中。该部分包含两个步骤,初始集群生成和集群合并。
•初始集群生成:算法 1 给出了初始簇生成的过程。首先,选择文本长度最接近
的测试报告 TRk 作为 seed 并从 TR 中删除,然后创建一个新的聚类,并将与 TRk 相似性超过阈值 δ1 的其他测试报告放入该聚类中。从 TR 中删除这些测试报告。重复上述步骤,直到 TR 变为空,然后算法终止,并返回初始集群。
•集群合并:本文提出了一种新的集群合并策略。合并过程如算法 2 所示。首先,选择 Num(Gi)=0 的所有簇来构造候选集 SC。从 SC 中选择最大的簇 Gk 作为种子,并从 G 中移除。其他与 Gk 相似性超过阈值的聚类 δ2 可并入 Gk。这些合并的簇仍保留在 G 中,但不再被选为种子簇。如果一个集群合并了三次,即 Num(Gi)=3,那么它应该从 G 中移除。重复上述步骤,直到没有新的种子簇可用或 G 变为空,算法终止并返回结果。
5. 实验配置
(1) 实验平台及参数设置
所有的实验都是用 JavaJDK1.8.0_60 进行的,用 eclipse4.5.1 编译,运行在 64 位 win8.1、intelcore(TM)i7-4790cpu 和 8G 内存的 PC 上。
(2) 实验数据集
我们收集了 5 个众包测试报告数据集,所有的测试报告都由学生手工注释。我们仔细检查注释结果,并将其提交给开发人员进行进一步验证。
(3) 度量
我们使用微平均精度(AverageP)、微平均召回率(AverageR)和微平均 F1 测度(AverageF1)评估全局结果。其平均值公式如下:
假设 G={G1,G2,…,Gk}和 P={P1,P2,…,Pc}分别表示聚类结果和手工标注的结果,k 不一定等于 c,Gi 对应于 Pj。
上式中,TPi 是真阳性数,即属于 Gi 和 Pj 的测试报告数。FPi 是假阳性的数量,即属于非 Gi 和 Pj 的测试报告的数量。FNi 是假阴性的数量,即属于 Gi 和非 Pj 的测试报告的数量。
6. 实验结果
(1) 找到合适的参数
对于两阶段合并算法中的两个参数,即相似度阈值 δ1 和 δ2,我们试图找到合适的值,以确保它们适用于所有的数据集。结果如图 2、3:
结论:这两个参数影响了 TERFUR 的结果。三个指标的值随两个参数的变化而变化,对 δ1 更为敏感。根据调整结果,δ1=0.8 和 δ2=0.3 可能适用于所有数据集。
(2) 证实了 TERFUR 算法优于经典的模糊 C-Means 聚类算法。
在实验中,我们在第三部分用 FCM 代替两阶段合并算法,并通过规范化向量空间模型将文本关系转化为欧氏关系。FCM 有两个关键参数,即聚类数和加权指数[33]。为了进行令人信服的比较,我们逐步增加聚类数以确定最佳结果。结果如表 3。
结论:FCM 可以用来解决 FULTER 问题,但它并不是一种有效的聚类方法。TERFUR 比 FCM 效果更好。
(3) 证实了过滤规则能突破 Invalid barrier
无效的测试报告已经被学生们仔细的注释并标记为“无效”。我们把所有的测试报告作为过滤器的输入,然后独立运行过滤器。我们记录结果,并将剩余的测试报告与原始数据集进行比较。结果如表 4:
结论:我们的过滤规则可以很好地过滤掉无效的测试报告,并确保几乎所有有效的测试报告都不会被过滤掉。
(4) 证实了过滤规则能突破 Invalid barrier
在 TERFUR 中,我们将计算相似度的两种策略作为预处理比较的基线。同样,我们分别在 Justforfun 和 CloudMusic 上调优两种策略的参数,然后将调优后的参数应用于所有数据集。结果如表 5:
结论:测试报告的输入可以增强描述,但有时会带来噪声。显然,我们的描述增强策略比同时使用输入和描述更有效。
(5) 证实了 TERFUR 能否减少开发人员检查的测试报告的数量
在文献中,提出了一种结合多样性策略和风险策略(DivRisk)的优先级排序技术。而我们结合 TERFUR 和 DivRisk(TERFUR-DivRisk)提出了一种改进的测试报告优先级排序技术。并验证了 TERFUR-DivRisk 的效率。结果如表 6。
结论:TERFUR-DivRisk 的结果明显优于 DivRisk。通过结合 TERFUR 和 DivRisk,开发人员只需要检查少量的测试报告就可以检测出 25%、50%和 75%的 bug。
7. 有效性威胁
(1) 外部威胁
在众包测试中,工作人员之前彼此之间没有社会关系,而学生之间有一定的社会关系,因此其结果可能与来自开放平台的劳动者有所不同。
(2) 外部威胁
在我们的实验中,所有的测试报告都是用中文编写的,这可能会威胁到我们的技术在其他自然语言中的推广。
8. 结论
在本文中,我们提出了一个新的模糊聚类框架 TERFUR 来对众包测试报告进行聚类,以此来降低人工检查的成本。并收集了五个众包测试报告数据集来评估 TERFUR 的有效性。实验结果表明,TERFUR 能够对冗余测试报告进行高精度的聚类,聚类效果明显优于同类方法。此外,实验结果还表明,TERFUR 可以大大降低测试报告优先级排序中的测试报告检查成本。
标签: #模糊聚类分析用什么软件比较好