Page 103 - 《软件学报》2025年第7期
P. 103

3024                                                       软件学报  2025  年第  36  卷第  7  期


                 编译器缺陷分布随时间的变化情况. 同时, 本文进一步深入分析了                    DL  编译器缺陷的根因、症状、位置三者之间
                 的内在联系情况. 此外, 为了进一步挖掘缺陷检测与修复的特征, 本文对触发                      DL  编译器缺陷的回归测试用例和修
                 复  DL  编译器缺陷的补丁进行了研究.
                    对于缺陷数据的标注结果, 我们识别出             13  个缺陷根因和    6  个缺陷症状. 基于缺陷标注结果的分析, 我们得到
                 了  12  个主要发现, 并为今后的     DL  编译器缺陷检测和调试提供一系列建议. 此外, 基于本文的研究发现, 设计了一
                 款高效的    DL  编译器测试工具     CfgFuzz. 经过  24 h  的测试, CfgFuzz 检测到了  8  个新的  TVM  缺陷, 其中  7  个缺陷
                 已经被开发者确认或修复. 该实验结果进一步验证了本文研究发现的有效性.
                    本文主要贡献如下.
                    ● 针对  DL  编译器缺陷展开了全面的实证研究, 研究包含             3 款  DL  编译器中  613 个缺陷数据, 并针对缺陷症状、
                 根因、位置随时间变化情况、缺陷不同因素的内在联系、缺陷补丁与触发缺陷的回归测试用例的特征这                                     6  个问
                 题展开调研.
                    ● 获得了   12  条主要研究发现, 以全面了解深度学习编译器缺陷及其演变过程, 并为后续的                       DL  编译器缺陷检
                 测、定位与修复等研究提供了一系列有益的启示.
                    ● 设计了一款概念验证工具         CfgFuzz, 检测到了  8  个之前未知的   TVM  缺陷, 其中  7  个缺陷已被确认或修复.
                    ● 开源了数据集和      CfgFuzz 源码, 促进未来针对    DL  编译器缺陷检测等相关工作.
                    本文第   1  节总结针对   DL  编译器缺陷实证研究的相关工作. 第           2  节介绍  DL  编译器的背景知识. 第     3  节介绍
                 数据收集和标注的方法与本文关注的研究问题. 第                4  节回答研究问题并探讨未来的研究方向和潜在解决方案. 第
                 5     节介绍启发与应用. 第  6  节分析研究效度威胁. 第     7  节总结全文.

                 1   相关工作

                    目前, 对缺陷的实证研究工作得到了越来越多的关注. 与本文最相关的工作是                         Shen  等人  [8] 对  DL  编译器缺陷
                 的实证研究. Shen   等人的研究仅仅关注了        DL  编译器发展初期的缺陷特征. 作为一款新型系统软件, DL                编译器近
                 年来经历了高速迭代更新, 已有的研究结论是否适用当前主流                    DL  编译器仍有待验证. 此外, Shen     等人的研究只关
                 注了缺陷本身的特性, 缺少从回归测试用例和补丁的角度分析缺陷特征的研究. 为此, 本文收集当前                              3  款主流编译
                 器中的   613  个缺陷, 并针对缺陷症状、根因、位置随时间变化情况, 缺陷不同因素的内在联系, 缺陷补丁与触发缺
                 陷的回归测试用例的特征等          6  个问题展开广泛且深入地研究.
                    此外, 存在较多针对其他类型软件系统的缺陷研究. Sun 等人                 [16] 对  GCC 和  LLVM 的各种缺陷的持续时间、
                 优先级、修复代码、测试用例和位置等特征进行统计和研究. Zhou                    等人  [17] 对  GCC 和  LLVM 优化相关的缺陷进
                 行了深入的研究. Humbatova 等人     [18] 对深度学习程序的缺陷类别展开了深入研究. Garcia 等人           [19] 对  TensorFlow 框
                 架内部的缺陷进行了研究, Chen        等人  [20] 进一步对  4  款  DL  框架的缺陷展开了更全面的研究并评估了已有测试方
                 法对  DL  框架中缺陷的检测效果. Islam     等人  [21] 及  Zhang  等人  [22] 对深度学习程序  (例如, TensorFlow [23] 程序) 中的
                 缺陷进行了研究. Lu     等人  [24] 对并发错误进行了实证研究. Di Franco     等人  [25] 对数值错误进行了实证研究. Han      等
                 人  [26] 研究了高度可配置软件系统中的性能错误, Wan          等人  [27] 对区块链系统的错误进行了表征.
                    与其他类型软件系统的缺陷研究不同, 本文的研究对象是                    DL  编译器中的缺陷. 正如前文介绍, DL        编译器与
                 传统编译器    (如  GCC  和  LLVM) 具有不同的特征. 此外, DL    编译器是深度学习的重要基础设施之一, 与               DL  程序
                 和  DL  框架有着显著不同的功能. 除此之外, 本文进一步分析了                DL  编译器缺陷随时间的演化特征并关注缺陷的
                 补丁和测试用例的特性, 进而从更多的角度分析               DL  编译器的缺陷特征及其演化规律.

                 2   背景知识

                    图  1  显示了 DL 编译器的架构. 编译过程根据功能可以分为              3  个主要阶段. (a) 模型加载阶段: DL    编译器将从
                 各种深度学习库      (例如, PyTorch  [28] 和 Keras  [29] ) 构建的  DL  模型作为输入, 并将它们转换为统一的高级中间表示
   98   99   100   101   102   103   104   105   106   107   108