引用:Automatic test case generation: what if test code quality matters?, Fabio Palomba, Annibale Panichella, Andy Zaidman, Rocco Oliveto, Andrea De Lucia, Proceeding ISSTA 2016 Proceedings of the 25th International Symposium on Software Testing and Analysis
Pages 130-141
摘要
人们已经广泛研究了优化代码覆盖率的测试用例生成工具。最近,研究人员建议添加其他非覆盖标准,如内存消耗或可读性,以增加生成的测试的实际用途。在本文中,我们观察到测试代码质量度量,特别是测试内聚和耦合,作为附加标准是有价值的指标。实际上,低内聚和/或高耦合的测试已被证明对未来的维护活动有负面影响。在一项探索性调查中,我们发现大多数生成的测试确实受到测试代码质量差的影响。出于这个原因,我们将内聚和耦合度量结合到基于搜索的算法的主循环中以用于测试用例生成。通过实证研究,我们发现该方法不仅能够生成更具凝聚力和更少耦合的测试,而且当搜索有足够的时间时,可以将分支覆盖率提高10%,并且生成的更短的统计测试。
关键字
进化测试,多目标优化,分支覆盖,测试代码质量
1.引言
自动化测试用例生成工具已在文献中广泛研究,以降低软件测试的成本。通过自动化技术生成单元测试有助于开发人员根据完善的代码覆盖标准来最大化确定代码元素(例如,语句)的百分比。测试用例生成的传统方法主要关注代码覆盖作为实现的唯一目标,而不考虑可能与测试者相关的其他因素。
在本文中,除了代码覆盖之外,我们还关注要考虑的测试代码质量指标。首先需要在生成测试时维护自动化测试,因为测试人员需要手动验证每个测试用例以检查断言(oracle成本)。 此外,还需要根据在以后的开发活动期间在生产代码中执行的更改来维护并最终更新测试。 因此,我们认为实现易于维护的测试是测试用例生成中理想且重要的目标。
本文考虑了两个简单但关键的质量度量标准,用于评估测试代码的可维护性,即测试内聚和测试耦合。可维护的测试必须尽可能简单(内聚),即每个测试不应同时验证太多功能以避免测试混淆。此外,应尽量减少测试重叠(或测试耦合),以便只有少数测试受到未来任何变化的影响,从而提高测试可读性并简化未来的维护活动。为了测量测试内聚和测试耦合,我们依赖于信息检索(IR)方法,类似于以前用于评估生产代码质量的论文。具体来说,我们定义了两个新的度量,即耦合测试方法(CBTM)和低内聚测试方法(LCTM)我们选择IR方法,因为之前的研究表明文本分析在描述内聚和耦合现象的能力方面往往优于结构度量。
为了评估自动生成的测试用例在多大程度上存在设计问题,我们对SF110数据集进行了大规模的初步研究,并使用Evosuite作为测试用例生成工具。该分析表明,大多数自动生成的测试都会遇到