TestMiner: Software Testing Analysis for GitHub Repositories
本文介绍了 TestMiner,这是一个旨在通过提供测试统计、位置、演变和依赖关系方面的指标,来分析并可视化不同 GitHub 仓库中软件测试实践的工具,该工具因其能够促进对真实世界测试策略的批判性探索而得到了本科生的积极评价。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你刚刚偶然闯入了一个名为 GitHub 的巨大且混乱的代码图书馆。这里充满了数以百万计的书籍(项目),但有个转折:有些书把它们的“安全检查”(测试)藏在秘密后室里,而另一些则直接把它们贴在封面。有些图书馆使用特定的语言来编写这些检查,而另一些则使用完全不同的语言。如果你想了解一本特定的书是如何防止自身崩溃的,你可能得花好几个小时手动搜寻每一层书架、阅读微小的注释,并试图猜测其中的规律。这就像是在蒙着眼睛、穿着沉重靴子的情况下,试图在干草堆里寻找一根特定的针。
于是,TestMiner 出现了,它是一个全新的工具,就像是这些代码图书馆里的一个神奇的高科技手电筒。它不再让你在黑暗中艰难跋涉,而是通过缩放视角、扫描整个项目,并立即为你绘制出一张地图。
这张地图展示了什么?
把它想象成一个软件项目安全网的“健康仪表盘”。
- “位置”地图: 它向你展示测试究竟藏在哪里。它们是在一个特殊的“test”文件夹里,还是与主代码混在一起?它就像一张藏宝图,无论宝藏是埋在深邃的洞穴里,还是就放在前廊上,都会高亮显示每一个“X 标记处”。
- “时间旅行”图表: 它让你能够看到安全网是如何随时间增长的。是一个项目从最初只有一个微小的安全网,然后慢慢织成了一张巨大的网?还是它突然一次性增加了数百个网?例如,该工具显示 fastapi 项目从第一个版本中几乎零测试文件,发展到了最新版本中的近 600 个测试文件。
- “成分”清单: 它列出了项目运行测试时使用的特殊工具和助手,这些信息是从“软件物料清单”(类似于项目的成分收据)中提取的。它可以识别出项目是否正在使用针对 Rust、Python 或 Java 的特定工具。
它真的有效吗?
作者们并没有只是构建了这个工具然后听天由命;他们将其投入到了真实的课堂测试中。他们将这个工具交给了50 名软件测试课程的本科生,并让他们去探索真实的开源项目。学生们不仅仅是在点击按钮;他们利用这个工具发现了那些如果手动查找可能需要数小时才能找到的深度见解。
一名学生利用 TestMiner 发现,一个名为 Streamlit 的流行项目之所以将大部分测试放在特定文件夹中,是因为它既有 Python 部分,也有沉重的 Web 界面。另一名学生注意到,一个名为 Newtonsoft.Json 的项目其测试文件随时间推移从仅有的 7 个增长到了 200 个,呈现出稳定的线性增长,而非突然跳跃。另一组学生则发现,一个名为 thefuck 的项目重点测试了 Git 命令,因为这些命令对于用户来说通常非常令人困惑。
学生们发现 TestMiner 帮助他们识别了诸如“模拟”(mocking,即代码假装与互联网通信以节省时间)、“固件/测试夹具”(fixtures,可重用的测试设置),甚至还有一些项目如何将测试作为“活文档”使用。反馈非常积极:该工具让学生更容易理解现实世界的软件是如何进行测试的,而无需安装复杂的软件或搭建实验环境。
这个工具“不是”什么?
了解 TestMiner 不具备 什么功能也很重要。它不是修复糟糕代码或发现所有 Bug 的魔杖。你不需要在你的电脑上安装任何东西;它直接在你的浏览器中运行。它也不会取代开发者实际编写测试的需求;它只是帮助你“看见”已经存在的东西。
作者们谨慎地指出,该工具依赖于 GitHub 的公开数据,而公开数据有速度限制(免费用户大约为每小时 60 次请求)。如果你达到了这个限制,某些功能可能会暂停,不过你可以通过添加一个特殊的“令牌”(token)来将限制提升至每小时 5,000 次请求。此外,由于它是从网络读取数据,如果项目变化非常快,有时链接可能无法与代码完美匹配。
底线
TestMiner 表明,通过将杂乱、手动的搜索转变为直观、即时的概览,我们可以帮助学生和开发者更快地理解软件项目的“安全文化”。它并不是解决所有测试谜题的终极方案,但它是一个强大的新视角,让隐形的软件测试世界变得可见、易懂,甚至带有一点趣味性。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。