内容简介
本书作为全国计算机技术与软件专业技术资格(水平)考书,系统地涵盖了软件评测所需的专业知识。全书共19章,对软件评测的基本理论、测试技术、测试技术应用、新技术应用进行系统的讲解,并给出了相关的实践案例。本书以软件评测相关的标准为基础,同时结合新测试技术的发展,给出了软件评测的相关理论和实践。通过本书的学习,读者可以掌握软件评测实践,提升软件评测能力。本书既是软件评测师考试培训的学习教材,同时也适用于测试人员、测试经理和软件质量保证的技术人员使用。
目录
目 录 篇 基础理论篇 第 1 章 软件测试概述 ·································· 2 1.1 软件测试的背景 ····································· 2 1.2 软件错误相关的典型案例 ····························· 4 1.3 国内外发展现状及趋势 ······························· 7 第 2 章 软件测试基础 ·································· 12 2.1 软件测试的基本概念 ································ 12 2.1.1 什么是软件测试 ··································· 12 2.1.2 验证与确认 ······································· 13 2.1.3 软件缺陷 ········································· 14 2.1.4 测试与质量保证 ··································· 17 2.1.5 测例 ········································· 18 2.1.6 测试策略 ········································· 19 2.2 软件测试的原则 ···································· 20 2.3 软件测试模型 ······································ 22 2.3.1 V 模型 ··········································· 22 2.3.2 W 模型 ··········································· 22 2.3.3 H 模型 ··········································· 23 2.3.4 敏捷测试模型 ····································· 24 2.4 软件测试分类 ······································ 24 2.4.1 按工程阶段划分的测试 ····························· 25 2.4.2 按是否执行代码划分的测试 ························· 26 2.4.3 按测试实施主体划分的测试 ························· 27 2.4.4 按是否关联代码划分的测试 ························· 27 2.4.5 按软件质量特划分的测试 ························· 29 2.4.6 按符合评价要求划分的测试 ······················· 30 2.4.7 回归测试 ········································· 31 第 3 章 软件测评相关标准 ······························ 33 3.1 标准化概述 ········································· 33 3.1.1 标准化的意义 ····································· 33 3.1.2 标准的分类 ······································· 34 3.2 软件质量模型与评价标准 ····························· 35 3.2.1 软件质量标准的发展 ······························· 35 3.2.2 软件质量模型和测量 ······························· 38 3.2.3 软件质量评价 ····································· 43 3.2.4 绪可用产品(RUSP)的质量要求和评价细则 ········· 44 3.3 软件测试标准 ······································· 45 3.3.1 测试过程标准 ······································ 46 3.3.2 测试文档标准 ······································ 46 3.3.3 测试技术标准 ······································ 49 3.4 软件测试工作量及成本估算相关标准 ··················· 50 第 4 章 软件测试过程和管理 ····························· 56 4.1 测试过程模型 ······································· 56 4.2 组织级测试过程 ····································· 57 4.2.1 目的 ·············································· 58 4.2.2 输入 ·············································· 59 4.2.3 活动和任务 ········································ 59 4.2.4 结果 ·············································· 60 4.2.5 信息项 ············································ 60 4.3 测试管理过程 ······································· 60 4.3.1 测试策划过程 ······································ 61 4.3.2 测试设计和实现过程 ································ 66 4.3.3 测试环境构建和维护过程 ···························· 69 4.3.4 测试执行过程 ······································ 71 4.3.5 测试事件报告过程 ·································· 73 4.3.6 测试监测和控制过程 ································ 75 4.3.7 测试完成过程 ······································ 78 4.4 静态测试过程 ········································ 80 4.4.1 目的 ·············································· 80 4.4.2 输入 ·············································· 80 4.4.3 活动和任务 ········································ 80 4.4.4 结果 ·············································· 81 4.4.5 信息项 ············································ 81 篇 测试技术篇 第 5 章 基于规格说明的测试技术 ························· 83 5.1 测例设计方法 ··································· 83 5.1.1 等价类划分法 ······································ 84 5.1.2 分类树法 ·········································· 86 5.1.3 边界值法 ·········································· 88 5.1.4 语法测试 ·········································· 91 5.1.5 组合测试 ·········································· 92 5.1.6 判定表测试 ········································ 97 5.1.7 因果图法 ·········································· 99 5.1.8 状态转移测试 ······································ 102 5.1.9 场景测试 ·········································· 105 5.1.10 测试 ········································· 107 5.2 测试设计方法选择策略 ································ 109 5.3 测例的编写 ······································ 109 5.3.1 测试设计规格说明 ·································· 110 5.3.2 测例规格说明 ·································· 111 5.3.3 测试规程规格说明 ·································· 112 5.3.4 测例编写的细节 ································ 113 第 6 章 基于结构的测试技术 ····························· 115 6.1 静态测试技术 ······································· 115 6.1.1 代码检查 ·········································· 115 6.1.2 编码规则检查 ······································ 116 6.1.3 静态分析 ·········································· 117 6.2 动态测试技术 ········································ 120 6.2.1 基于控制流设计用例 ································ 120 6.2.2 基于数据流设计用例 ································ 129 6.3 基于结构的测试辅助技术 ····························· 136 6.3.1 词法和语法分析 ···································· 136 6.3.2 程序插桩和驱动技术 ································ 137 6.4 基于结构测试的综合策略 ····························· 138 6.4.1 测试覆盖准则 ······································ 139 6.4.2 小测例数计算 ································ 140 第 7 章 自动化测试技术 ································· 144 7.1 自动化测试技术概述 ·································· 144 7.1.1 自动化测试技术的发展和演进 ························ 144 7.1.2 自动化测试的概念 ·································· 145 7.1.3 自动化测试的分类 ·································· 146 7.1.4 自动化测试的优缺点和局限 ·························· 147 7.1.5 自动化测试系统的通用架构 ·························· 149 7.2 自动化测试的实践策略 ······························· 151 7.3 测试设计的自动化技术 ······························· 153 7.3.1 基于模型的测试技术 ································ 153 7.3.2 基于搜索的测试技术 ·································157 7.4 测试执行的自动化技术 ······························· 158 7.4.1 测试工具的选择 ···································· 158 7.4.2 自动化测试语言的选择 ······························ 159 7.4.3 测试输入的设计与实现 ······························ 159 7.4.4 测试输出结果的收集和分析 ·························· 164 第 8 章 基于经验的测试技术 ····························· 166 8.1 错误猜测法 ·········································· 166 8.1.1 基本概念 ·········································· 166 8.1.2 软件错误类型 ······································ 166 8.1.3 估算错误数量的方法 ································ 167 8.2 探索测试 ·········································· 168 8.2.1 基本概念 ·········································· 168 8.2.2 探索测试风格 ···································· 169 8.2.3 探索测试的相关方法 ······························ 170 8.2.4 探索测试的优势与局限 ·····························170 8.3 基于检查表的测试 ··································· 171 8.3.1 基本概念 ········································· 171 8.3.2 基于代码检查表的测试 ····························· 171 8.3.3 基于文档检查表的测试 ····························· 172 第 9 章 基于质量特的测试与评价 ·······················174 9.1能测试 ········································ 174 9.1.1 完备 ··········································· 174 9.1.2 正确 ··········································· 175 9.1.3 适合 ··········································· 175 9.1.4能测试案例 ··································· 176 9.2 能效率测试 ······································· 183 9.2.1 时间特 ········································· 183 9.2.2 资源利用 ······································· 183 9.2.3 容量 ············································· 184 9.2.4 能效率测试类型 ································· 185 9.2.5 能效率测试案例 ································· 186 9.3 易用测试 ········································· 188 9.3.1 可辨识 ········································· 188 9.3.2 易学 ··········································· 189 9.3.3 易操作 ········································· 190 9.3.4 用户差错防御 ··································· 191 9.3.5 用户界面舒适 ··································· 192 9.3.6 易访问 ········································· 193 9.4 可靠测试 ········································· 194 9.4.1 成熟 ··········································· 194 9.4.2 可用 ··········································· 195 9.4.3 容错 ··········································· 195 9.4.4 易恢复 ········································· 196 9.5 信息测试 ····································· 197 9.5.1 保密 ··········································· 197 9.5.2 完整 ··········································· 198 9.5.3 抗抵赖 ········································· 198 9.5.4 可核查 ········································· 198 9.5.5 真实 ··········································· 199 9.6 维护测试 ········································· 199 9.6.1 模块化 ··········································· 199 9.6.2 可重用 ········································· 200 9.6.3 易分析 ········································· 200 9.6.4 易修改 ········································· 201 9.6.5 易测试 ········································· 202 9.7 兼容测试 ········································· 202 9.7.1 共存 ··········································· 203 9.7.2 互操作 ········································· 203 9.8 可移植测试 ······································· 204 9.8.1 适应 ··········································· 204 9.8.2 易安装 ········································· 206 9.8.3 易替换 ········································· 207 9.9 依从测试 ········································· 207 9.10 符合测试 ········································ 208 9.10.1 先决条件 ········································ 208 9.10.2 评价活动内容 ···································· 209 9.10.3 评价过程 ········································ 209 9.10.4 评价报告 ········································ 209 9.10.5 后续的符合评价 ································ 210 第三篇 测试技术应用篇 第 10 章 基于风险的测试 ······························· 212 10.1 基于风险的测试概述 ································ 212 10.1.1 为何要基于风险 ·································· 212 10.1.2 测试计划内容 ···································· 216 10.1.3 测试计划制订的步骤 ······························ 217 10.1.4 基于风险的测领域 ························ 218 10.2 风险分析和缓解措施设计 ···························· 218 10.2.1 风险识别 ········································ 218 10.2.2 风险的影响和发生概率评估 ························ 221 10.2.3 风险的优先级 ···································· 224 10.2.4 风险与缓解措施 ·································· 226 10.2.5 一般的缓解措施指南 ···························· 227 10.3 测试级别与测试实施 ································ 232 10.3.1 测试设计和实施的一般指南 ······················ 232 10.3.2 单元测试设计与实施 ······························ 234 10.3.3 集成测试设计与实施 ······························ 235 10.3.4 系统测试设计与实施 ······························ 237 10.3.5 验收测试设计与实施 ······························ 237 10.4 测试估算与平衡决策 ································ 238 10.4.1 测试估算的方法指南 ······························ 238 10.4.2 测试策略的综合和平衡 ···························· 240 第 11 章 分层架构软件测试 ····························· 241 11.1 分层架构介绍 ······································ 241 11.1.1 分层架构概述 ···································· 241 11.1.2 表示层介绍 ······································ 242 11.1.3 服务层介绍 ······································ 243 11.1.4 业务逻辑层介绍 ·································· 243 11.1.5 数据层介绍 ······································ 244 11.2 质量特 ·········································· 244 11.2.1 表示层质量特 ·································· 244 11.2.2 服务层质量特 ·································· 248 11.2.3 业务逻辑层质量特 ······························ 249 11.2.4 数据层质量特 ·································· 251 11.3 测试策略 ·········································· 252 11.3.1 表示层测试策略 ·································· 252 11.3.2 服务层测试策略 ·································· 253 11.3.3 业务逻辑层测试策略 ······························ 254 11.3.4 数据层测试策略 ·································· 256 11.4 测试案例 ·········································· 259 11.4.1 案例概述 ········································ 259 11.4.2 案例测试内容 ···································· 260 11.4.3 表示层测试 ······································ 261 11.4.4 服务层测试 ······································ 264 11.4.5 业务逻辑层测试 ·································· 285 11.4.6 数据层 TPC-C 基准测试 ··························· 289 11.4.7 数据层 TPC-DS 基准测试 ·························· 293 第 12 章 事件驱动架构软件测试 ························· 301 12.1 架构概述 ········································· 301 12.1.1 基本概念 ········································ 301 12.1.2 应用实例 ······································· 304 12.2 质量特 ········································· 306 12.2.1能 ········································· 309 12.2.2 可靠 ········································· 309 12.2.3 能效率 ······································· 311 12.2.4 易用 ········································· 313 12.2.5 信息 ····································· 314 12.2.6 兼容 ········································· 315 12.2.7 维护 ········································· 315 12.2.8 可移植 ······································· 316 12.3 测试策略 ········································· 316 12.4 测试案例 ········································· 318 12.4.1 案例介绍——安卓广播接收器 ······················ 318 12.4.2 测试策略与质量特 ······························ 319 第 13 章 微内核架构软件测试···························· 322 13.1 微内核架构概述 ··································· 322 13.1.1 微内核架构说明 ································· 322 13.1.2 微内核架构特点 ································· 323 13.1.3 微内核架构优缺点 ······························· 324 13.2 质量特 ········································· 324 13.2.1能 ········································· 324 13.2.2 信息 ····································· 325 13.2.3 可靠 ········································· 325 13.2.4 易用 ········································· 325 13.3 测试策略 ········································· 325 13.4 测试案例一 ······································· 325 13.4.1 案例介绍 ······································· 325 13.4.2 测试过程 ······································· 327 13.5 测试案例二 ······································· 329 13.5.1 案例介绍 ······································· 329 13.5.2 案例测试策略 ··································· 331 13.5.3 案例测试设计和执行 ····························· 336 13.5.4 案结 ······································· 337 第 14 章 分布式架构软件测试 ··························· 338 14.1 架构概述 ········································· 338 14.1.1 基本概念 ······································· 338 14.1.2 架构组件 ······································· 340 14.1.3 架构优势和劣势 ································· 342 14.1.4 应用实例 ······································· 343 14.2 质量特 ········································ 344 14.2.1能 ········································· 344 14.2.2 数据一致相关 ································· 346 14.2.3 事务处理相关 ··································· 347 14.2.4 并发、互斥相关 ································· 347 14.2.5 远过程调用和通信相关 ··························· 348 14.2.6 运维相关 ······································· 349 14.3 分布式架构软件测试常见的质量目标 ················ 350 14.4 分布式架构软件测试常见的测试策略 ················ 352 14.5 测试案例 ········································ 353 14.5.1 购票系统 ······································ 353 14.5.2 超市会员系统 ·································· 360 第四篇 新技术应用篇 第 15 章 移动应用软件测试 ··························· 363 15.1 移动终端平台和应用软件介绍 ······················ 363 15.2 移动应用软件的测试 ······························ 367 15.3 移动应用软能测试案例 ························ 373 第 16 章 物联网软件系统测试·························· 375 16.1 物联网简介 ······································ 375 16.2 物联网的测试类型 ································ 377 16.3 物联网渗透测试技术 ······························ 378 第 17 章 大数据系统测试 ····························· 381 17.1 大数据简介 ······································ 381 17.2 大数据测试技术 ·································· 382 17.3 大数能测试案例 ······························ 385 第 18 章 可信软件验证技术 ··························· 390 18.1 可信软件 ········································ 390 18.2 可信软件的验证技术 ······························ 391 18.2.1 形式化建模与方法 ······························ 391 18.2.2 可信软件验证工具 ······························ 394 第 19 章 人工智能时代下的软件测试技术发展 ··········· 400 19.1 人工智能时代的到来 ····························· 400 19.1.1 人工智能在各行各业的应用 ······················ 400 19.1.2 人工智能对软件测试技术发展的影响 ·············· 401 19.1.3 人工智能会否取代软件测试人员 ·················· 403 19.2 人工智能辅助测试技术 ··························· 405 19.2.1 基于约束的技术 ································ 405 19.2.2 启发式搜索算法 ································ 408 19.3 机器学习在软件测试中的应用 ····················· 409 19.3.1 软件测 ······························ 409 19.3.2 使用模式识别 ·································· 410 19.3.3 软件脆弱测试 ································ 410 参考文献 ············································ 411
摘要与插图
第1章软件测试概述
软件测试是伴随着软件的出现而产生的,也随着软件技术和软件应用的发展而不断发展,已经成为软件工程理论和实践活动的重要组成部分。广义的软件测含测试的理论、方、标准、工具以及组织管理等内容。本章介绍软件测试的一些基本概况,如软件测试的产生与演化情况、软件质量问题造成严重后果的一些案例、软件测试与软件质量之间的关系以及软件测试的发展趋势。
1.1软件测试的背景
自20世纪中期计算机诞生以来,计算机的应用得到了惊人的发展。到今天,计算机的应用已经深入到人类生产生活的方方面面,同时也引导着社会从工业化时代快速转入信息化时代。可以说,今天的人类生活已与计算机的应用密不可分。不断延伸的计算机应用既依赖于硬件在能、体积耗等方面的持续进步,也依赖于软件的理论、方、规模、质量以及应用需求的高速发展。任何一个计算机的应用软件都建立在计算机系统之上,而软件是计算机系统的重要组成部分,从现代应用的角度看,软件发挥的作用越来越大,以于形成了庞大的软件产业。这一新兴产业不仅支持罗万象的信息化应用,也成为全世界经济发展的主要推动力量之一。在计算机诞生的初期,软件与硬件的依存度极高,并且软件的产出没有任何工程化的特征,对于软件中缺陷的发现、处置也没有规范化的方法或手段,软件工程师需要调试程序,不过是为了程序能够正常运行。这个时期是没有清晰的软件测试概念的,人们认为程序的调试是软件测试活动。由于硬件的快速发展以及应用的不断扩大,软件的规模开始增长,很快“软件危机”爆发了。主要体现为软件的生产效率和质量严重滞后于硬件发展速度和应用要求,于是出现了“软件工程”概念,希望以工程化的原则、规范、方法,在技术和工具的支持下开展软件的生产,并保证软件的质量。软件的生产不再是一种类似于艺术创作的劳动,而逐渐演变成有计划有组织的工程活动,软件也开始作为独立的知识产品进入市场。作为产品,质量便成为其一个重要的要素,必须接受市场、用户甚法律法规的检验与评判,于是,如何控制或保证软件产品的质量,成为工程化软件生产的一个重要问题。事实上,软件工程所研究与实践的一个核心问题,是寻求软件生产在质量、成本和工期之间的一个优组合。如何保证软件的质量?在软件活动中有许许多多的方法和手段,如模型的选择、过程的控制、技术的恰当采用、有效的管理、工具的使用等,甚利用形式化方法。但不管怎样,测试是必不可少的环节,也是目前为有效的手段之一。在人类林的产品生产活动中,都有产品检测这个重要环节,不论是工业产品,普通消费品,还是药品、食品和农产品,在产品进入市场或交付给用户之前,都必须进行检测,以保证产品符合相应的法律法规、标准或特殊要求。针对软件产品的检测,称为软件测试年来出现了“软件定义一切”的观点,为什么如此强调软件的作用?一个原因是当代社会的生产生活已经严重依赖信息化系统,软件在其中承担着越来越重要的使命,一旦软件在形形色色的应用中出现异常或故障,轻则引起服务中止或服务质量下降,重则造成人身或财产损害,甚引发社会动荡的严重后果。软件的重要带来了软件质量的重要,为了保证软件的质量,软件测试成为了软件生产活动中必不可少且关重要的工程活动。软件测试活动是软件开发方必须的质量控制行为,软件需方也越来越多地开展有利于自身应用要求的测试活动,并形成了交由独立评价方实施公正测试的形态。软件测试要解决什么基本问题呢?在软件测试兴起的初期,一种观点认为软件测试的目的是检验软件是否满足规定的需求,是否达到了预期结果。这可以理解为是对软件“证真”,如软件测试的先驱BillHetzel(1973年及1983年)和IEEE(1983年)均持有这种观点。另外一种观点则认为软件测试是为了发现错误而开展的一些活动及过程。这也可以理解为是对软件“证伪”,持有这种观点的代表如Glenford J.Myers(1979年)。这两种基本相反的观点,是从不同的角度来看待软件的质量,在软件测试领域都发挥了重要的作用,在实际的工程实践中相辅相成。此后,随着更多有关软件测试的研究和实践,人们还提出了许多的观点和定义体上以保证软件产品的质量为目的,涵盖软件生产过程中更为的活动,同时兼顾成本及风险控制。20世纪80年代以来逐步建立起了软件的质量要求、测试、评价、管理等方面的标准,不仅丰富了软件工程的标准化,也为软件测试提供了工程化、规范化的准则。在软件产业界,目前已经形成共识,软件测试是软件生产工程化过程中不可或缺的活动。借助于软件测试理论的完善、方的标准化以及丰富工具的支持,软件测试在生产活动中的普及程度和地位得到了极大提升,软件企业均设立了独立的测试部门或专业的测试工程师岗位。在社会层面,软件用户及大众的软件质量意识越来越浓厚,对软件测试越来越重视,不仅直接参与软件的一些测试活动,而且积极寻求独立评价方提供专业且公正的测试服务。因此,软件测试工程师成为了产业界一个重要且需求量相当大的职位,市场上该类人才的供应量离需求量一直存在差距,软件测试工程师的薪酬水平保持着稳定的增长趋势。在可以预见的未来,软件测试的地位和价值在产业界将愈发突显。
……
VIP会员

