首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年09月08日 21:49

代码整洁之道

image-20240904225436374

简介:

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

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

第五章 测试驱动开发(TDD)

img

如果连所有代码是否都可以正常运行都不知道,还算什么专业人士?如果每次修改代码后没有测试,如何能够知道所有代码可以正常运行?如果缺乏极高覆盖率的自动化单元测试,如何能够做到每次修改代码后都对代码进行测试?如果不采用TDD,如何能够获得极高覆盖率的自动化单元测试?

5.2 TDD的三项法则

(1)在编好失败单元测试之前,不要写任何产品代码。

(2)只要有一个单元测试失败了,就不要再写测试代码;无法通过编译也是一种失败情况。

(3)产品代码恰好能够让当前失败的单元测试通过即可,不要多写。

5.3 TDD的优势

确定性:

如果将TDD作为一项行业纪律,那么每天要写上几十个测试,每周要写上成百上千个测试,每年写上成千上万个测试。任何时刻,代码有任何修改,都必须运行手头有的全部测试。

任何时刻,一旦修改了工程的任何部分,只需再次运行全部的单元测试即可。如果单元测试全部通过,我差不多就可以确信我的修改没有破坏任何东西。“差不多少确信”是有多少把握?我相当有把握,足以交付了!

降低缺陷注入率:

有不少报告和研究[3]称TDD能够显著降低缺陷。从IBM到微软,从Sabre到Symantec,一家又一家公司,一个又一个团队,经历过缺陷下降为原来的1/2、1/5甚至1/10的过程。这些数字不能不让专业人士动容。

给开发人员以修改优化工程的勇气

看到糟糕代码时,你为什么不修改呢?看到混乱的函数时,你的第一反应是:“真是一团糟,这个函数需要整理。”你的第二反应是:“我不会去碰它!”为什么?因为你知道,如果去动它,就要冒破坏它的风险;而如果你破坏了它,那么它就缠上你了。

但是如果你能确信自己的整理工作没有破坏任何东西,那又会是怎样一种情况呢?如果你拥有我刚才提到的那种把握,会怎样呢?如果你只需点击一个按钮,然后90秒内便可以确信自己的修改没有破坏任何东西,只是让代码变得更好了,那么又会是怎样的一种情况呢?这是TDD最强大之处。拥有一套值得信赖的测试,便可完全打消对修改代码的全部恐惧。当看见糟糕的代码时,就可以放手整理。代码会变得具有可塑性,你可以放心打磨出简单而满意的结果。

当程序员不再惧怕整理代码时,他们便会动手整理!整洁的代码更易于理解,更易于修改,也更易于扩展。代码更简洁了,缺陷也更少了。整个代码库也会随之稳步改善,杜绝业界常见的放任代码劣化而视若不见的状况。

单元测试就是文档:

遵循TDD三项法则的话,所编写的每个单元测试都是一个示例,用代码描述系统的用法。如果遵循三项法则,那么对于系统中的每个对象,单元测试都可以清楚描述对象的各种创建方法。对于系统中的每个函数,单元测试可以清楚描述函数的各种有意义的调用方式。对于需要知道的任何用法,单元测试都会提供详尽的描述。

单元测试即是文档。它们描述了系统设计的最底层设计细节。它们清晰准确,以读者能够理解的语言写成,并且形式规整可以运行。它们是最好的底层文档。

利于设计:

如果不先写测试,就有可能出现各个函数耦合在一起最终变成无法测试的一大团的问题。如果后面再写测试,你也许能够测试整个大块的输入和输出,但是很难测试单个函数。因此,遵循三项法则并且测试先行,便能够产生一种驱动力,促使你做出松耦合的设计。

总结:使用测试驱动开发是专业人士的选择;

它是一项能够提升代码确定性、给程序员鼓励、降低代码缺陷率、优化文档和设计的原则。对TDD的各项尝试表明,不使用TDD就说明你可能还不够专业。

当然,在某些场合照这三项法则去做会显得不切实际或不合适。这种情况很少,但确实存在。如果遵循某项法则会弊大于利,专业的开发人员就当然不会选用它。

From:https://www.cnblogs.com/TonyCode/p/18403662
本文地址: http://www.shuzixingkong.net/article/1840
0评论
提交 加载更多评论
其他文章 《痞子衡嵌入式半月刊》 第 107 期
痞子衡嵌入式半月刊: 第 107 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢迎提交 issue,投稿或推荐你知道的嵌入式那些事儿。 上期回
《痞子衡嵌入式半月刊》 第 107 期 《痞子衡嵌入式半月刊》 第 107 期 《痞子衡嵌入式半月刊》 第 107 期
什么样的人生才是幸福的一生?(与孩子争执过后有感而写)
围绕着你考研和工作的问题和你争执不下,我仔细想了一下,这种争执看似是因为考研或工作的方向,其实是我们两个人关于人生幸福观的不同观点的碰撞。 那么作为一个人,到底未来怎样的生活才能使自己舒服惬意也就是幸福? 我觉得你的观点可能是高薪有钱,生活休闲,这样就是一种幸福。你如今所有的努力和辛苦都是在为这种生
Redis 入门 - 图形化管理工具如何选择,最全分类
Redis图形化管理工具可分为四类:命令行工具、桌面客户端工具、网页工具、插件工具。看看哪一款适合你呢?
Redis 入门 - 图形化管理工具如何选择,最全分类 Redis 入门 - 图形化管理工具如何选择,最全分类 Redis 入门 - 图形化管理工具如何选择,最全分类
编译和分发 Chez Scheme 应用程序
参考 Building and Distributing Applications. 假设源码由两个文件组成,A.ss 和 B.ss,其中 A.ss 依赖 B.ss。下面我们将其编译为可供分发的二进制文件。 将源码转为 object file 在 Chez Scheme 的 REPL 中(下同)输入
C++17: 用折叠表达式实现一个IsAllTrue函数
前言 让我们实现一个 IsAllTrue 函数,支持变长参数,可传入多个表达式,必须全部计算为true,该函数才返回true。 本文记录了逐步实现与优化该函数的思维链,用到了以下现代C++新特性知识,适合对C++进阶知识有一定了解的人。这样一种从实际问题来学习和运用知识的过程还是挺有趣的,特此整理分
C++17: 用折叠表达式实现一个IsAllTrue函数 C++17: 用折叠表达式实现一个IsAllTrue函数
使用 Microsoft.Extensions.ServiceDiscovery 进行服务发现并调用
简介 在现代微服务架构中,服务发现(Service Discovery)是一项关键功能。它允许微服务动态地找到彼此,而无需依赖硬编码的地址。以前如果你搜 .NET Service Discovery,大概率会搜到一大堆 Eureka,Consul 等的文章。现在微软为我们带来了一个官方的包:Micr
使用 Microsoft.Extensions.ServiceDiscovery 进行服务发现并调用 使用 Microsoft.Extensions.ServiceDiscovery 进行服务发现并调用 使用 Microsoft.Extensions.ServiceDiscovery 进行服务发现并调用
《花100块做个摸鱼小网站! 》第六篇—将小网站部署到云服务器上
⭐️基础链接导航⭐️ 服务器 → ☁️ 阿里云活动地址 看样例 → 🐟 摸鱼小网站地址 学代码 → 💻 源码库地址 一、前言 到这一篇我们终于把环境搭好,也做好了几个热搜小组件,为了让我们方便展示成果或者方便自己摸鱼,我们需要将这个小网站部署上云。整体流程并不复杂,但
《花100块做个摸鱼小网站! 》第六篇—将小网站部署到云服务器上 《花100块做个摸鱼小网站! 》第六篇—将小网站部署到云服务器上 《花100块做个摸鱼小网站! 》第六篇—将小网站部署到云服务器上
GitHub Copilot 典型使用场景实践
GitHub Copilot 是一款 AI 结对程序员,可帮助您更快、更少地编写代码。近期我们一直在使用GitHub Copilot协助开发编码工作,总结了一些实际场景的用法,可能在目前网络中很多的博客中都没有提及到,本文一一分享给你。
GitHub Copilot 典型使用场景实践 GitHub Copilot 典型使用场景实践 GitHub Copilot 典型使用场景实践