Page 94 - 《软件学报》2026年第1期
P. 94

吉品 等: 面向智能软件系统的测试用例生成方法综述                                                         91


                 用例集合的意外充分性范围, 因此同样存在两种对应的计算方式. SADL                     通过对比测试用例和训练数据的            SA  值,
                 来确定该测试用例相对于训练数据的意外程度.
                    前文所述的测试度量指标主要是面向              CNN  网络, 并不适用于存在回路及网络内部状态转移的                RNN  网络. 因
                 此, Du  等人  [132] 将  RNN  抽象为马尔可夫决策过程模型, 以刻画     RNN  的内部状态与动态行为. 在此基础上, 提出了
                 一套针对有状态深度学习系统的测试度量体系, 包含                 2  个状态级测试覆盖准则和        3  个转换级测试覆盖准则. 状态
                 级测试覆盖指标分别是基本状态覆盖率和               k-step  状态边界覆盖率, 前者主要比较测试输入访问的抽象状态数量与
                 训练阶段的抽象状态数量, 后者主要考察测试输入触发训练阶段从未访问过的抽象状态的情况. 转换级测试覆盖
                 准则针对的是由不同输入触发的时间动态行为, 分别是比较测试和训练阶段抽象转换的基础转换覆盖、为保证后
                 续转换多样性的输入空间覆盖和考虑后续转换范围的加权输入覆盖.
                    由于深度神经网络模型的特性, 基于模型内部神经元输出及状态的测试度量计算通常耗时较长, 可能导致测
                 试效率下降. Ma 等人     [138] 将模型返回的类别预测概率视为评估测试输入挑战性程度的依据, 并据此提出了基于概
                 率的模型不确定性度量指标. 实验结果表明, 与覆盖率度量指标相比, 基于不确定性度量的指标在识别导致分类错
                 误的输入方面表现更优. 且其计算开销更低, 在模型重训练期间也能更快速地提升分类准确性. 类似地, DeepGini
                 仅依赖于   Softmax  层的输出即可计算     Gini 不纯度, 用于预测输入引发分类错误的可能性             [85] . DeepGini 不纯度的设
                 计原理是, 当模型对各类别输出的概率相近时, 测试输入发生分类错误的概率较高. 与需要完整深度神经网络内部
                 信息的覆盖指标相比, DeepGini 仅依赖于输出层向量信息, 因此具有更高的测试效率和更强的可扩展性. 由于测试
                 用例通常具有不同的输出向量, 但可能拥有相同的神经元覆盖率, 因此                      Gini 不纯度相比神经元覆盖率具有更好的
                 区分能力.
                    尽管已有多种衡量测试用例充分性的指标被提出, 但这些指标难以有效评估蜕变测试用例对                                 (metamorphic
                 test case pair, MP) 的多样性, 因而难以进一步明确测试充分性的提升方向. 基于神经元覆盖率的指标主要考虑几
                 个固定的神经元激活状态, 无法细粒度地描述深度神经网络的内部执行状态. 为此, Xie 等人                          [139] 提出了用于度量
                 MP  多样性的指标, 以识别缺陷敏感的          MP, 并采用更细粒度的方法对神经元输出差异建模, 从而获得更精确的内
                 部执行状态表示. 该度量将        MP  中两个测试用例的神经元输出之间的分布差异作为该                   MP  的多样性. 两个测试用
                 例具有较大神经元输出分布差异的            MP  可能覆盖更多不同的深度神经网络执行模式, 例如依赖于更多不同特征的
                 路径, 从而更容易揭示潜在缺陷. 该度量指标不仅能够有效且稳定地促进深度学习测试中缺陷信息的揭示, 还能辅
                 助选择和设计更具效能的蜕变关系.
                    测试用例度量指标常会与测试用例选择方法相结合, 研究者们已将传统的基于覆盖的测试用例选择技术中的
                 基于总覆盖率的选择方法         (coverage-total method, CTM) 和基于附加覆盖率的选择方法    (coverage-additional method,
                 CAM) 用于深度学习模型测试, 实现测试用例优先级排序                [141] . CTM  总是优先选择覆盖率最高的测试用例, 其次是
                 覆盖率第   2  高的测试用例, 以此类推. 对于具有相同覆盖率的测试用例, CTM                 将随机对测试用例进行优先级排序.
                 CTM  的优点在于仅需根据测试用例的覆盖率进行排序, 因而高效且易于实现. CAM                         与  CTM  的不同之处在于,
                 CAM  在选择下一个测试用例时, 会根据已有选择结果的反馈信息进行决策. 它迭代地选择一个可以覆盖更多未覆
                 盖情况的测试用例, 以提升测试场景的多样性. CAM               相比于   CTM  会更加耗时, 每次选择时都需要重新计算剩余
                 未选择测试的覆盖率信息. 除此之外, 也有一些研究者针对深度学习模型测试常用的蜕变测试理论设计了测试用
                                     [142]
                 例选择方法. 例如, Arreita     提出了一种基于多目标搜索的测试用例选择方法用于深度学习系统的蜕变测试.
                 蜕变测试需要对多个测试用例           (种子测试用例和基于它生成的新测试用例) 的输入和输出进行断言, 因此会更加
                 耗时. 为了解决该问题, 该方法通过选择置信度低的对应种子测试用例来选出具有高概率违反蜕变关系的新测试
                 用例.
                  8.2   测试用例生成方法
                    由于本文不涉及对抗性样本生成, 所以下文所提到的方法都是将测试目标定为最大化选定的模型度量指标,
                 或者使用特定的方法对种子测试用例进行变换去模拟深度学习模型可能会处理到的输入数据, 以扩大测试覆盖的
   89   90   91   92   93   94   95   96   97   98   99