跨编程语言探索测试异味:一项系统性映射研究
《Journal of Systems and Software》:Exploring test smells across programming languages: A systematic mapping study
【字体:
大
中
小
】
时间:2026年09月12日
来源:Journal of Systems and Software 3.8
编辑推荐:
## 摘要
测试对于确保软件开发中的代码质量至关重要。然而,糟糕的实现实践会损害测试代码的可维护性和可演进性,从而带来额外的成本和精力投入。这些被称为"测试异味"(test smells)的实践一直是众多研究关注的重点,并不断扩展了已知测试异味的目录。尽管取得了这些进展,但
## 摘要
测试对于确保软件开发中的代码质量至关重要。然而,糟糕的实现实践会损害测试代码的可维护性和可演进性,从而带来额外的成本和精力投入。这些被称为"测试异味"(test smells)的实践一直是众多研究关注的重点,并不断扩展了已知测试异味的目录。尽管取得了这些进展,但从编程语言的角度来审视测试异味,尤其是它们与特定语言或测试框架之间的关系,却鲜有关注。因此,研究人员和从业者针对不同语言中相同的测试异味提出了各种检测和重构方法及工具。本工作通过从编程语言视角分析文献中的测试异味来填补这一空白。我们开展了一项系统性映射研究,收集了截至2025年8月发表的论文数据,共分析了117篇论文。我们识别了与测试异味关联最为频繁的语言和框架、各语言中最常见的测试异味、用于解决测试异味的重构方法、测试异味数据集、特定测试异味的严重性程度,以及用于检测和重构各种语言及框架中测试异味的工具集合。我们的结果表明,尽管许多测试异味已被研究,但相关研究仍局限于少数语言和框架。我们还找到了一些语言的数据集和检测/重构工具,并分析了被频繁提及的测试异味的严重性。本研究强调了将研究扩展到更多语言并开发更通用解决方案的必要性。
## 引言
测试是确保软件开发中代码质量的基本实践之一(Tran等,2021)。虽然手动测试需要人工干预,但自动化测试通过测试脚本提供了更高效的替代方案,在显著减少人工投入的同时保证了可重复性(Garousi和Kü?ük,2018)。对于采用持续交付的组织而言,自动化测试尤为关键,它使组织能够在保持高质量标准的同时,加快从功能构思到客户交付的进程(Tran等,2021)。
然而,正如生产代码必须不断演进以保持其相关性一样,测试代码同样需要类似的关注以维持其长期有效性(Tran等,2021)。测试代码实现不佳的后果远不止低效,还会转化为显著额外的成本和不必要的投入(Garousi和Kü?ük,2018)。例如,"断言大轮盘"(Assertion Roulette)测试异味是指在单个测试中包含多个断言却不附带解释性消息。这种做法会显著增加调试工作量,因为任何一个断言失败都迫使开发人员逐一检查每个断言以定位问题根源。另一个例子是"条件测试逻辑"(Conditional Test Logic)测试异味,它增加了测试的复杂性。根据引入的条件数量,它会使测试更难理解、维护和更新。
当考虑到开发人员大约花费四分之一的时间来编写测试代码(Beller等,2015)时,这一问题变得尤为紧迫。在各种可能损害测试代码可维护性和可演进性的因素中,测试异味是一个关键关切。测试异味代表开发人员在测试实现过程中做出的糟糕设计选择(Aljedaani等,2021),而这些选择最终可能导致测试代码难以维护和演进(Panichella等,2022)。
测试异味研究的基础由Deursen等人(2001)奠定,他们引入了最初包含11种测试异味及其对应重构策略的目录。这项开创性工作此后激发了大量研究,众多研究通过提出新的测试异味、开发重构技术以及创建检测和重构工具来扩展该领域。综合性的文献综述进一步丰富了研究领域,这些综述汇总了广泛的测试异味目录(Garousi和Kü?ük,2018;Garousi等,2019),系统性地识别和分析了测试异味检测工具(Aljedaani等,2021),并探索了特定领域的测试异味(Rwemalika等,2022)。尽管已有大量研究,但仍存在一个关键空白:没有研究专门考察不同编程语言和框架中测试异味的普遍性。因此,一些基本问题仍未得到解答,例如哪些测试异味是语言特有的,哪些在特定编程环境中更为常见。
忽视测试异味研究中的编程语言视角造成了重大的实践挑战。许多研究提出了针对特定编程语言定制的测试异味检测和重构的最先进方案,通常一次只聚焦于一种语言。这种狭窄的范围严重限制了研究成果在不同编程环境中的可重用性。因此,研究人员不得不在多种语言中反复从零开始构建方案以解决相同的问题,这一过程既复杂又耗时。开发更通用和可重用的方案可以极大地简化这一过程,但实现这一目标首先需要阐明当前格局,识别潜在的研究方向,并为未来的研究奠定基础。
为了填补这一关键空白,我们的研究探索了测试异味与其表现所在的编程语言和框架之间的关系。通过一项全面的系统性映射研究(SMS),我们收集并分析了截至2025年8月发表的论文数据,最终选取了117篇明确讨论了测试异味并引用了特定编程语言或测试框架的论文。我们的调查发现,在11种编程语言(包括Java、Python、JavaScript、TypeScript、C#等)和15种测试框架(如JUnit、PyTest、Jest、xUnit等)中分布着213种不同的测试异味。
我们的发现揭示了几个值得注意的模式。Java是被引用最频繁的语言,JUnit是最主要的测试框架。相比之下,Python近年来获得了大量关注,反映了研究格局日益增长的多样性。在测试异味方面,"断言大轮盘"和"急测试"(Eager Test)在文献中被讨论得最多,而"未知测试"(Unknown Test)则展示了跨编程语言最广泛的覆盖度。我们还识别了语言特有的测试异味,例如仅在TTCN-3中观察到的异味。
除了普遍性之外,我们从两个互补的角度考察了测试异味的严重性:开发人员的感知及其对可维护性的影响。有趣的是,尽管"断言大轮盘"和"急测试"被频繁讨论,但它们并不被认为具有高度严重性。相反,我们发现最严重的测试异味是"嗜睡测试"(Sleepy Test)、"被忽略的测试"(Ignored Test)、"资源乐观"(Resource Optimism)和"神秘嘉宾"(Mystery Guest)。我们还综合了不同语言和框架背景下文献中报告的重构方法、数据集以及检测/重构工具。
与以往的工作不同,我们的目标既不是扩展现有的测试异味目录,也不是标准化测试异味的术语。相反,我们将现有目录作为参考来源,提供跨语言和跨框架的、对主要研究中报告的证据的综合分析。特别是,与面向目录的资源(如开放测试异味目录,Soares等,2023a)不同,我们的重点不在于整合名称和定义,而在于分析关于测试异味的知识如何在编程语言和测试框架中分布。同样,与以工具为中心的映射研究(如Aljedaani等,2021的研究)不同,我们的分析不限于检测工具。工具只是本研究中考察的六个维度之一,此外还包括测试异味的普遍性、其在语言和框架中的通用性、相关的重构方法、可用的数据集及其严重性。这一视角使我们能够识别哪些测试异味可以跨生态系统推广,哪些是语言特有的,以及当前研究集中在哪些领域。
本工作的主要贡献包括:
- 围绕六个研究问题(涉及普遍性、通用性、重构方法、数据集、严重性和工具),对117篇关于测试异味的论文进行了跨语言和跨框架的综合分析。
- 基于证据刻画了哪些测试异味跨语言和框架反复出现,哪些似乎是语言特有的,并对测试异味进行了分类。
- 整合了文献中解决不同语言中测试异味的可用证据,包括针对56种测试异味的94种重构方法、16个数据集,以及36种检测或重构方法和工具。
- 从两个互补的角度评估了测试异味的严重性:开发人员的感知和测试异味对软件可维护性的影响。
- 提供了一组见解,突显当前研究集中在少数语言中的现状,并概述了开发更广泛、更具可重用性的跨语言解决方案的机会。
- 提供了一个复制包,以支持对该研究的未来扩展和验证。
本文其余部分组织如下:第2节建立理解本研究所需的基础概念;第3节详细介绍系统性研究方法;第4节呈现全面的发现和分析;第5节对结果进行深入考察和解释;第6节讨论潜在的有效性威胁及我们的缓解策略;第7节将我们的研究置于更广阔的研究格局中;第8节总结主要见解和未来研究方向。
## 章节片段
### 背景
本节介绍理解本工作所需的关键概念。
### 研究方法
本节概述了在编程语言跨域开展测试异味系统性映射研究的过程。映射过程遵循软件工程系统性映射研究的指导原则(Petersen等,2008;Petersen等,2015)。
### 结果
本节概述我们获得的结果并对研究问题作出回答。
### 讨论
本系统性映射研究为测试异味研究的现状提供了多项见解,并概述了未来研究的潜在方向。基于对2006年至2025年间发表的117篇论文的分析,我们识别出了值得注意的模式,这些模式揭示了当前研究存在的局限性,同时也指明了进一步探索的有前景的途径。
**要点1:Java单一文化问题。** 我们的结果清楚地表明,在测试异味研究中存在Java单一文化现象——
### 有效性威胁
本节根据Wholin等(2000)提出的分类,描述有效性威胁。内部有效性威胁指的是将某个效应归因于某一因素时,实际上存在第三个未被考虑的因素是真正原因的可能性。在我们的SMS中,如果我们将测试异味研究中的模式错误地归因于编程语言,而实际上其他因素(如研究社区的关注重点、工具的可用性或发表情况)才是真正原因,则可能发生这种情况。
### 相关工作
本节讨论关于测试异味的相关文献综述,这些文献是通过咨询测试异味专家确定的。
Garousi和Kü?ük(2018)对测试异味进行了多声部文献映射,考察了来自科学文献和灰色文献的166个来源。该研究为从业者提供了详细的测试异味分类,并附带了关于测试自动化的建议,以及用于预防、检测和修正的指导方针、技术和工具。此后,Garousi——
### 结论
在本工作中,我们开展了一项系统性映射研究,通过编程语言和测试框架的视角来考察测试异味。我们分析了117篇论文,提取数据以回答六个研究问题,涵盖普遍性、通用性与语言特有的异味、重构方法、数据集、严重性和工具。我们并非提出一个新的规范测试异味目录,而是将主要贡献定位在跨语言综合文献中报告的证据。这——
### CRediT作者贡献声明
Publio Silva:撰写——审阅与编辑、撰写——初稿、方法论、调查、形式分析、数据整理、概念设计。Carla Bezerra:撰写——审阅与编辑、指导、方法论、概念设计。Ivan Machado:撰写——审阅与编辑、指导。Márcio Ribeiro:撰写——审阅与编辑。
### 生成式人工智能及AI辅助技术在写作过程中的声明
在准备本作品期间,作者使用了ChatGPT来纠正文本中的语法和拼写错误。在使用该工具/服务后,作者对内容进行了审阅和必要的编辑,并对出版物的全部内容承担全部责任。
### 利益冲突声明
作者声明以下财务利益/个人关系,这些利益/关系可能被视为潜在的利益冲突:Márcio Ribeiro报告获得来自国家软件工程科学技术研究所的财务支持。Ivan Machado报告获得来自高等教育人员提升协调委员会的财务支持。其他作者声明他们不存在已知的竞争性财务利益或个人关系。
### 致谢
作者衷心感谢为本研究提供的财务支持。Márcio Ribeiro部分获得了基于人工智能和面向人工智能的国家软件工程科学技术研究所INES.IA的支持(www.ines.org.br),CNPq拨款号408817/2024-0,以及CNPq拨款号312195/2021-4、404825/2023-0和443393/2023-0的支持。
伊万·马查多感谢 CAPES – 财务代码 001 的部分支持;州研究支持基金会 | 普布利奥·席尔瓦 | 卡拉·贝泽拉 | 伊万·马查多 | 马西奥·里贝罗 塞阿拉联邦大学,若泽·德·弗雷塔斯·凯罗斯大道 5003 号,基萨达,63900-000,巴西塞阿拉州
生物通微信公众号
生物通新浪微博
今日动态 |
人才市场 |
新技术专栏 |
中国科学人 |
云展台 |
BioHot |
云讲堂直播 |
会展中心 |
特价专栏 |
技术快讯 |
免费试用
版权所有 生物通
Copyright© eBiotrade.com, All Rights Reserved
联系信箱:
粤ICP备09063491号