| 作者: | Maurício Aniche |
| 语言: | 英文 |
| 出版年份: | 2022 |
| 下载链接: |
书籍均收集自互联网,仅供学习和研究使用,请莫用于商业用途。谢谢合作。 |
《Effective Software Testing: A developer's guide》是一本由Manning出版社出版的实用软件测试指南,专为开发人员设计。作者Maurício Aniche是荷兰代尔夫特理工大学的助理教授,同时也是Adyen支付公司技术学院的负责人,在软件工程教育和实践领域都有丰富的经验。本书的核心理念是"有效的软件测试",旨在帮助开发人员掌握系统化、高效的测试方法,而不仅仅是依赖工具和直觉。本书荣获代尔夫特理工大学2021年度"计算机科学年度教师"奖,体现了作者在教学方面的卓越能力。
第一部分建立了软件测试的理论基础和实践框架。第1章通过对比两个开发者(John和Eleanor)处理同一问题的不同方式,生动展示了有效测试的重要性。John依赖直觉和手动测试,结果导致生产环境bug频发;而Eleanor采用系统化方法,通过自动化测试发现并预防了多个潜在问题。这一对比为全书奠定了基调:测试需要系统化而非依赖直觉。
第2章深入讲解基于规格的测试(Specification-based testing),这是本书的核心测试方法之一。作者提出了一个七步流程:理解需求、探索程序行为、识别输入分区、分析边界、设计测试用例、自动化测试用例、以及通过创造力和经验增强测试套件。这种方法帮助开发人员从需求出发,系统化地设计测试用例。
第3章介绍结构化测试和代码覆盖率。作者强调代码覆盖率应当正确使用,而不是简单地追求高百分比。本章详细讲解了各种覆盖率标准:行覆盖率、分支覆盖率、条件+分支覆盖率、路径覆盖率,以及更复杂的MC/DC(修改条件/判定覆盖)标准。作者还讨论了变异测试(Mutation testing),这是一种评估测试套件有效性的高级技术。
第二部分涵盖了更高级的测试技术和设计模式。第4章专注于契约设计(Design by Contract),介绍了前置条件、后置条件和不变量的概念。作者讨论了强契约和弱契约的区别,以及如何在测试中有效应用这些概念。
第5章深入讲解基于属性的测试(Property-based testing),这是一种与基于示例的测试相对的技术。通过多个实际案例,作者展示了如何定义程序属性,让测试框架自动生成测试数据。这种方法特别适合发现边界情况和难以预见的bug。
第6章专门讨论测试替身和模拟(Test doubles and mocks),包括虚拟对象(Dummies)、伪造对象(Fakes)、存根(Stubs)、间谍(Spies)和模拟对象(Mocks)。作者不仅介绍了如何使用模拟框架,还深入讨论了模拟的优缺点,以及何时应该(或不应该)使用模拟。
第7章关注可测试性设计(Designing for testability),这是测试驱动开发中的重要概念。作者介绍了如何通过分离基础设施代码和领域代码、依赖注入、提高类的可观察性等技术来设计易于测试的系统。
第8章讨论测试驱动开发(Test-driven development),但作者提供了独特的视角。他区分了TDD作为开发技术(帮助设计代码)和TDD作为测试技术(确保代码正确性),并讨论了何时TDD适用、何时不适用,以及相关研究结果。
第三部分将前面学到的技术应用于更广泛的测试场景。第9章讲解如何编写更大的测试(集成测试和系统测试)。作者详细讨论了数据库和SQL测试、系统测试(使用Selenium),以及如何为大型测试设计有效的模式和最佳实践。
第10章专注于测试代码质量,这是许多测试套件长期维护的关键。作者提出了可维护测试代码的原则:测试应该快速、内聚、独立、有存在理由、可重复、断言强、在行为变化时失败、失败原因明确、易于编写、易于阅读、易于更改和演进。本章还讨论了测试异味(Test smells),帮助识别测试代码中的问题模式。
第11章是全书的总结,回顾了书中的核心概念,强调了迭代的重要性,讨论了"无缺陷软件开发"的现实与神话,并给出了进一步学习的建议。
本书最大的价值在于提供了一套完整的、系统化的测试方法论。作者不是简单地介绍测试工具,而是教授如何思考测试问题。从需求分析到代码实现,再到测试设计和执行,每个环节都有明确的指导原则。
作者Maurício Aniche既是大学教授又是行业实践者,这种双重身份让本书既有理论深度又有实践指导。书中引用了大量研究论文,同时提供了丰富的实际案例,帮助读者理解理论如何应用于实际项目。
本书涵盖了从基础的规格测试到高级的属性测试、从单元测试到系统测试、从测试设计到测试代码质量的各个方面。这种全面性让读者能够建立完整的测试知识体系。
书中提出的"开发-测试分离"流程(先专注于开发,再专注于测试)是一种实用的工作方式。它让开发者能够在不同阶段专注于不同任务,提高工作效率。
本书的核心概念是"有效测试"——在有限的测试资源下最大化发现bug的可能性。作者通过系统化的方法帮助读者设计更有可能发现问题的测试用例,而不是盲目增加测试数量。
《Effective Software Testing: A developer's guide》是一本全面、深入、实用的软件测试指南。它不仅教授测试技术,更重要的是培养系统化测试的思维方式。无论你是希望提高个人测试技能的开发者,还是需要在团队中建立有效测试实践的技术领导者,这本书都能提供宝贵的指导。通过本书的学习,读者将能够摆脱依赖直觉的测试方式,建立起基于方法论的有效测试实践,最终提高软件质量并减少生产环境bug。