Day 30 「无心之心,道之所存」结语

Christopher Alexander 在「建筑的永恒之道」中,开头第一句就说了:「无心之心,道之所存」。作者认为建筑或城市没有所谓的「好」,而是要追求一种「永恒之道」。只有踏上此道,建筑或城市才会生机勃勃。这是一个不能被「求取」的过程,而是要我们不断「探索」的。

软件工程何尝不是如此?

终於来到这一天了,第三十天。

快速回顾

过去的二十几天中,我们聊了很多有关单元测试的主题。我们对测试的基本概念有一些了解,我们厘清了单元测试与整合测试的异同,以及责任归属,并试写了人生第一个单元测试。

接着,随着应用场景的复杂化,我们分别使用直接操作与借力於 Mock 工具的方法,控制依赖,以完成对 Command 与 Query 的测试。更复杂的多线程与例外场景也没难倒我们,值得庆祝!

有了测试的保护,我们胆子就大了,以前不敢做的「重构」,现在也敢做了,而且为了更好地掌握重构时机,我们还练习了一下如何闻出程序的「坏味道」。

我们知道测试是为了帮助开发,所以分别绍了「伦敦派」与「波士顿派」的 TDD,同时聊了近年蛮红的 Clean Architecutre 与 CQRS,然後交错使用上述两大派别的 TDD 方式,完成一个实际案例的操作。


波士顿派?图片截自爱伯特吃喝玩乐全记录

最後,在流程上,Git、XP、Scrum、DevOps 等近年常见的 Solution,我们也都聊了一轮。

单元测试与软件工程

说好的聊单元测试呢?

你没发现吗?上述的这麽多软件工程实践,没有一个可以离开单元测试啊!或者说,没有单元测试的话,这些东西就很难发挥它们完整的实力呀!随便举例,没有单元测试你敢重构?没有单元测试你敢用 CI/CD + 主线开发,一天发布好几个版本上产线?

如同一开始说的,测试是一种实验,计算机是一种科学。科学的「正确」,是靠一而再、再而三,不断重复同样严谨的实验而堆叠出来的。没有这些实验,现代人的日常生活不可能这麽便利。同样的,没有足够多且品质好的单元测试,你的日常工作非常难变得方便有效率。

开始吧

有人问过笔者,这麽多事情要做,我要从哪里开始?我都喜欢举同一个例子:

你在一个深山小屋,外面风雪交加,你又饿又冻,小屋中有壁炉、油灯、炉灶与一些生食,而你只有一根火柴,请问你应该先点哪一个?

你应该先点火柴!」火柴不点,这些工具一个都派不上用场,再厉害也没用。

在软件工程的实践中,「单元测试」就是那根火柴。所以,不用再问人家要先怎样、什麽什麽才是 Best Practice 了。先开始你人生的第一个单元测试吧!接着再拿其他适合的 Solution 来解决问题,才会事半功倍!

不要想像有一天你会得到一个「乾货」,上面写着可以「长治久安一劳永逸」的软件工程实践方法集。世上不存在那种东西。如同 Chirstopher Alexander 说的,有一天当我们真正踏上了程序的永恒之道,将感受到的是和平安闲,就像在海边散步,或是在草原上大步迈进一样。

最後,醒醒吧,不要奢求老板会多给你时间做单元测试,那本来就是你的工作。别忘了,单元测试是功能的一部份

好了,2021 的单元测试 IT 铁人就聊到这儿了。单元测试只是改善软件工程实践的第一步,後面还有很多要解决的事等待着我们,那就先去做了再说吧!祝各位长官一帆风顺!


图片截自电影 - 无间道

谜之声:「道可道,非常道。」

Reference

  1. Christopher Alexander,建筑的永恒之道,六合出版社,1994

无情工商

IT 铁人结束後,笔者的技术文章写作不会停止,我还是会在我的个人 Blog 继续写作,对软件工程与 Coding 技巧有兴趣的朋友,别忘了:

订阅我的部落格:https://medium.com/kuma%E8%80%81%E5%B8%AB%E7%9A%84%E8%BB%9F%E9%AB%94%E5%B7%A5%E7%A8%8B%E6%95%99%E5%AE%A4
按赞我的脸书粉丝团:https://www.facebook.com/kukumamaya
追踪我的 YouTube 颁道:https://www.youtube.com/channel/UCR8o_Dmwv1Zevk7lFe-HqHQ

有缘再相会!

tags: ithelp2021

<<:  【16】如果把图片从RGB转成HSV和灰阶再拿去训练会怎样

>>:  Day24 订单金流 -- 叮咛

[Day12] Vite 出小蜜蜂~ Spawn!

Day12 Level Design 接下来我们要开始设计关卡, 小蜜蜂的关卡很单纯,但是背後的心理...

[Day2]PHP的资料型态02

PHP的资料型态 Array数组 PHP中的array 实际上是一个有序映射。映射是一种把 valu...

Day 25 Azure machine learning: Pipeline for data- 建立工作流程来收集资料

Azure machine learning: Pipeline for data- 建立工作流程来...

Day10 - 读 Concurrency is not Parallelism - Rob Pike (五)

昨日有点累,想说打个盹一下,结果醒来就隔天了,铁人赛直接中断。 续上篇,Day9 - 读 Concu...

selenium爬虫:爬取影片名称与连结

##事先准备 首先我们先引入这四个模组,同时这一篇文章也会简单地带大家认识这几个模组。 from s...