1. 引言
众包(Crowdsourcing)这一概念是由美国《连线》杂志记者Jeff Howe在2006年6月提出的,定义为“一个公司或机构把过去由员工执行的工作任务,通过Web平台,以自由自愿的形式外包给非特定的解决方案提供者群体,共同来完成问题的求解模式”[1]。
软件测试通过设计和执行大量测试用例,以完成对软件产品的验证与确认,并基于所反馈的测试结果,来发现与修复软件产品中可能存在的缺陷,改进产品质量。传统的软件测试通常需要大量专业测试人员以及测试环境的构建,存在成本高、耗时长以及测试范围受限等典型问题。随着互联网的兴起和海量软件的涌现,软件测试的重要性变得日益显著,众包测试也受到了越来越广泛的关注。
众包测试是利用互联网中的众包工作者来执行软件测试任务的一种方法。借助互联网平台,将测试任务分发给大量的众包工人,他们可以独立或协同地完成测试任务,并在规定时间内提交测试记录。平台能够整合用户的知识、经验和技能,以提供低成本高质量的服务。众包测试以经济高效的方式吸引来自不同地域和领域、具备不同技术专长的测试人员,在需要迅速获取市场需求和面临人力资源短缺的情况下表现卓越。更为重要的是,它为开发者提供了来自真实用户的体验反馈,有助于提升软件质量并提高用户满意度。本文研究梳理了2017年以来大量关于众包测试的文献,首先介绍了众包测试的背景以及流程,然后对激励机制、推荐机制、报告自动生成三项关键技术进行了对比和分析,最后对众包测试进行了总结并对未来研究进行了展望。
2. 众包测试
在众包测试活动中,主要参与者包括任务请求者(Requester)、众包工人(Crowd Worker)和众包平台方(Platform)。众包测试平台作为第三方,为任务请求者和众包工人提供在线系统[2]。
任务请求者,指的是有测试需求的个人或企业,通过发布众包测试任务的方式,对内部的测试进行有针对性的补充,同时获取用户真实体验反馈,以减少软件或产品上线时的问题。
众包工人,包括专业的测试人员、测试爱好者和学生等人群,他们通过平台来参与测试任务,在规定的时间内完成测试并提交测试记录,以此来获得报酬。
众包测试平台通过召集测试人员来完成发布的测试任务。目前的众包测试平台有两大类,一类是特定公司的平台,主要对公司内部产品进行用户体验和功能测试,如百度众测平台等。另外一类是开放性平台,如Testin、Alltesting等,测试类型十分全面,包括兼容性测试、功能测试、性能测试等多个方面。
众包测试平台的基本流程首先是任务请求者提交待测软件和测试任务至众测平台,众测平台将测试任务分发给合适的众包工人,或者由众包工人通过众测平台选择感兴趣的测试任务,众包工人完成测试任务后,将测试结果以测试报告的形式提交至众测平台,如图1所示。
Figure 1.Crowdsourcing testing process
图1.众包测试流程
众包测试通过吸引来自不同地域和领域、不同技术专长的测试人员,来提供多元化的测试视角和结果,从而更大程度地覆盖测试角度,有助于发现软件的潜在缺陷。Sultan Alyahya[3]在检索大量文献后发现,众包测试可以应用于各种不同类型的测试任务,包括功能测试、兼容性测试等。它具有高成本效益,只需为完成任务并提交有效报告的测试人员支付费用,无需承担额外的测试基础设施费用,同时可以根据项目需求灵活调整测试人员数量,降低时间和人力成本。众包测试还能提供真实的用户反馈,例如在移动应用软件测试中,可以有效收集在不同品牌、类型、分辨率和系统版本的设备上的实际体验,通过大量众包工人的真实场景测试,来发现真实的软件缺陷,从而改善用户体验和满意度。
3. 众包测试关键技术研究
本文对“众包测试”、“众包测试报告”以及“众包测试推荐”等关键词进行检索,选取自2017年以来的相关文献进行梳理分析。本章对众包测试的关键技术进行总结。
3.1. 激励机制
招募和有效管理大量优质的众包测试工人是进行众包测试任务的先决条件。随着众包测试任务的复杂性增加,通常需要确保众包工人具备一定的测试能力,以有效解决测试问题。众包工人通常是自愿参与平台上的任务,但他们的动机多样。一方面,受到利益的驱动;另一方面,可能是出于学习和实践的目的。完成测试任务会获得相应的奖励,这也可能导致一些恶意注册者提供相同或相似的结果,来骗取奖励。因此,不仅需要建立合理的奖励机制,还要考虑对不诚实完成任务的用户进行惩罚。这样的激励机制可以确保有足够数量和质量的众包工人参与测试任务,从而保证任务能够高质量完成。
3.1.1. 众包激励机制
傅彦铭等人[4]提出了一种基于多约束人工择优的激励机制。主要有两个算法:改进逆向拍卖的工人择优算法、评估和奖惩算法。首先综合考虑工人信誉度、任务完成度、结果质量等多个重要约束来选择最适合的工人。然后,对任务执行结果和工人信誉进行评估,在下一次任务前将任务完成度不高的工人降低信誉,反之提升。通过多约束的激励机制,提高了任务执行结果可信度和工人信誉度。
高丽萍等人[5]提出了一种多阶段质量感知的在线激励机制。在预算和任务时限的约束下将整个活动周期分为多个阶段,对各个阶段的在线工人进行筛选、提交质量评估,具有预算可行性,为请求者尽可能地提供高质量结果。
王强等人[6]提出了一种基于拍卖机制和差分隐私的众包测试激励机制。通过拍卖机制能够保证工人报价的真实性,防止激励攻击。使用差分隐私机制为工人分配被选中的概率,并按照概率分布选择工人,实现了成本隐私保护。虽然大部分的激励机制都是针对众包的,但是完全可以借鉴改进,使其适用于众包测试。比如根据任务难度进行差异化奖励、提前完成提供时效性奖励等,以此提高任务完成的质量和效率。
激励机制从单一约束到多约束的演进标志着逐渐从简单的任务分配发展到适应复杂任务的、能够实时响应的系统。多约束的方法能够选择更符合条件的优质工人,提高工人执行任务的质量,但是会增加系统复杂度,需要依赖更细致的数据来实现精确筛选。多阶段在线感知激励机制通过多个阶段提高数据质量,支持动态调整,保证预算与时间效率,但在数据不足时效果难以保证。隐私保护激励机制,适用于敏感任务保护工人的隐私,但会使系统实施成本和复杂度增加。
3.1.2. 信誉度评估
由于众包测试的匿名性以及无监督性,使得众包工人在执行测试任务时容易产生懈怠或故意欺诈的行为,以此获得最大化收益,最终对测试质量产生负面影响。因此,需要对众包工人进行信誉度评估,以确保众包工人参与测试的质量。需要建立一套可靠的评估方法,以评估众包工人的能力和工作表现。通过对历史记录、任务完成情况、任务发布方的评价进行分析,有助于提升测试任务的质量和效率,确保众包工人保持责任心,提高工作表现,以满足测试的需求。
成静等人[7]提出了一种基于模糊数学的移动应用众包测试人员信誉度评估方法。通过紧密结合众包测试的特性,引入测试人员评价机制,构建信誉度评估模型,实现对众包工人信誉度的合理评估,可以有效选拔出高信誉度的众包工人。该方法允许根据实时数据调整信誉度,更适合复杂和变化的任务需求。
褚佳静[8]针对众包工人提交结果准确率不高的问题,根据可信因子和惩罚因子建立了信誉模型并结合偏好,将熟练度与匹配度加入评估,实现了对众包工人的选择。该方法关联任务质量并强调长期可靠性的重要性,但是忽视个别工人在特定任务上的表现。
3.2. 众包测试的推荐机制
众测平台作为众包工人和测试任务的桥梁,通常仅支持搜索任务。一般情况下,众包工人会根据发布时间或从任务列表的前几页选择感兴趣的任务,以此降低搜索任务的成本。但实际上,他们可能并不具备完成这些测试任务的专业能力。这种策略可能会导致任务分配不均匀,影响任务完成的质量,还影响用户体验。为了提高任务分配均衡性和效率,众测平台需要对众包工人进行个性化的推荐。
3.2.1. 众包工人的推荐
考虑到测试成本限制,通常一个测试任务只能由有限数量的众包工人完成。当然,更多的众包工人不一定会检测出来更多的软件缺陷。由于众包工人有着不同的测试经验和专业知识,其测试结果可能存在差异。如果一个测试任务由不适合的众包工人进行测试,可能导致缺陷重复或测试不够全面,从而降低测试的质量。因此,众包测试任务推荐还要确保测试任务分配给具备相应测试技能的众包工人,以提高测试效率和质量。
Wang等人[9]提出了一种人群工作者推荐方法,用测试情景、能力和领域知识三个维度来表征众包工人。同时,提出了多目标群组重构方法,旨在为众包测试任务推荐最小数量的群组工人,以检测到最大数量的软件缺陷。
Cui等人[10]提出了一种混合方法来为测试任务选择一组众包工人。这个方法包括三个关键策略:经验策略选择有经验的工人,关联策略选择与给定测试任务相关的具有专业知识的工作者,多样性策略选择多样性的工人,以避免检测到重复缺陷。
蒋竞等人[11]利用机器学习提取任务特征、工人特征、工人和任务的特征并计算工人被推荐的概率,进而实现推荐功能。
马华等人[12]结合众包工人的历史表现以及任务需求,利用角色协同,综合考虑任务权重、潜在冲突、工人数量,实现多对多模式下的任务分配。
3.2.2. 测试任务的推荐
成静等人[13]提出了一种基于堆叠边缘降噪自动编码器的深度学习推荐算法。为了选出具有相关技术水平且匹配测试任务需求的测试人员,实现精准的众包测试任务推荐,将DNN (Deep Neural Networks,深度神经网络)和SMDA (Stacked Marginalized Denoising Autoencoder,堆叠边缘降噪自动编码器)结合,对测试任务和测试人员进行特征分析,利用SMDA的特征提取能力与DNN的训练速度,提高了算法的精细度,可以将测试任务推荐给适合的测试人员。
沈旭等人[14]提出了一种基于知识图谱与图注意力的众包任务推荐模型。首先利用自然语言处理技术提取任务文本信息中的关键要素,然后与用户–任务交互图中的协同信息融合,来构建协同知识图谱。运用图注意力网络,聚合不同类型的协同信息,生成用户和任务的嵌入表示,计算交互概率。
袁宇宸[15]利用胶囊网络,将深度学习模型与任务推荐结合,获取任务向量特征,利用多标签技术将知识型众包任务推荐给合适的众包工人。
众包测试推荐从最初使用基于规则的方法以及简单算法,逐渐到使用复杂优化算法以及机器学习,到现在使用深度学习,其目的就是为了不断提高推荐系统的准确性和效率。多目标策略可以适应多变的任务需求,但应对新任务的适应性可能下降。机器学习模型可以快速响应,但需要更详细的工人特征描述数据以及参数优化。图注意网络可以根据实际情况动态调整聚合策略,但计算复杂度较高。胶囊网络可以处理大规模标签问题,对数据量的依赖较大。深度学习在性能上可能更有优势,但是其结果依赖于数据的数量以及质量,在实际应用中还需考虑模型的复杂度,通过综合利用新技术来提高众包测试推荐的效率和准确性。
3.3. 测试报告自动生成
在众包测试过程中,众包工人会提交大量质量参差不齐的测试报告,这导致众包测试平台和任务请求者将面临如何有效整合众包测试报告的难题。测试报告由自然语言描述组成,通常附带截图,并包括工人对测试是否通过的评估。在众包测试报告提交后,为了避免任务请求者花费大量的时间进行人工审查,影响到众包测试的效率。在有限时间内对众包测试提交的数量大、冗余多、缺陷重要程度不明的报告进行审查和评估,是一个亟需解决的难题。近年来涌现了许多自动化技术,如报告的聚类、分类和排序技术,旨在提高审查效率并减少对重复报告审查的工作量。利用深度学习模型处理大量的测试记录,能够为众包测试报告整合提供很大助力,相较于传统的方法更加准确高效。
3.3.1. 测试报告优先级排序
Zhu等人[16]提出了一种众包测试报告优先级排序方法,通过使用自然语言处理技术与分词技术对测试报告中的文本进行处理。然后使用贪心算法、附加贪心算法、遗传算法进行测试报告优先级排序。
童瑶[17]针对移动众测报告存在文本描述较短且具有丰富的截图,同时截图的分辨率不同但是具有相似性的特点,将文本和图像信息分析处理,找出截图最相似的报告,为缺少描述的报告生成相同的关键词。考虑到缺陷严重性的问题,采用哈希来存储众包测试的报告,根据文本信息熵抽样生成审查顺序,能够优先推荐存在高严重性问题的缺陷报告。
Yu等人[18]通过对移动应用程序截图和众包测试报告中的文本进行分析,描述了缺陷特征和上下文获取相似度并对众包测试报告进行了优先级排序。
3.3.2. 测试报告汇总
Hao等人[19]提出了一种利用重复项来丰富缺陷描述内容并提高检测效率的方法。该方法基于文本信息和屏幕截图自动聚合重复的测试报告,归纳补充主题,并将重复的测试报告汇总成一份,以便更有效地辅助开发者了解测试结果。
Jiang等人[20]将聚类技术应用于众包测试报告处理。利用模糊聚类框架将多个冗余的测试报告聚合成簇,以减少需要人工检查的报告数量。首先构造一个过滤器,利用空规则和正则规则过滤掉无效的测试报告。通过自然语言处理技术对测试报告进行处理,有选择地增强对测试报告的描述,使相关测试报告之间的相似性更加准确。最后使用两阶段合并算法对测试报告模糊聚类。
Yu等人[21]为了解决移动应用众包测试报告提交后,仅关注缺陷描述而不注意截图是否符合描述的问题,通过深度图像和文本融合理解的检测方法,提高一致性和分类准确率,有效提高了测试报告的评审效率。
测试报告排序,使用自然语言处理提取文本特征,使用贪心算法等进行排序,虽然简单高效,但在处理复杂多变的场景时有一定局限性。使用OCR提取截图关键字,将文本特征和图像特征结合聚类分析,从而更全面地理解报告内容。使用计算机视觉与自然语言处理并计算相似度进行排序,提高了对不同测试类型的适应性。测试报告汇总,通常仅对文本描述进行模糊聚类,该方法简单快捷,但准确率可能不足。使用深度学习模型考虑图像与文本融合理解,考虑更多的信息能够提高汇总效率,但计算资源需求较高。未来将研究聚焦于如何有效结合这些技术,优化算法、减少资源消耗,以适应更广泛的应用场景,助力软件测试更快速定位和解决软件存在的问题。
4. 总结与展望
众包测试作为一种重要的软件测试解决方案,经过不断发展已形成一套稳定的流程。本文研究了自2017年以来关于众包测试相关的文献,深入探讨了众包测试的关键技术,包括激励机制、测试任务推荐、测试报告自动生成。随着技术的不断发展,众包测试将会为软件测试领域带来更多的创新和提升,同时也不断面临新的机遇与挑战。现有激励机制多数是静态的,可以根据众包工人选择偏好、完成效率等更多行为数据,动态调整激励策略,以持续激发工人的参与积极性。众包测试推荐系统,面临如何应对更复杂的推荐场景的问题,使用深度学习模型分析参与者的行为与心理,预测参与者的偏好和行为动机来提供更为个性化的任务推荐。在测试报告的自动化处理上,未来研究将更加注重于深度学习模型分析文本、图像甚至视频的多模态数据,以实现更准确的测试报告生成,并根据处理后的测试报告生成测试用例。
未来,大模型的应用可能会为众包测试带来革命性的变化。大模型具有强大的学习能力和泛化能力,在语言理解、图像识别任务上有出色的表现,并对未知数据具有良好的预测能力。例如,可将OpenAI的GPT模型应用于测试用例的自动生成,由于其具有强大的语言理解和生成能力,通过理解软件的功能需求和使用场景,能够自动生成覆盖各种边界条件和异常的测试用例。对于那些脚本编辑能力不强的众包工人来说,它还可以帮助其理解测试需求,自动编写测试脚本,并根据错误提示修改代码,从而提升测试效率。当然,将大模型应用于众包测试也面临一些挑战。例如,如何训练模型以满足各种不同的软件测试环境,以及如何确保模型生成的测试用例及测试脚本的准确性和可解释性。另外,某些软件测试可能涉及待发布的版本,还需要考虑如何保证模型的安全性和隐私性。这些问题的研究与探索,都将促进众包测试的发展以及软件质量的提升。
基金项目
校级研究生创新资助项目(项目编号:YKY-2023-36);校级研究生创新资助项目(项目编号:YKY-2024-45)。
NOTES
*通讯作者。