第 14 章 回顾
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
回顾可以有力地促进变革。一次回顾就能引发一场重大变革。
Esther Derby 和 Diana Larsen,《Agile Retrospectives-Making Good Teams Great》(实用主义书架,2006 年)
我们已经完成了清单上的所有功能。为了清晰起见,我们对清单进行了少量编辑:
5 美元 × 2 = 10 美元 |
10 欧元 × 2 = 20 欧元 |
4002 克朗 / 4 = 1000.5 克朗 |
5 美元 + 10 美元 = 15 美元 |
5 美元 + 10 欧元 = 17 美元 |
1 美元 + 1100 克鲁瓦 = 2200 克鲁瓦 |
删除多余的测试 |
将测试代码与生产代码分开 |
改进测试组织 |
根据涉及的货币确定汇率 |
改进汇率未指定时的错误处理 |
改进汇率的执行 |
允许修改汇率 |
持续集成我们的代码 |
划掉列表中的每一行是否意味着我们已经完成了?当然不是!首先,变化是软件中唯一不变的东西。 即使我们决定不碰代码中的任何东西,因为它符合我们的目的,但随着时间的推移,我们代码周围的事物也有界会发生变化。在编写本书的过程中,生态系统中发生了以下变化:
-
Go v1.17发布。
-
Node.js v16发布。
-
Python 3.9 和 3.10 版本发布。
-
新版本的 GitHub 操作
setup-node和setup-python发布。 -
更重要的是,COVID-19 的疫苗发布并获得批准,再次改变了我们的生活、工作和社会交往方式,而编写软件正是其中的一个方面。
几乎可以肯定,当您读到这些文字时,我们的代码所处的生态系统中的无数事物也将发生其他重大变化。
除了未来的巨大未知数之外,我们的代码在当下是否还有可以改进的地方?
让我们花点时间回顾一下我们做了什么,并反思一下我们是如何做到的。 我们将从以下几个方面进行回顾:
- 简介
-
这是指代码的形状。
- 目的
-
这包括代码做什么,更重要的是不做什么。
- 过程
-
我们是如何走到今天这一步的,还有哪些其他可能的途径,以及走某条特定道路的意义。
概况
我使用 "轮廓"一词,既包括可读性和显而易见性等主观方面,也包括其客观表现,即复杂性、耦合性和简洁性。 在其他学科中,形式一词也被用来描述类似的方面。
在前言中,我们将简单性确定为测试驱动开发定义中的一个关键术语。现在,我们可以使用一些指标来衡量代码的简洁性。
循环复杂性
循环复杂性是对代码中分支和循环程度的一种衡量,它增加了理解代码的难度。 托马斯-麦凯布(Thomas McCabe)在1976 年发表的一篇论文中定义了这一指标。后来,麦凯布和阿瑟-沃森(Arthur Watson)在测试方法中专门发展了这一概念。麦凯布对循环复杂性的定义与不同语言之间的语法差异无关,而是将源代码组织为控制流图,这与我们从 TDD 的角度分析问题息息相关。
最简单地说,代码块的循环复杂度就是代码中循环和分支的数量加一。
提示
包含p 个二进制决策谓词的代码块的循环复杂度为p+ 1。二进制决策谓词是代码中的任意一点,在这里可以选择两条路线中的一条,即一个布尔条件的分支或循环。
没有分支或循环的代码块,即控制从一条语句线性流向下一条语句的代码块,其循环复杂度为 1。
麦凯布的原始论文建议开发人员 "根据循环复杂度而不是物理大小来限制软件模块"。麦凯布提供了一个 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access