说明:收录全网最新的团体标准 提供单次或批量下载
(19)中华 人民共和国 国家知识产权局 (12)发明 专利申请 (10)申请公布号 (43)申请公布日 (21)申请 号 202111651709.4 (22)申请日 2021.12.3 0 (71)申请人 大连理工大 学 地址 116024 辽宁省大连市甘井 子区凌工 路2号 (72)发明人 江贺 陈乐 周志德 任志磊  (74)专利代理 机构 大连理工大 学专利中心 21200 代理人 温福雪 (51)Int.Cl. G06F 11/36(2006.01) G06F 8/41(2018.01) G06N 3/04(2006.01) G06N 3/08(2006.01) (54)发明名称 一种基于深度学习的JS转译器缺陷检测方 法 (57)摘要 本发明属于软件测试技术领域, 尤其涉及一 种用于检查JS转译器缺陷的技术, 具体为一种基 于深度学习的JavaScript转译器缺陷检测方法。 本发明方法可以对JavaScript转译器进行缺陷 检测, 通过深度学习学习测试用例的语 法特性并 生成新的测试用例, 避免了以往检测过程中需要 开发人员手动编写测试用例或传统方法生成大 量无用的语 法盲的测试用例, 大大的节省了时间 的同时提高了测试效率。 权利要求书2页 说明书6页 附图1页 CN 114385491 A 2022.04.22 CN 114385491 A 1.一种基于深度学习的JS转译器缺陷检测方法, 其特 征在于, 具体步骤如下: 步骤1: 按照关键词搜索法收集GitHub上指定语法的代码库 通过关键字搜索法, 使用GitHub提供的API按照star数量从多到少收集语料库; 然后使 用JS引擎将JS文件中引入的外部模块导入到 当前文件中以避免引用错误, 最后使用代码静 态检查工具进 行语法检查, 筛选出语法正确的代码保存到语料库中; 语法检查分为两遍, 第 一遍找到符合指定语法标准的代码文件, 第二遍从第一遍检查后的文件中找到语法正确的 代码文件; 步骤2: 对语料库进行 预处理 首先将JS测试用例转换为AST, 再统一修改标记名; 标记名包括函数名、 类名、 变量名和 属性名, 修改变量名和属性名的时候略过JavaScript的保留字和内置函数, 然后将字符串 变量统一修改为 “string”; 对于JS中能将 字符串内容作为一般JS脚本执行eval函数进行特 殊处理, 将eval函数的字符串参数, 提取成单独的代码段插入原有的程序中; 其次将AST上 的注释内容删除, 最后将AST再转换为JS程序; 步骤3: 训练模型 使用LSTM进行训练, LSTM模型需要将每个训练文本转换为一个整数序列作为神经网络 的输入; 为此, 首先需要构建一个词汇表, 通过在词汇表中查找标记, 将 每个指令、 常量和变 量映射为整 数; 使用字节对编码标记 化方法构建词汇表, 具体为: 首先计算训练数据中每个 单词的频率, 然后根据单词 频率将每个单词分成块或子单词; 最终将每个子词或标记映射 到要存储在词汇表中的整数; 在构建成功词汇表后, 将JS程序一一映射为整数序列来更新 LSTM网络, 得到训练后的模型; 步骤4: 检测是否达到测试时间限制; 如果没有达到, 则转到步骤5, 使用深度学习模型 指导测试用例生成; 若已达 到, 则停止测试; 其中, 测试时间限制可由测试人员根据需求进行设置, 不包含步骤1 ‑3中构建语料库和 训练模型的时间; 步骤5: 生成测试用例: 通过加载训练后的模型生成新的代码片段; 从现有语料库选定 包含不同语法特性的短小代码片段作为样本头输入到模型中, 然后要求深度学习网络根据 这些字符串生成下一个令牌; 采用top ‑k采样方案, 从top ‑k令牌中随机选择一个令牌; 然后 将生成字符追加 到现有字符并作为下一轮网络更新的输入; 当花括号 “{”和“}”匹配, 或语 言模型生成专用终止 符号“EOF”, 或合成程序的字数超过初始设置的最长字 符阈值时, 该生 成过程终止; 对于生成的测试用例进行静态语法检查, 去除完全不包含指定语法的测试用 例和包含错误语法的测试用例; 步骤6: 使用转译器转译测试用例: 在转译过程中, 如果转译器报错, 收集报错信息, 错 误信息的首行记录了bug类型和bug内容, 以此作为索引值, 触发bug的测试用例作为索引内 容, 记录在bug字典中; 步骤7: 语法检测: 对于成功转换的测试用例, 使用静态语法检查工具来检查代码, 如果 检查结果中包括了语法规范错误的报错信息, 证明转译器未能正确地将测试用例转换为指 定语法的代码, 将此类报错信息作为索引值, 测试用例作为索引内容载入bug字典中; 步骤8: 语义检测: 对于转换后的代码, 转译器可能在转换过程中改变代码的语义, 需要 使用JS引擎等运行转换前后代码, 比较转译语义; 如果在转译 前后代码的语义不同, 则可能权 利 要 求 书 1/2 页 2 CN 114385491 A 2转译器中包 含bug; 并以语义 转换错误作为索引值, 测试用例作为索引内容载入bug字典中; 步骤9: 约简测试用例: 在抽象语法树的层次上对测试用例进行缩减; 具体来说, 借助抽 象语法树转换工具将测试用例转换为抽象语法树, 以非终结符为界定单元将代码分割为一 个个代码块, 如果删除某个代码块不影响bug触发则证明该代码块可以被缩减, 最后得到一 个能够触发bug的最小代码块。 2.根据权利要求1所述的一种基于深度学习的JS转译器缺陷检测方法, 其特征在于, 步 骤8中, 采取差分测试来进行判断转译器是否在转换 过程中改变代码的语义, 流 程如下: 定义一个标准集合E, 标准e1,e2...en, 转译器集合T, 其中转译器t1,t2...tn, 转译器t1,t2…tn, 将e1标准的源代码o1分别转换为符合e2语法规范的代码d1,d2…dn, 再运行o1和d1,d2…dn, 通过对比执行结果来判断转译器是否改变了语义, 包括以下两种情 况; 情况a: d1,d2…dn‑1的执行结果和o1的执行结果一致, dn执行结果和o1的执行结果不同, 认为tn 的转译过程是包 含bug的, 则将tn转译后语义 不一致bug及其测试用例载入bug字典中 情况b: d1,d2…dn执行结果一致, 和o1执行结果不同, 认为这是转译工具普遍认为的转译方式, 是不同语法的固有差异导 致转译前后的语义无法完全一 致, 不载入bug字典; 在运行转译结果 时要首先排除包含有运行时代码的测试用例, 运行时代码包括打印时 间、 随机数和打印运行时信息 。权 利 要 求 书 2/2 页 3 CN 114385491 A 3

.PDF文档 专利 一种基于深度学习的JS转译器缺陷检测方法

文档预览
中文文档 10 页 50 下载 1000 浏览 0 评论 309 收藏 3.0分
温馨提示:本文档共10页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
专利 一种基于深度学习的JS转译器缺陷检测方法 第 1 页 专利 一种基于深度学习的JS转译器缺陷检测方法 第 2 页 专利 一种基于深度学习的JS转译器缺陷检测方法 第 3 页
下载文档到电脑,方便使用
本文档由 人生无常 于 2024-03-19 03:54:59上传分享
友情链接
站内资源均来自网友分享或网络收集整理,若无意中侵犯到您的权利,敬请联系我们微信(点击查看客服),我们将及时删除相关资源。