二进制代码测试覆盖率评估系统设计与实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 系 统 原 理 与 架 构 设 计
源 代 码 的 覆 盖 率 分 析 方 法 有 语 句 、函 数 、分 支 、条 件 和 路 径 等 覆 盖 ,二 进 制 代 码 无 函 数 概 念[4],也 无 逻 辑 表 达 式 ,而 是 以 各 种 跳 转 指 令 (如 jmp,je和jne等 )为 程 序 执 行 的 分 支 点 。 因 此 ,二 进制代码覆盖率可通过指令与基本块覆盖进行评 估。本文用指令覆盖和基本块覆盖进行二进制代 码覆盖率评估。
张 垚1 张 超 容1 林 腾2 董 芳 泉1
(1 江南计算技术研究所 江苏无锡 214083) (2 北京大学软件与微电子学院 江苏无锡 214083)
摘 要 :针 对 模 糊 测 试 终 止 时 机 问 题 ,提 出 了 二 进 制 代 码 测 试 覆 盖 率 评 估 方 法 ,通 过 二 进 制 代 码 的 静 态 与 执 行 轨 迹 动 态 两 种 分 析 ,可 评 估 模 糊 测 试 对 目 标 程 序 二 进 制 代 码 的 测 试 覆 盖 ,从 而 设 计 并 实 现了二进制测试覆盖率评估系统。该系统给出了测试用例集合对目标可执行程序二进制基本块及 二 进 制 指 令 集 的 覆 盖 率 和 路 径 覆 盖 数 指 标 ,以 度 量 测 试 用 例 质 量 。 关 键 词 :模 糊 测 试 ;二 进 制 代 码 ;代 码 覆 盖 率 ;测 试 用 例 集 ;软 件 测 试 中 图 分 类 号 :TP301 文 献 标 识 码 :A 文 章 编 号 :1674-909X(2015)06-0013-05
Jakstab 是 英 国 伦 敦 大 学Johannes Kinder开 发 的二进制代码 静 态 分 析 工 具[7],结 合 数 据 流 分 析 进 行多次反汇编过程 的 迭 代 反 汇 编 方 法,是 将 反 汇 编 和静态分析2个阶段合并的二进制分析工具。
Jakstab 框 架 如 图 2 所 示 ,是 集 成 反 汇 编 与 其 他 静态分析的 集 成 架 构。 首 先 通 过 入 口 指 针 pc与 偏 移 量 定 位 ,提 取 当 前 二 进 制 代 码 的 位 置 及 执 行 指 令 , 再将指令反汇编提 升 为 一 种 中 间 语 言,并 通 过 中 间 语言的语义计算程 序 到 达 新 状 态,如 果 验 证 了 新 状 态正确,则 根 据 该 状 态 确 定 新 的 pc值,再 重 复 上 述 工作,是边反汇 编 边 程 序 状 态 分 析 的 过 程。 本 文 借 助Jakstab工具的反汇编 功 能 对 目 标 程 序 进 行 反 汇
0 引 言
在软 件 测 试 领 域,模 糊 测 试 是 使 用 较 为 广 泛 的 方法之一。该方法对目标程序进行大量畸形输入, 并监控程序运行 是 否 异 常,从 而 发 现 软 件 缺 陷。 代 码覆盖率用于描述测试用例对程序代码覆盖程度的 度量,是软件开发及 测 试 用 于 判 定 应 用 程 序 充 分 测 试 依 据 之 一 ,也 是 评 估 测 试 质 量 的 重 要 指 标 。 目 前 , 业内要求 测 试 代 码 覆 盖 率 应 达 到 85% 以 上 。 [1] 代 码覆盖率评估的应 用 研 究 大 多 在 源 代 码 层 面,二 进 制代码层面的研究较为缺乏。由于源代码与二进制
Design and Implementation of Code Coverage Assessment System in Binary-Level Code Testing
Zhang Yao1 Zhang Chaorong1 Lin Teng2 Dong Fangquan1
(1 Jiangnan Institute of Computing Technology,Wuxi 214083,Jiangsu,China)) (2 School of Software and Microelectronics,Peking University,Wuxi 214083,Jiangsu,China)
14
指挥信息系统与技术
2015 年 12 月
来自百度文库
得 具 体 执 行 信 息 ,再 与 静 态 结 果 比 对 并 计 算 覆 盖 率 。 文献[3]通过分 支 监 视 机 制 获 取 动 态 执 行 的 分 支 轨 迹信息,而本文系统 基 于 动 态 插 桩 及 无 用 基 本 块 过 滤技术实现。
单个测试用例的覆盖率分析仅评估某个用例对 目标程序的覆盖情况。本文对每个基本块均用正整 数 唯 一 编 号 ,可 根 据 不 同 编 号 区 分 不 同 基 本 块 ,某 个 用例的基本块覆盖可用1个整数集合表示。集合相 同 说 明 2 个 测 试 用 例 覆 盖 同 一 程 序 路 径 ,属 于 同 类 。 相比于单个用例的 代 码 覆 盖,更 关 注 某 个 测 试 用 例 集的代码覆盖情 况。 基 本 块 层 面 统 计 信 息 包 括:用 例 集 合 共 覆 盖 的 基 本 块 ;覆 盖 了 哪 些 基 本 块 ;每 个 基 本块的覆盖次数等。测试用例集的代码覆盖率需计 算所有测试用例覆 盖 的 不 同 基 本 块,可 转 化 为 多 个 整数集合的合并操作。
第6卷 第6期
张 垚 ,等 :二 进 制 代 码 测 试 覆 盖 率 评 估 系 统 设 计 与 实 现
15
图 2 Jakstab框 架
编 ,供 后 续 分 析 。 2.2 基 本 块 划 分
基本 块 是 程 序 顺 序 执 行 的 一 段 语 句 序 列,只 有 1个入口和 1 个 出 口。 入 口 为 块 的 第 一 个 语 句,出 口为块的最后一 个 语 句。 对 于 一 个 基 本 块,程 序 执 行仅从入口进入、出 口 退 出。 当 程 序 执 行 至 某 个 基 本 块 时 ,执 行 基 本 块 所 有 指 令 。 因 此 ,覆 盖 了 该 基 本 块等同于覆盖了基本块所有指令。以基本块为单位 对反汇编结果进行 分 析,相 比 于 以 指 令 级 粒 度 分 析 更简单高效。
规 约 有 序 二 元 决 策 图 (ROBDD)起 初 用 于 布 尔 表 达 式 ,将 该 数 据 结 构 扩 展 为 表 示 二 进 制 形 式 的 整 数 。 [5] 试 验 验 证 表 明 ,ROBDD 结 构 相 比 于 其 他 结 构 (如 标 准 模 板 库 STL 中 set容 器 ),表 示 整数集合及整数集合合并时在时间和内存开销 上 具 有 明 显 优 势 。 本 文 利 用 JavaBDD 类 库 提 供 的 API实 现 ROBDD 数 据 结 构 ,并 且 在 代 码 覆 盖 评估模块中应用于用例集合代码覆盖信息的操 作 。JavaBDD 通 过 Java 本 地 接 口 (JNI)在 Jorn Lind-Nielsen开 发 的 Buddy 库 基 础 上 ,封 装 了 面 向 对 象 的 Java库 。 该 库 提 供 与 Buddy 库 相 同 功 能 的 API。Buddy库 是 用 C+ + 编 写 的 包 括 标 准 BDD 操 作 、结 构 重 排 以 及 完 整 文 档 的 BDD 实 现 包 。 该 库 通 过 C+ + 接 口 实 现 引 用 计 数 存 储 和 垃 圾 回 收 机 制 。JavaBDD 类 库 为 跨 平 台 ,适 用 于 Unix与 Windows操 作 系 统 。 本 文 使 用 JavaBDD 中 BDD 类 、BDDDomain类 和 BDDFactory类 实 现 上 述 功 能 。BDD 类 负 责 BDD 内 部 元 素 的 逻 辑 运 算 操 作 ;BDDDomain 类 负 责 创 建 集 合 共 享 BDD 结 构 的 内 存 空 间 ;BDDFactory 类 负 责 多 个 BDD
针对 二 进 制 代 码,本 文 设 计 并 实 现 了 一 个 二 进 制 代 码 测 试 覆 盖 率 评 估 系 统 ,针 对 指 定 可 执 行 程 序 , 给出测试用例集的二进制代码覆盖率。该系统通过 静态分析得到程序 全 局 信 息,结 合 程 序 动 态 执 行 获
收 稿 日 期 :2015-04-21
第6卷 第6期 2015 年 12 月
·软件测试·
指挥信息系统与技术 Command Information System and Technology
Vol.6 No.6 Dec.2015
doi:10.15908/j.cnki.cist.2015.06.003
二进制代码测试覆盖率评估系统设计与实现
at both binary basic block level and binary instructions level for measuring the quality of test suite. Key words:fuzzy testing;binary code;code coverage rate;test suite;software testing
间的逻辑运算操作。 面向模糊测试的二进制代码测试覆盖率评估系
统架构如图1 所 示。 该 系 统 由 静 态 分 析、动 态 分 析 和覆盖率评估3 个 模 块 组 成。 系 统 基 本 流 程 为:先 将目标程序输入代静态分析模块进行反汇编分析, 生成汇编文件后扫 描 文 件 进 行 基 本 块 划 分 操 作,记 录基本块信息并生成控制流图。测试用例驱动程序 执行过程中进行动 态 插 桩,分 析 记 录 正 在 执 行 的 测 试用例基本块覆盖情况,过 滤 与 覆 盖 率 计 算 无 关 的 基 本 块 ,计 算 单 个 用 例 的 二 进 制 代 码 覆 盖 率 。 用 例 执 行 完 毕 ,启 动 代 码 覆 盖 率 评 估 器 。 该 评 估 器 功 能 简 单 ,接 收 静 态 和 动 态 分 析 结 果 ,计 算 测 试 用 例 集 的 二 进 制 代 码 覆 盖 率 ,包 括 指 令 和 基 本 块 覆 盖率。
Abstract:Aimed at the problem of timing to termination of fuzzy testing,a code coverage assess- ment method for binary-level code testing is proposed.By static and dynamic analyses of execute track to binary-level code,the code coverage of fuzzy testing to binary code of object program is assessed.Thus,a code coverage assessment system in binary-level code testing is designed and implemented.The system can calculate the code coverage rate and the amount of path coverage
图 1 二 进 制 代 码 测 试 覆 盖 率 评 估 系 统 架 构
2 系 统 实 现
2.1 静 态 分 析 反汇编是理解 与 分 析 可 执 行 程 序 的 基 础,也 是 逆向工程的起点和 关 键。 文 献 [6]提 出 特 定 汇 编 语 言与特定 机 器 语 言 (二 进 制 代 码 )存 在 一 一 对 应 关 系 ,因 此 反 汇 编 结 果 不 会 改 变 分 析 程 序 语 义 。
代码的代码覆盖率 评 估 方 法 和 结 果 不 同,源 代 码 在 编译链接形成可执 行 程 序 时,编 译 器 优 化 可 能 引 起 语句语义的改变,因而出现所见非所执行的现 象 。 [2] 此 外 ,出 于 商 业 机 密 保 护 目 的 ,所 用 测 试 方 无 法 获 取 源代码,同时源代码 层 面 的 代 码 覆 盖 率 也 无 法 准 确 评估。二进制代码 分 析 则 可 避 免 上 述 现 象,具 有 较 高准确性。
源 代 码 的 覆 盖 率 分 析 方 法 有 语 句 、函 数 、分 支 、条 件 和 路 径 等 覆 盖 ,二 进 制 代 码 无 函 数 概 念[4],也 无 逻 辑 表 达 式 ,而 是 以 各 种 跳 转 指 令 (如 jmp,je和jne等 )为 程 序 执 行 的 分 支 点 。 因 此 ,二 进制代码覆盖率可通过指令与基本块覆盖进行评 估。本文用指令覆盖和基本块覆盖进行二进制代 码覆盖率评估。
张 垚1 张 超 容1 林 腾2 董 芳 泉1
(1 江南计算技术研究所 江苏无锡 214083) (2 北京大学软件与微电子学院 江苏无锡 214083)
摘 要 :针 对 模 糊 测 试 终 止 时 机 问 题 ,提 出 了 二 进 制 代 码 测 试 覆 盖 率 评 估 方 法 ,通 过 二 进 制 代 码 的 静 态 与 执 行 轨 迹 动 态 两 种 分 析 ,可 评 估 模 糊 测 试 对 目 标 程 序 二 进 制 代 码 的 测 试 覆 盖 ,从 而 设 计 并 实 现了二进制测试覆盖率评估系统。该系统给出了测试用例集合对目标可执行程序二进制基本块及 二 进 制 指 令 集 的 覆 盖 率 和 路 径 覆 盖 数 指 标 ,以 度 量 测 试 用 例 质 量 。 关 键 词 :模 糊 测 试 ;二 进 制 代 码 ;代 码 覆 盖 率 ;测 试 用 例 集 ;软 件 测 试 中 图 分 类 号 :TP301 文 献 标 识 码 :A 文 章 编 号 :1674-909X(2015)06-0013-05
Jakstab 是 英 国 伦 敦 大 学Johannes Kinder开 发 的二进制代码 静 态 分 析 工 具[7],结 合 数 据 流 分 析 进 行多次反汇编过程 的 迭 代 反 汇 编 方 法,是 将 反 汇 编 和静态分析2个阶段合并的二进制分析工具。
Jakstab 框 架 如 图 2 所 示 ,是 集 成 反 汇 编 与 其 他 静态分析的 集 成 架 构。 首 先 通 过 入 口 指 针 pc与 偏 移 量 定 位 ,提 取 当 前 二 进 制 代 码 的 位 置 及 执 行 指 令 , 再将指令反汇编提 升 为 一 种 中 间 语 言,并 通 过 中 间 语言的语义计算程 序 到 达 新 状 态,如 果 验 证 了 新 状 态正确,则 根 据 该 状 态 确 定 新 的 pc值,再 重 复 上 述 工作,是边反汇 编 边 程 序 状 态 分 析 的 过 程。 本 文 借 助Jakstab工具的反汇编 功 能 对 目 标 程 序 进 行 反 汇
0 引 言
在软 件 测 试 领 域,模 糊 测 试 是 使 用 较 为 广 泛 的 方法之一。该方法对目标程序进行大量畸形输入, 并监控程序运行 是 否 异 常,从 而 发 现 软 件 缺 陷。 代 码覆盖率用于描述测试用例对程序代码覆盖程度的 度量,是软件开发及 测 试 用 于 判 定 应 用 程 序 充 分 测 试 依 据 之 一 ,也 是 评 估 测 试 质 量 的 重 要 指 标 。 目 前 , 业内要求 测 试 代 码 覆 盖 率 应 达 到 85% 以 上 。 [1] 代 码覆盖率评估的应 用 研 究 大 多 在 源 代 码 层 面,二 进 制代码层面的研究较为缺乏。由于源代码与二进制
Design and Implementation of Code Coverage Assessment System in Binary-Level Code Testing
Zhang Yao1 Zhang Chaorong1 Lin Teng2 Dong Fangquan1
(1 Jiangnan Institute of Computing Technology,Wuxi 214083,Jiangsu,China)) (2 School of Software and Microelectronics,Peking University,Wuxi 214083,Jiangsu,China)
14
指挥信息系统与技术
2015 年 12 月
来自百度文库
得 具 体 执 行 信 息 ,再 与 静 态 结 果 比 对 并 计 算 覆 盖 率 。 文献[3]通过分 支 监 视 机 制 获 取 动 态 执 行 的 分 支 轨 迹信息,而本文系统 基 于 动 态 插 桩 及 无 用 基 本 块 过 滤技术实现。
单个测试用例的覆盖率分析仅评估某个用例对 目标程序的覆盖情况。本文对每个基本块均用正整 数 唯 一 编 号 ,可 根 据 不 同 编 号 区 分 不 同 基 本 块 ,某 个 用例的基本块覆盖可用1个整数集合表示。集合相 同 说 明 2 个 测 试 用 例 覆 盖 同 一 程 序 路 径 ,属 于 同 类 。 相比于单个用例的 代 码 覆 盖,更 关 注 某 个 测 试 用 例 集的代码覆盖情 况。 基 本 块 层 面 统 计 信 息 包 括:用 例 集 合 共 覆 盖 的 基 本 块 ;覆 盖 了 哪 些 基 本 块 ;每 个 基 本块的覆盖次数等。测试用例集的代码覆盖率需计 算所有测试用例覆 盖 的 不 同 基 本 块,可 转 化 为 多 个 整数集合的合并操作。
第6卷 第6期
张 垚 ,等 :二 进 制 代 码 测 试 覆 盖 率 评 估 系 统 设 计 与 实 现
15
图 2 Jakstab框 架
编 ,供 后 续 分 析 。 2.2 基 本 块 划 分
基本 块 是 程 序 顺 序 执 行 的 一 段 语 句 序 列,只 有 1个入口和 1 个 出 口。 入 口 为 块 的 第 一 个 语 句,出 口为块的最后一 个 语 句。 对 于 一 个 基 本 块,程 序 执 行仅从入口进入、出 口 退 出。 当 程 序 执 行 至 某 个 基 本 块 时 ,执 行 基 本 块 所 有 指 令 。 因 此 ,覆 盖 了 该 基 本 块等同于覆盖了基本块所有指令。以基本块为单位 对反汇编结果进行 分 析,相 比 于 以 指 令 级 粒 度 分 析 更简单高效。
规 约 有 序 二 元 决 策 图 (ROBDD)起 初 用 于 布 尔 表 达 式 ,将 该 数 据 结 构 扩 展 为 表 示 二 进 制 形 式 的 整 数 。 [5] 试 验 验 证 表 明 ,ROBDD 结 构 相 比 于 其 他 结 构 (如 标 准 模 板 库 STL 中 set容 器 ),表 示 整数集合及整数集合合并时在时间和内存开销 上 具 有 明 显 优 势 。 本 文 利 用 JavaBDD 类 库 提 供 的 API实 现 ROBDD 数 据 结 构 ,并 且 在 代 码 覆 盖 评估模块中应用于用例集合代码覆盖信息的操 作 。JavaBDD 通 过 Java 本 地 接 口 (JNI)在 Jorn Lind-Nielsen开 发 的 Buddy 库 基 础 上 ,封 装 了 面 向 对 象 的 Java库 。 该 库 提 供 与 Buddy 库 相 同 功 能 的 API。Buddy库 是 用 C+ + 编 写 的 包 括 标 准 BDD 操 作 、结 构 重 排 以 及 完 整 文 档 的 BDD 实 现 包 。 该 库 通 过 C+ + 接 口 实 现 引 用 计 数 存 储 和 垃 圾 回 收 机 制 。JavaBDD 类 库 为 跨 平 台 ,适 用 于 Unix与 Windows操 作 系 统 。 本 文 使 用 JavaBDD 中 BDD 类 、BDDDomain类 和 BDDFactory类 实 现 上 述 功 能 。BDD 类 负 责 BDD 内 部 元 素 的 逻 辑 运 算 操 作 ;BDDDomain 类 负 责 创 建 集 合 共 享 BDD 结 构 的 内 存 空 间 ;BDDFactory 类 负 责 多 个 BDD
针对 二 进 制 代 码,本 文 设 计 并 实 现 了 一 个 二 进 制 代 码 测 试 覆 盖 率 评 估 系 统 ,针 对 指 定 可 执 行 程 序 , 给出测试用例集的二进制代码覆盖率。该系统通过 静态分析得到程序 全 局 信 息,结 合 程 序 动 态 执 行 获
收 稿 日 期 :2015-04-21
第6卷 第6期 2015 年 12 月
·软件测试·
指挥信息系统与技术 Command Information System and Technology
Vol.6 No.6 Dec.2015
doi:10.15908/j.cnki.cist.2015.06.003
二进制代码测试覆盖率评估系统设计与实现
at both binary basic block level and binary instructions level for measuring the quality of test suite. Key words:fuzzy testing;binary code;code coverage rate;test suite;software testing
间的逻辑运算操作。 面向模糊测试的二进制代码测试覆盖率评估系
统架构如图1 所 示。 该 系 统 由 静 态 分 析、动 态 分 析 和覆盖率评估3 个 模 块 组 成。 系 统 基 本 流 程 为:先 将目标程序输入代静态分析模块进行反汇编分析, 生成汇编文件后扫 描 文 件 进 行 基 本 块 划 分 操 作,记 录基本块信息并生成控制流图。测试用例驱动程序 执行过程中进行动 态 插 桩,分 析 记 录 正 在 执 行 的 测 试用例基本块覆盖情况,过 滤 与 覆 盖 率 计 算 无 关 的 基 本 块 ,计 算 单 个 用 例 的 二 进 制 代 码 覆 盖 率 。 用 例 执 行 完 毕 ,启 动 代 码 覆 盖 率 评 估 器 。 该 评 估 器 功 能 简 单 ,接 收 静 态 和 动 态 分 析 结 果 ,计 算 测 试 用 例 集 的 二 进 制 代 码 覆 盖 率 ,包 括 指 令 和 基 本 块 覆 盖率。
Abstract:Aimed at the problem of timing to termination of fuzzy testing,a code coverage assess- ment method for binary-level code testing is proposed.By static and dynamic analyses of execute track to binary-level code,the code coverage of fuzzy testing to binary code of object program is assessed.Thus,a code coverage assessment system in binary-level code testing is designed and implemented.The system can calculate the code coverage rate and the amount of path coverage
图 1 二 进 制 代 码 测 试 覆 盖 率 评 估 系 统 架 构
2 系 统 实 现
2.1 静 态 分 析 反汇编是理解 与 分 析 可 执 行 程 序 的 基 础,也 是 逆向工程的起点和 关 键。 文 献 [6]提 出 特 定 汇 编 语 言与特定 机 器 语 言 (二 进 制 代 码 )存 在 一 一 对 应 关 系 ,因 此 反 汇 编 结 果 不 会 改 变 分 析 程 序 语 义 。
代码的代码覆盖率 评 估 方 法 和 结 果 不 同,源 代 码 在 编译链接形成可执 行 程 序 时,编 译 器 优 化 可 能 引 起 语句语义的改变,因而出现所见非所执行的现 象 。 [2] 此 外 ,出 于 商 业 机 密 保 护 目 的 ,所 用 测 试 方 无 法 获 取 源代码,同时源代码 层 面 的 代 码 覆 盖 率 也 无 法 准 确 评估。二进制代码 分 析 则 可 避 免 上 述 现 象,具 有 较 高准确性。