软件测试竞赛的观察和经验
分类:网校动态日期:2024-08-31 02:17:31人气:
即使一个项目在测试上投入了大量的资源,生产出来的软件仍然可能质量很差。关键因素不是花费了多少测试,而是如何以及由谁执行测试。如今,单元测试可用于有效地测试单个软件模块。我们举办了两届软件测试大赛(STC); [STC 2016 和STC 2017],由IEEE 可靠性协会和MooctestLLC 主办,作为中国大学生软件测试竞赛的一部分。除了教育目的外,我们还收集测试数据用于研究。我们将数据(减去私人信息)存储在开源存储库中。我们使用该存储库中的数据进行了两项实证研究。我们的研究结果将在以下几节中介绍。
测试大赛
STC 2016和STC 2017均使用在线软件测试平台Mooctest。每个参赛者都使用安装了Mooctest 插件的Eclipse IDE 连接到Mooctest 服务器。比赛开始时,Mooctest服务器将多个源程序部署到每个参赛者的Eclipse IDE中。部署完成后,参赛者开始测试并激活平台计时器。测试时,要求参赛者阅读并理解源程序的源代码。然后,编写JUnit测试用例并将其提交到Mooctest服务器。服务器编译提交的测试用例,针对源程序执行它们,测量分支覆盖率,并计算突变分数。两项比赛均允许多次提交,每位参赛者的最终成绩均由其最后一次提交的成绩决定。计时器到期后,比赛结束,Mooctest将不再接受新的提交。对于比赛组织者来说,Mooctest 提供了一个Web 界面来管理和监控比赛,显示所有参赛者的实时分数及其统计数据,例如平均值、中位数和标准差。
源程序
在为源程序生成测试用例之前,参赛者必须了解其规范和源代码。我们使用四个复杂性指标(代码行数(LOC)、分支数、平均方法复杂性(AMC) 和平均块深度(ABD)。从GitHub 和SourceForge 选择开源程序用于STC。这些程序的复杂性在LOC、分支数、AMC和ABD方面与我们在南京大学软件测试课程中使用的程序类似。
表1列出了STC 2016和STC 2017中使用的源程序的四个复杂性指标的值。
评估标准
在STC 2016和STC 2017中,我们使用业界普遍要求的分支覆盖标准来评估生成的测试用例的质量。我们还使用突变评分(已在学术界广泛使用)来评估和排名参赛者。在突变测试中,突变是从原始程序派生出的错误程序。当原始程序和变体在同一测试用例中执行但行为不同时,它将被杀死。一旦针对原始程序和突变体完成测试执行,突变分数的计算方式为杀死的突变体总数除以生成的所有突变体数量。
受之前单元测试竞赛的启发,我们结合分支覆盖率和突变分数得出以下排名方程:
其中P代表源程序,coveragebranch和scoremutation分别指存档分支的覆盖率和变异分数,nump指每次比赛的源程序总数,其中和是权重。
除了STC 2016的预赛(排名方程中不包括突变分数)外,我们的排名系统中应用了分支覆盖率和突变分数,和均为0.5。
使用从大赛收集的数据进行的实证研究
软件测试竞赛可以为我们的社区做出重要贡献,因为我们可以使软件测试及其技术变得更好。我们创建了一个数据存储库,即软件测试竞赛数据存储库(STCDR),网址为http://www.iselab.cn/contest/data/。利用STCDR 的数据,我们进行了一项实证研究来回答两个研究问题。
› 单元测试中的分支测试覆盖率和突变分数之间是否存在很强的相关性?
› 班级级别测试的顺序对单元测试的有效性有影响吗?
1.分支测试的覆盖率与单元测试中的突变得分是否有很强的相关性?
研究15-17 分析了分支覆盖率和突变分数之间的相关性。我们使用来自九个源程序的套件中的846 个测试用例进行了分析。
图1 显示了每个源程序的突变分数和分支覆盖率的散点图,其中一条直线表示趋势。我们观察到所有主题项目的分支覆盖率和突变分数之间存在正相关。我们使用SPSS 软件计算PC 系数,以测量每个受试者程序的分支覆盖率和突变分数之间的线性相关性。详细信息如表2所示。
前两列描述了源程序及其对应的PC。在七个源程序中,我们观察到中度或强正相关性(PC0.40)19。与其他源程序不同,在两个源程序(CMD 和SuffixArray)中,相关性为正但较弱。我们手动检查了这两个源程序以及参赛者生成的测试套件,并将它们与其他源程序进行了比较。我们发现CMD 的所有分支都出现在52 种方法中的7 种中。换句话说,剩下的45个CMD方法没有任何分支。结果,突变得分和分支覆盖率之间的相关性被削弱,因为它们中的任何一个都可以独立实现。这与我们的结果一致,如图1(e) 所示。关于SuffixArray,我们发现竞争对手很少杀死某些突变,这也削弱了相关性。由于我们在所有源程序中使用了相同的变异运算符,这表明SuffixArray 对于参赛者来说更加困难。为了确定观察到的相关性是否具有统计显着性,我们应用了配对Wilcoxon 检验和双尾备择假设。第三列显示有效值。所有测试的p 值范围为0.141 至0.001。因此,我们可以接受替代假设,即分支覆盖率与突变得分呈显着正相关,置信水平至少为0.859。
2.类级别的测试顺序是否会对单元测试的有效性产生影响?
类级测试排序可以减少测试存根的数量并提高测试效率。这就提出了一个有趣的问题:测试顺序是否对测试有效性有影响。使用来自GitHub 等开源存储库的数据面临的挑战是,测试生成所花费的时间可能会影响测试的有效性。例如,给定两个测试套件由具有相似测试技能和领域知识的两个测试人员生成,一个合理的假设是花费更多时间生成的测试套件可能会取得更好的结果。由于我们不知道测试生成花费了多少时间,因此评估可能有偏差。使用我们竞争对手的数据可以减少这种威胁,因为每个竞争对手在测试生成上花费的时间几乎相同。
例如,考虑一个具有名为A、B、C 和D 的四个类的程序以及图2 中所示的测试套件。在这种情况下,PTSALPHA(ASC) 为(A,B,C,D),TS测试套件的组成是(A,B,C)。请注意,由于B 不是断言的参数,因此B 不被视为在第5 行经过测试。因此,我们决定使用升序字母顺序,因为TS 是TS 和PTSALPHA (ASC) 的唯一元素之间的最长公共子序列)。关于前向依赖测试顺序,假设A和B依赖于C,而D没有依赖。在这种情况下,
›TS 是(A、B、C)。 TS 的所有长度为2 的子序列为[(A,B),
(A,C),(B,C)]。
为了准确测量测试顺序,我们使用了STC2017 预赛选手的数据,他们只编写了一个JUnit 类,并为每个源程序提供了一个测试函数。我们进行了10 次分析以获得平均结果,以减少随机引入的偏差。结果如表3所示。
结果表明,虽然按类名的字母顺序(由EclipseIDE 提供)是首先呈现给参赛者的顺序,但它并不是最流行的测试顺序。近30%的参赛者在比赛过程中选择了著名的“先回答最简单或最难的问题”的考试策略。大约25% 的参赛者根据其依赖项测试了源程序,其中前向依赖项测试顺序更受欢迎。这表明,如果参赛者在测试某个类别(例如,A 类)时发现参考类别(例如,B 类),那么他们很可能会在A 类之后再对B 类进行测试。此外,一小部分参赛者青睐基于关系的秩序。
观察和经验
通过举办软件测试竞赛,可以提高学生的软件测试技能,也可以为软件测试和工程研究收集真实的测试数据。
突变测试已被提出来根据突变分数来衡量测试用例的故障检测强度。然而,由于突变测试的执行成本很高,因此可能不可行。我们使用846 个手动创建的测试套件进行的分析显示,分支覆盖率和突变分数之间存在显着的中度到高度正相关。这表明当突变测试不可行时,分支覆盖仍然可以作为替代方案。
用户评论
看了这篇关于软件测试竞赛的观察和经验,学到了很多实用的技巧,真心感谢分享!
有18位网友表示赞同!
软件测试竞赛的观察和经验,对我来说简直是救星,太有用了。
有5位网友表示赞同!
这篇文章让我对软件测试有了更深的认识,特别是那些经验分享,太棒了!
有18位网友表示赞同!
软件测试竞赛的观察和经验,对于新手来说真的很有帮助,感谢分享。
有17位网友表示赞同!
看了软件测试竞赛的观察和经验,感觉自己的技能提升了一大截。
有5位网友表示赞同!
文章中提到的软件测试竞赛的经验,我觉得非常实用,谢谢分享。
有20位网友表示赞同!
软件测试竞赛的观察和经验,让我看到了测试领域的广阔天地。
有7位网友表示赞同!
这篇文章让我对软件测试有了新的理解,特别是那些实战经验,太有用了。
有8位网友表示赞同!
软件测试竞赛的观察和经验,对于想要从事测试工作的人来说,简直是必读!
有20位网友表示赞同!
感觉作者在软件测试竞赛的观察和经验上真的很用心,每个点都讲得非常详细。
有7位网友表示赞同!
软件测试竞赛的观察和经验,让我对测试工作有了新的期待,感谢分享。
有9位网友表示赞同!
这篇文章让我对软件测试竞赛有了全新的认识,特别是那些实战技巧,太实用了。
有6位网友表示赞同!
软件测试竞赛的观察和经验,对于想要提升自己的人来说,真的很有借鉴意义。
有10位网友表示赞同!
看完软件测试竞赛的观察和经验,感觉自己离成为测试高手又近了一步。
有9位网友表示赞同!
文章中提到的软件测试竞赛经验,让我意识到自己在测试领域还有很多需要学习和提升的地方。
有8位网友表示赞同!
软件测试竞赛的观察和经验,让我看到了测试工作的重要性和挑战性,太有启发了。
有15位网友表示赞同!
这篇文章让我对软件测试竞赛有了新的理解,同时也让我对自己的测试技能有了更高的要求。
有7位网友表示赞同!
软件测试竞赛的观察和经验,让我意识到测试工作不仅仅是找bug,更是一项创造性的工作。
有12位网友表示赞同!
读完软件测试竞赛的观察和经验,感觉自己的测试思维得到了很大的启发和提升。
有16位网友表示赞同!