测试工程师的领航指南:《Effective软件测试》

目录

  • 前言
  • 一、本书适合对象
  • 二、本书大纲
    • 第1章:有效和系统的软件测试
    • 第2章:基于需求规格的测试
    • 第3章:结构化测试与代码覆盖
    • 第4章:契约式设计
    • 第5章:基于属性的测试
    • 第6章:测试替身和模拟对象
    • 第7章:可测试性设计
    • 第8章:测试驱动的开发
    • 第9章:编写大型测试
    • 第10章:测试代码的质量
    • 第11章:全书总结
  • 三、写在最后
  • 🌟赠书福利

本书的作者Mauricio Aniche,是荷兰代尔夫特理工大学的软件工程助理教授,他致力于软件测试方面的教学并赢得了2021年度计算机科学教师奖和代尔夫特理工大学教育奖学金,拥有巴西圣保罗大学计算机科学硕士和博士学位。
Mauricio坚信软件工程将很快成为一个更加以科学为基础的领域。他的目标之-是确保从业者了解学者在研究什么,并确保学者了解从业者在日常工作中面临的真正挑战。

前言

对于测试开发工程师,我会强烈推荐这本书。尽管书中包含许多看似零散的小知识点,但每一个字句都蕴含深意。对于那些有着2年到20年测试经验的人来说,翻阅这本书,每一条内容都会与之产生强烈共鸣,或者让其对测试领域的认识有了更深的体会。随着工作经验的积累,对书中内容的理解会变得更加深刻。

一、本书适合对象

  • 本书可以学习更多有关测试知识或提高测试技能,如果你有多年的软件工程经验并且写过很多自动化测试,但总是按照自己的直觉来判断下一个测试用例应该是什么,那么本书将为你呈现系统性的思维过程。

  • 不同专业水平的开发者都能从本书中收获到各自的感悟。新手开发者可以跟随笔者介绍的所有代码示例和技术来学习。高级开发者可以了解他们可能不熟悉的技术,并从每一章的务实讨论中学到知识。

二、本书大纲

第1章 有效和系统的软件测试
第2章 基于需求规格的测试
第3章 结构化测试与代码覆盖
第4章 契约式设计
第5章 基于属性的测试
第6章 测试替身和模拟对象
第7章 可测试性设计
第8章 测试驱动的开发
第9章 编写大型测试
第10章 测试代码的质量
第11章 全书总结

第1章:有效和系统的软件测试

构建了系统且有效的软件测试的案例。我们举了一个涉及两名开发者的例子——两者都实现了相同的功能,一个是随意的,另一个是系统性的——并指出了两种方法之间的差异。然后讨论了单元测试、集成测试和系统测试之间的区别,并认为开发者首先应该关注快速的单元测试和集成测试(众所周知的测试金字塔)。

第2章:基于需求规格的测试

介绍了领域测试,这种测试实践侧重于基于需求的工程测试用例。软件开发团队在需求方面使用不同的实践(用户故事、UML或内部格式),并且领域测试会使用这些信息。每个测试会话都应该从正在开发的功能需求开始。

第3章:结构化测试与代码覆盖

展示了如何在领域测试之后,使用程序的源代码和结构来增强测试。可运行代码覆盖率工具,并使用其结果来反映最初的测试集没有覆盖的代码部分。一些开发者不认为代码覆盖率是一个有用的指标,但在该章中,我们希望让大家相信,如果应用得当,代码覆盖率测试应该是测试过程的一部分。

第4章:契约式设计

讨论质量超越测试的想法:效果取决于如何为代码建模,以及我们的方法和类赋予系统其他类和方法的确定性。契约式设计使代码的前置条件和后置条件明确。这样一来,如果出现问题,程序将停止而不会引起其他问题。

第5章:基于属性的测试

介绍基于属性的测试。我们不是基于单个具体例子编写测试,而是测试程序的所有属性。测试框架负责生成与属性匹配的输入数据。掌握这项技术可能很棘手:表达属性并不容易,而且需要很多练习。基于属性的测试也更适合某些代码片段。该章有很多证明这个概念的示例。

第6章:测试替身和模拟对象

讨论了超越设计良好的测试用例的实用性。在更复杂的系统中,类依赖于其他类,编写测试可能成为一种负担。我们介绍了模拟对象(Mock)和桩对象(Stub),它们让我们在测试期间可以忽略一些依赖关系。还讨论了一个重要的权衡:尽管模拟对象简化了测试,但也使测试与生产代码更加耦合,这可能导致测试代码不能优雅地演化。该章讨论了模拟对象的利弊,以及何时使用(或不使用)它们。

第7章:可测试性设计

解释了在设计时考虑了可测试性的系统与不考虑可测试性的系统之间的区别。我们讨论了几种简单的模式,它们将帮助我们编写易于控制和易于观察的代码(任何进入测试世界的开发者的梦想)。该章讨论了软件设计和测试的关系——正如我们将看到的,它们之间有着密切的关系。

第8章:测试驱动的开发

讨论测试驱动开发(TDD):在开发产品代码之前编写测试。 TDD是一种非常流行的技术,尤其是在敏捷实践者中。即使你已经熟悉了 TDD,也建议你阅读这一章——笔者对如何应用TDD有一些不同寻常的看法,尤其是在你认为TDD没有太大作用的情况下。

第9章:编写大型测试

本章节超越了单元测试,讨论了集成和系统测试。将之前章节中所讨论的测试技术(例如领域测试和结构化测试)直接应用到这里。编写集成测试和系统测试需要更多的代码,所以如果我们不能很好地组织代码,最终可能得到一个复杂的测试集。该章介绍了编写可靠且易于维护的测试集的几个最佳实践。

第10章:测试代码的质量

讨论了测试代码的最佳实践。以自动化方式编写测试是测试流程的基本内容。我们还希望编写易于理解和维护的测试代码。该章介绍了最佳实践(我们希望从测试中得到的)和不良实践(我们不希望在测试中出现的)。

第11章:全书总结

重新审视了本书涵盖的一些概念,强化了重要的主题,并就下一步的发展方向提供了一些建议。

三、写在最后

这本书是一本永远值得再次阅读的书,它能够一直为你提供指导。从某种意义上来说,它教给测试人员的是“思辨思维”,这是最为重要的财富。它不仅教授了测试的基本原则和技巧,还培养了测试人员独立思考和解决问题的能力。它不仅仅是一本关于测试的书,更是一本关于思考和学习的书,对于职业发展和个人成长都具有巨大的帮助。

🌟赠书福利

🔥送书福利:《Effective软件测试》
参与方式:评论区进行优质评论
截止时间:即日 - 2023.9.6 12:00 抽3位小伙伴各赠送一本实体书
PS:如果没有抽到书籍的想自己购买,购书传送门:点击购买

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/67835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python综合案例(基本地图使用)

一、基本地图的使用 基本代码: """ 演示地图可视化的基本使用 """ from pyecharts.charts import Map from pyecharts.options import VisualMapOpts# 准备地图对象 map Map() # 准备数据 data [("北京", 99),("…

【C++进阶(四)】STL大法--list深度剖析list迭代器问题探讨

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C   🔝🔝 链表list 1. 前言2. list的使用2.1 list的构造函…

【树形权限】树形列表权限互斥选择、el-tree设置禁用等等

文章目录 一、实现如上树形列表1.1 首先要就是渲染树形列表1.2 然后通过插槽处理头部标题1.3 再通过插槽处理表格body体内容1.4 让body体中的选框和表头中的选框产生关联 二、将 el-tree 整棵树设为禁用状态三、动态表格合并 需求:按照权限管理配置的数据权限树展开…

如何利用客户旅程打造好的用户体验?

在当今竞争激烈的市场中,提供卓越的用户体验已经成为企业脱颖而出的关键因素之一。客户旅程是实现出色用户体验的有力工具之一,而HubSpot的客户旅程规划功能为企业提供了强大的支持,帮助他们更好地理解、管理和改善客户的互动过程。今天运营坛…

【USRP】调制解调系列5:16QAM、32QAM、64QAM、256QAM、1024QAM、基于labview的实现

QAM 正交振幅键控是一种将两种调幅信号(2ASK和2PSK)汇合到一个信道的方法,因此会双倍扩展有效带宽,正交调幅被用于脉冲调幅。正交调幅信号有两个相同频率的载波,但是相位相差90度(四分之一周期&#xff0c…

参编三大金融国标,奇富科技以技术促行业规范化演进

近期,由中国互联网金融协会领导制定的《互联网金融智能风险防控技术要求》《互联网金融个人网络消费信贷信息披露》《互联网金融个人身份识别技术要求》三项国家标准颁布,由国家市场监督管理总局、国家标准化管理委员会发布,奇富科技作为核心…

Flutter 混合开发调试

针对Flutter开发的同学来说,大部分的应用还是Native Flutter的混合开发,所以每次改完Flutter代码,运行整个项目无疑是很费时间的。所以Flutter官方也给我们提供了混合调试的方案【在混合开发模式下进行调试】,这里以Android Stud…

OPENCV实现图像查找

特征匹配+单应性矩阵 # -*- coding:utf-8 -*- """ 作者:794919561 日期:2023/9/4 """ import cv2 import numpy as np# 读图像 img1 = cv2.imread(F:\\learnOpenCV\\openCVLearning\\pictures\\chess

【HTML5高级第一篇】Web存储 - cookie、localStorage、sessionStorage

文章目录 一、数据存储1.1 cookie1.1.1 概念介绍1.1.2 存储与获取1.1.3 方法的封装1.1.4 总结 1.2 localstorage 与 sessionstorage1.2.1 概述1.2.2 操作数据的属性或方法1.2.3 案例-提交问卷1.2.4 Web Storage带来的好处 附录:1. HTML5提供的数据持久化技术&#x…

万里路,咫尺间:汽车与芯片的智能之遇

目前阶段,汽车产业有两个最闪耀的关键词,就是智能与低碳。 在践行双碳目标与产业智能化的大背景下,汽车已经成为了能源技术、交通技术、先进制造以及通信、数字化、智能化技术的融合体。汽车的产品形态与产业生态都在发生着前所未有的巨大变革…

Hadoop的概述与安装

Hadoop的概述与安装 一、Hadoop内部的三个核心组件1、HDFS:分布式文件存储系统2、YARN:分布式资源调度系统3、MapReduce:分布式离线计算框架4、Hadoop Common(了解即可) 二、Hadoop技术诞生的一个生态圈数据采集存储数…

C语言:递归思想及实例详解

简介:在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。通过函数的自调用化繁为简。 递归可以说是编程中最神奇的一种算法。因为我们有时候可能不能完全明晰代码的运行过程,但是我们却知道代码可以跑出正确的结果。而当我们使…

qt day 6

登录界面 #include "window.h" #include<QDebug> #include<QIcon> Window::Window(QWidget *parent) //构造函数的定义: QWidget(parent) //显性调用父类的构造函数 {//判断数据库对象是否包含了自己使用的数据库Student.dbif(!db.contains(&…

微波系统中散射参量S、阻抗参量Z及导纳参量Y之间的关系及MATLAB验证

微波系统中散射参量S、阻抗参量Z及导纳参量Y之间的关系及MATLAB验证 用HFSS设计了一微波元件&#xff0c;仿真出了其散射参量S、阻抗参量Z及导纳参量Y&#xff0c;用MATLAB验证他们之间的关系 HFSS设计螺旋线圈 用HFSS设计了一个螺旋线圈&#xff0c;如上图所示。 进行仿真&…

8K视频来了,8K 视频编辑的最低系统要求

当今 RED、Canon、Ikegami、Sony 等公司的 8K 摄像机以及 8K 电视&#xff0c;许多视频内容制作人和电影制作人正在认真考虑 8K 拍摄、编辑和后期处理&#xff0c;需要什么样的系统来处理如此海量的数据&#xff1f; 中央处理器&#xff08;CPU&#xff09; 首先&#xff0c;…

Spring Security安全登录的调用过程以及获取权限的调用过程

1.第一次登录时候调用/user/login整个流程分析 (0)权限授理 首先调用SecurityConfig.java中的config函数将jwtAuthenticationTokenFilter过滤器放在UsernamePasswordAuthenticationFilter之前 Override protected void configure(HttpSecurity http) throws Exception{......…

FinClip 支持创建 H5应用类小程序;PC 终端 优化升级

FinClip 的使命是使您能够通过小程序解决关键业务流程挑战&#xff0c;并完成数字化转型。不妨让我们看看本月产品与市场发布亮点&#xff0c;是否有助于您实现目标。 产品方面的相关动向&#x1f447;&#x1f447;&#x1f447; FinClip 支持创建 H5应用类小程序 近期我们…

MongoDB常用的比较符号和一些功能符号

比较符号 results collection.find({age: {$gt: 20}})功能符号 results collection.find({name: {$regex: ^M.*}})

怎么把pdf转换成高清图片?

怎么把pdf转换成高清图片&#xff1f;最近&#xff0c;我的同事遇到了一个问题&#xff0c;现在她需要将一些pdf文件转换成高清的图片&#xff0c;这件事情让让她感到非常无助&#xff0c;因为她非常着急需要将这些文件转换为图片格式&#xff0c;以便更好的在今后的工作中进行…

Ubuntu 22.04.2 LTS 安装python3.6后报错No module named ‘ufw‘

查明原因&#xff1a; vim /usr/sbin/ufw 初步判断是python版本的问题。 # 查看python3软链接 ll /usr/bin/python3 将python3的软链接从python3.6换成之前的3.10&#xff0c;根据自己电脑情况。 可以查看下 /usr/bin 下有什么 我这是python3.10 所以解决办法是 # 移除py…