[论文解读] A Factorial Experiment on Scalability of Search Based Software Testing
本研究采用因子实验设计,比较了在通过语法演化(Grammatical Evolution)生成的复杂度逐步提升的Java程序中,基于遗传算法(GA)的搜索式软件测试(SBST)与随机测试的表现。结果表明,随着代码复杂度的增加,GA在实现更高语句覆盖率和分支覆盖率方面始终优于随机测试,证明了GA在自动化测试数据生成方面的更高效率。
Software testing is an expensive process, which is vital in the industry. Construction of the test-data in software testing requires the major cost and to decide which method to use in order to generate the test data is important. This paper discusses the efficiency of search-based algorithms (preferably genetic algorithm) versus random testing, in soft- ware test-data generation. This study differs from all previous studies due to sample programs (SUTs) which are used. Since we want to in- crease the complexity of SUTs gradually, and the program generation is automatic as well, Grammatical Evolution is used to guide the program generation. SUTs are generated according to the grammar we provide, with different levels of complexity. SUTs will first undergo genetic al- gorithm and then random testing. Based on the test results, this paper recommends one method to use for automation of software testing.
研究动机与目标
- 评估在不同代码复杂度下,基于遗传算法(GA)的搜索式软件测试(SBST)与随机测试在可扩展性和效率方面的表现。
- 利用语法演化(GE)自动生成具有可控且逐步增加复杂度的被测软件(SUTs)。
- 比较GA与随机测试在低、中、高复杂度程序中实现高语句覆盖率和分支覆盖率的有效性。
- 识别自动化测试生成与执行中的局限性,特别是与程序语义、循环结构以及代码插桩开销相关的问题。
提出的方法
- 采用因子实验设计,因素包括测试技术(GA vs. 随机测试)、代码复杂度(低、中、高)以及覆盖率目标(语句覆盖率和分支覆盖率)。
- 使用语法演化(GE)通过自定义BNF语法自动生成具有预设复杂度等级的Java程序。
- 对每个生成的SUT分别使用GA和随机测试进行测试,以测量语句覆盖率和分支覆盖率的百分比。
- 在3个复杂度等级(75、150、300条语句;25、50、100个分支)下进行测试,每个复杂度等级包含10个程序。
- 通过插桩技术追踪覆盖率,但该方法引入了性能开销,尤其在嵌套或复杂循环结构中更为明显。
- 通过循环退出条件和BNF约束,缓解了无限循环、越界值和不可达条件等问题。
实验结果
研究问题
- RQ1在代码复杂度逐步提升的程序中,遗传算法(GA)在实现语句覆盖率和分支覆盖率方面的表现与随机测试相比如何?
- RQ2通过语法演化(GE)实现的自动化程序生成,在多大程度上支持SBST中可扩展且可重复的实验?
- RQ3当应用于自动生成的复杂Java程序时,GA和随机测试的主要局限性是什么?
- RQ4不可达条件、无限循环和数据溢出等因素如何影响SBST中的测试覆盖率和工具可靠性?
主要发现
- 在所有复杂度等级下,遗传算法(GA)在实现语句覆盖率和分支覆盖率方面均显著优于随机测试。
- 在高复杂度等级(300条语句,100个分支)下,GA实现的覆盖率远高于随机测试,GA的覆盖率百分比持续高于90%,而随机测试则低于70%。
- 随机测试在执行时间上更快,但在复杂代码上无法实现有意义的覆盖率,因此在实际测试中效果不佳。
- 语句数量被证明是衡量代码复杂度的不良指标;条件判断和控制流结构对测试难度的影响远大于语句数量。
- 插桩和循环处理(尤其是退出循环机制)引入了性能瓶颈,尤其在复杂或嵌套结构中,限制了完整覆盖率的实现。
- 基于BNF的GE程序生成方法实现了可控且可扩展的实验,但同时也带来了控制语义行为和避免病态代码的挑战。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。