您好,欢迎光临有路网!
Effective软件测试
QQ咨询:
有路璐璐:

Effective软件测试

  • 作者:(荷)毛里西奥·阿尼什(Maurício Aniche)著 朱少民 李洁 张元 译
  • 出版社:清华大学出版社
  • ISBN:9787302629375
  • 出版日期:2023年06月01日
  • 页数:0
  • 定价:¥98.00
  • 猜你也喜欢

    分享领佣金
    手机购买
    城市
    店铺名称
    店主联系方式
    店铺售价
    库存
    店铺得分/总交易量
    发布时间
    操作

    新书比价

    网站名称
    书名
    售价
    优惠
    操作

    图书详情

    内容提要
    《Effective软件测试》将帮助你交付优质软件。在软件开发过程中,测试是*关键的部分。为编写良好测试以及防止bug进入生产环节,你必须精通掌握基于需求规格的测试、边界测试、结构化测试以及其他核心策略。 这本实用指南将引导***了解不同类型的单元测试和集成测试。***将学会如何使代码便于测试,以及如何编写易于维护的测试代码,从而创建无缺陷的软件。本书的讲解全面、系统且透彻,富有清晰注释的示例代码,呈现紧贴现实的场景,并对此做了深刻的阐述。 主要内容 ?设计严格的测试套件来查找bug。 ?适时地使用单元测试、集成测试和系统测试 ?前置条件、后置条件、不变式、契约测试和基于属性的测试 ?设计测试友好的系统 ?测试**实践和测试坏味道 ?利用基于Java的示例来阐释概念,这些概念也适用于其他面向对象的语言
    目录
    第1章 有效和系统的软件测试 1 1.1 测试的***与不测试的***的对比 2 1.2 ***的有效软件测试 14 1.2.1 开发过程中有效的测试 14 1.2.2 有效测试是一个迭代过程 16 1.2.3 专注于开发,然后专注于测试 16 1.2.4 “设计正确性”的神话 17 1.2.5 测试的成本 17 1.2.6 有效和系统的含义 17 1.2.7 测试自动化的作用 18 1.3 软件测试的原则(或者,为什么测试如此困难) 19 1.3.1 详尽的测试是不可能的 19 1.3.2 知道何时停止测试 19 1.3.3 可变性很重要(杀虫剂悖论) 20 1.3.4 缺陷在某些地方更容易发生 20 1.3.5 测试永远不可能**或充分 20 1.3.6 上下文信息特别重要 21 1.3.7 验证不同于确认 21 1.4 测试金字塔,以及我们应该关注的地方 22 1.4.1 单元测试 22 1.4.2 集成测试 24 1.4.3 系统测试 25 1.4.4 何时使用每个测试层次 27 1.4.5 偏爱单元测试的原因 28 1.4.6 在不同层次上测试什么 28 1.4.7 如果你不同意测试金字塔,该怎么办 29 1.4.8 本书能帮助大家找到所有bug吗 31 1.5 练习题 32 1.6 本章小结 34 第2章 基于需求规格的测试 35 2.1 需求告诉我们一切 36 2.1.1 步骤1:理解需求、输入和输出 39 2.1.2 步骤2:探索程序在各种输入情况下的行为 39 2.1.3 步骤3:探索可能的输入和输出,并确定分区 41 2.1.4 步骤4:分析边界 43 2.1.5 步骤5:设计测**例 46 2.1.6 步骤6:测**例的自动化 48 2.1.7 步骤7:用创造力和经验增补测试集 51 2.2 基于需求规格的测试简述 52 2.3 通过SBT发现缺陷 54 2.4 实际工作中的SBT 64 2.4.1 测试过程是迭代的,而不是顺序的 64 2.4.2 SBT的测试深度 64 2.4.3 分区还是边界?这并不重要 65 2.4.4 上点和离点就足够了,但可以加入一些内点和外点 65 2.4.5 通过相同输入的变化来促进理解 65 2.4.6 当组合数量激增时,务实一点 66 2.4.7 有疑问时,选择*简单的输入值 66 2.4.8 为无关紧要的输入选取合理的值 66 2.4.9 测试null值和异常情况,但只在有意义的时候 67 2.4.10 当测**例的骨架相同时,采用参数化测试方法 67 2.4.11 适用于任何层次的需求或单元测试以外的测试 67 2.4.12 如何测试有状态的类 68 2.4.13 经验和创造力的影响 70 2.5 练习题 70 2.6 本章小结 73 第3章 结构化测试与代码覆盖 75 3.1 代码覆盖的正确使用方式 76 3.2 结构化测试概述 79 3.3 代码覆盖标准 81 3.3.1 行覆盖 81 3.3.2 分支覆盖 82 3.3.3 条件 分支覆盖 82 3.3.4 路径覆盖 84 3.4 复杂条件语句和MC/DC覆盖标准 84 3.4.1 一个抽象的例子 84 3.4.2 创建一个实现MC/DC的测试集 85 3.5 处理循环语句及类似结构 88 3.6 标准之间的包含关系及标准的选择 89 3.7 基于需求规格的测试结合结构化测试:一个实例 90 3.8 边界测试和结构化测试 96 3.9 单靠结构化测试往往不够 97 3.10 实际工作中的结构化测试 99 3.10.1 为什么有些人痛恨代码覆盖率 99 3.10.2 ****的覆盖率意味着什么 101 3.10.3 应该选择哪种覆盖率标准 103 3.10.4 MD/DC:非常复杂且不能简化的表达式 103 3.10.5 其他覆盖标准 105 3.10.6 哪些代码不应被覆盖 105 3.11 变异测试 106 3.12 练习题 109 3.13 本章小结 113 第4章 契约式设计 115 4.1 前置条件和后置条件 116 4.1.1 断言关键字 118 4.1.2 前置条件和后置条件的强弱 119 4.2 不变式 121 4.3 契约变更与里氏替换原则 125 4.4 契约式设计和测试的关系 130 4.5 实际工作中的契约式设计 131 4.5.1 弱契约还是强契约 131 4.5.2 输入确认与契约必须2选1吗 131 4.5.3 断言语句还是异常处理 134 4.5.4 抛出异常还是软返回值 135 4.5.5 契约式设计有不适用的情况吗 136 4.5.6 前置条件、后置条件和不变式的代码需要测试吗 136 4.5.7 工具支持 137 4.6 练习题 137 4.7 本章小结 139 第5章 基于属性的测试 141 5.1 示例1:PassingGrade程序 141 5.2 示例2:测试unique方法 146 5.3 示例3:测试indexOf方法 148 5.4 示例4:测试Basket类 155 5.5 示例5:创建复杂的领域对象 163 5.6 实际工作中的基于属性的测试 165 5.6.1 基于实例的测试与基于属性的测试 165 5.6.2 基于属性测试中的常见问题 165 5.6.3 创造性是关键 167 5.7 练习题 167 5.8 本章小结 168 第6章 测试替身和模拟对象 169 6.1 哑对象、伪对象、桩对象和模拟对象 172 6.1.1 哑对象 172 6.1.2 伪对象 172 6.1.3 桩对象 172 6.1.4 模拟对象 173 6.1.5 间谍对象 173 6.2 模拟框架的介绍 174 6.2.1 依赖项插桩 174 6.2.2 模拟对象及预期 180 6.2.3 捕获参数 184 6.2.4 模拟异常 188 6.3 实际工作中的模拟 190 6.3.1 模拟的局限性 191 6.3.2 适合使用模拟的场景 193 6.3.3 日期和时间包装器 197 6.3.4 模拟第三方类库 200 6.3.5 其他人对模拟的看法 202 6.4 练习题 204 6.5 本章小结 205 第7章 可测试性设计 207 7.1 基础设施代码和领域代码分离 208 7.2 依赖注入和可控制性 217 7.3 让类和方法具有可观察性 221 7.3.1 示例1:引入有助于断言的方法 221 7.3.2 示例2:观察void方法的行为 223 7.4 构造函数的依赖项,还是使用方法的参数 227 7.5 实际工作中的可测试性设计 230 7.5.1 被测试类的内聚性 231 7.5.2 被测试类的耦合 232 7.5.3 复杂条件与可测试性 233 7.5.4 私有方法的可测试性 233 7.5.5 静态方法、单例模式与可测试性 233 7.5.6 六边形架构与设计技术中的模拟 234 7.5.7 延伸阅读 234 7.6 练习题 235 7.7 本章小结 237 第8章 测试驱动的开发 239 8.1 **个TDD练习 239 8.2 针对TDD练习的思考 249 8.3 实际工作中的TDD 251 8.3.1 采用TDD还是不采用TDD 251 8.3.2 需要****的TDD吗 252 8.3.3 TDD适用于所有应用程序和领域吗 252 8.3.4 学术研究对TDD的观点 253 8.3.5 TDD的其他学派 254 8.3.6 TDD和彻底的测试 256 8.4 练习题 256 8.5 本章小结 258 第9章 编写大型测试 259 9.1 什么时候使用大型测试 259 9.1.1 测试大型组件 260 9.1.2 测试超出代码库的大型组件 269 9.2 数据库与SQL测试 275 9.2.1 SQL查询中测试的内容 275 9.2.2 为SQL查询写自动化测试 277 9.2.3 为SQL测试设置基础设施 284 9.2.4 *佳实践 286 9.3 系统测试 287 9.3.1 Selenium简介 288 9.3.2 设计页面对象 291 9.3.3 模式与*佳实践 301 9.4 关于大型测试的*后说明 305 9.4.1 如何让所有的测试技术匹配 305 9.4.2 执行成本效益分析 306 9.4.3 当心那些已覆盖但未测试的方法 306 9.4.4 适当的编码基础设施是关键 307 9.4.5 干系人编写测试的DSL和工具 307 9.4.6 测试其他类型的Web系统 307 9.5 练习题 308 9.6 本章小结 309 第10章 测试代码的质量 311 10.1 可维护的测试代码的原则 312 10.1.1 测试要快 312 10.1.2 测试应该是内聚的、独立的和隔离的 312 10.1.3 测试要有存在的理由 313 10.1.4 测试应该是可复用且稳定的 313 10.1.5 测试应该有强断言 314 10.1.6 行为改变时测试要中断 315 10.1.7 测试失败应该有单一且明确的原因 315 10.1.8 测试应该易于编写 316 10.1.9 测试应该易于阅读 316 10.1.10 测试应该易于修改和演化 321 10.2 测试坏味道 321 10.2.1 过度重复 322 10.2.2 不明确的断言 322 10.2.3 对复杂或外部资源的处理不当 323 10.2.4 过于通用的测试夹具 324 10.2.5 敏感断言 325 10.3 练习题 327 10.4 本章小结 330 第11章 全书总结 333 11.1 尽管模型看起来是线性的,但迭代是基础 333 11.2 没有缺陷的软件开发:现实还是神话 334 11.3 让*终用户参与进来 335 11.4 尽量多使用单元测试 335 11.5 在监控上投入精力 336 11.6 未来的方向 337 附录 习题答案 339

    与描述相符

    100

    北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海 江苏 浙江 安徽 福建 江西 山东 河南 湖北 湖南 广东 广西 海南 重庆 四川 贵州 云南 西藏 陕西 甘肃 青海 宁夏 新疆 台湾 香港 澳门 海外