24.10.2014 Views

一种基于信息检索技术识别重复缺陷模式的方法 - 北京大学软件工程 ...

一种基于信息检索技术识别重复缺陷模式的方法 - 北京大学软件工程 ...

一种基于信息检索技术识别重复缺陷模式的方法 - 北京大学软件工程 ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

一 种 基 于 信 息 检 索 技 术 识 别 重 复 缺 陷 模 式 的 方 法<br />

吴 倩<br />

王 千 祥<br />

( 北 京 大 学 信 息 科 学 技 术 学 院 软 件 研 究 所 北 京 100871)<br />

( 高 可 信 软 件 技 术 教 育 部 重 点 实 验 室 )<br />

摘 要 缺 陷 模 式 是 对 常 见 代 码 缺 陷 的 统 一 描 述 。 缺 陷 模 式 库 收 集 这 些 模 式 , 并 为 基 于 缺 陷 模 式 的 静 态 代 码 分 析 工 具 的 研 发 提 供 支<br />

持 。 当 用 户 向 缺 陷 模 式 库 添 加 新 缺 陷 模 式 时 , 经 常 发 生 重 复 提 交 的 现 象 , 造 成 库 中 缺 陷 模 式 的 冗 余 。 本 文 提 出 了 一 种 基 于 信 息 检 索<br />

技 术 识 别 重 复 缺 陷 模 式 的 方 法 , 通 过 计 算 自 然 语 言 信 息 的 相 似 度 , 发 现 语 义 相 近 的 缺 陷 模 式 。 实 验 表 明 , 该 方 法 能 在 节 省 用 户 和 审<br />

核 员 精 力 的 同 时 , 有 效 地 减 少 重 复 缺 陷 模 式 的 数 量 。 此 外 , 本 文 还 对 缺 陷 模 式 的 表 示 形 式 进 行 了 设 计 , 以 有 利 于 降 低 重 复 缺 陷 模 式<br />

的 数 量 。<br />

关 键 词 重 复 , 缺 陷 模 式 , 相 似 度 , 自 然 语 言 处 理 , 信 息 检 索<br />

中 图 法 分 类 号 :TP311 文 献 标 识 码 :A<br />

An Approach to Detect Duplicate Defect Patterns based on Information Retrieval<br />

WU Qian, WANG Qian-xiang<br />

(Institute of Software, School of Electronics Engineering and Computer Science, Peking University, Beijing, 100871, China)<br />

(Key laboratory of High Confidence Software Technologies, Ministry of Education, China)<br />

Abstract Defect Pattern is a unified description for common code defects. By collecting these patterns, Defect Pattern Repository<br />

provides support for the research and development of Static Analysis Tools based on Defect Patterns. When new patterns are added,<br />

duplicate submission often occurs which leads to a redundancy in the repository. This paper introduces an approach to detect potential<br />

duplicates using information retrieval based on natural language processing. Evaluation indicates that the approach could effectively<br />

decrease the number of duplicates while remarkably reducing the time and effort the users or triagers spend on each pattern. This paper<br />

further researched the composition of defect patterns, which is also instrumental to reduce the number of duplicates.<br />

Key words Duplicate, Defect Pattern, Similarity, Natural Language Processing, Information Retrieval<br />

1 引 言<br />

一 条 缺 陷 模 式 至 少 包 含 这 几 个 部 分 : 名 称 、 描 述 、 错 误<br />

和 正 确 代 码 示 例 。 缺 陷 名 称 是 对 缺 陷 模 式 的 概 括 ; 缺 陷 描 述<br />

软 件 缺 陷 是 导 致 软 件 质 量 下 降 、 软 件 成 本 增 加 等 问 题 的 则 更 详 细 的 说 明 了 缺 陷 发 生 的 原 因 、 症 状 、 后 果 等 具 体 信 息 ;<br />

重 要 因 素 。 缺 陷 模 式 是 对 常 见 代 码 缺 陷 的 统 一 描 述 : 任 何 满 错 误 代 码 和 正 确 代 码 分 别 从 正 反 两 面 给 出 代 码 的 示 例 。 此 外 ,<br />

足 了 它 所 描 述 的 引 发 条 件 的 程 序 都 会 引 入 该 缺 陷 。 根 据 缺 陷 使 用 不 同 的 编 程 语 言 所 引 入 的 软 件 缺 陷 不 同 , 因 此 缺 陷 模 式<br />

模 式 的 内 容 , 可 以 将 其 分 为 两 类 :“ 类 库 使 用 类 型 ” 的 和 “ 语 也 必 须 是 针 对 特 定 编 程 语 言 的 。 本 文 的 研 究 工 作 则 主 要 针 对<br />

言 层 面 类 型 ”。 前 者 描 述 程 序 员 在 使 用 API 时 可 能 会 引 入 程 JAVA 语 言 的 缺 陷 模 式 。<br />

序 的 缺 陷 , 后 者 仅 与 编 程 语 言 本 身 相 关 。<br />

缺 陷 模 式 的 收 集 对 基 于 缺 陷 模 式 的 静 态 代 码 分 析 工 具 的<br />

下 面 是 一 条 “ 类 库 使 用 类 型 ” 的 缺 陷 模 式 :<br />

研 发 有 着 明 显 的 意 义 。 研 发 人 员 往 往 使 用 开 放 的 缺 陷 模 式 库<br />

缺 陷 名 称 : 忽 略 String.replace() 方 法 的 返 回 值 。<br />

来 收 集 缺 陷 模 式 。 由 于 允 许 任 何 人 提 交 缺 陷 模 式 , 很 可 能 多<br />

缺 陷 描 述 : 忽 略 String.replace() 方 法 的 返 回 值 , 以 为 方 个 用 户 会 提 交 本 质 上 相 同 或 者 相 似 的 缺 陷 模 式 , 造 成 库 中 缺<br />

法 对 传 入 参 数 本 身 进 行 操 作 。<br />

陷 模 式 的 冗 余 。 目 前 , 消 除 重 复 缺 陷 模 式 的 方 法 有 两 种 。 一<br />

典 型 错 误 代 码 :<br />

种 是 在 提 交 缺 陷 模 式 之 前 , 用 户 做 一 系 列 查 询 , 以 确 定 自 己<br />

String aString = "test";<br />

要 提 交 的 缺 陷 模 式 还 没 被 提 交 过 。 另 一 种 是 在 审 核 缺 陷 模 式<br />

aString .replace('s', 'x');<br />

时 , 审 核 员 用 缺 陷 模 式 中 出 现 的 词 来 查 询 , 以 发 现 重 复 的 缺<br />

if("text".equals(aString)){…}<br />

陷 模 式 并 做 上 标 记 。 这 两 种 方 法 都 要 求 用 户 ( 或 审 核 员 ) 投<br />

正 确 代 码 示 例 :<br />

入 一 定 的 时 间 和 精 力 来 做 搜 索 , 而 搜 索 的 随 意 性 决 定 了 仍 有<br />

String aString = "test";<br />

一 些 重 复 的 缺 陷 模 式 不 能 被 发 现 , 因 而 , 识 别 重 复 缺 陷 模 式<br />

aString = aString .replace('s', 'x');<br />

的 方 法 的 研 究 就 成 为 了 一 个 重 要 的 问 题 。<br />

if("text".equals(aString)){…}<br />

资 助 项 目 : 国 家 重 点 基 础 研 究 发 展 计 划 (973), 项 目 编 号 :2005CB321805; 国 家 高 技 术 研 究 发 展 计 划 (863), 项 目 编 号 :2007AA010301; 国 家 高 技 术 研 究<br />

发 展 计 划 (863), 项 目 编 号 :2006AA01Z175; 国 家 自 然 基 金 项 目 , 项 目 编 号 :60773160。<br />

吴 倩 , 女 (1987-), 硕 士 生 , 主 要 研 究 方 向 为 软 件 工 程 等 ; 王 千 祥 , 男 (1970-), 教 授 , 主 要 研 究 方 向 为 : 软 件 工 程 、 软 件 中 间 件 等 。


2 理 论 背 景<br />

本 文 提 出 的 方 法 使 用 了 基 于 自 然 语 言 处 理 的 信 息 检 索 技<br />

术 , 它 包 括 一 系 列 算 法 和 模 型 , 被 用 于 从 文 本 库 中 检 索 信 息<br />

[4] 。 向 量 空 间 模 型 由 于 其 简 便 和 高 效 而 在 信 息 检 索 中 被 广 泛<br />

使 用 , 基 于 这 种 技 术 的 自 然 语 言 处 理 包 括 三 步 : 分 词 、 建 立<br />

向 量 空 间 模 型 和 相 似 度 计 算 。 分 词 意 味 着 将 一 个 字 符 流 ( 语<br />

句 ), 转 换 成 一 个 单 词 的 序 列 。 随 后 , 利 用 分 词 结 果 对 文 本 建<br />

模 , 将 每 个 文 本 表 示 成 一 个 n 维 向 量 :<br />

D w , w ,..., w (1)<br />

i i1 i2<br />

in<br />

其 中 D i<br />

表 示 第 i 个 文 本 的 向 量 表 示 , n 为 在 所 有 文 本 中<br />

出 现 的 唯 一 的 词 条 的 数 目 , w ij<br />

就 是 第 i 个 文 本 中 出 现 的 第 j<br />

个 词 的 加 权 值 。 对 于<br />

w 的 计 算 , 本 文 使 用 TF-IDF(Term<br />

ij<br />

Frequency-Inverse Document Frequency) 算 法 [7] , 公 式 如 下 :<br />

w tf idf<br />

(2)<br />

ij j j<br />

tf j 表 示 第 j 个 词 在 第 i 个 文 本 中 出 现 的 次 数 , idf j 是 第<br />

j 个 词 的 反 转 文 档 频 率 [7] , 可 由 如 下 公 式 计 算 得 到 :<br />

log DC sum<br />

DC j<br />

<br />

(3)<br />

idf <br />

j <br />

DC sum 为 文 本 的 总 数 ( 文 本 库 的 大 小 ),DC j 为 出 现 第 j<br />

个 单 词 的 文 本 数 目 。<br />

似 度 。<br />

最 后 , 计 算 两 个 向 量 的 夹 角 余 弦 , 即 可 得 两 个 文 本 的 相<br />

3 缺 陷 模 式 表 示 形 式<br />

在 介 绍 重 复 识 别 的 方 法 之 前 , 要 先 对 缺 陷 模 式 的 表 示 形<br />

式 进 行 合 理 的 设 计 , 以 规 范 用 户 提 交 缺 陷 模 式 时 的 输 入 内 容 ,<br />

同 时 辅 助 重 复 识 别 的 算 法 来 降 低 重 复 缺 陷 模 式 的 数 量 。 具 体<br />

来 说 , 设 计 时 要 考 虑 以 下 几 个 因 素 :<br />

(1) 对 比 的 缺 陷 模 式 数 量<br />

研 究 表 明 , 个 体 数 量 越 多 , 查 找 重 复 个 体 的 召 回 率 越 低<br />

[2] 。 通 过 对 缺 陷 模 式 进 行 分 类 , 能 够 减 少 在 重 复 识 别 时 需 要<br />

对 比 的 缺 陷 模 式 的 数 量 。 可 以 从 两 个 角 度 对 缺 陷 模 式 分 类 :<br />

缺 陷 模 式 所 属 平 台 和 缺 陷 模 式 的 内 容 类 型 。 前 者 是 指 缺 陷 模<br />

式 所 描 述 的 缺 陷 在 用 户 使 用 何 种 平 台 或 类 库 编 程 时 会 被 触<br />

发 。 例 如 , 缺 陷 模 式 “hibernate 中 嵌 套 使 用 Transaction 将 导<br />

致 事 务 异 常 ” 的 所 属 平 台 是 Hibernate。 而 缺 陷 模 式 的 内 容 类<br />

型 则 旨 在 对 该 缺 陷 模 式 所 关 注 的 内 容 进 行 分 类 。 例 如 , 缺 陷<br />

模 式 “ 用 = = 或 ! = 比 较 两 个 字 符 串 ” 的 内 容 类 型 为 “ 字 符 串 ”。<br />

(2) 从 语 义 的 角 度 细 分 缺 陷 模 式 所 包 含 的 内 容<br />

基 于 向 量 空 间 模 型 的 信 息 检 索 技 术 主 要 利 用 表 面 词 形 计<br />

算 文 本 相 似 度 , 而 无 法 区 分 语 义 的 不 同 。 例 如 , 当 用 户 把 一<br />

个 缺 陷 的 症 状 和 后 果 都 包 含 在 缺 陷 描 述 中 时 , 自 然 语 言 处 理<br />

并 不 能 区 分 这 些 内 容 , 这 样 所 有 的 信 息 被 混 杂 在 一 起 并 同 等<br />

对 待 , 必 然 会 造 成 信 息 的 流 失 。 此 外 , 研 究 表 明 , 用 户 输 入<br />

信 息 的 不 规 范 会 对 重 复 的 识 别 造 成 干 扰 [2] 。 例 如 , 有 些 用 户<br />

会 在 描 述 中 包 含 代 码 , 显 然 , 当 比 较 一 条 不 包 含 代 码 的 描 述<br />

A 和 一 条 包 含 代 码 的 但 是 描 述 部 分 与 A 完 全 相 同 的 描 述 B<br />

时 , 代 码 的 出 现 会 降 低 这 两 条 描 述 的 相 似 度 。<br />

因 此 , 缺 陷 模 式 应 包 含 如 下 部 分 : 名 称 ( 摘 要 )、 描 述 、<br />

错 误 后 果 ( 严 重 程 度 )、 典 型 错 误 代 码 、 正 确 代 码 示 例 等 。<br />

(3) 突 出 显 示 缺 陷 模 式 的 关 键 属 性<br />

在 话 题 识 别 中 , 提 取 出 人 物 、 地 点 , 可 以 对 区 分 不 同 事<br />

件 提 供 有 力 证 据 [2] 。 同 样 地 , 获 取 缺 陷 模 式 所 关 联 的 对 象 ,<br />

对 于 区 分 不 同 的 缺 陷 模 式 也 大 有 裨 益 。 类 库 使 用 类 型 的 缺 陷<br />

模 式 关 联 的 对 象 就 是 它 的 相 关 类 、 方 法 、 属 性 。 例 如 , 缺 陷<br />

模 式 “ 重 写 的 clone 方 法 没 有 调 用 super.clone()” 的 关 联 对 象<br />

就 是 java.lang.Object 类 的 clone 方 法 。 对 于 语 言 层 面 的 缺 陷<br />

模 式 , 则 很 难 对 所 关 联 的 对 象 做 出 统 一 的 定 义 。 例 如 , 缺 陷<br />

模 式 “ 在 catch 块 中 做 清 理 工 作 ” 就 与 “catch” 相 关 联 , 而<br />

缺 陷 模 式 “++ 操 作 被 覆 盖 ” 的 关 联 对 象 是 “++”。<br />

因 此 , 本 文 采 用 “ 相 关 类 、 方 法 、 属 性 ” 表 示 缺 陷 模 式<br />

所 关 联 的 对 象 , 并 允 许 语 言 层 面 的 缺 陷 模 式 的 这 一 内 容 为 空 。<br />

同 时 , 增 加 “ 关 键 字 ” 来 弥 补 语 言 层 面 的 缺 陷 模 式 无 法 使 用<br />

关 联 对 象 所 造 成 的 信 息 流 失 。 例 如 , 用 户 可 以 把 缺 陷 模 式 “ 在<br />

catch 块 中 做 清 理 工 作 ” 的 关 键 字 写 成 “catch”。<br />

(4) 简 化 用 户 的 输 入<br />

本 文 将 “ 错 误 后 果 ( 严 重 程 度 )” 划 分 成 了 几 个 不 同 等 级 ,<br />

以 便 于 用 户 直 接 选 择 。“ 严 重 程 度 ” 包 括 如 下 几 个 等 级 [8.9] :<br />

导 致 运 行 时 异 常 、 错 误 代 码 、 不 安 全 代 码 、 低 效 代 码 、 可 疑<br />

代 码 、 冗 余 代 码 、 其 他 。<br />

综 上 所 述 , 一 条 缺 陷 模 式 应 包 含 如 下 内 容 : 名 称 ( 摘 要 ),<br />

描 述 , 所 属 平 台 , 内 容 类 型 , 相 关 类 、 方 法 、 属 性 , 关 键 字 ,<br />

错 误 后 果 ( 严 重 程 度 ), 错 误 代 码 示 例 , 正 确 代 码 示 例 。<br />

4 识 别 重 复 缺 陷 模 式 方 法 详 述<br />

若 要 获 得 与 缺 陷 模 式 A 重 复 的 缺 陷 模 式 , 我 们 的 主 要 思<br />

路 是 : 首 先 获 取 与 A 具 有 相 同 的 内 容 类 型 和 所 属 平 台 的 缺 陷<br />

模 式 , 这 个 集 合 限 定 了 重 复 缺 陷 模 式 的 搜 索 范 围 , 然 后 计 算<br />

集 合 中 的 每 个 元 素 与 A 的 相 似 度 , 相 似 度 越 高 , 该 元 素 与 A<br />

重 复 的 可 能 性 越 大 。<br />

为 计 算 两 条 缺 陷 模 式 的 相 似 度 , 本 方 法 要 对 每 对 缺 陷 模<br />

式 做 如 下 处 理 :<br />

(1) 提 取 缺 陷 模 式 的 自 然 语 言 部 分 , 包 括 缺 陷 名 称 、 描<br />

述 、 关 键 词 等 。<br />

(2) 对 每 个 部 分 分 别 计 算 文 本 相 似 度 。<br />

(3) 整 合 各 部 分 的 相 似 度 , 得 到 2 条 缺 陷 模 式 的 总 体 相<br />

似 度 。<br />

其 中 , 重 点 是 后 两 步 , 下 面 逐 个 阐 述 。<br />

4.1 计 算 文 本 相 似 度<br />

本 方 法 采 用 了 基 于 向 量 空 间 模 型 的 自 然 语 言 处 理 技 术 来<br />

计 算 文 本 的 相 似 度 。 如 第 2 章 所 述 , 计 算 相 似 度 要 经 过 分 词 、<br />

向 量 表 示 、 相 似 度 计 算 这 三 步 , 本 小 节 仅 讨 论 具 体 于 缺 陷 模<br />

式 的 分 词 需 要 考 虑 的 特 定 细 节 。


针 对 国 内 缺 陷 模 式 库 的 中 英 文 并 存 的 文 本 情 况 , 本 方 法<br />

采 用 先 将 中 、 英 文 剥 离 , 然 后 分 别 处 理 的 方 式 。 对 英 文 的 切<br />

词 较 为 简 单 , 对 中 文 的 切 词 则 调 用 中 文 切 词 器 即 可 。<br />

对 于 切 词 得 到 的 英 文 单 词 要 进 行 词 干 化 处 理 , 主 要 包 括<br />

将 名 词 的 复 数 变 为 单 数 和 将 动 词 的 其 他 形 态 变 为 基 本 形 态 。<br />

对 动 词 的 词 干 化 可 以 使 用 Porter 算 法 [5] 。 在 处 理 之 前 , 需 要<br />

保 留 JAVA 的 关 键 字 , 如 “final, finally, while, volatile” 等 ,<br />

使 它 们 直 接 包 含 在 结 果 中 。 这 是 因 为 , 有 些 JAVA 的 关 键 字<br />

如 “finally”、“final” 和 标 准 类 库 中 的 “finalize” 的 词 根 都<br />

是 “final”, 词 干 化 的 处 理 将 使 其 失 去 本 身 的 意 义 。<br />

中 文 部 分 经 过 切 词 器 处 理 后 , 可 以 得 到 中 文 的 单 词 以 及<br />

标 点 、 符 号 。 对 这 个 结 果 , 首 先 要 去 掉 无 意 义 的 标 点 、 符 号 ,<br />

这 里 需 要 保 留 JAVA 的 运 算 符 和 有 特 殊 作 用 的 符 号 , 如 点 号<br />

(. 在 正 则 表 达 式 中 用 作 通 配 符 )、 百 分 号 (% 为 取 余 运 算 ) 等 。<br />

此 外 , 根 据 切 词 器 的 不 同 , 有 时 还 需 要 还 原 被 切 词 器 拆 开 的<br />

JAVA 中 的 由 多 个 字 符 组 成 的 运 算 符 , 如 右 移 (>>)、 乘 等 (*=)<br />

等 。<br />

对 中 、 英 文 单 词 分 别 处 理 后 , 需 要 从 结 果 中 去 掉 噪 声 词 。<br />

噪 声 词 除 了 要 包 含 虚 词 ( 冠 词 、 连 词 、 介 词 等 ) 外 , 还 要 包<br />

含 JAVA 缺 陷 模 式 库 中 出 现 频 繁 且 对 不 同 文 本 的 分 辨 没 有 贡<br />

献 的 词 , 例 如 “JAVA”、“ 缺 陷 模 式 ” 等 。<br />

最 后 , 对 前 面 的 结 果 进 行 同 义 词 替 换 , 以 提 高 本 方 法 对<br />

表 面 词 形 不 尽 相 同 的 重 复 缺 陷 模 式 的 识 别 能 力 。 同 义 词 库 的<br />

获 得 , 来 源 于 领 域 内 人 员 对 大 量 实 际 语 料 的 分 析 , 其 中 既 包<br />

括 常 用 的 可 以 替 换 的 词 语 , 还 要 包 括 缩 写 和 原 文 、 中 英 文 的<br />

对 照 等 。<br />

利 用 分 词 最 终 结 果 , 按 照 公 式 (1)~(3) 就 可 以 计 算 出 每 对<br />

缺 陷 模 式 的 各 个 自 然 语 言 部 分 的 文 本 相 似 度 了 。<br />

4.2 相 似 度 的 整 合<br />

简 单 的 说 , 整 合 相 似 度 需 要 根 据 各 个 部 分 的 重 要 性 为 每<br />

部 分 设 定 权 值 , 那 么 总 体 相 似 度 就 是 每 个 部 分 的 相 似 度 与 其<br />

权 值 的 乘 积 之 和 , 计 算 公 式 如 下 :<br />

Sim ( Simi<br />

Wi)<br />

(4)<br />

i ( name, desc, keywords , related , severity )<br />

同 时 必 须 满 足 以 下 条 件 :<br />

0W i 1且 W i 1<br />

(5)<br />

其 中 ,Sim 表 示 2 条 缺 陷 模 式 的 总 体 相 似 度 ,Sim i<br />

表 示<br />

第 i 个 部 分 的 相 似 度 , 如 Sim name 表 示 缺 陷 名 称 的 相 似 度 ,<br />

W i 表 示 第 i 个 部 分 的 权 值 , 如 W desc 表 示 缺 陷 描 述 的 相 似 度<br />

的 权 值 。 整 合 相 似 度 , 需 要 从 两 个 方 面 考 虑 :<br />

第 一 , 如 何 设 定 W i ? 这 可 以 从 如 下 几 个 角 度 入 手 :<br />

(1) 缺 陷 模 式 最 重 要 的 两 个 部 分 是 名 称 和 描 述 。 研 究 表<br />

明 , 将 缺 陷 名 称 的 权 值 设 为 描 述 的 2 倍 能 够 获 得 更 高 的 召 回<br />

率<br />

。[4]<br />

(2) 作 为 作 者 对 缺 陷 模 式 主 要 特 征 的 提 取 , 关 键 词 也 占<br />

有 较 为 重 要 的 地 位 。<br />

(3) 严 重 程 度 的 重 要 性 最 低 。 这 是 因 为 , 同 一 条 缺 陷 被<br />

引 入 的 环 境 不 同 , 导 致 的 后 果 就 很 可 能 不 同 , 故 对 严 重 程 度<br />

的 界 定 往 往 是 模 糊 的 。 此 外 , 严 重 程 度 只 有 几 种 固 定 选 项 ,<br />

其 相 似 度 只 有 0 和 1 两 种 值 , 因 此 它 所 包 含 的 语 义 信 息 也 相<br />

对 较 少 。<br />

(4) 对 关 联 对 象 ( 类 、 方 法 、 属 性 ) 的 权 值 设 定 较 为 复<br />

杂 , 这 是 由 该 部 分 的 特 殊 性 决 定 的 :<br />

1 关 联 对 象 的 主 要 作 用 在 于 区 别 不 同 的 缺 陷 模 式 , 而 不<br />

是 证 明 两 个 缺 陷 模 式 相 同 。 因 此 , 关 联 对 象 的 相 似 度 权 值 不<br />

能 过 高 , 同 时 还 要 采 用 第 2 条 所 述 的 方 法 。<br />

2 若 关 联 对 象 的 相 似 度 过 低 , 可 直 接 判 定 两 条 缺 陷 模 式<br />

是 不 同 的 。<br />

3 由 于 关 联 的 对 象 都 是 JAVA 类 库 中 的 类 、 方 法 或 属<br />

性 , 因 此 分 词 时 要 避 免 按 照 大 写 字 母 拆 词 , 例 如 :<br />

“ObjectInputStream” 和 “ObjectOutputStream” 应 该 均 被 作<br />

为 整 体 比 较 得 到 相 似 度 为 0, 而 不 该 分 别 被 拆 成 三 个 词 。<br />

由 以 上 四 点 分 析 可 以 得 到 缺 陷 模 式 每 部 分 的 相 似 度 权 值<br />

的 大 小 关 系 :<br />

(6)<br />

Wname<br />

W<br />

desc<br />

W<br />

keywords<br />

W<br />

related<br />

Wseverity<br />

此 外 , 根 据 (4) 中 的 2, 若 Sim related<br />

<br />

min related<br />

, 则<br />

直 接 判 定 Sim 0 。 其 中 min related<br />

是 判 断 两 个 关 联 对 象 是<br />

否 不 同 的 阈 值 , 它 的 取 值 可 以 通 过 实 验 来 确 定 。<br />

第 二 , 为 适 应 特 殊 情 况 , 本 方 法 采 用 如 下 两 条 策 略 对 W i<br />

做 动 态 调 整 :<br />

(1) 当 参 与 比 较 的 两 条 缺 陷 模 式 中 , 有 一 方 的 某 部 分 缺<br />

失 时 , 将 这 部 分 的 相 似 度 权 值 设 为 0, 将 其 余 各 部 分 的 相 似<br />

度 权 值 扩 大 , 严 重 程 度 的 权 值 不 变 , 调 整 后 仍 然 要 保 证 各 部<br />

分 的 权 值 之 和 为 1。<br />

这 条 策 略 是 为 了 使 本 方 法 适 用 于 信 息 不 完 整 的 缺 陷 模<br />

式 。 导 致 缺 陷 模 式 信 息 缺 失 的 因 素 很 多 , 例 如 , 语 言 层 面 的<br />

缺 陷 模 式 不 存 在 关 联 对 象 , 而 用 户 正 在 提 交 的 缺 陷 模 式 也 必<br />

然 缺 少 尚 未 被 输 入 的 内 容 等 等 。 采 取 这 种 策 略 , 可 以 在 信 息<br />

缺 失 时 保 证 相 似 度 计 算 的 有 效 性 。<br />

调 整 方 法 是 这 样 的 , 假 设 某 部 分 的 比 较 双 方 中 有 一 方 以<br />

上 的 该 部 分 缺 失 , 则 规 定 这 两 条 缺 陷 模 式 的 该 部 分 的 相 似 度<br />

为 Double.NaN。 此 时 , 对 各 部 分 相 似 度 的 权 值 做 以 下 调 整 :<br />

'<br />

若 Sim i Double.<br />

NaN , 则 W i 0<br />

'<br />

且 Wj Wj <br />

(7)<br />

其 中 i, j ( name, desc, keywords, related) ( j ) i<br />

公 式 (7) 中 , 缺 失 部 分 调 整 前 的 权 值 为 W i , 调 整 后 权 值


'<br />

'<br />

为 W i , 其 余 各 部 分 调 整 前 的 权 值 为 W j , 调 整 后 的 权 值 为 W j ,<br />

是 其 余 各 部 分 的 权 值 扩 大 的 倍 数 , 的 计 算 方 法 如 公 式<br />

(8), 其 中 W severity 是 严 重 程 度 的 权 值 , 它 在 调 整 中 保 持 不 变 。<br />

1<br />

W severity<br />

(8)<br />

1 W W<br />

severity<br />

(2) 当 某 一 部 分 的 相 似 度 特 别 大 时 , 扩 大 这 一 部 分 的 权<br />

值 , 同 时 仍 要 保 证 各 部 分 的 权 值 之 和 为 1。<br />

因 为 缺 陷 名 称 、 描 述 和 关 键 字 这 三 个 部 分 都 能 从 一 定 程<br />

度 上 独 立 地 表 示 一 条 缺 陷 模 式 的 内 容 , 同 时 自 然 语 言 表 达 方<br />

式 的 差 异 总 是 存 在 的 , 所 以 , 若 两 条 缺 陷 模 式 的 名 称 、 描 述<br />

或 者 关 键 字 特 别 相 似 , 那 么 即 使 其 他 部 分 的 相 似 度 不 高 , 这<br />

两 条 缺 陷 模 式 也 很 可 能 是 重 复 的 。 扩 大 相 似 度 特 别 大 的 部 分<br />

的 权 值 , 有 助 于 发 现 表 面 词 形 不 尽 相 同 , 但 是 实 际 含 义 相 同<br />

的 缺 陷 模 式 。<br />

例 如 两 条 缺 陷 模 式 :<br />

(1) 名 称 : 忽 略 方 法 返 回 值<br />

描 述 : 忽 略 方 法 返 回 值 , 以 为 方 法 对 传 入 参 数 进 行 操 作 。<br />

(2) 名 称 : 忽 视 方 法 返 回 值<br />

描 述 : 一 个 常 见 例 子 是 在 调 用 String 方 法 时 , 所 有 这 类<br />

方 法 都 返 回 一 个 新 字 符 串 , 而 从 来 不 会 改 变 消 息 的 接 收 者 。<br />

上 面 两 条 缺 陷 模 式 的 名 称 的 相 似 度 为 1( 忽 略 和 忽 视 为<br />

同 义 词 ), 而 描 述 却 相 去 甚 远 , 但 很 显 然 , 这 两 个 缺 陷 模 式 本<br />

质 上 是 相 同 的 。 这 里 , 对 名 称 的 权 值 的 适 当 扩 大 , 可 以 避 免<br />

漏 报 的 发 生 。<br />

具 体 方 法 如 下 :<br />

若 Sim i<br />

max i<br />

, i ( name, desc, keywords )<br />

' 1-W 1<br />

i<br />

<br />

则 W i , ' W j<br />

W j (9)<br />

j ( name, desc, keywords , related , severity ) ( j i), 1<br />

其 中 max i 是 判 断 第 i 部 分 是 否 相 同 的 相 似 度 的 阈 值 。 相<br />

'<br />

同 的 部 分 调 整 前 的 权 值 为 W i , 调 整 后 权 值 为 W i , 其 余 各 部<br />

'<br />

分 调 整 前 的 权 值 为 W j , 调 整 后 的 权 值 为 W j , 是 其 余 各 部<br />

分 的 权 值 缩 小 的 倍 数 。 max i 和 的 值 可 以 通 过 实 验 确 定 。<br />

5 方 法 实 现 与 验 证<br />

根 据 第 4 章 提 出 的 方 法 , 本 文 实 现 了 重 复 缺 陷 模 式 的 识<br />

[1]<br />

别 工 具 , 并 将 其 使 用 在 JAVA 缺 陷 模 式 库 中 。 可 以 在 两 个<br />

地 方 使 用 该 工 具 : 缺 陷 模 式 提 交 和 缺 陷 模 式 审 核 。 前 者 将 在<br />

用 户 输 入 新 缺 陷 模 式 的 过 程 中 , 给 用 户 提 示 出 可 疑 的 相 似 缺<br />

陷 模 式 , 以 帮 助 用 户 决 定 是 否 继 续 提 交 。 后 者 在 审 核 过 程 中 ,<br />

给 审 核 员 提 示 出 与 正 在 被 审 核 的 缺 陷 模 式 相 似 的 缺 陷 模 式 列<br />

i<br />

<br />

表 , 以 助 于 审 核 员 发 现 并 标 记 重 复 的 缺 陷 模 式 。<br />

通 过 对 该 工 具 的 使 用 可 以 发 现 , 本 方 法 确 实 能 在 节 省 用<br />

户 和 审 核 员 精 力 的 同 时 有 效 地 减 少 重 复 缺 陷 模 式 的 数 量 。 然<br />

而 , 方 法 的 局 限 在 于 仅 能 找 出 表 面 词 形 相 近 的 缺 陷 模 式 , 例<br />

如 本 方 法 无 法 识 别 出 “ 模 数 为 1 的 求 余 运 算 ” 和 “ 取 模 操 作 %<br />

不 能 跟 1 ” 这 对 重 复 的 缺 陷 模 式 。 由 此 看 来 , 仅 使 用 向 量 空<br />

间 模 型 进 行 自 然 语 言 处 理 是 不 够 的 , 仍 需 加 入 对 句 法 、 词 义<br />

距 离 等 的 分 析 ; 此 外 , 词 库 ( 分 词 器 使 用 的 词 典 以 及 噪 声 词<br />

库 、 同 义 词 库 等 ) 的 不 完 备 也 是 造 成 召 回 率 和 精 确 率 不 高 的<br />

重 要 因 素 。<br />

6 结 论 与 展 望<br />

本 文 首 先 设 计 了 缺 陷 模 式 的 表 示 形 式 , 随 后 提 出 了 使 用<br />

基 于 自 然 语 言 处 理 的 信 息 检 索 技 术 识 别 重 复 缺 陷 模 式 的 方<br />

法 。 验 证 表 明 , 本 方 法 的 召 回 率 和 精 确 率 还 不 够 高 , 可 以 从<br />

如 下 几 个 方 面 改 进 本 方 法 :<br />

首 先 , 改 进 向 量 空 间 模 型 。 基 于 TF-IDF 的 向 量 空 间 模 型 ,<br />

仅 考 虑 了 词 频 等 表 面 信 息 [6] , 而 没 有 考 虑 语 义 、 句 子 长 度 等 信<br />

息 [3] 。 可 以 增 加 对 词 义 相 似 度 的 分 析 , 通 过 定 义 词 语 间 的 语 义<br />

相 似 度 , 求 得 句 子 间 的 语 义 相 似 度 [6] 。 在 对 文 本 建 模 之 前 , 增<br />

加 对 词 的 筛 选 , 对 召 回 率 的 提 高 也 会 有 帮 助 , 例 如 可 以 去 掉<br />

叹 词 、 语 气 词 、 拟 声 词 等 对 句 子 贡 献 不 大 的 词 [3] 。 此 外 , 还 可<br />

增 加 对 句 子 的 不 同 成 分 之 间 的 修 饰 关 系 的 分 析 。<br />

其 次 , 本 方 法 仅 利 用 了 缺 陷 模 式 中 的 自 然 语 言 信 息 , 除<br />

此 之 外 , 缺 陷 模 式 还 包 括 示 例 代 码 。 将 代 码 的 相 似 度 整 合 到<br />

缺 陷 模 式 的 相 似 度 中 , 有 望 进 一 步 提 高 召 回 率 。<br />

参 考 文 献<br />

[1] JAVA 缺 陷 模 式 库 , http://as.pku.edu.cn<br />

[2] Hiew L. Assisted Detection of Duplicate Bug Reports: [Master’s<br />

thesis]. Canada: University of British Columbia, 2006<br />

[3] 赵 巾 帼 , 徐 德 智 , 罗 庆 云 . 汉 语 句 子 相 似 度 计 算 方 法 比 对 之 研 究 . 福 建<br />

电 脑 ,2007,10:51-68<br />

[4] Per Runeson, Magnus Alexanderson, Oskar Nyholm. Detection of<br />

Duplicate Defect Reports Using Natural Language Processing. ICSE,<br />

Minnesota, USA, 2007<br />

[5] M. F. Porter. An algorithm for suffix stripping. In: Morgan Kaufmann.<br />

Multimedia Information and Systems Series. San Francisco, CA, USA:<br />

Morgan Kaufmann Publishers Inc., 1997. 313-316<br />

[6] 杨 思 春 , 陈 家 骏 . 中 文 自 动 问 答 中 句 子 相 似 度 计 算 研 究 . 情 报 学<br />

报 ,2008,27(1):35-41<br />

[7] Xiao-yin Wang, Lu Zhang, Tao Xie. An Approach to Detecting<br />

Duplicate Bug Reports using Natural Language and Execution<br />

Information. ICSE, Leipzig, Germany, 2008<br />

[8] Fortify, http://www.fortify.com<br />

[9] Na Meng, Qian-xiang Wang, Qian Wu, Hong Mei. An Approach to<br />

Merge Results of Multiple Static Analysis Tools. QSIC, Oxford, UK,<br />

2008.<br />

作 者 联 系 方 式 :<br />

吴 倩 Email:wuqian08@sei.pku.edu.cn<br />

北 京 大 学 信 息 科 学 技 术 学 院 软 件 研 究 所 100871

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!