有些代码,很容易测试。有些代码,很难测试。
容易测试的代码必定是高度解耦的代码,不容易测试的代码必定是高度耦合的代码。
对于高度耦合的代码,你只能进行通测,难以进行单元测试,因为代码本身拆不开、剪不断、理还乱、很愁。
解耦的重要技术就是反射。让主程序通过反射的方式去发现它有哪些模块,它的子模块都是独立的、是可有可无的、是可插拔的。
测试友好型代码就是高度解耦的代码,高度解耦的代码就是易于扩展的代码。
整个项目由很多可复用的零件组成,它的复杂来源于零件众多,而不是零件之间错综复杂的关系。复杂有两种:一种是简单拼起来的复杂,一种是事物盘根错节形成的复杂。天上的星星很多,但是每个星星都很相似,这是简单拼起来的复杂,它虽然内容繁多,但是很容易让人举一反三,快速了解事物的全貌;九连环的每一个环都互相影响,华容道每个木块都互相影响,这就是事物盘根错节形成的复杂。
谁要是能把错综复杂的关系转化为单一的同构的简单组件,那便是对复杂实现了“降维”,把高维复杂变成了低维复杂。
递归是单一同构的复杂。为什么人们认为单一同构的复杂更为简单?因为事物的整体结构便于理解。
读一首诗,人对即将读到的事物会有整体的把握,比如下一句包含的字符个数,下一句包含的字数。
人对单一同构的事物会充耳不闻、视而不见,因为人脑已经进化得更为关注那些奇特、没有规律的内容。于是,生活中经常见到读了一首古诗,只是单纯的读了一遍,对内容没有进行理解。读宋词则完全不一样,宋词错落有致,句句奇特,让人很容易集中注意力。
人对工整、单一、同构的事物有一种天然的崇敬之心。同样的意思用韵文表达出来就让人感觉这话乃是天意,是自然而然形成的,是好的。
诗是一种规范、一种模板、一种套路,离散数学中的代数系统也是一套模板、一套规范。只要几个运算之间符合某种运算性质,那么就可以断言这个代数系统是否存在幺元、零元、所属的代数系统的类型,一旦代数系统的这些特性确定了,人们就能够对这个代数系统有直观而全面的认识。
人虽然无法理解高维空间,但是人会进行类比推理。类比推理是人们认知事物的重要手段。而运用类比推理的前提就是:事物必须单一、同构。
单元测试是一种技巧。在建造房子的过程中,需要设置许多脚手架,一旦房子盖完了,就要移除这些脚手架。不同的软件系统有不同的单元测试方法。