以破而立:模糊测试 Kotlin 编译器 | 研究博客

主要观点:研究对进步和创新至关重要,JetBrains 重视科学和市场研究,尤其关注 Kotlin 编译器质量,通过模糊测试来发现传统测试可能遗漏的漏洞。
关键信息

  • 编译器在软件开发中至关重要,传统测试技术虽重要但可能遗漏特定情况下的细微漏洞,模糊测试可弥补这一不足。
  • 模糊测试基于向程序输入大量随机或意外数据以发现其是否崩溃或产生错误结果,其核心是探索软件处理极限情况。
  • 介绍了生成式模糊测试和基于变异的模糊测试两种更高级的模糊类型及其优缺点,还对比了不同模糊类型对编译器不同部分的覆盖和探索深度。
  • 展示了 Kotlin 编译器模糊测试的实例,包括发现的各种漏洞,如类型参数中的保留标识符导致的编译崩溃、if表达式返回类型错误等。
  • 与 TU Delft 的 SERG 团队合作,将生成式模糊测试视为进化算法问题,开发了进化生成式模糊测试方法,通过遗传算法模拟生物进化过程来生成和筛选代码片段以发现更多漏洞。
  • 列出了模糊测试面临的挑战及可能的解决方案,如维护代码有效性、确保良好的编译器代码覆盖、定位故障、避免重复等,并强调 Kotlin 编译器团队在不断改进模糊测试能力。
    重要细节
  • 介绍了模糊测试的历史,如 1950 年代程序员用垃圾卡片测试程序,1983 年 Steve Capps 开发用于测试 MacWrite 和 MacPaint 应用的工具“The Monkey”,1988 年 Barton Miller 提出模糊测试术语等。
  • 详细阐述了模糊测试的基本原理,包括输入数据生成器、被测软件和参考模型三个组件,以及重复测试以确保输入足够多样化的过程。
  • 说明进化生成式模糊测试中遗传算法的基本概念,如初始种群生成、适应度函数评估、变异和重组等过程,并将其应用于 Kotlin 编译器模糊测试中。
  • 给出了不同模糊测试方法在发现不同类型漏洞方面的效果,如随机搜索在检测内存错误等方面有效,两种遗传算法在检测重载冲突等细微问题方面成功。
  • 列出了关于模糊测试的多个资源,如与 TU Delft 团队的合作论文、关于 Kotlin 编译器模糊测试输入减少的文章、《模糊测试书》、《模糊测试:初学者指南》和《编译器测试综述》等。
阅读 15
0 条评论