一、研究背景
在软件测试实践中,代码覆盖率(Code Coverage)是评估测试充分性的常用指标。对于单元测试和功能测试而言,高代码覆盖率通常意味着更全面的测试能力, 因此在持续集成和软件质量评估中被广泛使用。
然而,在性能测试(Performance Testing)领域, 代码覆盖率的意义却并不明确。
性能测试通常关注系统吞吐量、延迟等指标;
测试执行成本较高,运行时间长;
开发者往往只针对关键代码路径进行性能测试。
因此,一个值得研究的问题是:
性能测试到底覆盖了多少代码?哪些代码更可能被性能测试覆盖?
为回答这些问题,论文对多个开源 Java 系统进行了系统性的实证分析。
二、论文信息
| 论文标题 | Is Code Coverage of Performance Tests Related to Source Code Features? An Empirical Study on Open-source Java Systems |
发表信息 | Empirical Software Engineering,2025 |
机构单位 | 意大利拉奎拉大学 |
| 开源情况 | https://github.com/SpencerLabAQ/performance-test-coverage |
三、研究问题&研究方法
论文围绕以下三个核心研究问题展开:
- RQ1: 性能测试的代码覆盖率是多少?
- RQ2: 性能测试的执行成本如何?
- RQ3: 源代码特征是否可以预测哪些代码会被性能测试覆盖?
通过这些问题,研究者希望理解性能测试在真实项目中的覆盖行为。因此,对多个开源 Java 项目进行了系统分析,重点关注性能测试与功能测试的代码覆盖行为。
实验数据包括:
28 个开源 Java 系统
约 17 万个 Java 方法
2190 个性能测试基准
图1.本研究的主要步骤
研究流程主要包括三个阶段:
1.测试识别
识别项目中的性能测试(JMH)和功能测试(JUnit)。
2.覆盖率统计
执行测试并统计其覆盖到的方法。
3.特征分析
提取 44 种代码特征并训练机器学习模型进行预测。
四、核心研究发现
1️⃣ 性能测试覆盖率普遍较低
平均代码覆盖率约为8.8%
仅为功能测试覆盖率的约 1/4
图2.跨项目基准的覆盖率
这表明开发者在设计性能测试时, 通常只关注少量关键代码路径。
2️⃣ 性能测试执行成本较高
性能测试平均执行时间约为功能测试的62 倍
测试成本与覆盖率之间存在明显权衡
图3.总体执行时间比较
3️⃣ 静态代码特征难以预测性能测试目标
研究者尝试利用源码特征预测哪些方法会被性能测试覆盖,并训练了多种机器学习模型,包括:
传统机器学习模型
特征选择方法
Transformer 代码模型(CodeBERT 等)
图4.静态源码特征的预测性能
实验结果见图4,结果表明:
静态代码特征无法有效预测哪些代码需要性能测试。
五、研究启示
该研究对软件工程实践具有重要启示:
- 性能测试覆盖率通常较低
开发者更关注关键路径而非整体覆盖。
- 测试成本较高
需要合理设计测试策略。
- 代码特征不足以指导性能测试
未来需要结合运行时数据或系统负载信息。
六、总结
本文通过对多个开源 Java 系统进行大规模实证研究, 系统分析了性能测试的代码覆盖情况。
研究结果表明:
性能测试覆盖率普遍较低;
性能测试执行成本较高;
静态代码特征难以预测性能测试目标。
未来研究可以结合运行时行为、系统负载和真实使用场景,进一步提升性能测试设计方法。
📣 讨论
你认为性能测试是否应该追求更高的代码覆盖率?
是否可以利用生产环境数据指导性能测试设计?
📌 点赞 + 收藏 + 分享,你的支持,是我们持续解析高水平软件安全论文的最大动力!