Page 75 - 《软件学报》2026年第2期
P. 75

554                                                        软件学报  2026  年第  37  卷第  2  期


                                                                 错位数量
                                            语法结构相似度 = 1−                                              (1)
                                                             未替换部分词语总数
                    排序模块只对测试输入打分而不用于排除不合理的测试输入的原因是在一些句子结构中, 对名词词组的替换
                 会导致句子中其他部分的依存关系类型或者依存关系出现变化, 但这种变化有一部分实际上是无害的, 并不导致
                 句子语义发生变化. 所以       QALT  为了尽可能地保障句子语法和语义的一致性, 在所有候选测试输入中选择一致性
                 得分最高的测试输入作为最优测试输入.
                    算法  3  展示了基于依存句法分析的选择策略. QALT            使用原始测试输入的语法结构作为模板, 将变异后的测
                 试输入作为候选测试输入. 首先, QALT          使用描述性语句生成候选测试输入             (第  4  行). 接着, QALT  分别提取原始
                 测试输入的句子结构和描述性语句结构              (第  5  行) 以及候选测试输入的变异部分结构和未变异部分结构                (第  6  行).
                 然后, QALT  通过对比二者的变异部分结构是否一致, 如果不一致则排除当前测试输入                        (第  7  行). 排除不符合规范
                 的测试输入之后, QALT      计算变异前后测试输入句子结构的相似度, 并选出其中未变异部分结构变化最小的测试
                 输入  (第  8–12  行). 需要注意的是, 未变异部分结构的相似度通过计算依存关系类型和依存关系指向的差异作为其
                 一致性得分结果, 计算过程中并不包括任何的变异部分结构. 筛除模块已经对变异部分做过检查, 排序模块的再次
                 检查只会增加时间开销且不会带来任何额外收益.
                 算法  3. 基于依存句法分析的选择策略.

                 输入: t: 给定的测试输入; statements_list: 候选的描述性句子列表;
                 输出: statements_list 中最合适的句子  s*.

                 1.  max := −∞;
                 2. s*  := ∅;
                 3. foreach s in statements_list do
                 4.  t' = apply_mutation(t, s);
                 5.  unmutated_structure, mutated_structure = dependency_parsing(t, s);
                 6.  unmutated_structure', mutated_structure' = dependency_parsing(t', s);
                 7.  if mutated_structure == mutated_structure' then
                 8.   sim_score = structure_sim(unmutated_structure, unmutated_structure');
                 9.   if sim_score > max then
                 10.    max = sim_score;
                 11.    s* = s;
                 12.  end
                 13. end
                 14. end
                 15. return s*

                  5   实 验

                    为了验证本文提出的逻辑引导蜕变测试技术                QALT  的有效性, 我们提出了以下       3  个关键研究问题.
                    问题  1: QALT  对基于大型语言模型的智能问答系统的揭错能力如何?
                    问题  2: QALT  中每个关键组件是否有助于其整体有效性?
                    问题  3: QALT  生成的测试输入是否有助于改进智能问答系统和修复缺陷?
                    研究问题    1  的目的是评估    QALT  在面对当前基于大型语言模型的智能问答系统的揭错能力如何, 并给出量
                 化的评估结果. 研究问题       2  的目的是验证    QALT  中每个组件的有效性, 需要分别验证变异组件选择策略、3                   种不
   70   71   72   73   74   75   76   77   78   79   80