代码整洁之道--读书笔记(8)

news/2024/11/15 17:48:17/文章来源:https://www.cnblogs.com/TonyCode/p/18409247

代码整洁之道

image-20240904225436374

简介:

本书是编程大师“Bob 大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更高台阶。

本书适合所有程序员阅读,也可供所有想成为具备职业素养的职场人士参考。

第八章 测试策略

img

专业开发人员会测试自己的代码。但是,测试并不就是写一些单元测试或验收测试那么简单。编写这些测试只是万里长征的第一步。每个专业的开发团队都需要一套好的测试策略。

8.1 QA

  • 尽管公司可能设有独立的QA小组专门测试软件,但是开发小组仍然要把“QA应该找不到任何错误”作为努力的目标。

  • QA和开发人员应该紧密协作,携手保障系统的质量。QA在团队中要扮演的便是需求规约定义者(specifier)特性描述者(characterizer)

  • 需求规约定义者:

    QA的任务便是和业务人员一起创建自动化验收测试,作为系统真正的需求规约文档。每轮迭代中,他们都可以从业务人员那里收集需求,将之翻译为向开发人员描述系统行为的测试(参考第7章)。通常,业务人员编写针对正常路径的测试(happy-path test),而由QA编写针对极端情况(corner)、边界状态(boundary)和异常路径(unhappy-path)的测试。

  • 特性描述者:

    QA的另一项任务是遵循探索式测试的原则,描述系统运行中的真实情况,将之反馈给开发人员和业务人员。在这项任务中,QA并没有解析需求,而是在鉴别系统的真实情况。

8.2 自动化测试金字塔

img

单元测试

  • 在金字塔底部是单元测试,这些测试由程序员使用与系统开发相同的语言来编写,供程序员自己使用。
  • 编写这些测试的目的是在最低层次上来定义系统。开发人员是这样定义待写代码规约的:先编写测试,再编写产品代码。这些单元测试将作为持续集成的一部分来运行,用以确保程序员的代码意图没有遭到破坏。
  • 单元测试是可行的,而且可以做到接近100%的覆盖率。通常而言,这个数字应该保持在90%以上。这里说的是真实的覆盖率,而不是那种虽然能通过但并不关心运行结果的错误的单元测试。

组件测试:

  • 组件测试是验收测试的一种,通常,它们是针对系统的各个组件而编写的。系统的组件封装了业务规则,因此,对这些组件的测试便是对其中业务规则的验收测试。
  • 组件测试由QA和业务人员编写,开发人员提供辅助。
  • 组件测试差不多可以覆盖系统的一半。它们更主要测试的是成功路径的情况,以及一些明显的极端情况、边界状态和可选路径。大多数的异常路径是由单元测试来覆盖测试的。在组件测试层次,对异常路径进行测试并无意义。
img

集成测试:

  • 这些测试只对那些组件很多的较大型系统才有意义。如图8-3所示,这些测试将组件装配成组,测试它们彼此之间是否能正常通信。照例要使用合适的模拟对象和测试辅助,与系统的其他组件解耦。
  • 集成测试是编排性(choreography)测试。它们并不会测试业务规则,而是主要测试组件装配在一起时是否协调。它们是装配测试,用以确认这些组件之间已经正确连接,彼此间通信畅通。
  • 集成测试一般由系统架构师或主设计师来编写,用以确认系统架构层面的结构是否正确无误。在这个层次上,也许已经可以进行性能测试和吞吐率测试了。
  • 集成测试多使用与组件测试同样的语言和环境来编写,一般不会作为持续集成的一部分,因为集成测试的运行时间通常都比较长。但是,只要集成测试的编写人员认为有必要,这些测试就可以周期性(如每天一次或每周一次)运行。
img

系统测试:

  • 这些测试是针对整个集成完毕的系统来运行的自动化测试,是最终的集成测试。它们不会直接测试业务规则,而是测试系统是否已正确组装完毕,以及系统各个组成部件之间是否能正确交互(应该包含吞吐率测试和性能测试)。
  • 系统测试由系统架构师和技术负责人来编写,一般使用和UI集成测试同样的语言和环境。测试周期视测试运行时间长短而定,相对而言不会过于频繁,但越频繁越好。
  • 系统测试约占测试的10%。其目的不是要确保正确的系统行为,而是要确保正确的系统构造。

人工探索式测试:

  • 这是需要人工介入、敲击键盘、盯牢屏幕的测试。它们既非自动化的测试,亦非脚本化的测试。这些测试的意图,是要在验证预期行为的时候,探索系统预期之外的行为。
  • 覆盖率并非此类测试的目标。探索式测试不是要证明每条业务规则、每条运行路径都正确,而是要确保系统在人工操作下表现良好,同时富有创造性地找出尽可能多的“古怪之处”。

结论

  • TDD(测试驱动开发)很强大,验收测试是表达和强化需求的有效方式。
  • 创建由单元测试、组件测试、集成测试、系统测试和探索式测试构成的测试体系。
  • 应该尽可能频繁地运行这些测试,提供尽可能多的反馈,确保系统始终整洁。

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

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

相关文章

java学习9.11

IDEA里导入mybatis,lombok等依赖成功连接好数据库。 并将MYSQL数据库同时用navicat连接便利创建表等操作。设计实体类student并在数据库设计好表接下来就是如何实现在数据库里的增删改查 设计接口类mapper,将操作简化最后能正常运行实现功能。 总的来说这一块内容,刚开始学,…

LOJ4222 「IOI2024」马赛克上色 题解

题目描述 给定长为 \(n\) 、下标从零开始的 \(01\) 序列 \(x,y\) ,保证 \(x_0=y_0\) 。 令 \(col_{0,j}=x_j,col_{i,0}=y_i\) ,对 \(\forall 1\le i\lt n,1\le j\lt n\) , \(col_{i,j}=[col_{i-1,j}=0\and col_{i,j-1}=0]\) 。 \(q\) 次询问,给定 \(u,d,l,r\) ,求 \(\sum_…

2024 必收藏✨免费手机铃声下载网站大公开

最推荐的方式,当然是在线网站了。1.北岛铃声网 https://www.beidaols.cn/优点:免费下载:用户可以免费获取各种手机铃声,无需支付费用。 铃声多样:提供了丰富的铃声选择,满足不同用户的个性化需求。 教程详细:提供了详细的设置苹果铃声的教程,对于不熟悉苹果手机设置的…

原神蒙德-Typora模板

基于Newsprint主题开发的一种Typora模板新建模板 打开Typora - 文件 - 偏好设置 - 外观 - 打开主题文件夹 找到其中的 Newsprint (应该有一个文件夹+一个css,都要) ,拷贝副本,重命名(我命名的是“custom”),一定要这一步,不然后期更新的时候会覆盖 修改 打开其中的 cu…

学习日历-2024/9/11

LinkList集合 底层数据结构时双链表,查询慢,首尾操作的速度是极快的,所以多了很多的首尾操作在使用迭代器或者增强for循环遍历集合的过程中,不要使用集合的方法去添加或者删除元素即可 SQL DML-添加数据 1.给指定字段添加数据 INSERT INTO 表名(字段名1,字段名2,...) VALUES(值…

真实Redmi note11t pro澎湃刷机

解决:澎湃如何刷回miui13-14系统 澎湃bl解锁后结合视频进行刷机 刷机包下载地址 刷机工具1. 备份 首先先备份当前资料小米云备份使用小米手机助手备份资料2. 澎湃bl解锁 手机打开开发者 ​​ 连接电脑usb文件传输模式 ‍ 打开澎湃bl解锁 ,双击 点我开始解锁.bat 运行以后手机会…

[python][selenium] Web UI自动化切换iframe框架以及浏览器操作切换窗口和处理弹窗

分两部分:一、页面切换iframe框架     二、浏览器操作:切换窗口、处理弹窗一、页面切换iframe框架 3种iframe的切换方法: 1、切换iframe的方法:switch_to.frame  入参有4种:  1.1、id  1.2、name  1.3、index索引  1.4、iframe元素对象 2、返回主文档(最外…

js的常用类2

1.js的常用类DOM,将js,html中的各种文档,元素,标签等等封装成方法;和类

【openmediavault】更改端口后急救方案

首先,如果你手贱改了这个 导致你登陆不了的话,不要慌 找到你的控制台,我的是树莓派 将你的树莓派设置成root模式,如果服务器本身就是root就不用设置 树莓派设置root方法sudo su然后omv-firstaid 这个界面点ok即可,加载会有点慢是正常的现象#videoTogetherLoading { touch…

Git流程学习

初始化仓库特别要注意如果初始化仓库时勾选了图中第一个红框(即添加README仓库描述),它会给出下面红框的提示即将main作为默认分支,该部分的示例以此种方式初始化仓库。 注:2020年10月后GitHub宣布新建项目的默认分支将从master逐步改为main。以前一些教程给出的命令一般都…

.NET 9 RC1 正式发布

.NET 9 RC1 是 .NET 9 的第一个候选发布版本(Release Candidate),标志着该版本接近最终发布。根据Github 上相关的内容,我们可以总结出以下几点:新功能和改进:在 .NET 9 RC1 中,引入了许多新的功能和改进。例如,ASP.NET Core 在此版本中进行了多项更新,包括 SignalR 分…

监管动态| 网络空间协会首次发布合规常用APP清单,是否会有第二批?

9月10日中国网络空间安全协会官网发布公告,协会组织指导网上购物、地图导航、浏览器、新闻资讯、在线影音、电子图书、拍摄美化、云盘、短视频、演出票务共10类62款App运营方,对照《中华人民共和国网络安全法》《中华人民共和国个人信息保护法》《常见类型移动互联网应用程序…